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
.
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
.
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.
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.
/etc/services
/etc/inetd.conf
/usr/local/etc/netperm-table
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.
/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.
/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
/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