Un script iptables comme pare-feu ?
Pour réaliser un pare-feu pour un PC connecté à Internet via l'ADSL, iptables n'est pas si compliqué que ça à manipuler. Je vous propose donc un script (cf. section Téléchargement) pour protéger votre machine. Ce script permet de filtrer les connexions dans les 2 sens, à savoir d'Internet vers sa machine et de sa machine vers Internet.
Note : si vous voulez utiliser un script iptables comme pare-feu, il est nécessaire de désactiver le pare-feu Mandriva et d'arrêter le service Shorewall.
Que fait ce script ?
La stratégie est simple : on interdit tout par défaut puis on autorise ce qui nous intéresse, c'est à dire :
- l'interface locale (lo) à dialoguer avec elle-même (c'est la moindre des choses)
- le trafic du PC vers Internet pour les services que nous avons décidé d'utiliser
- le trafic d'Internet vers le PC pour les connexions initiées par le PC
- le trafic d'Internet vers le PC pour les services que nous laissons ouverts
- les demandes de connexions refusées sont tracées dans /var/log/messages
Le filtrage n'est basé que sur les numéros de ports. Il est évidemment possible d'enrichir le script pour filtrer sur des adresses précises.
La configuration par défaut du script est la suivante :
- aucun service du PC n'est accessible depuis Internet
- l'accès aux services les plus courants est possible depuis le PC vers l'extérieur
En voici la liste : FTP pour le transfert de fichiers POP3, IMAP pour le rapatriement des mails SMTP pour envoyer des mails DNS, HTTP, HTTPS, WEBCACHE, SQUID pour surfer sans contrainte SSH pour accéder à des serveurs distants via le protocole SecureShell RTSP pour écouter des sources RealAudio NNTP pour accéder aux forums Usenet DHCP pour pouvoir obtenir une adresse IP dynamique au démarrage de la machine L'ICMP Echo Request est aussi autorisé pour tester la présence d'une machine sur le réseau
Comment modifier ce script ?
Il suffit d'utiliser un éditeur de texte
Il suffit d'ajouter le caractère # en début de la ligne qui représente la règle (ou de supprimer la ligne), puis de relancer l'exécution du script.
Il suffit de supprimer le caractère # en début de la ligne qui représente la règle puis de relancer l'exécution du script.
Le comportement par défaut est de refuser l'établissement d'une connexion mais d'accepter tout le trafic sur une connexion déjà établie. Des règles ont été ajoutées pour autoriser l'établissement de connexions pour les services les plus utilisés (cf. liste plus haut). Il est possible de créer de nouvelles règles ayant des critères plus riches comme le port source et/ou le port destination (ou une plage de ports), l'adresse source et/ou destination pour un protocole particulier ou tous les protocoles. La syntaxe d'une règle pour autoriser une connexion a la forme iptables -A OUTPUT|INPUT -m state --state NEW -p tcp -s adresseIPsource -sport portSource -d adresseIPdestination --dport portDestination -j ACCEPTPar exemple, pour n'autoriser que la machine 78.92.2.2 à se connecter sur son serveur Web Pensez à désactiver la ligne qui autorise tout le monde à se connecter en HTTP #iptables -A INPUT -m state --state NEW -p tcp --dport http -j ACCEPT
Créez la règle spécifique qui n'autorise que la machine 78.92.2.2 à se connecter en HTTP iptables -A INPUT -m state --state NEW -p tcp -s 78.92.2.2 --dport http -j ACCEPT
Conseil : ajoutez la nouvelle règle dans le script où toutes les règles entrantes sont définies.
Activer le pare-feu
Exécuter le script active la fonction de pare-feu. Il faut exécuter le script après chaque modification. Pour cela, ouvrir une console, se connecter sous root et exécuter le script via la commande sh.
$ su - Password: # cd /répertoire_d_accès_au_script # sh ./firewall_desktop.sh [nom_de_l'interface]
Si l'interface d'accès au réseau n'est pas eth0, vous devez la préciser sur la ligne de commande. Par exemple, si vous accédez à Internet via un modem ADSL l'interface est sûrement ppp0 ou ppp1. Si vous accéder à Internet via une Freebox, l'interface est sûrement eth0 ou eth1. Pour connaître le nom de l'interface utilisée, ouvrez une console et tapez la commande ifconfig -a sous root, puis recherchez l'interface où il y a du trafic.
Surfez un peu puis regardez laligne RX bytes/TX bytes. Les règles créées par ce script seront automatiquement rechargées au démarrage de la machine si le service iptables est actif (il doit l'être avant l'exécution du script). Ce qui permettra de protéger la machine dès son démarrage. (Pour info, en fin de script la commande "service iptables save" force la sauvegarde des règles). Cas du FTP Si vous voulez réaliser des transferts de fichiers par FTP, il faudra évidemment activer les règles concernant ce protocole, mais il faudra aussi ajouter dans le fichier /etc/modprobe.preload les 2 lignes suivantes afin de charger au démarrage du PC les modules qui permettent à Netfilter de suivre les connexions FTP (le protocole FTP a un fonctionnement un peu particulier et nécessite des modules Netfilter spécifiques) : ip_conntrack_ftp ip_nat_ftp En effet, ces 2 modules sont indispensables pour utiliser FTP avec des règles iptables mais ne sont pas automatiquement chargés au démarrage du PC.
Note 11 avril 2006 : le script desktop-firewall.sh proposé en section Téléchargement ajoute désormais automatiquement ces deux lignes. Pour aller plus loin avec iptables Je vous conseille la lecture du site de Christian Caleca.
Date de création : 06/11/2005 @ 10:30
Dernière modification : 12/04/2006 @ 08:08
Catégorie : Sécurité
Page lue 9131 fois
Prévisualiser la page
Imprimer la page
|