Ceci est une ancienne révision du document !
Pour filter les flux entrant et le transfert
iptables -P INPUT DROP iptables -P FORWARD DROP
Pour autoriser la machine à sortir :
iptables -P OUTPUT ACCEPT iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Pour ouvrir HTTP sur l'interface eth1 pour tout le monde :
iptables -A INPUT -i eth1 -p tcp --dport http -j ACCEPT
Pour ouvrir plusieurs ports à tout le monde sur eth1 :
iptables -A INPUT -i eth1 -p tcp -m multiport --dport ssh,http,ftp -j ACCEPT
Pour autoriser uniquement 192.168.0.1 à se connecter sur le port entrant 8080 de eth1 :
iptables -A INPUT -s 192.168.0.1 -i eth1 -p tcp --dport 8080 -j ACCEPT
Pour autoriser uniquement 192.168.0.1 à se connecter sur la plage de port comprise entre 32000 et 32900 :
iptables -A INPUT -s 192.168.0.1 -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
On va créer ici le script iptables-start.sh avec le contenu suivant :
######### purges des regles ######### iptables -F iptables -X ######### Regles de filtrage globale ###### iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT ######## Creation de la chaine de filtrage nommé RH-Firewall-1-INPUT ###### iptables -N RH-Firewall-1-INPUT # Les INPUT et FORWARD sont filtrees par la chaine unique RH-Firewall-1-INPUT iptables -A INPUT -j RH-Firewall-1-INPUT iptables -A FORWARD -j RH-Firewall-1-INPUT ######## Creation de la chaine de filtrage nommé LOG_DROP pour logger les DROP ##### iptables -N LOG_DROP iptables -A LOG_DROP -j LOG --log-level debug --log-prefix '[IPTABLES DROP] : ' ######## Ouverture des ports dynamiques en entrée pour les connexions effectuées en sortie ######### iptables -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ######## Ouverture des ports ############ iptables -A RH-Firewall-1-INPUT -j LOG_DROP iptables -A RH-Firewall-1-INPUT -i lo -j ACCEPT iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Par défaut les logs iptables seront dans /var/log/messages
Pour faire de votre linux une passerelle FireWall, il faut activer l'ip_forward au niveau du noyau puis d'ajouter une règle de postrouting à iptables :
Activer l'ip forwarding au niveau du kernel :
sysctl -w net.ipv4.ip_forward=1
Penser à la mettre dans /etc/sysctl.conf pour l'activer au démarrage
Ajouter la règle de postrouting eth1 étant la carte réseau connecté à l'extérieur.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Si le FORWARD est bloqué par défaut ajouter les deux règles suivantes pour activer le routage entre les deux cartes réseaux eth0 et eth1:
iptables -t filter -A FORWARD -i eth0 -o eth1 -j ACCEPT iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
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
Pour organiser les règles IPTABLES nous pouvons les regrouper. On insère un ensemble des règles dans ces groupe et rattache ensuite ces groupe à une des prinpales 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.
Comme nous avons regrouper 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