Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
informatique:linux:iptables [2009/03/13 17:05] benoit |
informatique:linux:iptables [2018/09/06 19:10] (Version actuelle) |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ===== IPTABLES ===== | ===== IPTABLES ===== | ||
| + | |||
| Ligne 23: | Ligne 24: | ||
| iptables -A INPUT -s 192.168.0.1 -i eth1 -p udp --dport 32000:32900 -j ACCEPT | iptables -A INPUT -s 192.168.0.1 -i eth1 -p udp --dport 32000:32900 -j ACCEPT | ||
| + | Pour insérer une règle en première position, utiliser **-I INPUT 1** : | ||
| + | iptables -I INPUT 1 -s 192.168.0.2 -i eth1 -p udp --dport 32000:32900 -j ACCEPT | ||
| + | |||
| + | | ||
| + | Pour lister les règles actives : | ||
| + | iptables -L -v | ||
| + | Pour lister les règles actives au format numérique : | ||
| + | iptables -L -v -n | ||
| + | Pour lister les règles active avec les numéros de règles : | ||
| + | iptables -L -v --line-numbers | ||
| ==== Configuration ==== | ==== Configuration ==== | ||
| Ligne 59: | Ligne 70: | ||
| | | ||
| Par défaut les logs iptables seront dans ''/var/log/messages'' | Par défaut les logs iptables seront dans ''/var/log/messages'' | ||
| + | |||
| ==== Faire du routage ==== | ==== Faire du routage ==== | ||
| Ligne 76: | Ligne 88: | ||
| iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT | iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT | ||
| + | |||
| + | |||
| + | |||
| + | ==== Firewall d'entreprise ==== | ||
| + | Ci-dessous un exemple de script **iptables** pour faire un firewall sous Linux : | ||
| + | |||
| + | ############## | ||
| + | # PRE-REQUIS # | ||
| + | ############## | ||
| + | # VARIABLES | ||
| + | INTERNET_NIC=eth0 | ||
| + | LOCAL_NIC1=eth1 | ||
| + | LOCAL_NIC2=eth2 | ||
| + | | ||
| + | # ACTIVATION DU TRANSFERT DE PAQUET POUR TCP/IP | ||
| + | sysctl -w net.ipv4.ip_forward=1 | ||
| + | | ||
| + | ################################## | ||
| + | # PURGE DES TABLES FILTER ET NAT # | ||
| + | ################################## | ||
| + | iptables -t filter -F | ||
| + | iptables -t nat -F | ||
| + | | ||
| + | ################################# | ||
| + | # POLITIQUE GLOBALE DU FIREWALL # | ||
| + | ################################# | ||
| + | iptables -P INPUT DROP | ||
| + | iptables -P FORWARD DROP | ||
| + | iptables -P OUTPUT ACCEPT | ||
| + | | ||
| + | iptables -A INPUT -i lo -j ACCEPT | ||
| + | iptables -A FORWARD -i lo -j ACCEPT | ||
| + | | ||
| + | ################## | ||
| + | # REGLES LOCALES # | ||
| + | ################## | ||
| + | ####### OUVERTURES SUR LE FIREWALL LUI MEME | ||
| + | #iptables -A INPUT -i ${LOCAL_NIC1} -p tcp --dport 22 -j ACCEPT | ||
| + | iptables -A INPUT -i ${INTERNET_NIC} -p tcp --dport 22 -j ACCEPT | ||
| + | iptables -A INPUT -i ${INTERNET_NIC} -p tcp --dport 10000 -j ACCEPT | ||
| + | | ||
| + | ####### ACCEPTE L'OUVERTURE DE PORT DYNAMIQUE POUR LES CONNEXIONS ETABLIES | ||
| + | iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
| + | | ||
| + | ################################# | ||
| + | # REGLES DU RESEAU D'ENTREPRISE # | ||
| + | ################################# | ||
| + | | ||
| + | # DANS CET EXEMPLE NOUS AVONS 2 RESEAUX LOCAUX, LOCAL ET DMZ ET UN LIEN VERS INTERNET | ||
| + | # - DMZ (LOCAL_NIC1) = 10.0.0.0/24 | ||
| + | # - LOCAL (LOCAL_NIC2) = 10.1.0.0/24 | ||
| + | # - INTERNET (INTERNET_NIC) = IP_DU_PROVIDER | ||
| + | | ||
| + | ####### OUVERTURES DE LOCAL VERS INTERNET | ||
| + | #iptables -A FORWARD -i ${LOCAL_NIC1} -o ${INTERNET_NIC} -s 10.0.0.1 -j ACCEPT | ||
| + | | ||
| + | ####### OUVERTURES DE LOCAL VERS DMZ | ||
| + | iptables -A FORWARD -i ${LOCAL_NIC2} -o ${LOCAL_NIC1} -p tcp --dport 22 -d 10.0.0.1 -j ACCEPT | ||
| + | | ||
| + | ####### OUVERTURES DE LOCAL VERS INTERNET | ||
| + | iptables -A FORWARD -i ${LOCAL_NIC2} -o ${INTERNET_NIC} -s 10.1.0.1 -j ACCEPT | ||
| + | | ||
| + | ####### OUVERTURES DE INTERNET VERS DMZ | ||
| + | iptables -A FORWARD -i ${INTERNET_NIC} -o ${LOCAL_NIC1} -p tcp --dport 22 -d 10.0.0.1 -j ACCEPT | ||
| + | iptables -A FORWARD -i ${INTERNET_NIC} -o ${LOCAL_NIC1} -p tcp --dport 80 -d 10.0.0.1 -j ACCEPT | ||
| + | iptables -A FORWARD -i ${INTERNET_NIC} -o ${LOCAL_NIC1} -p tcp --dport 143 -d 10.0.0.1 -j ACCEPT | ||
| + | iptables -A FORWARD -i ${INTERNET_NIC} -o ${LOCAL_NIC1} -p tcp --dport 25 -d 10.0.0.1 -j ACCEPT | ||
| + | | ||
| + | ###### TRANSLATIONS DE PORT DE INTERNET VERS DMZ | ||
| + | iptables -t nat -A PREROUTING -i ${INTERNET_NIC} -p tcp --dport 2222 -j DNAT --to 10.0.0.1:22 | ||
| + | iptables -t nat -A PREROUTING -i ${INTERNET_NIC} -p tcp --dport 80 -j DNAT --to 10.0.0.1:80 | ||
| + | iptables -t nat -A PREROUTING -i ${INTERNET_NIC} -p tcp --dport 143 -j DNAT --to 10.0.0.1:143 | ||
| + | iptables -t nat -A PREROUTING -i ${INTERNET_NIC} -p tcp --dport 25 -j DNAT --to 10.0.0.1:25 | ||
| + | | ||
| + | ###### ACCEPTE L'OUVERTURE DE PORT DYNAMIQUE POUR LES CONNEXIONS ETABLIES | ||
| + | iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
| + | | ||
| + | ###### MASQUAGE DES ADRESSES IP PRIVE POUR SORTIR SUR LE RESEAU INTERNET | ||
| + | iptables -t nat -A POSTROUTING -o ${INTERNET_NIC} -s 10.0.0.0/24 -j MASQUERADE | ||
| + | iptables -t nat -A POSTROUTING -o ${INTERNET_NIC} -s 10.1.0.0/24 -j MASQUERADE | ||
| + | |||
| + | ==== Grouper les règles en créant des chains ==== | ||
| + | |||
| + | Pour organiser les règles IPTABLES nous pouvons les regrouper. On insère un ensemble de règles dans des groupes et on les rattache à une des principales chaine de règle : INPUT, FORWARD ou DROP. | ||
| + | |||
| + | Pour créer un groupe de règle nommé MY-FILTER-01 : | ||
| + | |||
| + | iptables -N MY-FILTER-01 | ||
| + | |||
| + | Pour ajouter ajouter une règle à ce groupe : | ||
| + | |||
| + | iptables -A MY-FILTER-01 -d 8.8.8.8 -j DROP | ||
| + | |||
| + | Pour le moment, la règle que l'on vient d'ajouter n'est pas appliquée | ||
| + | |||
| + | Nous ajoutons maintenant notre groupe de règle MY-FILTER-01 à la chaine OUTPUT : | ||
| + | |||
| + | iptables -A OUTPUT -j MY-FILTER-01 | ||
| + | |||
| + | Notre règle est maintenant appliquée. | ||
| + | |||
| + | Nous ajoutons maintenant une règle supplémentaire à notre groupe de règles MY-FILTER-01 : | ||
| + | |||
| + | iptables -A MY-FILTER-01 -d 8.8.4.4 -j DROP | ||
| + | |||
| + | Celle nouvelle règle est directement active. | ||
| + | |||
| + | Listons les règles : | ||
| + | |||
| + | iptables -L -n -v | ||
| + | |||
| + | Nous lisons que dans la **Chain OUTPUT** est définie une cible **MY-FILTER-01**. De ce fait toutes les règles se trouvant dans la **Chain MY-FILTER-01** seront appliqués pour les flux sortants (**OUTPUT**). | ||
| + | |||
| + | Chain INPUT (policy ACCEPT 111 packets, 8420 bytes) | ||
| + | pkts bytes target prot opt in out source destination | ||
| + | | ||
| + | Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) | ||
| + | pkts bytes target prot opt in out source destination | ||
| + | | ||
| + | Chain OUTPUT (policy ACCEPT 83 packets, 11212 bytes) | ||
| + | pkts bytes target prot opt in out source destination | ||
| + | 83 11212 MY-FILTER-01 all -- * * 0.0.0.0/0 0.0.0.0/0 | ||
| + | | ||
| + | Chain MY-FILTER-01 (1 references) | ||
| + | pkts bytes target prot opt in out source destination | ||
| + | 2 168 DROP all -- * * 0.0.0.0/0 8.8.8.8 | ||
| + | 2 168 DROP all -- * * 0.0.0.0/0 8.8.4.4 | ||
| + | |||
| + | |||
| + | Comme nous avons regroupé les deux règles dans le même groupe, nous pouvons les désactiver d'un coup en retirant le groupe de règle MY-FILTER-01 de la chaine OUTPUT : | ||
| + | iptables -D OUTPUT -j MY-FILTER-01 | ||
| + | | ||