Projet de distribution GNU/Linux
Auteurs: Martial
Date: 2003-06-28
Modif:
Fonctionnement et utilisation du service nanofw basé sur iptables, et personnalisation de la configuration.
Nanofw consiste en un service pour simpleinit, il s'agit donc
d'un script shell relativement simple (que nous ajoutons au nba
de iptables) dont le comportement est influencé par la configuration
dans /etc/sysconfig/nanofw
, et des fichiers optionnels
dans /etc/sysconfig/nanofw.d/
.
Nanofw est destiné à un usage simple et rapide, et ne prétend pas être un véritable firewall complet, il s'agit essentiellement d'un filtre de paquets IP, qui vous donne par défaut un accès à la majorité des services web externes, tandis qu'il bloque par défaut les requêtes entrantes non sollicitées. L'idée est de vous aider à vous prémunir contre les tentatives d'intrusions incessantes, préserver votre vie privée, et surtout ne pas laisser des services ouverts à tous sans vous en rendre compte et laisser des gens exploiter d'éventuelles failles de sécurité (toujours possible malgré tout) ou des erreurs de configuration.
Nanofw peut servir pour des postes clients, ou pour une passerelle.
De par sa nature très simple, la configuration proposée par défaut ne permet de lancer le service sans devoir être connecté à internet au préalable (DNS, adresses IP attribuées dynamiquement ne poseront donc aucun problème); vous pouvez vous (dé)connecter quand bon vous semblera et à volonté.
Pour activer le service:
chmod +x /etc/init.d/runlevel.3/nanofw
Pour tester immédiatement:
telinit nanofw start
Et bien sûr, pour arrêter le service:
telinit nanofw stop
enable_nat=
Indiquez la valeur 1 pour activer le NAT (Network Addresses Translations),
ceci donnera aux machines de votre réseau un accès "transparent" aux
ressources laissées accessibles par le reste de la configuration - si vous
êtes en train de monter une passerelle (gateway) pour partager une
connection internet, il vous faut activer ceci.
Pour qu'un poste client fonctionne derrière une telle passerelle, la démarche à suivre est classique, pour rappel:
route add defaut gw ip_de_la_machine_nat
N'oubliez pas d'indiquez les bons DNS dans le /etc/resolv.conf
du client, il peut s'agir selon votre cas des DNS du FAI, de la passerelle
elle même qui fait office de serveur DNS (ex: avec bind et/ou named), ou
parfois des deux. (démarche similaire sur les autres systèmes
d'exploitations).
nat_iface=
Indiquez ici le nom de l'interface sur laquelle pratiquer le NAT, afin
que les machines qui y sont connectées bénéficient du partage. Par exemple,
si la carte réseau de la passerelle qui vous connecte au reste de votre
réseau local (les postes clients) est eth0
, indiquez le ici.
enable_log_drop=
Mettez cette valeur à 1 pour activer le log des requêtes bloquées en
entrée et en sortie. Les messages seront visible dans le fichier
/var/log/messages
- activer le log est contre-performant,
et n'est utile que pour diagnostiquer un problème ou tester.
ipt_mods=
Indiquez ici sous la forme d'une liste séparée d'espaces (et entre
guillemets) les modules iptables additionnels à charger. Par défaut,
la valeur est de ip_conntrack_ftp ip_conntrack_irc
,
ce qui autorise
le ftp actif ainsi que les dcc sur irc (besoins très courants). Ajoutez
les modules dont vous pouvez avoir besoin pour certains services
spécifiques (ex: streaming, jeu en réseau etc...). Vous trouverez des
informations plus poussées sur le site de iptables.
Les répertoires /etc/sysconfig/nanofw.d/start
et
/etc/sysconfig/nanofw.d/stop
ont deux rôles précis:
Les règles doivent être placées dans de simples fichiers dont le
nom se termine pas l'extension .sh
, il seront
lus par le service nanofw, après les règles normales (vous pouvez
donc les outrepasser de cette manière). start/ et stop
correspondent bien sur au lancement et à l'arrêt du service nanofw
L'ordre suivi est alphabétique - si dans un cas bien précis vous devez être sur qu'une règle A se lance avant une règle B, mettez simplement ces règles dans un même fichier dans l'ordre souhaité.
Imaginons que vous ayez pour une raison quelconque (ex: vous montez un serveur web publique) besoin d'ouvrir le port 3306 (MySQL) en entrée et en tcp, voici la démarche à suivre:
Créer un fichier texte /etc/sysconfig/nanofw.d/start/mysql.sh
et indiquez y:
$ipt -A INPUT -p tcp --dport 3306 -j ACCEPT
$ipt -A OUTPUT -p tcp --dport 3306 -j ACCEPT
Note: Si vous n'agissez pas sur une table particulière (cad autre que INPUT OUTPUT FORWARD ou nat ), vous n'avez pas besoin de faire ce qui suit, c'est juste pour l'exemple - nanofw stop effacera de toute façon les règles ci-dessus.
Créer un fichier texte /etc/sysconfig/nanofw.d/stop/mysql.sh
et indiquez y:
$ipt -A INPUT -p tcp --dport 3306 -j DROP
$ipt -A OUTPUT -p tcp --dport 3306 -j DROP
Vous pouvez voir que la configuration par défaut est orienté client, pour naviguer avec un minimum de sécurité - pour ouvrir explicitement un service à l'extérieur (http, ssh, etc...), utilisez le mécanisme de personnalisation décris plus haut, après vous être dûment documenté sur iptables (voir liens en haut de pages), qui propose énormément de possibilités variées et puissantes.