Nästa Föregående Innehållsförteckning

7. Att installera TIS proxyserver

7.1 Att få tag på programvaran

TIS FWTK finns på TIS ftp-sajt.

Gör inte mistaget som jag gjorde. När du hämtar filer från TIS, LÄS README-filerna. TIS FWTK är inlåst i en gömd katalog på deras server. TIS kräver att du sickar ett e-postmeddelande till fwtk-request@tis.com med endast ordet SEND i textkroppen för att få reda på namnet på den gömda katalogen. Det behövs inget `subject' i meddelandet. Deras system kommer då att e-posta tillbaka namnet på katalogen (som gäller i tolv timmar) så att du kan ladda hem källkoden.

När detta skrivs så har TIS släppt version 2.0 (beta) av FWTK. Denna versionen verkar kompilera bra (med ett par undantag) och allt fungerar för mig. Detta är versionen som jag täcker här. När de släpper den slutgiltliga koden så kommer jag att uppdatera HOWTOn.

För att installera FWTK, skapa en fwtk-2.0 katalog i din /usr/src katalog. Flytta din kopia av FWTK (fwtk-2.0.tar.gz) till denna katalogen och packa upp den (tar zxf fwtk-2.0.tar.gz).

FWTK kan inte använda proxyn på SSL www-dokument men det finns en addon för detta skriven av Jean-Christophe Touvet. Den finns på ftp.edelweb.fr. Touvet supportar inte denna koden.

Jag använder en modifierad version som inkluderar access till Netscapes säkra nyhetsservrar som är skriven av Eric Wedel. Den finns tillgänglig på mdi.meridian-data.com.

I vårt exempel kommer jag att använda Eric Wedels version.

För att installera, skapa en ssl-gw katalog i din /usr/src/fwtk-2.0 katalog och lägg filerna i den.

När jag installerade denna gatewayen så krävdes det lite ändringar innan den kunde kompileras tillsammans med resten av paketet.

Den första ändringen skall göras i filen ssl-gw.c. Jag kom på att den inte inkluderade en fil som den behövde.

  #if defined(__linux)
  #include        <sys/ioctl.h>
  #endif

För det andra så följde det inte med någon Makefile. Jag kopierade en ifrån en av de andra gatewayernas kataloger och ersatte den gatewayens namn med ssl-gw.

7.2 Att kompilera TIS FWTK

Version 2.0 av FWTK kompilerar mycket lättare än någon av de tidigare versionerna. Jag hittade ett par saker som behövde ändras innan BETA-versionen kompilerade ordentligt. Förhoppningsvis så finns dessa ändringar i den slutgiltliga versionen.

För att fixa till detta så börja med att byta till katalogen /usr/src/fwtk/fwtk och kopiera filen Makefile.config.linux till Makefile.config.

KÖR INTE FIXMAKE. Instruktionerna säger åt dig att köra den. Om du gör det så kommer den att förstöra Makefile-filerna i alla kataloger.

Jag har en fix för fixmake. Problemet är att sed-scriptet lägger till en '.' och '' i include-raden i alla Makefile-filerna. Följande sed-script fungerar.

  sed 's/^include[        ]*\([^  ].*\)/include \1/' $name .proto > $name 

Efter detta måste vi editera filen Makefile.config. Det finns två ändringar som du kanske måste göra.

Författaren ställde in käll-katalogen till sin hemkatalog. Vi kompilerar våran kod i /usr/src så du bör ändra variabeln FWTKSRCDIR så att det stämmer överens.

  FWTKSRCDIR=/usr/src/fwtk/fwtk

Sedan, vissa Linuxsytem använder gdbm-databasen. Makefile.config använder dbm. Du kanske behöver ändra detta. Jag behövde göra det för RedHat 3.0.3.

  DBMLIB=-lgdbm

Sista fixen är i x-gw. Buggen är i BETA-versionen av socket.c koden. För att fixa det, ta bort följande rader från koden.

  #ifdef SCM_RIGHTS  /* 4.3BSD Reno and later */
                       + sizeof(un_name->sun_len) + 1
  #endif

Om du lade till ssl-gw till din FWTK källkatalog så måste du lägga till den till listan av kataloger i Makefile.

  DIRS=   smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw

Nu kan du köra make.

7.3 Att installera TIS FWTK

Kör make install.

Standardkatalogen för installation är /usr/local/etc. Du kan ändra detta (jag gjorde det inte) till en säkrare katalog. Jag valde att ändra rättigheterna på denna katalogen till chmod 700.

Allt som är kvar nu är att konfigurera brandväggen.

7.4 Att konfigurera TIS FWTK

Nu börjar det roliga. Vi måste lära systemet att använda dessa nya tjänster och skapa tabellerna för att kontrollera dem.

Jag tänker inte försöka skriva om manualen för TIS FWTK här. Jag kommer att visa dig inställningarna som fungerade för mig och förklara de problem som jag sprang på och hur jag kom runt dem.

Det finns tre filer som utgör dessa kontroller.

För att få igång FWTK så bör du editera dessa filer nerifrån och upp. Att editera services utan att inetd.conf eller netperm-table är korrekt inställda kan göra ditt system oåtkomligt.

Filen /usr/local/etc/netperm-table

Denna filen kontrollerar vem som får tillgång till tjänsterna i TIS FWTK. Du bör tänka på trafiken som använder brandväggen från båda sidor. Personer utanför ditt nätverk skall identifiera sig innan de får tillgång, men personer inuti ditt nätverk kan tillåtas att passera rakt igenom.

Brandväggen använder ett program som heter authsrv för att hålla en databas med användarnamn och lösenord, så att personer kan identifiera sig. Autentiseringsdelen av netperm-table kontrollerar var databasen finns och vem som kan komma åt den.

Jag hade lite problem med att stänga av access till denna tjänsten. Notera att permit-hosts-raden som jag visar innehåller en '*' vilket ger alla access. Den korrekta inställningen är authsrv: premit-hosts localhost om du kan få det att fungera.

  #
  # Proxy configuration table
  #
  # Authentication server and client rules
  authsrv:      database /usr/local/etc/fw-authdb
  authsrv:      permit-hosts *
  authsrv:      badsleep 1200
  authsrv:      nobogus true
  # Client Applications using the Authentication server
  *:            authserver 127.0.0.1 114

För att initialisera databasen, su:a till root och kör ./authsrv i katalogen /var/local/etc för att skapa administratörens användarprofil. Här följer en exempelsession.

Läs dokumentationen för FWTK för att lära dig hur man lägger till användare och grupper.

    #
    # authsrv
    authsrv# list
    authsrv# adduser admin "Auth DB admin"
    ok - user added initially disabled
    authsrv# ena admin
    enabled
    authsrv# proto admin pass
    changed
    authsrv# pass admin "plugh"
    Password changed.
    authsrv# superwiz admin
    set wizard
    authsrv# list
    Report for users in database
    user   group  longname           ok?    proto   last 
    ------ ------ ------------------ -----  ------  -----
    admin         Auth DB admin      ena    passw   never
    authsrv# display admin
    Report for user admin (Auth DB admin)
    Authentication protocol: password
    Flags: WIZARD
    authsrv# ^D
    EOT
    #

Kontrollerna för telnet-gatewayen (tn-gw) är okomplicerade och är de första som du bör sätta upp.

I mitt exempel så tillåter jag datorer från det privata nätverket att passera igenom brandväggen utan att autentisera sig (permit-hosts 196.1.2.* -passok). Men alla andra användare måste lämna användarid och lösenord för att använda proxyn (permit-hosts * -auth).

Jag låter även ett annat system (196.1.2.202) få tillgång till brandväggen utan att gå igenom brandväggen över huvud taget. Raderna med inetacl-in.telnetd fixar detta. Jag förklarar hur dessa rader anropas senare.

Timeouten för telnet bör vara kort.

  # telnet gateway rules:
  tn-gw:                denial-msg      /usr/local/etc/tn-deny.txt
  tn-gw:                welcome-msg     /usr/local/etc/tn-welcome.txt
  tn-gw:                help-msg        /usr/local/etc/tn-help.txt
  tn-gw:                timeout 90
  tn-gw:                permit-hosts 196.1.2.* -passok -xok
  tn-gw:                permit-hosts * -auth
  # Only the Administrator can telnet directly to the Firewall via Port 24
  netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetd

Det fungerar på samma sätt för r-kommandona som för telnet.

  # rlogin gateway rules:
  rlogin-gw:    denial-msg      /usr/local/etc/rlogin-deny.txt
  rlogin-gw:    welcome-msg     /usr/local/etc/rlogin-welcome.txt
  rlogin-gw:    help-msg        /usr/local/etc/rlogin-help.txt
  rlogin-gw:    timeout 90
  rlogin-gw:    permit-hosts 196.1.2.* -passok -xok
  rlogin-gw:    permit-hosts * -auth -xok
  # Only the Administrator can telnet directly to the Firewall via Port
  netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a

Du bör inte låta någon få direkt tillgång till din brandvägg och det inkluderar FTP, så lägg inte en FTP-server på din brandvägg.

Nu till ftp-gw. Återigen så gör raden med permit-hosts att alla i det skyddade nätverket får fri tillgång till Internet men alla andra måste autentisera sig. Jag har även med loggning av alla filer som sänds och tas emot av mina kontroller (-log { retr stor }).

Timeouten för FTP kontrollerar hur lång tid det kommer att ta att släppa en dålig förbindelse och dessutom hur lång tid en anslutning hålls öppen utan aktivitet.

  # ftp gateway rules:
  ftp-gw:               denial-msg      /usr/local/etc/ftp-deny.txt
  ftp-gw:               welcome-msg     /usr/local/etc/ftp-welcome.txt
  ftp-gw:               help-msg        /usr/local/etc/ftp-help.txt
  ftp-gw:               timeout 300
  ftp-gw:               permit-hosts 196.1.2.* -log { retr stor }
  ftp-gw:               permit-hosts * -authall -log { retr stor }

WWW, gopher och bläddrarbaserad FTP kontrolleras av http-gw. De två första raderna skapar en katalog för att spara ftp och www dokument allteftersom de passerar genom brandväggen. Jag gör så att root blir ägare till filerna och så att endast root kan läsa katalogen.

Timeouten för www skall vara kort. Den kontrollerar hur lång tid en användare skall vänta på dåliga förbindelser.

  # www and gopher gateway rules:
  http-gw:      userid          root
  http-gw:      directory       /jail
  http-gw:      timeout 90
  http-gw:      default-httpd   www.afs.net
  http-gw:      hosts           196.1.2.* -log { read write ftp }
  http-gw:      deny-hosts      * 
ssl-gw är egentligen bara en `släpp igenom allt'-gateway. Var försiktig med den. I detta exemplet låter jag vem som helst i det skyddade nätverket ansluta till vilken server som helst utanför nätverket, förutom adresserna 127.0.0.* och 192.1.1.*, och då endast till portarna 443 till 563. Portarna 443 till 563 är kända SSL-portar.

  # ssl gateway rules:
  ssl-gw:         timeout 300
  ssl-gw:         hosts           196.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 }
  ssl-gw:         deny-hosts      *

Här är ett exempel på hur man använder plug-gw för att tillåta anslutningar till en nyhetsserver. I detta exemplet låter jag vem som helst i det skyddade nätverket ansluta endast till ett system och då endast till dess news-port.

Den andra raden tillåter nyhetsservern att skicka sin data tillbaka till det skyddade nätverket.

Eftersom de flesta klienter förväntas hålla kvar anslutningen medans användaren läser nyheter så bör timeouten vara lång.

 
  # NetNews Pluged gateway
  plug-gw:        timeout 3600
  plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp
  plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp

Gatewayen för finger är enkel. Alla i det skyddade nätverket måste först logga in och sedan tillåts de att använda finger-programmet på brandväggen. Alla andra får bara ett meddelande.

  # Enable finger service 
  netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd
  netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt

Jag har inte satt upp Mail och X-Windows tjänsterna än så jag inkluderar inte några exempel. Om någon har fungerande exempel så får ni gärna e-posta dem till mig.

Filen /etc/inetd.conf

Här följer en komplett /etc/inetd.conf fil. Alla onödiga tjänster har kommenterats bort. Jag har med hela filen för att visa vad som bör stängas av, såväl som för att visa hur man konfigurerar de nya tjänsterna för brandväggen.

 
  #echo stream  tcp  nowait  root       internal 
  #echo dgram   udp  wait    root       internal
  #discard      stream  tcp  nowait  root       internal
  #discard      dgram   udp  wait    root       internal
  #daytime      stream  tcp  nowait  root       internal
  #daytime      dgram   udp  wait    root       internal
  #chargen      stream  tcp  nowait  root       internal
  #chargen      dgram   udp  wait    root       internal
  # FTP firewall gateway
  ftp-gw      stream  tcp  nowait.400  root  /usr/local/etc/ftp-gw  ftp-gw
  # Telnet firewall gateway
  telnet        stream  tcp  nowait      root  /usr/local/etc/tn-gw /usr/local/etc/tn-gw
  # local telnet services
  telnet-a    stream  tcp  nowait      root  /usr/local/etc/netacl in.telnetd
  # Gopher firewall gateway
  gopher        stream  tcp  nowait.400  root  /usr/local/etc/http-gw /usr/local/etc/http-gw 
  # WWW firewall gateway
  http  stream  tcp  nowait.400  root  /usr/local/etc/http-gw /usr/local/etc/http-gw 
  # SSL firewall gateway
  ssl-gw  stream  tcp     nowait  root /usr/local/etc/ssl-gw   ssl-gw
  # NetNews firewall proxy (using plug-gw)
  nntp    stream  tcp     nowait  root    /usr/local/etc/plug-gw plug-gw nntp
  #nntp stream  tcp     nowait  root    /usr/sbin/tcpd  in.nntpd
  # SMTP (email) firewall gateway
  #smtp stream  tcp     nowait  root    /usr/local/etc/smap smap
  #
  # Shell, login, exec and talk are BSD protocols.
  #
  #shell        stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
  #login        stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
  #exec stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
  #talk dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
  #ntalk        dgram   udp     wait    root    /usr/sbin/tcpd  in.ntalkd
  #dtalk        stream  tcp     waut    nobody  /usr/sbin/tcpd  in.dtalkd
  #
  # Pop and imap mail services et al
  #
  #pop-2   stream  tcp  nowait  root  /usr/sbin/tcpd    ipop2d
  #pop-3   stream  tcp  nowait  root  /usr/sbin/tcpd    ipop3d
  #imap    stream  tcp  nowait  root  /usr/sbin/tcpd    imapd
  #
  # The Internet UUCP service.
  #
  #uucp    stream  tcp  nowait  uucp  /usr/sbin/tcpd  /usr/lib/uucp/uucico -l
  #
  # Tftp service is provided primarily for booting.  Most sites
  # run this only on machines acting as "boot servers." Do not uncomment
  # this unless you *need* it.  
  #
  #tftp dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd
  #bootps       dgram   udp     wait    root    /usr/sbin/tcpd  bootpd
  #
  # Finger, systat and netstat give out user information which may be
  # valuable to potential "system crackers."  Many sites choose to disable 
  # some or all of these services to improve security.
  #
  # cfinger is for GNU finger, which is currently not in use in RHS Linux
  #
  finger        stream  tcp  nowait  root   /usr/sbin/tcpd  in.fingerd
  #cfinger      stream  tcp  nowait  root   /usr/sbin/tcpd  in.cfingerd
  #systat       stream  tcp  nowait  guest  /usr/sbin/tcpd  /bin/ps -auwwx
  #netstat      stream  tcp  nowait  guest  /usr/sbin/tcpd  /bin/netstat -f inet
  #
  # Time service is used for clock syncronization.
  #
  #time stream  tcp  nowait  root  /usr/sbin/tcpd  in.timed
  #time dgram   udp  wait    root  /usr/sbin/tcpd  in.timed
  #
  # Authentication
  #
  auth          stream  tcp  wait    root  /usr/sbin/tcpd  in.identd -w -t120
  authsrv       stream  tcp  nowait  root  /usr/local/etc/authsrv authsrv
  #
  # End of inetd.conf

Filen /etc/services

Det är här allting börjar. När en klient ansluter till brandväggen så ansluter den till en känd port (mindre än 1024). Till exempel så ansluter telnet på port 23. Daemonen för inetd hör anslutningen och letar upp namnet för tjänsten i filen /etc/services. Sedan startar den programmet som hör ihop med namnet i filen /etc/inetd.conf.

Vissa av tjänsterna som vi skapar finns inte normalt i filen /etc/services. Du kan para ihop vissa av dem med vilken port du vill. Till exempel så har jag låtit administratörens telnet-port (telnet-a) vara port 24. Du skulle kunna sätta den till 2323 om du ville. För att administratören (DU) skall kunna ansluta direkt till brandväggen så måste han telnetta till port 24 och inte 23, och om du sätter upp filen netperm-table som jag gjorde så kan detta endast göras från en maskin i ditt skyddade nätverk.

 
  telnet-a        24/tcp
  ftp-gw          21/tcp           # this named changed
  auth            113/tcp   ident    # User Verification
  ssl-gw          443/tcp


Nästa Föregående Innehållsförteckning