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_NIC=eth1 # 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 ################## # REGLES LOCALES # ################## # OUVERTURE DU PORT 22 SUR LE FIREWALL DEPUIS LE RESEAU LOCAL iptables -A INPUT -i ${LOCAL_NIC} -p tcp --dport 22 -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 # ################################# # Bien respecter l'ordre des regles # OUVERTURE DU PORT 22 VERS LA MACHINE 10.0.0.1 iptables -A FORWARD -i ${INTERNET_NIC} -o ${LOCAL_NIC} -p tcp --dport 22 -d 10.0.0.1 -j ACCEPT # TRANSLATION DE LOCALHOST:2222 vers 10.0.0.1:22 iptables -t nat -A PREROUTING -i ${INTERNET_NIC} -p tcp --dport 2222 -j DNAT --to 10.0.0.1:22 # MASQUAGE DES ADRESSES IP PRIVE POUR SORTIR SUR LE RESEAU INTERNET iptables -t nat -A POSTROUTING -o ${INTERNET_NIC} -j MASQUERADE # ACCEPTE L'OUVERTURE DE PORT DYNAMIQUE POUR LES CONNEXIONS ETABLIES iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # HOTES DU RESEAU LOCAL AUTORISES A SORTIR SUR INTERNET iptables -A FORWARD -i ${LOCAL_NIC} -o ${INTERNET_NIC} -s 10.0.0.1 -j ACCEPT