Un firewall avec IPTABLES


firewall
Après quelques heures passés à étudier le fonctionnement de IPTABLES sous linux, j'ai crée un script qui construit un firewall pour un PC relié à Internet.

Ce dernier possède les caractéristiques suivantes :

  • interdit tout paquet de rentrer sur la machine
  • log tout ce qui tente de rentrer sur la machine
  • autorise en sortie les protocoles http, https, ssh, ftp, ftp-data, pop, smtp, nntp, msn et bittorrent
  • interdit les ping sur votre adresse IP
  • vous autorise à pinger les autres par contre
  • vous laisse vous balader sans problème sur votre réseau local

Pour mieux comprendre son fonctionnement, je vous invite à lire le code source, qui contient des commentaires de ma part.

Télécharger le script : script-iptables

Pour l'installer, tapez les commandes suivantes en root :

cd /root
wget www.tux-planet.fr/public/dev/shell/script-iptables
chmod 700 script-iptables
echo "/root/script-iptables" >> /etc/rc.local


13 Commentaires pour "Un firewall avec IPTABLES"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Très instructif, ça aurait parfaitement sa place dans le wiki. :-)

    RépondreRépondre
    Karl , le 5 mars 2006 à 19:25
  •  

    Si je comprends bien cette ligne:
    iptables -A OUTPUT -o eth0 -p TCP --dport 1863 -j ACCEPT

    Le ports 1863 qui est le port de msn est ouvert... mais l'est il dans les deux sens?
    Si par exemple je veux faire la meme chose avec azureus, puis je faire:

    iptables -A OUTPUT -o eth0 -p TCP --dport 6881 -j ACCEPT

    Pour que cela fonctionne correctement?

    Mais en tout cas, sympa ton blog

    RépondreRépondre
    denny , le 5 mars 2006 à 20:12
  •  

    @Karl : pas de problème si vous voulez le mettre dans le wiki de fedora-france, par contre il faudrait voir avec d'autres personnes si la configuration que je propose est assez généralisée pour toucher un public assez large ...

    @denny : le OUTPUT signifie seulement en sortie, donc ici le port de msn est ouvert que dans un seul sens. Par contre, il y a un chaine un peu plus bas qui dit que toutes les connexions déjà établies peuvent entrées. Donc lorsque je lance msn, il se connect à internet (il a le droit de sortir), puis comme la connexion est déjà établit, alors IPTABLES laisse rentrer les paquets de l'extérieur (personne qui veulent me parler).

    Pour azureus, je pense que c'est un peu différent, car le bittorrent à besoin que le port sois ouvert en permanence il me semble, donc il faut tester. Mais si çà ne marche pas, rien ne t'empêche de rajouter une chaine similaire à celle-ci :

    iptables -A INPUT -o eth0 -p ALL --dport 6881 -j ACCEPT

    PS : je met ALL à la place de TCP car je suis pas sur que le bittorrent ne dialogue que en tcp.

    RépondreRépondre
    pti-seb , le 5 mars 2006 à 21:03
  •  

    bittorent c'est du tcp uniquement, et on peut mettre la plage entière --dport 6881:6889
    La config tel que tu la présentes est une excellente introduction à iptables, c'est clair et bien commenté. Après, on pourrait compléter mais c'est justement le rôle du wiki.

    RépondreRépondre
    Karl , le 5 mars 2006 à 23:45
  •  

    Bravo pour ce script très utile !

    RépondreRépondre
    Xian , le 7 mars 2006 à 12:04
  •  

    Bon je viens d'avoir besoin de bittorrent, donc j'ai du ajouter une règle pour que iptable le prenne en compte. La ligne exacte était :

    iptables -A OUTPUT -o eth0 -p TCP --dport 6881:6889 -j ACCEPT

    Je viens de mettre le script à jour (version 0.1.1), mais la ligne est en commentaire par défaut. A vous de voir si vous en avez besoin ou pas.

    RépondreRépondre
    pti-seb , le 12 mars 2006 à 15:26
  •  

    Salut à toi Seb, je voudrait savoir où as tu mis ton script iptables.sh ? Est-ce un script qui se lance lors du démarage ou tu le lance manuellement ?

    Autrement très sympas comme procédure :)

    RépondreRépondre
    Specimen69 , le 28 novembre 2006 à 16:22
  •  

    Un nouvelle version du script, la 0.2.0 vient de sortir. Au menu :

    - correction d'un bug avec les connexions FTP (merci à Remi et Toxic292 pour leur aide)
    - ajout du protocol nntp pour les connexions vers les News Groups
    - divers améliroations du code et des commentaires

    J'ai également mis plus de détail dans le billet, sur la procédure à suivre pour l'installer.

    RépondreRépondre
    pti-seb , le 28 novembre 2006 à 16:43
  •  

    Salut je me presente greg . J'ai utilisé ton script, par contre j'ai une question pourquoi met tu /sbin/ devant certaines regles ?
    Merci d'avance

    RépondreRépondre
    tuxi , le 25 janvier 2007 à 18:51
  •  

    Tout simplement parce que la commande iptables se trouve dans le dossier /sbin.

    RépondreRépondre
    pti-seb , le 25 janvier 2007 à 22:37
  •  

    Bonjour,
    dans ton script tu protèges efficacement l'interface de ton reseau privé eth0 et la machine sur laquelle tourne iptables mais je ne comprends pas comment tu gères et protèges l'accès internet ?
    Normalement il devrait y avoir une deuxième interface (ethertnet eth1, adsl ppp0, etc..)
    Quelle est cette machine et quelle est sa place dans le réseau ?

    Amicalement

    RépondreRépondre
    Green Lantern , le 19 août 2007 à 21:57
  •  

    @Green Lantern : justement, la connexion internet passe par l'interface eth0 dans mon cas (interface relié à un routeur qui est lui même connecté à une freebox).

    Le script est conçu de façon à pouvoir changer facilement le nom de l'interface en fonction des besoins.

    RépondreRépondre
    pti-seb , le 19 août 2007 à 22:27
  •  

    bonjour;

    votre script est très utile, je m'en suis servis pour mon frère.
    Celui ci est connecté directement sur sa freebox, pas de problème donc, sauf pour cette ligne:
    /etc/init.d/iptables save
    car ce script n'existe pas sous debian testing (mais j'ai modifié ça)

    Par contre, pour mon portable qui se connecte via un réseau local, le script ne fonctionne pas. Y a t il des impossibilité avec un noyau 2.6.21?

    RépondreRépondre
    rsuinot , le 10 septembre 2007 à 09:00
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum