Archive

Articles taggués ‘iptables’

Utiliser iptables pour filtrer l’accès à votre serveur HTTP

Le contexte

Voici le contexte dans lequel nous nous trouvons dans le cadre de cet article :

  • un modem routeur qui effectue du NAT (Network Address Translation) de l’Internet vers un serveur HTTP du réseau local (le traffic entrant sur le port 80 est redirigé vers le port 80 du serveur du réseau local) ;
  • un serveur Linux (Fedora Core 9) hébergeant de multiples services dont un serveur HTTP (Apache 2.2.9) ;
  • sur ce même serveur, nous trouvons également le services iptables que nous allons utiliser pour mettre en place notre filtrage.

L’objectif

L’objectif de cet article est d’utiliser iptables de notre serveur pour limiter l’accès au service HTTP, en se basant sur les adresses IP transportées par les paquets réseau entrants.

Modifier les règles iptables

Connectez-vous en mode console (via un client SSH par exemple) à votre serveur pour y modifier les règles iptables.

Les règles iptables sont réparties en chaînes :

  • INPUT : règles agissant sur les paquets réseau entrants sur le serveur ;
  • FORWARD : règles agissant sur les paquets réseau passant d’une interface réseau à une autre (d’un serveur à un autre par exemple) ;
  • OUTPUT : règles agissant sur les paquets réseau sortants du serveur.

Dans notre cas, nous allons créer plusieurs règles iptables au sein de la chaîne INPUT, puisqu’il s’agit de filtrer les paquets réseau entrants.

Sauvegarder

Avant d’aller plus loin, nous allons avant tout procéder à la sauvegarde des règles iptables existantes, on ne sait jamais…

Pour cela, utiliser la ligne de commande qui suit :

iptables-save > /etc/iptables-save

En cas de problème, pour restaurer, vous pourrez utiliser la commande suivante :

iptables-restore < /etc/iptables-save

Lister les règles courantes

Pour visualiser la liste des règles iptables en place, utiliser la commande :

iptables -L

Cette commande vous permettra ainsi de visualiser les modifications apportées à vos règles iptables.

Ajouter les règles nécessaires au filtrage

Les règles iptables sont lues de haut en bas. Il faut donc insérer en haut de la liste des règles, nos nouvelles règles iptables afin qu’elles écrasent éventuellement celles qui ne nous conviennent plus.

Nous commençons par ajouter une règle iptables pour rejeter tous les accès HTTP à notre serveur (port 80) :

iptables -I INPUT -p tcp --dport 80 -j REJECT

L’option -I INPUT permet d’insérer la nouvelle règle en haut de la liste de la chaîne INPUT. L’option -p tcp permet de préciser le protocole et l’option –dport 80 indique le port de destination, dans notre cas, le port 80, celui qui correspond généralement au service HTTP. Enfin, la dernière option -j REJECT, indique le saut (ou l’action à accomplir si les conditions sont remplies) qui doit être fait. Dans notre cas, nous demandons le rejet. Nous aurions aussi pu indiquer DROP, mais il semble que REJECT soit plus propre…

Ensuite, nous ajoutons une règle iptables pour autoriser les machines du réseau local à se connecter à ce serveur HTTP :

iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 80 -j ACCEPT

L’option -s 192.168.0.0/24 permet d’indiquer la source concernée. Dans notre cas, nous indiquons toutes les machines du réseau local. Le masque /24, indique que seul la dernière partie de la plage IP est variable. On accepte donc les IP du genre : 192.168.0.1, 192.168.0.2, 192.168.0.3, etc., jusqu’à 192.168.0.254 (255 valeurs possibles en tout).

Pour terminer, vous pouvez ajouter une règle iptables pour chaque adresse IP que vous souhaitez autoriser en accès à notre serveur HTTP :

iptables -I INPUT -s XXX.XXX.XXX.XXX -p tcp --dport 80 -j ACCEPT

En effectuant :

iptables -L

Vous devriez voir apparaître vos nouvelles règles iptables en haut de la liste, au sein de la chaîne INPUT.

Vous pouvez sauvegarder vos règles iptables modifiées de cette façon :

iptables-save > /etc/iptables-save-updated

Mémoriser les nouvelles règles

La distribution Linux Fedora Core 9 donne la possibilité de mémoriser facilement (et définitivement) vos règles iptables modifiées :

service iptables save

Cette opération doit impérativement être faite pour que les règles iptables soient conservées, même après un reboot de votre serveur.

Redémarrer le service iptables

Pour prendre en compte immédiatement les nouvelles règles, redémarrez le service iptables :

service iptables restart