Le programme "geoip" qui s'interface directement avec iptables. Ce programme doit être compilé manuellement ou avec DKMS, ce qui peut parfois être complexe. De plus certains noyaux ne supportent pas cette méthode (les serveurs OVH par exemple).

   L'utilisation du programme "ipset" qui permet de créer des listes d'adresses réseau de grande taille (maxi 65536 entrées). Ipset est disponible à partir du noyau 2.6.32 (debian 7)

Récupération des listes de réseaux d'un pays!!!

Le site www.ipdeny.com permet de télécharger des listes gratuites. Remarquez les abréviations qui désignent les pays : "cn" pour la chine par exemple. Il est possible de télécharger directement une liste avec un commande wget, par exemple pour la chine :

wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone --no-check-certificate

Création d'une liste avec "ipset"

ipset flush maliste # RAZ total la liste "maliste" ipset create maliste hash:net # Création de la liste si elle n'existe pas encore for S in $(cat cn.zone) # Ajout des réseaux chinois do

 ipset add maliste $S

done for S in $(cat ru.zone) # Ajout des réseaux russes do

 ipset add maliste $S

done ipset add maliste 1.2.3.4/32 # Ajout d'une autre adresse IP dans la liste

Il est possible de voir le contenu d'un liste : ipset list maliste

Exemples d'utilisation d'une liste dans "iptables"

J'utilise directement les commandes iptables

Bloquer les pings de certains pays (ceux de la liste "maliste")

iptables -A INPUT -p icmp -m set --match-set maliste src -j DROP

Bloquer les pings de tous les pays sauf ceux de "maliste"

iptables -A INPUT -p icmp -m set ! --match-set maliste src -j DROP

Si votre serveur fait également du routage et du DNAT, utilisez FORWARD à la place de INPUT (dans les deux sens)

iptables -A FORWARD -p icmp -m set ! --match-set maliste src -j DROP

Si votre serveur fait également du routage et du DNAT, utilisez FORWARD à la place de INPUT (dans un seul sens)

iptables -A FORWARD -p icmp ! -s 192.168.222.0/24 -m set ! --match-set maliste src -j DROP

Comment lancer la protection au démarrage Le contenu de la table "maliste" est supprimé automatiquement en cas de redémarrage du serveur. Il faut donc la reconstruire avant d'utiliser iptables pour cela, j'utilise le fichier /etc/rc.local (à créer s'il n'existe pas) :

  1. RAZ ipset

ipset flush maliste

  1. Création de la liste

ipset create maliste hash:net for S in $(cat /opt/cn.zone) do

 ipset add maliste $S

done for S in $(cat /opt/ru.zone) do

 ipset add maliste $S

done

  1. RAZ filters

iptables -F iptables -X iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT

  1. RAZ nat

iptables -t nat -F iptables -t nat -X iptables -t nat -P INPUT ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT

  1. Règle(s) de Firewall

iptables -A INPUT -p icmp -m set --match-set maliste src -j DROP

Rappel

Ne pas oublier que les rêgles NAT d'iptables sont lancés avant les règles de filtrage du firewall. Il faut donc en tenir compte