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

Sommaire

Configurer le pare-feu Iptables

Introduction

Iptables est une interface en ligne de commande permettant de configurer Netfilter.
IPtables est un des meilleurs pare-feu 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.

Connaître la version installée de Iptables

# La première chose à faire est de vérifier la version de Iptables :
/sbin/iptables -V
# Sur GNU/Linux Mint Tessa :
iptables v1.6.1

Arrêter démarrer redémarrer Iptables

sudo service iptables stop
sudo service iptables start
sudo service iptables restart

Mise à jour de Iptables 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

La syntaxe de Iptables

# 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.)
OUPUT (En sortie.)
# Les actions à entreprendre :
ACCEPT (Accepter le paquet.)
DROP (Le jeter.)
QUEUE
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)
Lancer les commandes avec sudo iptables ou sudo /sbin/iptables.

Lister les règles en place

Utiliser une des commandes suivantes pour lister les règles en place.
# Affiche les règles proprement.
sudo iptables -S
# Affiche les règles et des informations.
sudo iptables -L
# Affiche les règles et des informations plus complètes.
sudo iptables -L -v

Sauvegarder les règles existantes

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

Supprimer une règle spécifique

iptables -D ....... Copier l'intégralité de la règle ....... Par exemple INPUT .......

Appliquer les règles au démarrage du serveur en activant le service iptables-persistent

Après avoir vérifié que nos règles fonctionnent comme prévu, nous pouvons rendre nos règles de pare-feu persistantes.
sudo apt-get install iptables-persistent
Nos règles peuvent être appliquées au démarrage du serveur en activant le service "iptables-persistent".
sudo service iptables-persistent start

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

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

Configurer Iptables sur un serveur distant

Vider les tables pour supprimer toutes les règles existantes

# Avant de vider les règles, il est toujours judicieux de réaffirmer que les règles par défaut dans une table vide sont de tout accepter afin de maintenir la connexion actuelle.
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
# Vider les tables pour supprimer toutes les règles. Le pare-feu sera alors complètement ouvert.
sudo iptables -F
Restreindre le pare-feu par la suite en fonction des besoins.
# Vider uniquement les règles de la rubrique INPUT.
sudo iptables -F INPUT
# Vider uniquement les règles personnelles.
iptables -t filter -X

Ne pas casser les connexions établies

###
# Ne pas casser les connexions établies pour ne pas se retrouver bloqué en cas de règles trop restrictives !
###
# Permettre à une connexion ouverte de recevoir du trafic en entrée.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Permettre à une connexion ouverte de recevoir du trafic en sortie.
# -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack ! --ctstate INVALID -j ACCEPT

# Utiliser une règle avec le module state si le module conntrack n'est pas mis à disposition :
# -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Interdire les connexions entrantes et sortantes

# Les trois commandes suivantes sont radicales et de ce fait dangereuses !
# Ajouter les règles qui permettent de ne pas couper les connexions établies !
# En cas de mauvaise configuration la connexion avec le serveur distant pourrait être coupée immédiatement !
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# En cas de mauvaise configuration il sera impossible d'accéder au serveur distant !
# Il est indispensable de toujours conserver le premier terminal ouvert connecté au serveur !
# Un ensemble de règles complémentaires doivent être ajoutées pour accepter la consultation des services web et la connexion au service SSH pour toujours être en capacité d'administrer le serveur !
# Une fois les règles mises en place ajoutées, il est indispensable de tester la connexion au serveur SSH depuis un deuxième terminal pour s'assurer que le serveur distant est toujours bien accessible !
# Alors seulement le premier terminal pourra être fermé.

Créer un script de règles pour protéger un serveur distant avec Iptables

Créer le fichier qui va contenir les règles Iptables

# Créer le fichier "iptables.firewall.rules" pour ajouter l'ensemble de la règle proposée par défaut.
sudo nano $HOME/iptables.firewall.rules

La règle personnalisée

# Début de la règle.
*filter

###
# Autoriser le loopback : Le serveur ne doit pas avoir de soucis à communiquer avec lui-même au niveau des services internes.
###
-A INPUT -i lo -j ACCEPT
# La sortie pour le loopback ne semble pas nécessaire.
# -A OUTPUT -o lo -j ACCEPT

###
# Ne pas casser les connexions établies pour ne pas se retrouver bloqué en cas de règles trop restrictives !
###
# Permettre à une connexion ouverte de recevoir du trafic en entrée.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Permettre à une connexion ouverte de recevoir du trafic en sortie.
# -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack ! --ctstate INVALID -j ACCEPT

###
# Ajouter les services autorisés à se connecter dans Iptables.
# La règle est toujours la même. Il faut adapter le port et éventuellement le protocole TCP par UDP en fonction de la configuration souhaitée.
###
#
# Autoriser le port SSH par défaut.
# Cette règle est à conserver sauf en cas de configuration du Port Knocking.
# Vérifier l'interface du serveur avant de mettre la règle en place, ou, tenter avec une valeur par défaut en ne la spécifiant pas ?
# -A INPUT -p tcp --dport 22 -j ACCEPT
# Il est conseillé de laisser cache.ovh.net pour permettre à OVH d'intervenir sur le serveur.
# Si vous fermez le port 22 pour les techniciens ils ne pourront pas intervenir.
-A INPUT -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
#
# Si un serveur DNS est installé, par défaut debian ne semble pas en avoir besoin :
-A INPUT -p tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp --dport 53 -j ACCEPT
#
# Si un serveur FTP est installé :
-A INPUT -p tcp --dport 20:21 -j ACCEPT
-A OUTPUT -p tcp --dport 20:21 -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é :
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp --dport 443 -j ACCEPT
#
# Si un serveur Samba est installé :
# Vérifier si il faut une règle INPUT et vérifier la règle OUTPUT :
# -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns
#
# Si OpenVPN Server qui tournerait sur le port 913 en UDP est installé :
# -A INPUT -p udp --dport 913 -j ACCEPT
#
# Si un serveur webmin est installé, il fonctionne en localhost, on y accède en export display, inutile de l'ouvrir :
# -A INPUT -p tcp --dport 1000 -j ACCEPT
# -A OUTPUT -p tcp --dport 1000 -j ACCEPT
#
# Si l'outil de monitoring Monit est utilisé, privilégier le transfert de port depuis la configuration de Monit vers le port proxy 8080 pour ne pas avoir à ouvrir le port 1337.
# Autoriser le port 1337. Le port dépend de la configuration de Monit. Il fonctionne en localhost
# -A INPUT -p tcp --dport 1337 -j ACCEPT
#
# Si un serveur de base de données MariaDB est installé, autoriser le trafic en interne pour localhost, ce qui a été fait plus haut.
# Ne pas ouvrir le port 3306 sauf pour faire communiquer des serveurs en interne.
# -A INPUT -p tcp --dport 3306 -j ACCEPT
# -A OUTPUT -p tcp --dport 3306 -j ACCEPT
#
# Si le serveur de partage d'écran Teamviewer est installé :
# C'est le port 5938 TCP et UDP qui sera utilisé, puis, le port 443 ou 80 en dernier recours.
# Il semblerait qu'il soit inutile d'ouvrir les ports, puisque le serveur va effectuer sa demande de connexion vers l'extérieur. La connexion devrait alors s'établir.
# Préférer Anydesk et identifier les ports pour anydesk.
# -A INPUT -p tcp --dport 5938 -j ACCEPT
# -A INPUT -p udp --dport 5938 -j ACCEPT
#
# Si SickRage est installé, autoriser le trafic en interne pour localhost, ce qui a été fait plus haut. Ne pas ouvrir le port 8081. Je n'utilise pas SickRage, tester en situation :
# -A INPUT -p tcp --dport 8081 -j ACCEPT
#
# Si la synchronisation avec DropBox est installée :
# DropBox utilise le port 17500 TCP et UDP pour la synchronisation réseau par défaut.
# Il utilise également les ports TCP 17600 et TCP 17603 pour le bouton Web «Ouvrir».
# Il semblerait qu'il soit inutile d'ouvrir les ports, puisque le serveur va effectuer sa demande de connexion vers l'extérieur. La connexion devrait alors s'établir.
# -A INPUT -p tcp --dport 17500 -j ACCEPT
# -A INPUT -p udp --dport 17500 -j ACCEPT
# -A INPUT -p tcp --dport 17600 -j ACCEPT
# -A INPUT -p tcp --dport 17603 -j ACCEPT

###
# Règles complémentaires pour optimiser le serveur.
###
# 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

# Limiter à 2 demandes de connexion par seconde pour une IP sur le protocole SSH.
# Vérifier si --dport est cohérent ou si il ne faut pas plutôt utiliser sport.
# -A INPUT -p tcp --syn --dport ssh -m connlimit --connlimit-above 2 -j DROP
# Autoriser uniquement 3 connexions en SSH sur un intervalle de 120 secondes (2 minutes).
-A INPUT -p tcp --dport ssh -m state --state NEW -m recent --update --seconds 120 --hitcount 3 -j DROP

# Limiter le nombre de connexions entrantes par minute à 100 et définit une rafale limite de 200.
-A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

# Bloquer ICMP :
# On DROP les requêtes entrantes et sortantes pour ICMP :
# La machine ne répondra plus aux requêtes PING.
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A OUTPUT -p icmp --icmp-type echo-reply -j DROP

# Autoriser ICMP pour OVH et le monitoring :
# Si toutes les requêtes PING sont bloquées, même celles d'OVH, le bon état de marche du serveur ne sera plus surveillé et si il tombe en panne OVH n'en sera pas avertis.
# Autoriser au moins les adresses suivantes de OVH a PING : 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
# Laisser passer l'adresse IP du serveur distant de la façon suivante :
# L'adresse IP de votre serveur, pour exemple, 213.186.57.143 doit laisser passer :
# 213.186.57.249 si vous êtes sur un serveur HG. (Règle temporaire)
# 213.186.57.250 pour le serveur SLA.
# 213.186.57.251 pour le serveur mrtg pour pouvoir bénéficier de RTM.
#
# Adresses à autoriser d'après la documentation OVH : https://docs.ovh.com/gb/en/cloud/dedicated/monitoring-ip-ovh/
# Mise en application : https://community.centminmod.com/threads/ovh-icmp-ping-whitelist-for-csf-firewall.11427/
#
# -A INPUT -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
# -A INPUT -p icmp --source proxy.ovh.net -j ACCEPT
# -A INPUT -p icmp --source proxy.p19.ovh.net -j ACCEPT
# -A INPUT -p icmp --source proxy.rbx.ovh.net -j ACCEPT
# -A INPUT -p icmp --source proxy.sbg.ovh.net -j ACCEPT
# -A INPUT -p icmp --source proxy.bhs.ovh.net -j ACCEPT
# -A INPUT -p icmp --source ping.ovh.net -j ACCEPT
# -A INPUT -p icmp --source 151.80.231.244 -j ACCEPT # Monitoring
# -A INPUT -p icmp --source 151.80.231.245 -j ACCEPT # Monitoring
# -A INPUT -p icmp --source 151.80.231.246 -j ACCEPT # Monitoring
# -A INPUT -p icmp --source 151.80.231.247 -j ACCEPT # Monitoring
# -A INPUT -p icmp --source 37.187.231.251 -j ACCEPT # Monitoring
# -A INPUT -p icmp --source a2.ovh.net -j ACCEPT
# -A INPUT -p icmp --source 92.222.184.0/24 -j ACCEPT
# -A INPUT -p icmp --source 92.222.185.0/24 -j ACCEPT
# -A INPUT -p icmp --source 92.222.186.0/24 -j ACCEPT
# -A INPUT -p icmp --source 167.114.37.0/24 -j ACCEPT
# -A INPUT -p tcp --source 192.168.0.0/16 -j ACCEPT
# -A INPUT -p udp --source 192.168.0.0/16 -j ACCEPT
# -A INPUT -p icmp --source DEBUT_ADRESSE_IP_SERVEUR.251 -j ACCEPT # SLA server
# -A INPUT -p icmp --source DEBUT_ADRESSE_IP_SERVEUR.250 -j ACCEPT # DEBUT_ADRESSE_IP_SERVEUR = aaa.bbb.ccc according to the previous rule
# -A INPUT -p icmp --source DEBUT_ADRESSE_IP_SERVEUR.249 -j ACCEPT # temporary, only for HG server
# -A OUTPUT -p udp --dport 6100:6200 -j ACCEPT # OVH RTM
#
# Vérifier les paquets ICMP bloqués depuis le fichier de journalisation /var/log/messages :
# grep -i 'ICMP_IN Blocked' /var/log/messages| tail -5| awk '{print $1,$2,$3,$5,$6,$7,$8,$9,$12,$13,$19,$20}'; date
# Vérifier les informations des adresses IP bloquées pour s'assurer que ce n'est pas un service de OVH :
# curl ipinfo.io/92.222.185.1

# Accepter le Multicast :
# Ce système est plus efficace que l'unicast pour diffuser des contenus simultanément vers une large audience. (Audio, Vidéo.)
-A INPUT -m pkttype --pkt-type multicast -j ACCEPT

# DROP des scans XMAS et NULL :
# Vérifier la nécessite.
-A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# DROP silencieusement les paquets broadcastés.
# Vérifier la nécessite.
-A INPUT -m pkttype --pkt-type broadcast -j DROP

###
# LOG
###
# On log les paquets en entrée.
-A INPUT -j LOG
# On log les paquets forward.
-A FORWARD -j LOG

# Fermer tous les ports pour les connexions entrantes.
# REJECT les paquets est plus propre mais DROP est plus sécurisé !
# Avec DROP, si un paquet arrive et n'est pas accepté, on l'efface. Le client attendra de son côté une réponse en vain, jusqu'au timeout.
# Avec REJECT, si un paquet non sollicité arrive, on renvoie au client une erreur et il n'attend plus car il a une réponse négative.
# En cas d'envoi de paquets à répétition sur un mauvais port, avec DROP le serveur ne traitera pas les requêtes, alors qu'avec REJECT le serveur prendra le temps de répondre.
# -A INPUT -j DROP
# Interdire toutes connexions entrantes et sortantes. -> Vérifier à l'usage !
-P INPUT -j DROP
-P FORWARD -j DROP
-P OUTPUT -j DROP

COMMIT
# Fin de la règle.

Restaurer une règle

# Cette méthode d'intégration écrase toutes les règles iptables existantes :
sudo iptables-restore < $HOME/iptables.firewall.rules
# Vérifier que les nouvelles règles soient bien prises en compte :
sudo iptables -L

Intégrer des règles complémentaires

# Recharger les règles complémentaires comme par exemple celle pour bloquer les adresses qui tentent de Brute Force SSHD.
# Voir plus bas : Bloquer plusieurs adresses IP dans un fichier de liste noire.

Description des commandes et exemples de règles Iptables

Bloquer une adresse IP avec Iptables

Bloquer ou débloquer une seule adresse IP avec Iptables

# Bloquer directement une adresse IP avec Iptables.
sudo iptables -A INPUT -s 11.22.33.44 -j DROP
# Lister les adresses IP bannies.
sudo 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, indiquer le numéro de la ligne de la règle à supprimer.
sudo iptables -D INPUT numero-de-la-regle
sudo iptables -D INPUT 7
# La règle peut également être supprimée si elle est saisie entièrement :
sudo iptables -D "La totalité de la règle"
# Débloquer 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

Autoriser uniquement son adresse IP et une adresse IP de secours

La configuration sur une adresse IP spécifique n'est pas adaptée en cas d'adresse IP dynamique.
Attention à ne pas se retrouver bloqué par le serveur.

Bloquer un domaine

host -t a www.facebook.com

Quand utiliser dport ou sport

# Quand utiliser dport ou sport :
# --sport est l'abréviation de --source-port
# --dport est l'abréviation de --destination-port
# Ici on suppose que l'on voudrait bloquer les requêtes HTTP. Il faut bloquer le port 80 sur la chaîne sortante pour bloquer toutes les requêtes HTTP sortantes.
sudo iptables -A OUTPUT -p tcp --dport 80 -j DROP

Fonctionnement de la numérotation des règles Iptables

Obtenir l'affichage des règles avec un numéro de ligne. Les chaînes habituelles INPUT OUTPUT FORWARD sont affichées, ainsi que les autres chaînes.
sudo iptables -L --line-numbers
# Supprimer la règle numéro 3 :
sudo iptables -D Nom_de_la_chaîne numéro_de_ligne
# Ajouter une règle entre la première et la deuxième :
sudo iptables -I Nom_de_la_chaîne 2 "La suite de la règle"

Restriction sur les connexions sortantes

La gestion du trafic sortant permet notamment d'améliorer la sécurité dans le cas ou :
- on installe soit-même un paquet qui contient un malware.
- quelqu'un installe un trojan sur le serveur.
# Un exemple qui n'a pas été mis en pratique. Faire plus de recherches pour voir à l'usage.
/sbin/iptables --new-chain apache_user
/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
# Allow apache user to connec to our smtp server
/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
# Allow apache user to connec to api server for spam validation
/sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.62 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.61 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.89 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.88 --dport 80 -j RETURN
# Drop everything for apache outgoing connection
/sbin/iptables --append apache_user -j REJECT

ICMP

# Autoriser ICMP :
# sudo iptables -A INPUT -p icmp -j ACCEPT
# sudo iptables -A OUTPUT -p icmp -j ACCEPT
# Autoriser les PING entrant :
# sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

# Bloquer ICMP :
# Première méthode pour refuser la réponse aux PING :
# sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
# Deuxième méthode pour refuser la réponse aux PING :
# sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
# On DROP les requêtes entrantes et sortantes pour ICMP :
# La machine ne répondra plus aux requêtes PING.
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
Connaître les paramètres en ligne de commande :
sudo /sbin/sudo iptables -p icmp -h
Connaître les paramètres et les RFC associées :
Internet Control Message Protocol (ICMP) Parameters : https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml

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

Limiter le nombre de connexions simultanées établies à partir d’une adresse IP unique sur un port donné.
Seulement 4, 5, 10 connexions par client sont autorisées pour des ports et services différents.
sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 4 -j REJECT
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j REJECT
sudo iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 10 -j REJECT

Quelques services a protéger avec Iptables

ftp / sftp
phpmyadmin
ssh
webmin

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

Notes OVH - Firewall

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
/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/ :
#!/bin/sh
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 à Iptables

Autres paquets pour assister à la configuration du Firewall

firehol, firewalld, fwbuilder

Netfilter

Shoreline Firewall

Le pare-feu "Shoreline Firewall", plus communément appelé "Shorewall", est un outil pour configurer plus facilement Netfilter.
Ok-ko.png Source : https://doc.ubuntu-fr.org/shorewall
Ok-ko.png Debian / Ubuntu Linux: Install and Configure Shoreline Firewall (Shorewall) : https://www.cyberciti.biz/faq/debian-ubuntu-linux-shorewall-firewall-configuration/

Configurer Netfilter avec UFW

UFW est un outil de configuration simplifié en ligne de commande de Netfilter qui apporte une alternative à l'outil iptables.
UFW devrait à terme permettre une configuration automatique du pare-feu lors de l'installation de programmes qui en ont besoins.
Il existe une interface graphique pour UFW, GUFW.
Ok-ko.png Documentation : https://doc.ubuntu-fr.org/ufw
Ok-ko.png How to setup a UFW firewall on Ubuntu 16.04 LTS server : https://www.cyberciti.biz/faq/howto-configure-setup-firewall-with-ufw-on-ubuntu-linux/

GUFW

# Installer GUFW.
# Réservé pour les stations de travail.
# Quand on installe GUFW, ça permet de gérer UFW (pré-installé par défaut) en interface graphique.
# Tous les ports sont fermés par défaut à l'installation, sauf ceux strictement nécessaires (Firefox, Thunderbird, ...).
sudo apt install gufw
# Connaître le statut de UFW :
sudo ufw status verbose
État : actif
Journalisation : on (low)
Par défaut : deny (incoming), allow (outgoing), disabled (routed)
Nouveaux profils : skip
# Le mode graphique nous permet de changer les droits par défaut pour 3 profils :
Dossier_personnel
Bureau
Public
Pourtant, on peut lire avec la commande précédente : "Nouveaux profils : skip".
A quoi cela correspond t'il ?
# Connaître l'état des règles en place :
Vérifier l'état de UFW : "sudo ufw status verbose"
Lister toutes les règles de UFW : "sudo ufw show raw"
# Si on fait un UFW enable on risque de tout bloquer si on est néophyte :
Activer UFW : "sudo ufw enable"
Le système le plus sécurisé est celui dont sa connexion à Internet est isolée.
Virtualiser un système avec VirtualBox par exemple.
Ok-ko.png Site officiel : http://gufw.org

Ipset

# Installer ipset :
sudo apt install ipset
# Consulter le manuel
http://ipset.netfilter.org/ipset.man.html
# Créer une liste pour le rejet :
ipset create port_scanners hash:ip family inet hashsize 32768 maxelem 65536 timeout 600
ipset create scanned_ports hash:ip,port family inet hashsize 32768 maxelem 65536 timeout 60
# Ajouter les règles iptables suivantes :
iptables -A INPUT -m state --state INVALID -j REJECT
iptables -A INPUT -m state --state NEW -m set ! --match-set scanned_ports src,dst -m hashlimit --hashlimit-above 1/hour --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name portscan --hashlimit-htable-expire 10000 -j SET --add-set port_scanners src --exist
iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -j REJECT
iptables -A INPUT -m state --state NEW -j SET --add-set scanned_ports src,dst
Nous stockons les ports analysés dans scanned_ports et nous ne comptons les nouveaux ports analysés dans notre règle hashlimit.
Si un scanner envoie des paquets vers 5 ports différents avec hashlimit-burst 5 cela signifie que c'est probablement un scanner. Nous l'ajoutons donc à l'ensemble port_scanners.
Le délai d'expiration de port_scanners correspond au temps de blocage des scanners (10 minutes dans cet exemple).
Il commencera à compter à partir du début (voir --exist) jusqu'à ce que l'attaquant arrête l'analyse pendant 10 secondes (voir --hashlimit-htable-expire 10000).
Noter que quelqu'un peut bloquer n'importe quelle adresse IP en faisant simplement du scan basé sur une usurpation d'identité.
Ne pas définir de ce fait un délai de ban trop long.
Conclusion :
La méthode semble intéressante mais je n'ai pas réussi à m'exclure du scann lors de mes tests en local.
Attention : C'est une adresse IP distante qui doit être interrogée. Ici la boucle local est autorisée dans les règles de pare-feu. 
# Je supprime les ajouts effectués avec ipset :
ipset list
ipset x port_scanners -exist
ipset x scanned_ports
ipset list
# Je supprime les règles iptables :
iptables -D INPUT -m state --state INVALID -j REJECT
iptables -D INPUT -m state --state NEW -m set ! --match-set scanned_ports src,dst -m hashlimit --hashlimit-above 1/hour --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name portscan --hashlimit-htable-expire 10000 -j SET --add-set port_scanners src --exist
iptables -D INPUT -m state --state NEW -m set --match-set port_scanners src -j REJECT
iptables -D INPUT -m state --state NEW -j SET --add-set scanned_ports src,dst

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

Le futur de Iptables

Linux remplacerait dans l'avenir iptables par nftables.
La technologie eBPF semble aussi très prometteuse.

Bibliographie

Ok.png Iptables : https://doc.ubuntu-fr.org/iptables
# Ressources en français :
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://olivieraj.free.fr/fr/linux/information/firewall/
Ko.png https://inetdoc.net/guides/iptables-tutorial/
Ko.png http://lea-linux.org/documentations/Iptables
Ko.png https://doc.ubuntu-fr.org/iptables
Ko.png ban.leshebergeurs.org/iptables.php
Ko.png http://irp.nain-t.net/doku.php
# Ressources en anglais :
Ko.png https://netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html
Ko.png https://www.thegeekstuff.com/2011/06/iptables-rules-examples/
Ko.png https://help.ubuntu.com/community/IptablesHowTo
Ko.png https://netfilter.org/documentation/
# 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

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

Pare-feu et partage de connexion Internet

Ok-ko.png Source : http://formation-debian.via.ecp.fr/firewall.html

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 - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - 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.
Consulter le miroir du wiki depuis Planet Hoster : Le miroir du wiki version du 12 Juillet 2019.