Serveur dédié : sécurisation des services avec iptables et fail2ban

icon security firewall Serveur dédié : sécurisation des services avec iptables et fail2banNotre serveur est maintenant opérationnel et sert les pages du site. Il faut toutefois penser à le sécuriser un peu contre les attaques les plus communes.

Nous utilisons donc iptables – un firewall qui filtre activement nos ports utilisés et qui bloque les autres – et fail2ban qui scanne vos fichiers logs à la recherche de requêtes étranges pour bloquer les intrus à la porte lorsqu’ils deviennent trop insistants.

Installation et configuration d’iptables

Si ce n’est déjà fait, on installe iptables :

aptitude install iptables

Les règles peuvent porter sur 3 chaînes :

  • INPUT en entrée,
  • FORWARD dans le cas d’un routage réseau,
  • OUPUT en sortie.

et les actions à entreprendre sont ACCEPT (accepter le paquet), DROP (le jeter), QUEUE et RETURN. Les arguments utilisés sont :

  • i : interface d’entrée (input)
  • o : 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)

Pour lister les règles en place, on entre la commande :

iptables --list

Créons un petit script pour accueillir nos règles de filtrage :

nano /etc/init.d/firewall

avec ces règles :

#!/bin/sh
 
# 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
 
# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Autoriser le loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
 
# ICMP (ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
 
# SSH 
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
 
# DNS (bind)
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
 
# APACHE : HTTP + HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
 
# Mail SMTP:25
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
 
# Mail POP3:110
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
 
# Mail IMAP:143
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
 
# Mail POP3S:995
iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT
 
# WEBMIN
iptables -t filter -A INPUT -p tcp --dport 10000 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 10000 -m state --state ESTABLISHED -j ACCEPT

et on rend notre fichier exécutable :

chmod +x /etc/init.d/firewall

On lance notre fichier :

sh /etc/init.d/firewall

Il vous faut maintenant tester vos services et vérifier que tout fonctionne : ouvrez une nouvelle session SSH, vérifiez que vous avez toujours accès à Webmin, qu’Apache est fonctionnel… c’est important. Si quelque chose ne tourne pas rond, rebootez le serveur et toutes les règles seront oubliées.

Si tout fonctionne comme prévu, on ajoute le script au démarrage :

update-rc.d firewall defaults

Pour le retirer, si besoin :

update-rc.d -f firewall remove

Pour activez le filtrage, il suffit de redémarrer le serveur ou d’exécuter le script directement :

sh /etc/init.d/firewall

Installation et configuration de fail2ban

On installe fail2ban :

aptitude install fail2ban

et on crée notre propre fichier de configuration :

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

avant de l’éditer :

nano /etc/fail2ban/jail.local

Dans la section [DEFAULT], configurez ainsi :

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1 VOTREIP
 
# "bantime" is the number of seconds that a host is banned.
bantime  = 600
 
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600
 
# "maxretry" is the number of failures before a host get banned.
maxretry = 3

Pensez à mettre votre IP dans ignoreip pour éviter le filtrage. Ensuite, il suffit de parcourir le fichier et d’activer les filtres relatifs aux services activés sur le serveur en passant le paramètre enabled à “true” :

enabled  = true

Une fois les modifications effectuées, sauvegardez le fichier et redémarrez fail2ban pour prendre en compte les modifications :

/etc/init.d/fail2ban restart

Voilà, c’est déjà un bon début mais ce n’est pas fini. Dans un tutoriel ultérieur, nous verrons comment sécuriser les services réseaux.


quick-menu

Laisser un commentaire


Si vous possédez un compte, connectez-vous.

Quicktags: THINK. Then write. No SMS.

Me tenir informé(e) des futurs commentaires. Ou abonnez-vous sans commenter.