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