Utilisation Iptables

De EjnTricks

Ce paragraphe référence quelques commandes utiles sur Iptables.

Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Firewall-icon.png Restriction

Viewer icon.png Visualisation

Après une mise en place des règles, il est possible de les visualiser à l'aide de l'option -L, ou --list. Le résultat présente les règles mises en place avec une résolutions des adresse IP quand cela est possible.

#sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  58.17.163.8          anywhere
fail2ban-ssh  tcp  --  anywhere             anywhere            multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
DROP       all  --  58.218.199.250       anywhere
DROP       all  --  213.79.125.20        anywhere
DROP       all  --  121.37.63.154        anywhere
DROP       all  --  220.178.63.27        anywhere
DROP       all  --  pr2base.seas.gwu.edu  anywhere
DROP       all  --  80.91.181.43         anywhere
DROP       all  --  NSG-Static-130.243.71.182.airtel.in  anywhere
DROP       all  --  219.140.165.85       anywhere
DROP       all  --  68.233.249.181       anywhere
DROP       all  --  202.103.30.24        anywhere
DROP       all  --  221.232.137.202      anywhere
RETURN     all  --  anywhere             anywhere

Dans le cadre de cette exécution, les adresses IP sont résolues sur les DNS. Or cela ralentit considérable l'exécution. Il est donc possible de présenter les adresses au format numérique, et cela devient immédiat, en ajoutant l'argument -n.

#sudo iptables --list -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  58.17.163.8          0.0.0.0/0
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
DROP       all  --  58.218.199.250       0.0.0.0/0
DROP       all  --  213.79.125.20        0.0.0.0/0
DROP       all  --  121.37.63.154        0.0.0.0/0
DROP       all  --  220.178.63.27        0.0.0.0/0
DROP       all  --  128.164.156.75       0.0.0.0/0
DROP       all  --  80.91.181.43         0.0.0.0/0
DROP       all  --  182.71.243.130       0.0.0.0/0
DROP       all  --  219.140.165.85       0.0.0.0/0
DROP       all  --  68.233.249.181       0.0.0.0/0
DROP       all  --  202.103.30.24        0.0.0.0/0
DROP       all  --  221.232.137.202      0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Suite à une mise à jour du serveur, l'outil Fail2ban n'utilise plus la directive DROP mais REJECT. Le listing devient:

#sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  58.17.163.8          anywhere
fail2ban-ssh  tcp  --  anywhere             anywhere            multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
REJECT     all  --  58.218.199.250       anywhere
REJECT     all  --  213.79.125.20        anywhere
REJECT     all  --  121.37.63.154        anywhere
REJECT     all  --  220.178.63.27        anywhere
REJECT     all  --  pr2base.seas.gwu.edu  anywhere
REJECT     all  --  80.91.181.43         anywhere
REJECT     all  --  NSG-Static-130.243.71.182.airtel.in  anywhere
REJECT     all  --  219.140.165.85       anywhere
REJECT     all  --  68.233.249.181       anywhere
REJECT     all  --  202.103.30.24        anywhere
REJECT     all  --  221.232.137.202      anywhere
RETURN     all  --  anywhere             anywhere

Ou:

#sudo iptables --list -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  58.17.163.8          0.0.0.0/0
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0


L'argument --line-numbers est très utile également, surtout quand on veut supprimer une règle. Il permet d'afficher le numéro de ligne.

#sudo iptables --list -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 22

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain fail2ban-ssh (1 references)
num  target     prot opt source               destination
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Add-icon.png Ajout d'une restriction

Afin de bannir les adresses IP identifiées dans les logs, la commande iptables est associée aux arguments suivants:

Paramètre Utilisation
-A Mode ajout.
INPUT Cible dans la table où est ajoutée la règle.

Ici, la restriction s'applique aux connexions entrantes.

-s IP Permet d'indiquer l'adresse IP à laquelle s'applique la règle.
-j REJECT Les connexions seront refusées.

Pour les deux adresses 221.232.137.202 et 58.17.163.8 décrites dans le paragraphe précédent, l'interdiction d'accès est placé dans la "Chain" INPUT par la commande suivante:

#sudo iptables -A INPUT -s 221.232.137.202 -j REJECT
#sudo iptables -A INPUT -s 58.17.163.8 -j REJECT

La table devient donc celle-ci:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  221.232.137.202      anywhere
REJECT     all  --  58.17.163.8          anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Delete-icon.png Suppression d'une restriction

Afin de supprimer une restriction, il faut utiliser l'argument -D et de spécifier la chaîne dans laquelle elle se trouve. Il est plus simple d'utiliser le numéro de la restriction.

#sudo iptables -D myCustomChain 3
Paramètre Utilisation
-D Mode suppression.
myCustomChain Nom de la "Chain" contenant la restriction.
3 Suppression de la restriction en ligne 3 dans la "Chain" myCustomChain.


Multiples-icon.png Organisation des restrictions

Comme cela est réalisé par le script Fail2ban, une bonne pratique consiste à organiser les "Chains" en fonction des ports surveillés. Ainsi, l'administration des règles est facilitée. L'objectif de ce paragraphe est de mettre en place une nouvelle "Chain" custom-http pour les ports http et https.

Add-icon.png Ajout d'une nouvelle "Chain"

La première étape consiste en la création de la nouvelle "Chain" avec le nom custom-http.

#sudo iptables -N custom-http
Paramètre Utilisation
-N Mode création.
custom-http Nom de la nouvelle "Chain".

La définition de Iptables devient:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain custom-http (0 references)
target     prot opt source               destination

Icon ACL.png Droit d'accès sur nouvelle "Chain"

Par défaut, toutes les requêtes sont autorisées pour ce nouveau paramétrage. Les restrictions seront injectées au fur et à mesure des besoins. Il faut donc injecter l'autorisation.

#sudo iptables -A custom-http -j RETURN
Paramètre Utilisation
-A Mode ajout.
custom-http Cible dans la table où est ajoutée la règle.
-j RETURN Les connexions sont autorisées par défaut.

La définition de Iptables devient:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain custom-http (0 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Process-Icon.png Activation nouvelle "Chain"

Enfin, il faut ajouter la nouvelle "Chain" comme règle du trafic.

#sudo iptables -I INPUT -p tcp -m multiport --dports 80,443 -j custom-http
Paramètre Utilisation
-I Mode insertion.
INPUT Cible dans la table où est ajoutée la règle.
-p tcp S'applique au connexion tcp.
-m multiport Permet de spécifier que la règle s'applique sur plusieurs ports.
--dports 80,443 Spécifie les ports auquel s'applique la règle, ici ce sera http et https.
-j custom-http La règle est redirigée vers la "Chain" custom-http précédemment créée.

La définition de Iptables devient:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
custom-http  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 80,443

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain custom-http (0 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Firewall-icon.png Ajout restriction dans la nouvelle "Chain"

Ainsi pour configurer une nouvelle restriction sur le port 80 ou 443, il suffit d'ajouter une règle dans la "Chain" custom-http.

#sudo iptables -I custom-http 1 -s 58.218.199.250 -j DROP


Icon ACL.png Sécurisation applications

Dans le cadre de cette étude, de nombreux outils sont mis en place sur la machine. Ce paragraphe permet de référencer les différentes configuration de Iptables pour ceux-ci. Malgré le fait que la machine soit derrière une routeur qui ne redirige que quelques ports, ces configurations sont mises en place pour augmenter la sécurité.

Logo Cups.png Cups Logo Mysql.png Mysql PostgreSql.png PostgreSql Logo OpenLDAP.png OpenLDAP
Logo tomcat.gif Tomcat Logo Jenkins.png Jenkins Logo Sonar.png SonarQube Logo nexus.png Nexus
Gitea.png Gitea Fail2ban.png Fail2rest