Outils pour utilisateurs

Outils du site


informatique:linux:iptables

Ceci est une ancienne révision du document !


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 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 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
iptables -D OUTPUT -j MY-FILTER-01
informatique/linux/iptables.1441279212.txt.gz · Dernière modification: 2018/09/06 18:59 (modification externe)