===== IPTABLES ===== ==== Quelques commandes ==== 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 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 ==== 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'' ==== Faire du routage ==== 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 ==== 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