Iptables

Revision for “Iptables” created on 4 février 2016 à 13 h 26 min

Titre
Iptables
Contenu
<h1><b>List of Rules</b></h1> <hr /> To list the rules currently applied to iptables <code> /sbin/iptables -L </code> <code> Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination </code> We see three sections: Input, Forward and Output. We'll take care of that section Input for the moment (for incoming traffic). <h1><b>Ajouter des règles a Iptables</b></h1> <hr /> It allows ports 22 and 80: <code> /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT </code> <code> -A INPUT : on place notre régle en entrée du firewall. -i eth0 : ici c'est l'interface ethernet qui nous intéresse. -p tcp : le protocole traîté est le TCP (on ne traîte que celui-là pour le moment). --dport 22 : la règle va être appliquée sur le port SSH (n° 22). -j ACCEPT : on accepte ce trafic. </code> On reliste tout : <code> /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh ACCEPT tcp — anywhere anywhere tcp dpt:www Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination </code> <h1><b>Bloquer tout par défaut</b></h1> <hr /> On voit que la politique par défaut est de tout accepter =&gt; Chain INPUT (policy ACCEPT). Nous voulons bloquer tout le trafic qu'on n'aura pas au préalable autorisé. On va donc ajouter une règle qui va bloquer les autres ports. Mais il se pose alors un problème : lorsqu'une connexion va être faite depuis notre serveur vers le serveur kernel.org pour télécharger le nouveau noyau (ce n'est qu'un exemple), il va établir une connexion vers le site et va attendre sa réponse. La demande de connexion va bien partir mais comment va-t-elle revenir étant donné qu'on a tout bloqué ? Heureusement, iptables est puissant et peux aussi trier les paquets par rapport à leur état. On va donc ajouter une règle : <pre>iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT </pre> Il ne reste plus qu'à bloquer le reste (attention, c'est là ou le firewall va vraiment faire effet, vérifiez donc d'avoir bien rentré vos règles sinon vous allez bloquer votre serveur !) : <pre>/sbin/iptables -A INPUT -i eth0 -j DROP </pre> On a en fait deux choix ou niveau de cette règle. Soit on droppe les paquets, c'est-à-dire que si un paquet arrive et qu'il n'est pas accepté on l'efface. Le client attendra de son côté une réponse en vain, jusqu'au timeout. La deuxième solution est de rejeter les paquets (REJECT au lieu de DROP). Si un paquet non sollicité arrive, on renvoie au client une erreur et il n'attend plus car il a une réponse négative. Rejeter les paquets est plus propre mais les jeter est plus sécurisé. En effet, imaginons quelqu'un qui vous envoie des paquets à répétition sur un mauvais port, votre serveur ne les traitera pas, alors qu'avec la règle REJECT, il prendra le temps de répondre. === Supprimer/Organiser des règles === Pour mettre à zéro votre firewall, tapez : <pre>/sbin/iptables -F INPUT </pre> Cette commande supprimera toutes les règles de la rubrique INPUT. Si vous souhaitez ajouter une régle entre la première et la deuxième, tapez ceci : <pre>/sbin/iptables -I INPUT 2 ... la suite de votre règle </pre> Pour supprimer la règle n°3 tapez ceci : <pre>/sbin/iptables -D INPUT 3 </pre> Pour bloquer totalement une IP : <pre>/sbin/iptables -I INPUT 1 -s -j DROP </pre> == Automatiser le Firewall == Pour automatiser le l'application des règles Iptables au démarrage, nous allons créer un fichier "/etc/init.d/firewall" <code>#!/bin/sh ### BEGIN INIT INFO # Provides: iptables # Required-Start: # Required-Stop: # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Firewall for DMZ # Description: Start the firewall rules for DMZ server ### END INIT INFO IPT=/sbin/iptables case "$1" in start) $IPT -F INPUT $IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.xxx -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.251 -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.250 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT $IPT -A INPUT -i eth0 -j REJECT exit 0 ;; stop) $IPT -F INPUT exit 0 ;; *) echo "Usage: /etc/init.d/firewall {start|stop}" exit 1 ;; esac exit 0 </code> On lui donne les droits d’exécutions: <pre>chmod 700 /etc/init.d/firewall </pre> Puis on dis au système de le lancer au démarrage: <pre>update-rc.d firewall defaults </pre>
Extrait


OldNewDate CreatedAuthorActions
4 février 2016 à 13 h 26 min Anthony Magnini
3 février 2016 à 21 h 49 min Anthony Magnini
3 février 2016 à 21 h 47 min Anthony Magnini
3 février 2016 à 21 h 46 min Anthony Magnini
3 février 2016 à 21 h 45 min [Sauvegarde automatique] Anthony Magnini
3 février 2016 à 21 h 44 min Anthony Magnini
3 février 2016 à 21 h 44 min Anthony Magnini
3 février 2016 à 21 h 36 min Anthony Magnini
3 février 2016 à 21 h 35 min Anthony Magnini
3 février 2016 à 21 h 34 min Anthony Magnini