Table des matières
Iptables
Une des règles d'or en sécurité est: d'abord on ferme tout puis on ouvre les services un par un en n'autorisant que des IP identifiées.
C'est exactement ce que nous allons voir avec l'exemple du protocole SSH.
Firewall
Au niveau du pare-feu, on reste avec le classique Iptables. Il peut s'avérer compliqué et c'est même pourquoi ufw a été créé mais pour moi, iptables reste un incontournable.
SSH
Notre approche va être de créer une règle qui log les paquets qu'on lui envoie avant de les supprimer. On va autoriser seulement les IP qu'on souhaite autoriser à faire du SSH avec nous et le reste on l'envoie vers notre règle.
iptables -N SSH # rule name iptables -A SSH -j LOG --log-prefix "SSH DROP: " # log with prefix iptables -A SSH -j DROP # drop packets sent to this rule iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT # allow one IP iptables -A INPUT -p tcp -s 127.0.0.1 --dport 22 -j ACCEPT # allow localhost iptables -A INPUT -p tcp --dport 22 -j SSH # send everything else to the drop rule
On peut vérifier que la configuration de notre pare-feu est bien celle que nous voulons:
iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 1.2.3.4 anywhere tcp dpt:ssh ACCEPT tcp -- localhost anywhere tcp dpt:ssh SSH tcp -- anywhere anywhere tcp dpt:ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain SSH (1 references) target prot opt source destination LOG all -- anywhere anywhere LOG level warning prefix "SSH DROP: " DROP all -- anywhere anywhere
We can have a look to system logs and verify it is working well.
Regardons les logs du système pour avoir des traces de notre règle (si vous êtes sur un serveur publique, alors il n'y aura pas longtemps à attendre).
dmesg -T -w [Mon May 3 03:18:38 2021] SSH DROP: IN=eno1 OUT= MAC=ab:cd:ef:f1:85:82:1c:e6:c7:52:07:40:08:33 SRC=46.101.18.4 DST=x.x.x.x LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=26716 DF PROTO=TCP SPT=55360 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0
Configuration persistente
Une fois que tout nous plait et fonctionne comme prévu, rien de tel qu'un petit reboot du serveur. Et là stupéfaction, après le reboot notre règle a disparu. 8-0 Pourquoi ? Et bien par défaut notre règle personnalisée n'est pas rechargée après un reboot. Un paquet dédié à cet effet a été créé: iptables-persistent. Installez-le et le tour sera joué.
dpkg --list | grep iptables ii iptables 1.8.2-4 amd64 administration tools for packet filtering and NAT ii iptables-persistent 1.0.11+deb10u1 all boot-time loader for netfilter rules, iptables plugin