Outils pour utilisateurs

Outils du site


informatique:linux:iptables

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
informatique/linux/iptables.txt · Dernière modification: 2018/09/06 19:10 (modification externe)