Avanti Indietro Indice

7. Installazione del Proxy Server TIS

7.1 Come ottenere il software

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.

7.2 Compilazione dell'FWTK TIS

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.

7.3 Installazione dell'FWTK TIS

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.

7.4 Configurazione dell'FWTK TIS

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.

/etc/services

Dice al sistema su quali porte si trova un servizio.

/etc/inetd.conf

Dice a inetd quale programma chiamare quando qualcuno "bussa" alla porta di un servizio.

/usr/local/etc/netperm-table

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.

Il file netperm-table

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.

Il file inetd.conf

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

Il file /etc/services

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


Avanti Indietro Indice