Configurer le pare-feu Iptables

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
Naviguer dans ce wiki : Accueil du wiki - Objectifs - Administrateur - Développeur - Intégrateur - Jeux - Marketing - Multimédia - Objets numériques - We make Hack
Consulter le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur     Consulter le Redmine : Accueil du Redmine

Configurer le pare-feu Iptables

Introduction

IPtables, associé à Netfilter, est un des meilleurs firewalls pour Linux, et certainement le plus répandu.
Iptables est un firewall très performant, installé sur tous les serveurs OVH.
L'objectif est d'ouvrir certains ports et fermer tout le reste.

Vérifier la version installée de Iptables

La première chose à faire est de vérifer la version d'Iptables :
$ /sbin/iptables -V
iptables v1.8.2 (nf_tables)

Exemple en cas de version trop ancienne, adapter le numéro de version pour une version actuelle :
$ cd /root
$ wget http://www.netfilter.org/files/iptables-1.2.9.tar.bz2
$ tar xvfj iptables-1.2.9.tar.bz2
$ cd iptables-1.2.9
$ make KERNEL_DIR=/usr/src/linux
$ make install KERNEL_DIR=/usr/src/linux
$ cd /sbin
$ mv iptables iptables.old
$ mv iptables-restore iptables-restore.old
$ mv iptables-save iptables-save.old
$ ln -s /usr/local/sbin/iptables iptables
$ ln -s /usr/local/sbin/iptables-restore iptables-restore
$ ln -s /usr/local/sbin/iptables-save iptables-save
$ /sbin/iptables -V
iptables v1.2.9

Lister les règles en place

Utiliser une des commandes suivantes pour lister les règles en place.
sudo iptables -L -v
sudo /sbin/iptables -L -v

Sauvegarder les règles existantes

# Toutes les règles écrites correctement pour Iptables peuvent être sauvegarder dans un fichier texte pour être réimportées par la suite.
sudo iptables-save

Quelques exemples de règles Iptables

# Attention !
# Les règles doivent absolument être adaptées à votre configuration réseau.
# Un mauvais choix peut entraîner une indisponibilité de votre serveur ou une perte de contrôle sur celui-ci avec le blocage de votre connexion SSH.
# Les règles portent sur 3 chaînes :
# INPUT (En entrée.), FORWARD (Dans le cas d'un routage réseau.) et OUPUT (En sortie.).
# Les actions à entreprendre sont ACCEPT (Accepter le paquet.), DROP (Le jeter.), QUEUE et RETURN.
# Arguments utilisés pour gérer les règles :
i : interface d'entrée (input)
i : interface de sortie (output)
t : table (par défaut filter contenant les chaînes INPUT, FORWARD, OUTPUT)
j : règle à appliquer (Jump)
A : ajoute la règle à la fin de la chaîne (Append)
I : insère la règle au début de la chaîne (Insert)
R : remplace une règle dans la chaîne (Replace)
D : efface une règle (Delete)
F : efface toutes les règles (Flush)
X : efface la chaîne
P : règle par défaut (Policy)
lo : localhost (ou 127.0.0.1, machine locale)
# Vider les tables actuelles.
iptables -t filter -F

# Vider les règles personnelles.
iptables -t filter -X

# Interdire toute connexion entrante et sortante.
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

Créer un script de règles sur mesure

# Ajouter cette règle iptables semble écraser les autres règles.
# Créer le fichier qui va contenir les règles iptables.
sudo nano $HOME/iptables.firewall.rules
# Ajouter les lignes suivantes :
# Débuter la règle :
*filter

# Les ports ouverts par défaut sur les serveurs OVH.
# Ces ports sont ceux ouverts par défaut mais des logiciels démarrés peuvent en ouvrir d'autres.
# 21 - ftp (Le serveur FTP, à conserver selon utilisation.)
# 22 - ssh (L'accés au shell crypté, à conserver !)
# 23 - telnet (L'accés au shell non crypté, à conserver en dépannage.)
# 25 - smtp (Le serveur de courrier sortant, à conserver dans la plupart des cas.)
# 53 - dns (Le serveur DNS, à conserver dans la plupart des cas.)
# 80 - http (Le serveur web, à conserver.)
# 110 - pop3 (L'accés aux mails, à conserver dans la plupart des cas.)
# 143 - imap (L'accés aux mails, à conserver si vous n'utilisez pas pop3.)
# 443 - https (L'accés au web crypté, à conserver selon votre utilisation.)
# 1000 - webmin (Panneau de configuration du serveur, à conserver si vous vous en servez.)

# Autoriser le port SSH par défaut.
# Ici l'interface a été spécifier. A suivre !
### -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Ne pas casser les connexions établies.
# Permet notamment de ne pas se retrouver bloqué suite à une règle trop restrictive.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser la mise à jour des paquets. (Vérifier la définition.)
-A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Si un serveur de mail avec SMTP, POP3 et IMAP est installé :
# Mail SMTP:25
-A INPUT -p tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp --dport 25 -j ACCEPT
# Mail POP3:110
-A INPUT -p tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp --dport 110 -j ACCEPT
# Mail IMAP:143
-A INPUT -p tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp --dport 143 -j ACCEPT
# Mail POP3S:995
-A INPUT -p tcp --dport 995 -j ACCEPT
-A OUTPUT -p tcp --dport 995 -j ACCEPT
 
# Si un serveur web est installé :
# HTTP + HTTPS Out
-A OUTPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 443 -j ACCEPT
# HTTP + HTTPS In
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# -A INPUT -p tcp --dport 8443 -j ACCEPT

# Si un serveur FTP est installé :
# FTP Out
-A OUTPUT -p tcp --dport 20:21 -j ACCEPT
# FTP In
-A INPUT -p tcp --dport 20:21 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Faire face au flood :
-A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
-A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
-A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

# Autoriser loopback
# iptables -t filter -A INPUT -i lo -j ACCEPT
# iptables -t filter -A OUTPUT -o lo -j ACCEPT

# Autoriser ICMP (Ping)
# iptables -t filter -A INPUT -p icmp -j ACCEPT
# iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# Si l'outil de monitoring Monit est utilisé.
# Autoriser le port 1337. Le port dépend de la configuration de Monit.
# -A INPUT -p tcp --dport 1337 -j ACCEPT

# Terminer la règle.
COMMIT
# Activer la règle.
# Cette méthode d'intégration écrase toutes les règles existantes.
sudo iptables-restore < $HOME/iptables.firewall.rules
# Vérifier que les nouvelles règles sont prises en compte avec sudo iptables -L
# Recharger alors les règles complémentaires comme par exemple celle pour bloquer les adresses qui tentent de Brute Force SSHD.
# Voir plus bas : 2.2 Bloquer plusieurs adresses IP dans un fichier de liste noire.

Bloquer une adresse IP avec Iptables

Bloquer ou débloquer une seule adresse IP avec Iptables

# Bloquer directement une adresse IP avec Iptables.
iptables -A INPUT -s 11.22.33.44 -j DROP
# Lister les adresses IP bannies.
iptables -L INPUT -v -n | grep DROP
# Les adresses IP bannies sont classées dans un ordre numéroté, ligne par ligne.
# Pour supprimer une règle il suffit d'indiquer le numéro de la ligne de la règle à supprimer.
iptables -D INPUT numero-de-la-regle
iptables -D INPUT 7
# Débloquer directement une adresse IP avec Iptables.
sudo iptables -D INPUT -s xx.xx.xx.xx/32 -j DROP

Bloquer plusieurs adresses IP dans un fichier de liste noire

# Lister les "Invalid User" suite à une identification par clé publique erronée, quand la passe phrase est mal renseignée.
# ATTENTION ! Mon adresse IP peut se retrouver dans les réponses !
# Placer toute la liste directement dans Iptables et dans hosts.deny :
# for i in $(journalctl --since "7 days ago" --until "1 minutes ago" |grep sshd |grep "Invalid user" |awk '{print $10}' |sort -u |xargs ) ;do iptables -t filter -I INPUT -p tcp --dport ssh -s "$i" -j DROP echo -e "sshd: $i" >>/etc/hosts.deny  ;done
# Cette solution est très efficace mais pas forcément pratique à gérer pour un débutant si l'on souhaite garder une bonne compréhension de ce qui a été bloqué, quand, et pourquoi.
# Ajouter les adresses IP retournées par le script dans le fichier ploutos.ips qui va être utilisé pour bloquer les adresses IP. :
sudo journalctl --since "7 days ago" --until "1 minutes ago" |grep sshd |grep "Invalid user" |awk '{print $10}' |sort -u |xargs > /$HOME/ploutos.ips
# Vérifier si son adresse IP est présente dans la liste des adresses nuisibles :
# nano ploutos.ips
# CTRL w pour rechercher son adresse IP personnelle pour vérifier si elle est présente.
# Consulter les résultats de la requête :
# La requête affiche de nombreuses adresses IP qui tentent de se connecter automatiquement au serveur.
journalctl --since "7 days ago" --until "1 minutes ago" |grep sshd |grep "Invalid user" |awk '{print $10}' |sort -u |xargs
101.207.113.73 101.255.52.171 101.89.92.180 101.96.113.54 103.111.86.242 103.16.202.174 103.202.132.175 103.207.2.204 103.242.13.70 103.253.112.18 103.36.30.154 103.50.254.211 103.52.16.35 103.65.195.107 103.91.54.100 104.211.214.36 104.236.125.73 104.236.142.89 104.236.42.113 104.248.136.207 104.248.156.114 104.248.175.98 104.248.18.26 104.250.105.214 104.7.206.3 106.12.100.179 106.12.10.119 106.12.127.211 106.12.128.24 106.12.14.189 106.12.192.131 106.12.196.28 106.12.196.48 106.12.202.180 106.12.205.132 106.12.211.134 106.12.216.170 106.13.45.241 106.13.54.79 106.13.76.209 106.51.127.214 106.51.66.214 107.170.63.221 108.255.193.163 109.161.57.125 109.205.116.237 109.237.111.51 110.185.184.149 110.35.173.104 110.36.217.42 110.45.158.88 111.125.67.180 111.172.101.209 111.177.18.202 111.230.209.21 111.231.142.17 111.231.54.248 113.108.96.203 113.141.70.199 113.204.194.84 114.118.91.64 114.242.34.93 114.251.196.3 114.67.22.130 114.94.48.61 115.132.113.151 115.159.111.193 115.159.114.249 115.159.201.60 115.159.30.108 115.248.178.245 115.47.146.216 115.68.74.184 115.79.38.170 115.88.201.58 116.203.127.113 116.90.81.14 117.0.35.153 117.102.68.188 117.135.113.30 117.146.60.115 117.239.236.162 117.247.186.101 117.50.34.236 118.126.108.129 118.163.149.163 118.24.101.182 118.24.108.205 118.24.121.65 118.24.122.36 118.24.125.75 118.24.151.195 118.24.153.230 118.24.173.104 118.24.33.65 118.25.3.34 118.25.96.30 118.36.108.202 118.89.60.84 118.97.188.105 119.27.170.144 119.29.151.104 119.29.152.124 119.29.186.101 119.29.247.225 119.29.87.153 119.29.98.253 121.12.151.250 121.166.254.65 121.176.5.221 121.227.153.126 1.214.89.168 122.114.15.40 122.114.158.196 122.114.234.37 122.152.202.144 122.152.221.72 122.152.227.201 122.152.50.6 122.199.152.114 122.42.151.245 1.22.91.179 123.125.196.210 123.206.219.211 123.206.81.59 123.207.86.118 123.59.142.109 123.59.63.140 124.173.71.245 124.204.41.17 124.43.17.69 125.19.153.156 125.74.53.229 125.99.46.46 128.199.67.84 128.77.28.199 129.150.86.200 129.158.74.141 129.204.209.240 129.213.63.120 132.232.104.39 132.232.54.102 132.248.181.75 1.32.50.44 134.175.120.102 134.175.28.156 137.116.202.126 137.135.95.64 137.74.176.208 137.74.233.229 138.197.162.28 138.197.166.233 138.68.52.165 139.198.123.39 139.199.155.62 139.199.166.104 13.92.139.189 139.217.224.144 139.59.181.7 139.59.3.151 139.59.74.157 139.59.77.167 139.59.96.172 140.143.228.75 14.116.251.199 14.116.254.127 142.44.211.229 142.44.216.180 14.29.116.243 142.93.122.3 142.93.160.178 142.93.164.215 142.93.218.84 142.93.245.81 142.93.253.120 142.93.31.198 142.93.47.125 14.41.77.225 144.217.165.224 145.239.6.160 145.239.91.88 146.185.149.245 148.255.137.104 148.70.11.98 148.70.23.121 148.70.77.22 148.72.65.10 149.202.51.131 149.202.65.173 149.56.129.68 150.107.148.155 151.80.140.166 151.80.144.255 151.80.61.93 153.37.97.183 154.120.242.70 154.124.83.92 155.94.146.111 158.69.124.9 159.203.101.80 159.65.111.89 159.65.135.55 159.65.142.100 159.65.155.215 159.65.242.16 159.89.197.135 159.89.199.216 159.89.205.213 159.89.54.241 162.241.183.17 162.243.10.64 164.132.114.155 165.227.11.173 165.227.165.98 165.227.171.60 165.227.25.45 166.111.7.104 167.99.152.180 167.99.4.112 170.210.68.163 1.71.129.108 172.254.107.118 172.81.238.222 173.183.120.250 173.23.187.5 173.249.0.119 174.61.104.176 175.25.50.3 176.106.65.238 176.140.169.6 176.140.81.35 176.32.35.55 176.58.134.244 177.1.103.140 177.135.100.210 177.191.249.167 177.221.167.35 177.47.115.67 177.73.140.62 177.98.185.3 178.128.158.153 178.128.195.6 178.128.217.40 178.128.218.255 178.128.242.233 178.128.62.134 178.128.76.6 178.128.86.127 178.33.233.54 178.62.204.176 178.62.239.228 178.89.186.226 179.185.79.83 179.33.137.117 180.124.50.119 180.165.38.137 180.167.112.162 180.76.108.110 180.76.134.150 180.76.238.70 180.76.54.167 181.166.64.141 181.28.191.54 181.31.155.191 181.49.219.114 181.52.249.26 182.162.96.185 182.16.75.58 182.23.64.177 182.48.93.226 182.61.37.35 183.111.227.201 183.157.174.184 183.195.114.70 184.82.11.65 185.184.25.130 185.207.232.232 185.238.137.93 185.87.121.19 185.88.196.30 186.151.170.222 186.170.28.46 186.31.116.78 186.84.172.62 187.122.102.4 187.167.186.134 187.174.123.121 187.18.187.46 187.36.105.211 187.7.215.154 188.118.245.53 188.131.140.115 188.131.170.119 188.165.250.228 188.165.44.214 188.166.216.84 188.166.226.209 188.166.229.205 188.166.47.181 188.226.149.166 188.254.0.160 189.41.108.14 189.45.37.254 189.6.45.130 189.7.121.28 190.114.47.94 190.144.135.118 190.147.159.33 190.151.19.3 190.217.71.15 192.144.155.63 192.144.174.50 192.144.203.121 192.210.137.125 192.99.216.228 193.112.161.178 193.112.90.84 193.112.97.157 193.192.193.117 194.182.86.133 195.22.112.21 195.222.163.54 195.25.27.89 196.204.234.29 197.96.136.91 198.100.146.43 198.199.105.235 198.245.50.81 198.245.60.56 198.27.67.173 198.27.67.225 200.127.33.2 200.201.187.178 200.207.220.128 200.48.27.147 200.87.199.130 201.16.247.140 201.16.247.149 201.163.91.164 201.17.24.195 201.48.54.81 201.62.87.4 202.106.93.46 202.120.62.138 202.150.217.187 202.155.234.28 202.195.225.7 202.28.16.8 202.51.110.214 202.69.66.130 202.88.237.110 202.96.50.229 203.121.116.11 203.223.189.214 206.189.239.156 206.19.238.177 206.81.10.230 209.97.177.213 210.14.77.102 210.186.108.211 211.21.129.4 211.253.10.96 212.159.18.107 212.237.52.4 212.34.244.62 212.64.24.89 213.190.194.227 213.26.2.162 216.144.251.86 216.7.159.250 217.182.252.63 218.199.68.132 218.236.21.146 218.2.44.42 218.60.136.204 219.65.95.214 220.123.184.123 220.77.29.179 221.126.225.184 221.131.68.210 221.166.248.46 221.225.81.216 221.8.63.26 222.143.242.69 222.91.160.69 23.95.113.42 23.96.117.243 27.254.206.238 31.27.21.137 31.46.16.95 34.85.42.198 35.137.156.46 35.187.239.64 35.200.154.33 35.201.183.224 35.204.47.208 35.220.211.69 35.224.199.230 36.67.135.42 36.89.85.33 37.114.171.142 37.139.0.226 37.153.196.186 37.187.195.209 37.187.62.31 37.211.48.51 37.252.185.51 37.252.190.224 37.59.119.206 40.118.87.26 40.121.164.112 40.121.194.247 41.67.236.40 41.75.113.170 41.76.149.212 43.229.12.86 45.160.171.149 45.40.204.113 45.55.20.128 45.55.222.162 45.55.35.40 46.101.142.99 46.101.148.248 46.101.192.190 46.101.204.20 46.101.230.131 46.101.72.145 46.105.112.107 46.105.117.4 46.128.34.234 46.148.192.41 46.218.116.106 47.22.80.98 47.40.20.138 49.247.206.212 49.248.209.206 51.144.119.108 51.15.37.113 51.254.123.127 51.254.143.166 51.254.39.23 51.255.173.160 51.255.194.249 51.255.35.41 51.38.38.56 51.38.51.113 51.68.122.216 51.68.189.69 51.77.141.158 51.77.228.36 5.196.179.75 5.196.225.45 5.196.70.107 5.196.88.110 52.177.171.38 52.80.231.16 5.39.88.4 54.36.165.49 54.37.138.135 54.37.158.40 54.37.19.206 58.59.2.26 58.64.144.109 59.100.246.170 59.124.228.54 59.125.247.227 59.42.10.173 59.63.225.99 60.12.172.21 60.31.197.218 61.0.172.182 61.150.84.238 61.49.68.18 61.51.111.65 61.93.201.198 62.138.1.244 62.234.128.155 62.234.133.230 62.234.8.213 62.94.18.186 64.76.6.126 65.36.95.243 66.155.42.113 66.70.130.148 66.70.130.151 67.171.17.78 68.183.124.72 68.183.68.143 68.183.89.80 69.90.223.232 71.226.208.185 71.38.162.72 72.203.15.181 73.55.47.103 74.95.83.153 76.107.235.74 77.221.25.147 77.232.128.87 77.43.115.103 77.70.96.167 77.82.91.124 78.94.238.49 80.211.151.73 80.229.253.212 80.52.199.93 80.87.23.52 80.92.226.126 81.149.211.134 81.174.227.27 81.218.92.106 82.131.209.179 82.150.82.146 82.213.223.114 83.18.146.226 83.54.131.57 84.91.128.47 85.113.39.134 86.105.55.160 87.110.153.32 87.135.175.69 88.19.183.233 89.36.216.142 89.74.137.165 91.199.144.23 92.170.37.229 92.222.66.234 92.222.70.130 93.23.6.66 93.39.254.140 93.85.82.88 94.177.224.127 94.23.204.136 94.23.254.125 94.23.55.228 94.23.62.187 95.85.60.197 95.90.114.198
# Iptables ne garde pas les adresses IP en mémoire en cas de redémarrage.
# Créer le script qui rechargera au redémarrage du serveur les adresses IP qui ont été bannies après avoir tentées de se connecter à SSHD.
cd /etc/init.d/
sudo touch ploutos.sh
sudo chmod 0755 /etc/init.d/ploutos.sh
sudo chown root:root /etc/init.d/ploutos.sh
# Prendre en compte ce script à chaque redémarrage :
sudo update-rc.d ploutos.sh defaults
# Pour le retirer :
sudo update-rc.d -f ploutos.sh remove
# On peut également rendre ses règles persistantes sous GNU/Debian avec iptable-persistent qui va sauvegarder toute la configuration actuelle.
http://romain.therrat.fr/iptables-rendre-ses-regles-persistantes-sous-gnudebian-avec-iptable-persistent/
# Ajouter le code suivant dans le fichier /etc/init.d/ploutos.sh :
# Ce script va intégrer la liste dans Iptables qui signalera dans votre fichier de log /var/log/messages le passage des utilisateurs listés dans ploutos.ips.
# Pour ne pas suivre les logs, supprimer la ligne : $IPT -A $SPAMLIST -s $ipblock -j LOG –log-prefix « $SPAMDROPMSG »
#!/bin/bash
# Simple iptables IP/subnet block script
# -------------------------------------------------------------------------
# Copyright (c) 2004 nixCraft project
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ----------------------------------------------------------------------
IPT=/sbin/iptables
SPAMLIST="sshdbruteforce"
SPAMDROPMSG="SSHD BRUTE FORCE"
BADIPS=$(egrep -v -e "^#|^$" /$HOME/ploutos.ips)

# Créer une nouvelle liste Iptables.
$IPT -N $SPAMLIST

for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
$IPT -A $SPAMLIST -s $ipblock -j DROP
done

$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST
# Rendre le script exécutable :
sudo chmod +x /etc/init.d/ploutos.sh
# Lancer le script :
sudo sh ploutos.sh
# Vérifier que les adresses IP aient bien été bloquées.
sudo iptables -L -v
# Vérifier si cette règle "sshdbruteforce" est chargée après un redémarrage :
sudo iptables -t filter -N sshdbruteforce
iptables v1.8.2 (nf_tables): Chain already exists
# Chercher une seule adresse IP dans cette liste
sudo iptables --list | grep 92.62.131.113
# Retournera l'adresse IP qui a été blacklistée.
# Retirer toutes les règles ajoutées dans Iptables avec la chaîne "sshdbruteforce" qui a été créée par le script /etc/init.d/ploutos.sh qui a chargé les adresses IP à bloquer depuis /$HOME/ploutos.ips :
# Sauvegarder la règle Iptables, retirer les éléments de notre règle "sshdbruteforce", réimporter la règle Iptables mise à jour.
# Sauvegarder les règles existantes.
sudo iptables-save > /tmp/iptables.txt
# Supprimer les lignes qui contiennent sshdbruteforce.
sudo sed -i '/sshdbruteforce/d' /tmp/iptables.txt
# Restaurer la règle Iptables.
sudo iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt
# Vérifier le résultat.
sudo iptables -L -v
# Remettre à jour les adresses IP à bloquer par le Firewall dans le fichier ploutos.ips.
sudo journalctl --since "7 days ago" --until "1 minutes ago" |grep sshd |grep "Invalid user" |awk '{print $10}' |sort -u |xargs > /$HOME/ploutos.ips
# Réimporter les adresses IP à bloquer depuis le fichier ploutos.ips dans le Firewall.
sudo sh /etc/init.d/ploutos.sh

Script pour bloquer débloquer et lister les adresses IP bloquées

# Créer le fichier du script.
nano banip
# Ajouter le code suivant dans le fichier du script banip.
#!/bin/bash
# Nom du script : Bloquer/Débloquer une adresse IP avec Iptables.

# La fonction d'aide.
function help {
	echo " Syntax: $0 -[L][u] IP"
	echo " Les paramètres viennent en premier. IP est une adresse IP."
	echo " Ne pas ajouter de paramètre pour bloquer une adresse IP."
	echo " Le paramètre -L permet de lister les adresses IP bloquées."
	echo " Le paramètre -u permet de débloquer une adresse IP (Ou plusieurs?)."
	exit 1
}

# Si aucun argument n'est passé, appeler la fonction help.
if [ -z "$1" ]; then
	help
fi

# Définition des variables.
ACTION="-A"
txtred=$(tput setaf 1)
txtyel=$(tput setaf 3)
txtcya=$(tput setaf 6)
txtrst=$(tput sgr0)

while getopts "huL" OPTION
do
	case $OPTION in
		h)
			help
			;;
		u)
			ACTION="-D"
			shift $(($OPTIND - 1))
			;;
		L)
			ACTION="-L"
			shift $(($OPTIND - 1))
			;;
		\?)
			help
			;;
	esac
done

if [ $ACTION == "-L" ]; then
	echo $txtcya"List of Banned IPs:"$txtrst
	iptables -L INPUT -v -n | grep DROP
else
	# ban work loop
	for ZTARGET in "$@"
	do
		echo $txtcya"Applying action $txtred$ACTION$txtcya to $txtyel$ZTARGET"$txtrst
		iptables $ACTION INPUT -s $ZTARGET -j DROP
	done
fi
# Donner les droits d'exécution au fichier :
chmod +x banip
# Fonctionnement du script.
# Pour bannir une adresse IP, lancer le script suivi de l'adresse IP à bannir :
./banip x.x.x.x

# Appeler l'aide du script.
# L'argument -h lance l'aide du script. Il est aussi possible d'invoquer l'aide en ne passant aucun argument :
./banip
./banip -h

# L'argument -L affiche la liste des adresses IP bloquées :
./banip -L

# L'argument -u pour unban débloque une adresse IP donnée :
./banip -u x.x.x.x

Limiter les demandes sur le protocole SSH

# Limiter à 2 demandes de connexion par seconde pour une IP sur le protocole SSH :
iptables -A INPUT -p tcp --syn --dport ssh -m connlimit --connlimit-above 2 -j DROP
# Dans cet exemple nous autorisons uniquement 2 connexions en SSH sur un intervalle de 300 secondes (5 minutes).
sudo iptables -A INPUT -p tcp --dport ssh -m state --state NEW -m recent --update --seconds 300 --hitcount 2 -j DROP

Autoriser uniquement son ip + ip de secours sur les ports utilisés

.

Charger la règle personnalisée après le redémarrage du serveur

Source : https://askubuntu.com/questions/91413/reloading-iptables#243180

Faire face au flood

Bloquer l'inondation du réseau sur le port Apache avec IPtables

# Limiter le nombre de connexions entrantes par minute à 100 et définit une rafale limite sur 200.
# Vous pouvez modifier la limite et la rafale en fonction de vos besoins spécifiques.
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Limiter le nombre de connexions simultanées par adresse IP

Si vous ne voulez pas avoir trop de connexions simultanées établies à partir d’une adresse IP unique sur un port donné, vous pouvez utiliser la commande ci-dessous.
Seulement 7 connexions par client sont autorisées. Modifier le numéro de port pour configurer un service différent.
Le paramètre --connlimit-above peut être modifié pour correspondre à nos besoins.
sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 7 -j REJECT
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 2 -j REJECT
sudo iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 7 -j REJECT

Liste des services a protéger avec Iptables

ssh
ftp / sftp
webmin
phpmyadmin

Ouvrir un port dans Iptables

# Exemple pour Mysql et uniquement pour une ip d'un serveur prédéfini.
iptables -A INPUT -s IPserver -p tcp -m tcp --dport 3306 -j ACCEPT
# On vérifie la conf d’iptables
iptables -L
# Si tout est ok, on sauvegarde la modif
iptables-save > /etc/sysconfig/ipables

Exemple avec un VPS de chez OVH

Manager zone IP
Ip-localiser-firewall-ovh.jpg
Cliquer sur le rouage de droite de la ligne correspondant à l'IPv4 du VPS
Nouveau-firewall-ovh.jpg
Il ne reste plus qu'à bloquer le reste, vérifiez donc d'avoir bien rentré vos règles sinon vous allez bloquer votre serveur !) :
$ /sbin/iptables -A INPUT -i eth0 -j DROP
On a en fait deux choix ou niveau de cette règle. Soit on droppe les paquets, c'est-à-dire que si un paquet arrive et qu'il n'est pas accepté on l'efface. Le client attendra de son côté une réponse en vain, jusqu'au timeout. La deuxième solution est de rejeter les paquets (REJECT au lieu de DROP). Si un paquet non solicité arrive, on renvoie au client une erreur et il n'attend plus car il a une réponse négative.  Rejeter les paquets est plus propre mais les jeter est plus securisé. En effet, immaginons quelqu'un qui vous envoie des paquets à répétition sur un mauvais port, votre serveur ne les traîtera pas, alors qu'avec la regle reject, il prendra le temps de répondre.

Mettre à zéro votre firewall

Cette commande supprimera toutes les règles de la rubrique INPUT.
/sbin/iptables -F INPUT
Supprimer toutes les règles.
iptables -F


Si vous souhaitez ajouter une régle entre la première et la deuxième, tapez ceci :

$ /sbin/iptables -I INPUT 2 ... la suite de votre règle


Pour supprimer la règle n°3 tapez ceci :

$ /sbin/iptables -D INPUT 3


Pour bloquer totalement une IP :

$ /sbin/iptables -I INPUT 1 -s <IP> -j DROP


Le firewall est maintenant en action. Essayez de scanner votre serveur, vous ne verez que les ports 22 et 80 d'ouverts. Ne vous étonnez pas si le scan est très lent, c'est à cause de la régle DROP.


De manière générale OVH conseille de configurer les premières règles (1 à 17) pour autoriser du trafic. Par exemple en autorisant le protocole TCP sur le port de destination 80 si vous hébergez un site non sécurisé. Il faudra reprendre le même schéma pour autoriser le HTTPS, SSH, ... Ensuite, nous conseillons de bloquer le protocole IPv4 en règle 19 (afin de refuser tout ce qui n'est pas autoriser auparavant) et d'autoriser le protocole TCP en "Established" pour la règle 18 afin d'accepter tout retour, par exemple pour des mises à jour.


Pour un Serveur dédié

Si vous souhaitez bloquer le protocole ICMP (les requêtes ping), vous devez laisser au moins ping.ovh.net, proxy.p19.ovh.net, proxy.rbx.ovh.net, proxy.ovh.net, proxy-rbx2.ovh.net, proxy.sbg.ovh.net, proxy.bhs.ovh.net vous pinguer. Cela permet aux équipes d'OVH de verifier le bon état de votre serveur. Vous devez de plus laisser passer l'IP obtenue de la façon suivante : L'IP de votre serveur est de la forme aaa.bbb.ccc.ddd Vous devez laisser passer : aaa.bbb.ccc.250 Ex 213.186.57.143 doit laisser passer 213.186.57.250 pour le serveur SLA et 213.186.57.251 pour le serveur mrtg afin de pouvoir bénéficier de RTM.

Si vous êtes sur un serveur HG, laissez passer de plus l'IP aaa.bbb.ccc.249 (règle temporaire).

Si vous bloquez toutes les requêtes ping, même celles d'OVH, nous ne surveillerons plus le bon état de marche de votre serveur et s'il tombe nous n'en serons pas avertis. Pour autoriser le ping depuis nos serveurs, entrez les règles suivantes

/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy-rbx2.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.sbg.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.bhs.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.250 -j ACCEPT # IP = aaa.bbb.ccc obtenue selon la règle precedente /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.249 -j ACCEPT # temporaire, seulement pour serveurs HG /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.251 -j ACCEPT # IP pour system de monitoring


Au niveau de SSH, si vous souhaitez restreindre l'accés seulement depuis votre IP, il vous est conseillé de laisser aussi cache.ovh.net. En effet, en cas de problème sur votre machine, nous pourrons intervenir dessus et vous dépanner. Si vous fermez le port 22 pour les techniciens d'OVH, nous ne pourrons vous aider si votre machine est bloquée.

Pour autoriser le SSH depuis nos serveurs, entrez la règle suivante :

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT


Si vous avez un filer RAID, ne pas oublier d'autoriser les connexions NFS. Pour cela, nous pouvons être large en autorisant tout ce qui vient du réseau interne 192.168.0.0/16 :

/sbin/iptables -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT


Si vous avez une configuration en Cluster, il faut également autoriser le port 79 pour que OCO puisse communiquer avec le répartiteur de charge.

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT


Si votre serveur se trouve à Roubaix 3, il est nécessaire que vous récupériez votre serveur de monitoring : Vous trouverez alors un serveur ayant un nom du type sla-rbx3-2.ovh.net que vous devez ajouter aux exceptions de votre firewall. Le tcpdump doit être fait sur l'ip fixe :

tcpdump host ip.fixe.du.serveur | grep ICMP


Exemple de configuration complète Voici un exemple de script complet pour protéger votre serveur via iptables. Il est assez permissif dans le sens où la plupart des services présents sur votre machine sont accessibles, mais il peut servir de base pour votre propre configuration

/sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy-rbx2.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx2.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.250 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.251 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -j REJECT


Dans ces règles, il faut bien sûr remplacer xx.xx.xx.xx par l'adresse IP de la machine dont vous vous servez pour accéder à votre serveur en FTP et SSH.


Automatiser le firewall Une fois votre firewall parfaitement configuré, il ne vous reste plus qu'à créer un script qui se lancera à chaque démarrage de votre serveur. Voici un exemple à placer dans un fichier nommé par exemple "firewall" dans le répertoire /etc/init.d/ :

  1. !/bin/sh
  2. chkconfig: 3 21 91
  3. description: Firewall

IPT=/sbin/iptables

case "$1" in start) $IPT -F INPUT $IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy-rbx2.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.rbx2.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.251 -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source xxx.xxx.xxx.250 -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT $IPT -A INPUT -i eth0 -j REJECT exit 0

stop) $IPT -F INPUT exit 0

  • )

echo "Usage: /etc/init.d/firewall {start|stop}" exit 1

esac


Donnez-lui les droits 700 et tapez "/etc/init.d/firewall start" pour le démarrer et "/etc/init.d/firewall stop" pour l'arrêter. Pour le lancer automatiquement au démarrage :

$ /sbin/chkconfig --level 3 firewall on $ /sbin/chkconfig --level 06 firewall off


Vérifiez avant de mettre le script à chaque démarrage du serveur qu'il soit bon sinon votre serveur sera définitivement bloqué ! La communication entre le service RTM et votre serveur nécessite également que vous autorisez les connexions entrant sortant sur les ports UDP 6100 a 6200.

Source : guide.ovh.com/FireWall

Alternatives / Complément

Leopard Flower

Leopard Flower est un pare-feu dit "applicatif" qui "filtre" les applications demandant un accès réseau, LAN ou Internet.
Son rôle peut ainsi être comparé à celui que joue ZoneAlarm sous Windows.
Iptables s'apparente plus à un pare-feu matériel : il ne fait « que » filtrer les trames passant sur le réseau sans se préoccuper de l'application générant ces trames.
Un logiciel espion (spyware) peut donc se loger dans le système sans que l'on s'en aperçoive.
Source : https://doc.ubuntu-fr.org/lpfw

Autres paquets pour assister à la configuration du Firewall

firehol, firewalld, fwbuilder

Migrer un serveur web sans interruption

Ok-ko.png Migrer un serveur web sans interruption : https://korben.info/4-etapes-pour-migrer-un-serveur-web-sans-interruption.html

Veille

Linux remplaçait iptables par nftables.
La technologie eBPF semble aussi très prometteuse.

Bibliographie

Ok-ko.png Source : https://doc.ubuntu-fr.org/iptables
Ko.png Bloquer les attaques reçues sur les principaux protocoles (Mails, Web et FTP) : https://www.informatiweb-pro.net/admin-systeme/linux/18--debian-ubuntu-bloquer-les-attaques-recues-sur-les-principaux-protocoles-mails-web-et-ftp.html
Ko.png Configuration et sécurisation d’un serveur Linux Debian: Partie 2 : https://mespotesgeek.fr/fr/configuration-et-securisation-dun-serveur-linux-debian-partie-2/
Ko.png Sécurisation du serveur (SSH, firewall iptables, fail2ban...) : https://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html
Ko.png Source complémentaire : https://blog.infiniclick.fr/articles/tutoriel-installer-serveur-debian-wheezy.html#tuto18
Ko.png Les commandes iptables : www.admin-debian.com/securite/commandes-iptables/
Ko.png http://lea-linux.org/documentations/Iptables
Ko.png https://doc.ubuntu-fr.org/iptables
Ko.png ban.leshebergeurs.org/iptables.php
# Exemples de règles.
Ko.png "Vieux" Script de 2009 : https://bash.cyberciti.biz/firewall/linux-iptables-firewall-shell-script-for-standalone-server/
Ko.png Règles iptables contre les attaques DDOS : https://www.abyssproject.net/2014/06/regles-iptables-contre-les-attaques-ddos/
Ko.png https://www.geek17.com/fr/content/debian-9-stretch-securiser-votre-serveur-avec-le-firewall-iptables-32
Ko.png http://www.octetmalin.net/linux/scripts/iptables-demarrer-arret-redemarrage-start-stop-restart-pare-feu-firewall.php
Ko.png https://www.thegeekstuff.com/2011/06/iptables-rules-examples/

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Télécharger le sommaire au format PDF pour le consulter en étant déconnecté du réseau.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins (BTC) - Bitcoins Cash - Bitcoins Gold - Bitcore (BTX) - Blackcoins - Bytecoins - Clams - Dash - Monero - Dogecoins - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.
Miroir PlanetHoster du 11 Mars 2019.