Il TIS FWTK è disponibile presso ftp://ftp.tis.com/.
Non ripetete il mio errore. Quando si esegue l'ftp dei file da TIS, SI LEGGA IL README. L'fwtk TIS si trova in una directory nascosta sul loro server. TIS richiede che si invii una email a fwtk-request@tis.com con sola la parola SEND nel corpo del messaggio per sapere il nome di questa directory nascosta. Il loro sistema, quindi, invierà in risposta il nome della directory (valida per 12 ore) per eseguire il download dei sorgenti.
Mentre sto scrivendo questo documento TIS sta rilasciando la versione 2.0 (beta) dell'FWTK. Questa versione sembra non avere problemi di compilazione (con alcune eccezioni) e tutto sembra funzionare per il meglio. Nel seguito verrà trattata proprio questa versione. Quando verrà rilasciato il codice finale, aggiornerò l'HOWTO.
Per installare l'FWTK, creare una directory fwtk-2.0 all'interno della propria directory /usr/src. Spostare la copia dell'FWTK (fwtk-2.0.tar.gz) in questa directory ed eseguire l'untar (tar zxf fwtk-2.0.tar.gz).
L'FWTK non fa il proxy di documenti web SSL, ma esiste un'aggiunta scritta da Jean-Christophe Touvet. È disponibile presso ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z. Touvet non supporta questo codice.
Io sto usando una versione modificata che include l'accesso ai server news sicuri di Netscape scritta da Eric Wedel. È disponibile presso ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z.
Nell'esempio verrà utilizzata la versione di Eric Wedel.
Per installarla, creare semplicemente una directory ssl-gw all'interno della propria directory /usr/src/fwtk-2.0 e metterci i file.
Quando ho installato questo gateway, sono state necessarie alcune modifiche prima di poter essere compilato con il resto del toolkit.
La prima modifica ha riguardato il file ssl-gw.c. Ho scoperto che non includeva un file include necessario.
#if defined(__linux) #include <sys/ioctl.h> #endif
In secondo luogo, c'erano problemi con il Makefile. Ne ho copiato uno dalle altre directory gateway e ho sosrituito il nome del gateway con ssl-gw.
La versione 2.0 dell'FWTK può esere compilata molto più facilmente rispetto alle versioni più vecchie. Ho trovato un altro paio di cose da modificare prima di poter compilare correttamente la versione BETA. Si spera che queste modifiche siano fatte nella versione finale.
Per correggere il tutto, si inizi spostandosi nella directory /usr/src/fwtk/fwtk e copiando il file Makefile.config.linux sul file Makefile.config.
NON ESEGUIRE FIXMAKE. Le istruzioni dicono di farlo. Ma se viene fatto, rovinerà i makefile in ogni directory.
Il problema dipende dal fatto che lo script sed aggiunge un '.' ' e un '' alla riga include di ogni Makefile. Questo script sed funziona.
sed 's/^include[ ]*\([^ ].*\)/include \1/' $name .proto > $name
Per continuare, bisogna modificare il file Makefile.config. Queste sono le due modifiche che dobbiamo fare.
L'autore ha impostato la directory sorgente nella propria home directory. Stiamo compilando il codice in /usr/src, pertanto si dovrebbe cambiare la variabile FWTKSRCDIR.
FWTKSRCDIR=/usr/src/fwtk/fwtk
In secondo luogo, almeno qualche sistema Linux utilizza il database gdbm. Il Makefile.config usa dbm. Potreste aver bisogno di modificare questo. Io l'ho dovuto fare per RedHat 3.0.3.
DBMLIB=-lgdbm
L'ultimoìa correzione riguarda l'x-gw. Il baco nella versione BETA risiede nel codice socket.c. Per sistemarlo, rimuovere le seguenti righe di codice.
#ifdef SCM_RIGHTS /* 4.3BSD Reno and later */ + sizeof(un_name->sun_len) + 1 #endif
Se è stato aggiunto ssl-gw alla propria directory sorgente FWTK, sarà necessario aggiungerlo alla lista delle directory nel Makefile.
DIRS= smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw
Ora eseguire make.
Eseguire make install.
La directory di installazione di default è /usr/local/etc. Potrebbe essere sostituita (anch'io l'ho fatto) con una directory più sicura. Ho deciso di modificare l'accesso a questa directory con 'chmod 700'.
Ora non resta che configurare il firewall.
Ora inizia il divertimento. Bisogna insegnare al sistema a chiamare questi nuovi servizi e a creare le tabelle per controllarli.
Non ho intenzione di riscrivere il manuale di FWTK TIS in questo documento. Mostrerò semplicemente le impostazioni che si sono dimostrate funzionanti, inoltre spiegherò i problemi che ho riscontrato e come sono riuscito a superarli.
I file che determinano i controlli sono tre.
Dice al sistema su quali porte si trova un servizio.
Dice a inetd quale programma chiamare quando qualcuno "bussa" alla porta di un servizio.
Dice ai servizi dell'FWTK a chi abilitare e a chi negare un servizio.
Per fare in modo che l'FWTK funzioni, questi file dovrebbero essere modificati partendo dall'ultimo. La modifica dei file services senza che siano stati impostati correttamente il file inetd.conf o netperm-table potrebbe rendere il sistema inaccessibile.
Questo file controlla chi può accedere ai servizi dell'FWTK TIS. Bisognerebbe considerare il traffico utilizzando il firewall da entrambe le parti. Gli utenti all'esterno della propria rete dovrebbero identificarsi prima di ottenere l'accesso, ma gli utenti dall'interno della propria rete potrebbero avere il permesso per attraversarlo semplicemente.
Il firewall utilizza un programma denominato authsrv per mantenere un database degli user ID e delle password degli utenti. La sezione per l'autenticazione di netperm-table controlla dove risiede il database e chi può accedervi.
Ho avuto qualche problema nel chiudere l'accesso a questo servizio. Si
noti che la riga premit-hosts mostrata utilizza un '*' per dare
l'accesso a tutti. L'impostazione corretta per questa riga consiste
in ''authsrv: premit-hosts localhost
'' se siete in grado di
renderla funzionante.
# # Tabella di configurazione del Proxy # # Regole di autentificazione di server e client authsrv: database /usr/local/etc/fw-authdb authsrv: permit-hosts * authsrv: badsleep 1200 authsrv: nobogus true # Applicazioni Client che usano il server di Autentificazione *: authserver 127.0.0.1 114
Per inizializzare il database, si faccia su a root ed si esegua ./authsrv nella directory /var/local/etc per creare il registro utenti amministrativo. Viene di seguito riportato una sessione d'esempio.
Si invita a leggere la documentazione FWTK per imparare ad aggiungere utenti e gruppi.
# # 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 #
I controlli del gateway telnet (tn-gw) sono i primi da impostare.
Nell'esempio, ho supposto che gli host all'interno della rete privata possano passare senza autenticarsi (permit-hosts 19961.2.* -passok). Tuttavia, ogni altro utente deve inserire il proprio user ID e password per utilizzare il proxy (permit-hosts * -auth).
Inoltre, consento a un altro sistema (196.1.2.202) di accedere direttamente al firewall senza passare attraverso il firewall stesso. Le due righe inetacl-in.telnetd definiscono questo. Più avanti viene spiegato come sono richiamate queste righe.
Il timeout Telnet dovrebbe essere mantenuto breve.
# regole del gateway telnet: 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 # Solo l'amministratore può fare telnet direttamente al Firewal # tramite la Porta 24 netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetd
I comandi r funzionano nello stesso modo di telnet.
# regole gateway rlogin: 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 # Solo l'Amministratore può eseguire direttamente il telnet al Firewall netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a
È consigliabile che nessuno possa accedere direttamente al firewall, incluso l'accesso in FTP. Pertanto, non mettere un server FTP sul proprio firewall.
Inoltre, la riga permit-hosts consente a chiunque all'interno della rete protetta di accedere liberamente ad Internet, mentre tutti gli altri devono autenticarsi. Ai miei controlli sono stati aggiunti i log di ogni file inviato e ricevuto (-log { retr stor }).
Il timeout ftp controlla quanto tempo ci vuole per far cadere una cattiva connessione come pure quanto a lungo rimane aperta una connessione senza attività.
# regole gateway ftp: 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 }
I web, gopher e browser basati su ftp sono stravolti dall'http-gw. Le prime due righe creano una directory per memorizzare i documenti ftp e web come passano attraverso il firewall. Ho reso questi file di proprietà di root e li ho messi in una directory accessibile solo da root.
La connessione Web dovrebbe essere breve. Viene effettuato un controllo sul tempo di attesa di un utente su una cattiva connessione.
# regole gateway www e gopher: 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 *
L'ssl-gw è di fatto un semplice gateway "passatutto". Fare attenzione ad esso. In questo esempio consento a tutti all'interno della rete protetta di connettersi a qualsiasi server al di fuori della rete, fatta eccezione per gli indirizzi 127.0.0.* e 192.1.1.* e solo sulle porte da 443 a 563. Le porte da 443 a 563 sono conosciute come porte SSL.
# regole gateway ssl: ssl-gw: timeout 300 ssl-gw: hosts 196.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 } ssl-gw: deny-hosts *
Segue un esempio di come utilizzare il plug-gw per consentire connessioni a un server di news. Nell'esempio, si abilitano tutti gli utenti all'interno della rete privata a connettersi a un solo sistema e solo alla sua porta di news.
La seconda riga consente agli utenti del server di news di ripassare i dati alla rete protetta.
Dal momento che la maggior parte dei client si aspettano di restare connessi mentre gli utenti leggono le news, il timeout per un server di news dovrebbe essere lungo.
# 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
Il gateway finger è semplice. Chiunque dall'interno della rete protetta deve prima eseguire il login e quindi ottiene l'abilitazione a utilizzare il programma finger sul firewall. Tutti gli altri ricevono semplicemente un messaggio.
# Abilitazione del servizio finger netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt
Io non ho impostato i servizi Mail e X-windows pertanto non aggiungo degli esempi in merito. Se qualcuno possiede un esempio funzionante, è pregato di inviarmi una email.
Di seguito viene riportato un file /etc/inetd.conf completo. Tutti i servizi non necessari sono stati commentati. È stato incluso il file completo per mostrare cosa disabilitare, come pure per mostrare come impostare i nuovi servizi firewall.
#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 e talk sono protocolli BSD. # #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 # # Servizi dmail pop e imap # #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 # # Servizio UUCP Internet. # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Il servizio Tftp è fornito essenzialmente per l'avvio. La maggior # parte dei siti lo eseguono solo su macchine che si comportano come # "boot server". Non scommentare a meno che non si abbia *bisogno* # di usarlo. # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat e netstat forniscono informazioni utente che # potrebbero essere preziose per potenziali "system crackers". Molti # siti scelgono di disabilitare alcuni o tutti questi servizi per # aumentare la sicurezza. # # cfinger è per il finger GNU, che attualmente non è in uso nel # Linux RHS # 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 # # Il servizio time viene utilizzato per la sincrinizzazione del clock. # #time stream tcp nowait root /usr/sbin/tcpd in.timed #time dgram udp wait root /usr/sbin/tcpd in.timed # # Autenticazione # auth stream tcp wait root /usr/sbin/tcpd in.identd -w -t120 authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv # # Fine di inetd.conf
Quando un client si connette al firewall lo fa su una porta conosciuta (minore di 1024). Ad esempio. telnet si connette sulla porta 23. Il demone inetd sente questa connessione e cerca il nome di questo servizio nel file /etc/services. Quindi, richiama il programma assegnato al nome nel file /etc/inetd.conf.
Alcuni dei servizi che stiamo creando non si trovano normalmente nel file /etc/services. È possibile assegnare alcuni di essi a una porta qualsiasi. Ad esempio, io ho assegnato la porta di telnet dell'amministratore (telnet-a) alla porta 24. Volendo, lo si può assegnare alla porta 23. Affinchè l'amministratore (ossia voi stessi) possa connettersi direttamente al firewall è necessario eseguire il telnet alla porta 24 e non alla 23 e se il file netperm-table viene impostato, come ho fatto io, sarà possibile farlo solamente da un sistema all'interno della propria rete protetta.
telnet-a 24/tcp ftp-gw 21/tcp # questo nome è cambiato auth 113/tcp ident # Verifica dell'utente ssl-gw 443/tcp