Vous devriez lire le Firewall-HOWTO.
Il vous indiquera où trouver ipfwadm
si vous ne l'avez pas déjà. Vous pouvez également récupérer d'autres outils, mais seulement ipfwadm
m'a été utile. C'est pratique et de bas niveau ! Vous pouvez voir exactement ce qu'il fait.
Vous avez compilé l'IP-forwarding et le masquerading dans le noyau, et vous allez vérifier que le firewall est dans son état par défaut (il accepte) grâce à :
ipfwadm -I -l
ipfwadm -O -l
ipfwadm -F -l
Ce qui, dans l'ordre, "affiche les règles affectant la partie .."entrante ou sortante ou qui fait suivre (masquerading) ".. du firewall". L'option "-l" signifie "lister".
Si vous avez compilé l'IP accounting également :
ipfwadm -A -l
Vous devriez constater qu'aucune règle n'est définir et que l'action par défaut est d'accepter tous les paquets. Vous pouvez retourner à cet état à tout moment, avec :
ipfwadm -I -f
ipfwadm -O -f
ipfwadm -F -f
L'option "-f" signifie "flush" (en français, "vider"). Vous pourriez en avoir besoin.
Je veux interdire l'accès au monde entier depuis mon réseau interne, et rien d'autre, donc je vais donner comme dernière règle (comme règle par défaut) une règle indiquant d'ignorer les paquets venant du réseau interne et dirigés vers l'extérieur. Je place toutes les règles (dans cet ordre) dans le fichier /etc/rc.d/rc.firewall
que j'execute depuis /etc/rc.d/rc.local
au démarrage.
ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0
Le "-S" représente l'adresse source/masque de sous-réseau. L'option "-D" est pour l'adresse destination/masque de sous-réseau.
Ce format n'a plus le vent en poupe. ipfwadm
est intelligent et connaît des abréviations courantes. Vérifier les pages de manuel.
Il peut être plus pratique de placer certaines ou toutes les règles sur la partie sortante du firewall en utilise "-O" au lieu de "-I", mais je supposerai que les règles sont conçues pour être utilisées sur la moitié entrante.
Avant la règle par défaut, je dois placer des règles qui servent d'exceptions pour cette interdiction générale des services extérieurs aux clients intérieurs.
Je veux traiter les adresses des machines derrière le firewall de manière spéciale. Je veux empêcher aux gens de se loguer sur la machine qui sert de firewall à moins qu'elles aient une permission spéciale, mais une fois connectées, elles devraient être capables de parler au monde extérieur.
ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \
-D 0.0.0.0/0.0.0.0
Je veux également que les clients internes soient capables de parler à la machine faisant firewall. Peut-être pourront-elles la persuader de les laisser sortir !
ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \
-D 192.168.2.100/255.255.255.255
Vérifiez que vous pouvez joindre les machines à l'intérieur du firewall depuis l'extérieur par telnet
, mais que vous ne pouvez pas sortir. Vous pouvez faire le premier pas, mais les clients ne peuvent pas vous envoyer de messages. Essayez également rlogin
et ping
avec tcpdump
lancé sur une carte ou l'autre. Vous devriez être capable de comprendre ce que vous lirez.
J'assouplis les règles protocole par protocole. Je veux que les ping
s depuis l'extérieur vers l'intérieur obtiennent une réponse, par exemple, donc j'ai ajouté la règle :
ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \
-D 0.0.0.0/0.0.0.0
L'option "-P icmp
" correspond au protocole tout entier.
Avant que j'installe un proxy ftp, j'autorise également les appels ftp sortants en relâchant les restrictions sur un port donné. Ceci vise les ports 20, 21 et 115 sur les machines externes :
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
-D 0.0.0.0/0.0.0.0 20 21 115
Je n'ai pas pu faire fonctionner sendmail
entre les clients locaux sans serveur de noms. Au lieu d'installer un serveur de nom directement sur le firewall, j'ai juste autorisé les requêtes TCP de résolution de nom visant le plus proche serveur de nom, et j'ai placé son adresse dans le fichier /etc/resolv.conf
des clients. ("nameserver 123.456.789.31
" sur une ligne séparée).
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
-D 123.456.789.31/255.255.255.255 54
Vous pouvez trouver quel numéro de port et protocole requiert un service grâce à tcpdump
. Utilisez ce service avec un ftp
ou un telnet
ou autre vers ou depuis une machine interne, et observez-le sur les ports d'entrée et de sortie du firewall avec tcpdump
:
tcpdump -i eth1 -e host client04
par exemple. Le fichier /etc/services/
est une importante source d'indices. Pour laisser ENTRER le telnet
et le ftp
depuis l'extérieur, vous devez autoriser un client local à envoyer des données vers l'extérieur sur un port donné. Je comprends pourquoi ceci est nécessaire pour le ftp
(c'est le serveur qui établit la connexion de données), mais je me demande pourquoi telnet
en a également besoin.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \
-D 0.0.0.0/0.0.0.0
Il existe un problème particulier avec certains démons qui cherchent le nom d'hôte de la machine firewall afin de décider quelle est leur adresse réseau. J'ai eu des problèmes avec rpc.yppasswdd
. Il insiste sur des informations broadcast qui indiquent qu'il se trouve en dehors du firewall (sur la seconde carte). Cela signifie que les clients à l'intérieur ne peuvent pas le contacter.
Au lieu de lancer l'IP aliasing ou de changer le code source du démon, j'ai traduit le nom vers l'adresse de la carte du côté intérieur sur les clients, dans leur fichier /etc/hosts
.
Vous voudrez tester que vous pouvez toujours utiliser telnet
, rlogin
et ping
depuis l'extérieur. Depuis l'intérieur, vous devriez être capable d'utiliser ping
vers la sortie. Vous devriez également être capables d'utiliser le telnet
vers la machine firewall depuis l'intérieur, et cette dernière manipulation devrait vous permettre d'accéder au reste.
Et voilà. A présent, vous voulez probablement apprendre rpc/Yellow Pages et leur interaction avec le fichier de mots de passe. Le réseau derrière le firewall devrait vouloir empêcher aux utilisateurs non privilégiés de se logguer sur le firewall, et donc de sortir. C'est traité dans un autre HOWTO !