7. Installer le serveur proxy TIS

Contenu de cette section

7.1 Trouver le logiciel

Le TIS fwtk est disponible à ftp://ftp.tis.com .

Ne commettez pas l'erreur que j'ai commise : Lorsque vous téléchargez les ficheirs de TIS, LISEZ LES README. Le TIS fwtk est verrouillé dans un répertoire caché sur leur serveur. TIS impose que vous envoyiez un e-mail à mailto:fwtk-request@tis.com avec le seul mot SEND dans le corps du message pour connaître le nom de ce répertoire caché. Aucun sujet n'est nécessaire pour ce message. Leur système vous enverra en retour le nom du répertoire par e-mail (en gros sous 12 heures) pour charger le source.

A l'instant où j'écris, TIS diffuse la version 2.0(bêta) du fwtk. Cette version semble se compiler correctement (avec quelques exceptions) et tout fonctionne pour moi. C'est la version qui sera couverte ici. Lorsque le code final sera disponible, je mettrai à jour le HOWTO.

Pour installer le fwtk, créez un répertoire fwtk-2.0 dans votre répertoire /usr/src. Déplacez votre copie de fwtk (fwtk-2.0.tar.gz) dans ce répertoire et dé-tarez-le (tar zxf fwtk-2.0.tar.gz).

Le fwtk ne route pas les documents web SSL, mais il existe un module complémentaire écrit par Jean-Christophe Touvet. Il est disponible à ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z . Christophe Touvet ne fournit aucun support pour ce code.

J'utilise une version modifiée écrite par Eric Wedel qui inclut l'accès aux serveurs de nouvelles sécurisés Netscape. Il est disponible à ftp://ftp.mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z .

Notre exemple s'appuie sur la version modifiée d'Eric Wedel.

Pour l'installer, créez simplement un répertoire ssl-gw dans votre répertoire /usr/src/fwtk-2.0 et placez-y les fichiers.

Lorsque j'ai installé cette passerelle, il nécessitait quelques modifications avant de se compiler avec le reste du paquetage.

La première modification était dans le fichier ssl-gw.c. Je me suis rendu compte qu'il omettait l'inclusion d'un fichier nécessaire :

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

Ensuite, aucun fichier Makefile n'est fourni. J'en ai copié un depuis un des autres répertoires des passerelles et remplacé le nom de la passerelle avec ssl-gw.

7.2 Compiler le TIS fwtk

La version 2.0 du fwtk se compile nettement plus facilement qu'aucune des versions précédentes. J'ai encore trouvé quelques petites choses qui devaient être changées avant que la version bêta se compile correctement. Espérons que ces modifications seront réalisées dans la version finale.

Pour les corriger, commencez par aller dans le répertoire /usr/src/fwtk/fwtk et copiez le fichier Makefile.config.linux par-dessus le Makefile.config.

Ne lancez pas fixmake. Les instructions vous disent de le faire. Son exécution casse les Makefiles de tous les répertoires.

J'ai une correction pour fixmake. Le problème est que le script sed ajoute un "." et un """ sur la ligne d'include de chaque Makefile. Le script sed suivant fonctionne :

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

Ensuite, il faut éditer le fichier Makefile.config. Deux modifications sont nécessaires.

L'auteur définit le répertoire source dans son répertoire personnel. Nous compilons notre code dans /usr/src, donc vous devez changer la variable FWTKSRCDIR pour tenir compte de cela :

        FWTKSRCDIR=/usr/src/fwtk/fwtk

Par ailleurs, au moins certains systèmes Linux utilisent la base gdbm. Le Makefile.config utilise dbm. Il est possible que vous deviez changer cela. J'ai dû le faire pour RedHat 3.0.3 :

        DBMLIB=-lgdbm

La dernière correction est dans le x-gw. Le bogue de la version bêta est dans le code socket.c. Pour le corriger, retirez les lignes suivantes du code :

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

Si vous avez ajouté ssl-gw dans votre répertoire source fwtk, vous devez l'ajouter dans la liste des répertoires dans le Makefile :

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

Maintenant, vous pouvez lancer make.

7.3 Installer le TIS fwtk

Lancer make install.

Le répertoire d'installation par défaut est /usr/local/etc. Vous pouvez modifier cela (je ne l'ai pas fait) pour un répertoire plus sécurisé. J'ai choisi de placer les droits d'accès à ce répertoire à 700 ("chmod 700").

Ce qu'il reste au moins maintenant est de configurer le firewall.

7.4 Configurer le TIS fwtkMaintenant, le plaisir commence vraiment.Nous devons enseigner au système à appeler ces nouveaux services et créer les tables pour les contrôler.Je ne suis pas en train de ré-écrire le manuel de TIS fwtk ici.Je vais montrer les paramètres que j'ai fait fonctionner et expliquer les problèmes que j'ai rencontrés et comment je les ai contournés.Trois fichiers définissent ces contrôles :

Pour faire fonctionner fwtk, vous devez éditer ces fichiers de bas en haut. Editer le fichier des services sans que les fichiers inetd.conf ou netperm-table soient corrects peut rendre votre système inaccessible.

Le fichier netperm-table

Ce fichier contrôle qui a accès aux services de TIS fwtk. Vous devez penser au trafic qui passe par le firewall depuis les deux côtés. Les gens de l'extérieur de votre réseau doivent s'identifier avant d'obtenir l'accès, mais ceux de l'intérieur doivent être autorisés simplement à passer au-travers.

Afin que les gens puissent s'identifier, le firewall utilise un programme appelé authsrv pour maintenir une base des noms et mots de passe. La section authentification de netperm-table contrôle l'emplacement et l'accès à la base.

J'ai eu quelques difficultés à fermer l'accès à ce service. Notez que la ligne permi-hosts que je montre utilise un "*" pour donner l'accès à tout le monde. Le paramétrage correcte de cette ligne est : authsrv: premit-hosts localhost, si vous arrivez à la faire fonctionner.

        #
        # Table de configuration proxy
        #
        # Regles d'authentification client et serveur
        authsrv:        database /usr/local/etc/fw-authdb
        authsrv:        permit-hosts *
        authsrv:        badsleep 1200
        authsrv:        nobogus true
        # Applications client utilisant le serveur d'authentification
        *:              authserver 127.0.0.1 114

Pour initialiser la base, passez root et lancez ./authsrv dans le répertoire /var/local/etc pour créer l'enregistrement de l'utilisateur d'administration.

Lisez la documentation de fwtk pour la manière d'ajouter des utilisateurs et des groupes.

Voici un exemple de session :

        #
        # 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
        #

Les contrôles de la passerelle telnet (tn-gw) vont de soi et sont la première chose que vous deviez configurer.

Dans mon exemple, j'autorise une machine du réseau privé à passer sans s'authentifier (permit-hosts 19961.2.* -passok). En revanche, tout autre utilisateur doit entrer ses nom et mot de passe pour utiliser le proxy (permit-hosts * -auth).

J'autorise aussi un autre système (196.1.2.202) à accéder au firewall directement sans passer du tout par celui-ci. Les deux lignes inetacl-in.telnetd font cela. J'expliquerai plus loin comment ces lignes sont utilisées.

Le timeout de telnet doit rester court :

        # regles de passerelle 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
        # Seul l'administrateur peut telneter directement le firewall
        # sur le port 24
        netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetd

Les commandes "r" fonctionnent de la même manière que pour telnet :

        # regles de passerelle 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
        # Seul l'administrateur peut telneter directement le firewall
        # sur le port
        netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a

Personne ne devrait avoir accès directement au firewall, et cela inclut FTP, donc ne placez pas de serveur FTP sur votre firewall.

A nouveau, la ligne permit-hosts autorise quiconque depuis le réseau protégé à accéder librement à InterNet et tous les autres utilisateurs doivent s'authentifier. J'ai ajouté la trace de chaque fichier envoyé et reçu dans mes contrôles (-log { retr stor }).

LE timeout FTP contrôle le temps mis à fermer une mauvaise connexion, ainsi que le temps d'inactivité maximal d'une session ouverte :

        # regles de passerelle 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 }

Le web, gopher et le ftp fondé sur un butineur sont contrôlés par le http-gw. Les deux premières lignes créent un répertoire pour stocker les documents ftp et web lorsqu'ils passent au-travers du firewall. Je rends root propriétaire de ces fichiers et je les place dans un répertoire accessible seulement par root.

La connexion web doit être maintenue courte. Elle contrôle le temps durant lequel un utilisateur attendra lors d'une mauvaise connexion :

        # regles de passerelle www et 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      * 

Le ssl-gw est juste une passerelle "gruyère". Faites-y attention. Dans cet exemple, j'autorise quiconque depuis le réseau protégé à se connecter en-dehors du réseau sauf les adresses 127.0.0.* et 192.1.1.*, puis seulement sur les ports 443 à 563. Ces derniers sont les ports SSL connus :

        # 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 *

Voici un exemple d'utilisation de plug-gw pour autoriser des connexions à un serveur de nouvelles. Dans cet exemple j'autorise quiconque depuis le réseau protégé à se connecter seulement à un système et seulement sur son port de nouvelles.

La seconde ligne permet au serveur de renvoyer ses données au réseau protégé.

Puisque de nombreux clients s'attendent à rester connecté pendant que l'utilisateur lit les nouvelles, le timeout pour un serveur de nouvelles doit être long :

 
        # passerelle plug-in pour les nouvelles :
        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

La passerelle finger est simple. Quiconque depuis le réseau protégé doit se connecter d'abord, puis nous l'autorisons à utiliser le programme finger du firewall. Tout autre reçoit simplement un message :

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

Je n'ai pas configuré les services e-mail ni X-Window, donc je n'inclus pas les exemples. Si quelqu'un dispose d'un exemple qui fonctionne, qu'il me l'envoie par e-mail.

Le fichier inetd.conf

Voici un fichier inetd.conf complet. Tous les services non indispensables ont été placés en commentaire. J'ai inclus le fichier complet pour indiquer quoi désactiver, ainsi que la manière de configurer les nouveaux services du 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
        # passerelle firewall FTP
        ftp-gw   stream tcp nowait.400 root /usr/local/etc/ftp-gw ftp-gw
        # passerelle firewall Telnet
        telnet   stream tcp nowait root /usr/local/etc/tn-gw /usr/local/etc/tn-gw
        # services locaux telnet
        telnet-a stream  tcp  nowait root /usr/local/etc/netacl in.telnetd
        # passerelle firewall Gopher
        gopher stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw 
        # passerelle firewall WWW
        http    stream tcp  nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw 
        # passerelle firewall SSL
        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
        # passerelle firewall SMTP (e-mail)
        #smtp stream tcp nowait root /usr/local/etc/smap smap
        #
        # Shell, login, exec et talk sont des protocoles 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 wait nobody /usr/sbin/tcpd in.dtalkd
        #
        # services Pop et e-mail imap et autres
        #
        #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
        #
        # Le service InterNet UUCP
        #
        #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l
        #
        # Le service tftp sert essentiellement pour bouter. De nombreux sites
        # l'utilisent seulement sur les "serveurs de boot"
        # Ne pas decommenter sauf s'il vous le *faut*.
        #
        #tftp   dgram udp wait root /usr/sbin/tcpd in.tftpd
        #bootps dgram udp wait root /usr/sbin/tcpd bootpd
        #
        # Finger, systat et netstat donnent des informations qui peuvent etre
        # utiles a des "craqueurs de systemes" potentiels. De nombreux
        # sites coisissent de desactiver certains ou tous ces services
        # pour ameliorer la securite.
        #
        # cfinger est GNU finger, qui n'est pas utilise dans 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
        #
        # Le service Time sert a la synchronisation des horloges.
        #
        #time stream tcp nowait root /usr/sbin/tcpd in.timed
        #time dgram  udp wait   root /usr/sbin/tcpd in.timed
        #
        # Authentification
        #
        auth    stream tcp wait   root /usr/sbin/tcpd in.identd -w -t120
        authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv
        #
        # Fin de inetd.conf

Le fichier /etc/services

C'est là que tout commence. Lorsqu'un client se connecte sur le firewall, il le fait sur un port connu (inférieur à 1024). Par exemple, telnet se connecte sur le port 23. Le daemon inetd détecte cette connexion et cherche le nom du service dans le fichier /etc/services. Ensuite, il lance le programme assigné au nom dans le fichier /etc/inetd.conf.

Certains des services que nous créons ne sont pas normalement dans le fichier /etc/services. Vous pouvez assigner à certains d'entre eux le port que vous souhaitez. Par exemple, j'ai assigné le port telnet de l'administrateur (telnet-a) sur le port 24. Pous pouvez l'assigner au port 2323 si vous voulez. Pour que l'administrateur (VOUS) se connecte directement sur le firewall, il doit utiliser telnet sur le port 24 et non 23, et si vous paramétrez votre netperm-table comme je l'ai fait, vous serez seulement capable de faire cela depuis un système situé à l'intérieur du réseau protégé.

 
        telnet-a   24/tcp
        ftp-gw     21/tcp          # ce nom est modifie
        auth       113/tcp  ident  # Verification utilisateur
        ssl-gw     443/tcp


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre