Magazine Internet

Installation d’un serveur dédié : 3ème partie – la sécurité

Publié le 03 avril 2008 par Starkhay

Après l’installation de l’O.S. de notre machine, d’Apache et de MySQL, il convient de s’intéresser avant tout à la sécurisation du serveur. Laisser un serveur sans s’être préoccupé de sa sécurité, c’est comme jeter un agneau dans la fosse aux lions. Nous allons dans un premier temps installer un Firewall grâce à IPTABLES et ensuite nous nous occuperons de calmer ceux qui tentent des attaques en Bruteforce avec Fail2ban.

Le Firewall du serveur IPTABLES

IPTABLES est généralement un logiciel déjà installé avec les distributions ayant un noyau Linux récent, c’est à dire à partir du noyau 2.4. Il va nous permettre d’établir des règles de filtrage. Nous avons besoin de procéder à la création de 2 fichiers, manipulation facilement réalisable avec Winscp à travers l’explorateur de fichiers.

Le premier fichier à créer est /etc/network/if-pre-up.d/iptables-start qui contiendra la mise en place des règles. Le 2ème fichier est /etc/network/if-post-down.d/iptables-stop qui permettra d’arrêter le filtrage.

Iptables-start

#!/bin/bash
# Arret de fail2ban
#/etc/init.d/fail2ban stop
#echo Arret de Fail2ban : [OK]
echo Mise en place des regles de filtrage...
# Configuration de base
# Reinitialisation des tables actuelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage : [OK]
# Autoriser les connexions SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
echo - Autoriser SSH : [OK]
# Interdire toute connexion entrante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion entrante : [OK]
# Interdire toute connexion sortante
iptables -t filter -P OUTPUT DROP
echo - Interdire toute connexion sortante : [OK]
# Configuration specifique
# Autoriser les requetes DNS, FTP, HTTP, NTP (pour les mises a jour)
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
echo - Autoriser les requetes DNS, FTP, HTTP, NTP : [OK]
# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo - Autoriser loopback : [OK]
# Autoriser ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo - Autoriser ping : [OK]
# HTTP
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
echo - Autoriser serveur Apache : [OK]
# FTP
modprobe ip_conntrack_ftp
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo - Autoriser serveur FTP : [OK]
# Mail
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
echo - Autoriser serveur Mail : [OK]
# Steamcast
iptables -t filter -A INPUT -p tcp --dport 8000 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8001 -j ACCEPT
echo - Autoriser serveur ShoutCast : [OK]
# Protection de quelques types d'attaque
# Syn-Flood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
echo - Limiter le Syn-Flood : [OK]
# Spoofing
iptables -N SPOOFED
iptables -A SPOOFED -s 127.0.0.0/8 -j DROP
iptables -A SPOOFED -s 169.254.0.0/12 -j DROP
iptables -A SPOOFED -s 172.16.0.0/12 -j DROP
iptables -A SPOOFED -s 192.168.0.0/16 -j DROP
iptables -A SPOOFED -s 10.0.0.0/8 -j DROP
echo - Bloquer le Spoofing : [OK]
# Lancement de fail2ban
#/etc/init.d/fail2ban start
#echo Lancement de fail2ban : [OK]
#echo Firewall mis en place !

Vous avez ici quelques exemples de règles de filtrage. Je vous conseille de supprimer ce qui ne vous sert pas et de rajouter vos besoins particuliers. Par exemple le port d’écoute pour le SSH peut être modifié. De manière générale, la syntaxe est :

iptables -t filter -A sensdeconnexion -p protocole –dport numerodeport -j action
avec pour :sensdeconnexion : INPUT ou OUTPUT
protocole : tcp, udp icmp ….
numerodeport : celui que vous désirez mettre ou que votre logiciel utilise
action : DROP ou ACCEPT

Vous remarquerez également la présence de quelques lignes, commentées pour l’instant, concernant le logiciel fail2ban. Elles sont déjà incluses, histoire de gagner du temps car c’est ce que nous verrons juste après.

Iptables-stop

#!/bin/sh
# Reinitialisation des regles de filtrage
iptables -F
iptables -t nat -F
# Remise de toutes les politiques par defaut a ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo Reinitialisation du filtrage : [OK]

Comme vous pouvez le constater, celui-ci est beaucoup plus simple.

Mise en route du filtrage

Nous allons rendre nos deux fichiers exécutables avec les commandes suivantes :
chmod 755 /etc/network/if-pre-up.d/iptables-start
chmod 755 /etc/network/if-post-down.d/iptables-stop

Puis démarrons le Firewall avec
/etc/init.d/networking restart

En temps normal, le 1er fichier s’exécute au moment du montage des interfaces réseau, le 2ème à son inverse, lors du démontage.

Pour visualiser les tables de filtrage effective, une commande en mode console (sous Putty) suffit :
iptables -v –L

Pour en savoir un peu plus sur IPTABLES, vous pouvez consulter cette adresse.

Le Daemon Fail2ban

Face aux attaques en bruteforce il est nécessaire de se protéger. Outre une protection pour interdire l’entrée, il est très utile de faire comprendre à ces petits importuns de passer leur chemin. C’est ce que fait ce petit logiciel, au bon d’un certain nombre de tentatives de connexions infructueuses, il bannit l’adresse Ip pour un temps prédéfini. Les assaillants passent alors leur chemin au bout de quelques tentatives infructueuses sans réponse.

L’installation est des plus simple :
apt-get install fail2ban

Pour vérifier son bon fonctionnement :
/etc/init.d/fail2ban status

Le daemon est déjà en action et son paramètrage est déjà suffisant. Si, cependant, vous souhaitez visualiser et/ou modifier son paramètrage, cela se passe dans /etc/fail2ban.conf.

Basiquement, trois options retiendront votre attention :

  • maxfailures qui indique au bout de combien d’échecs, l’adresse IP est bannie
  • bantime , la durée du bannissement
  • ignoreip pour spécifier des IPs à ne jamais bannir

Bien d’autres paramètres sont disponibles, je vous invite à vous rendre sur le site officiel de Fail2ban pour en découvrir plus sur ces options et ce logiciel.

Vous voici dorénavant avec une protection assez efficace contre la plupart des attaques. Que cela ne vous dispense pas de faire les mises à jour de votre OS et/ou de vos scripts dès la découverte de failles. Maintenant, nous allons pouvoir nous occuper de nos sites en commençant par la gestion des noms de domaine…lors d’un prochain billet.

Si vous avez des questions ou des soucis avec ce qui est présenté ici, je vous répondrai bien volontiers.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Starkhay 2 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte