Photographies panoramiques en Ariège

SERVEUR DEDIE – SECURITE

Aie… ça se complique un peu !

Libre mais seul au monde ! Voila ce qui vous qualifie avec votre serveur dédié !
Comme votre serveur est connecté à internet (tout comme votre machine personnelle à la maison) vous allez devoir travailler sur l’installation d’un firewall sur votre serveur dédié. Sous DEBIAN SQUEEZE le firewall se nomme IPTABLES et le système de bannissement des IP indésirables se nomme FAIL2BAN.

Dans un premier temps nous allons proposer quelques règles de sécurité de base puis nous aborderons le paramétrage de IPTABLES.

ALERTE LOGIN – ROOT

Vous pouvez éditer le fichier /root/.bashrc qui est exécuté au démarrage d’une session root pour envoyer un e-mail de notification. De cette façon, vous serez prévenu lorsqu’un login est effectué.

nano /root/.bashrc

Ajoutez la ligne (en modifiant l’adresse e-mail de destination) :

echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1` chamounet@free.fr

ATTAQUE PAR BRUTEFORCE

Une attaque par force brute, ou attaque par exhaustivité, est une méthode utilisée par les pirates pour découvrir le mot de passe .
Ce type d’attaque vise à générer un très grand nombre de mots de passe pour tester toutes les combinaisons possibles ! Le site du Zéro explique bien ce dispositif du « pauvre » en terme de hacking.

 

La première parade à ce dispositif est de générer un mot de passe spécifique visant à augmenter les combinaisons possibles ! Un des principes pour contrer ce type d’attaque est d’empêcher le hacker (script du hacker) de tenter de façon indéfinie dans le temps, les multiples combinaisons. Pour cela, le paramétrage du Firewall va nous permettre par exemple de bloquer les IP qui ont échoué à l’identification du serveur suite à 3 tentatives. l’IP sera bannie et pourra réessayer une connexion après par exemple 10 minutes d’attente. Tout ceci se paramètre à partir du Firewall IPTABLES et depuis FAIL2BAN.

exemple (Source Site du Zero)

Soit N le nombre de tentatives possibles en 1 an avec la protection
N = 10*60*24*365 = 5 256 000

Soit N' le nombre de tentatives possibles en 1 an sans la protection
N' = 100*60*60*24*365 = 3 153 600 000

Soit r le rapport de N' sur N
r = N' / N = 3 153 600 000 / 5 256 000 = 600

FIREWALL : IPTABLES et FAIL2BAN

IPtables est le  firewall pour Linux..

Pour commencer, testez la commande iptables -L

Globalement lorsque vous tapez iptables -L vous allez obtenir ceci :

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Cette commande shell vous permet de lister les règles déjà établies dans IPTABLES… et là pas de chance vous comprenez que tous les Ports sont ouverts ! youpi !!!

DÉFINITION D’UN PORT : Il s’agit en quelque sorte d’une « porte » d’entrée ou de sortie de vos données de votre serveur. Le firewall IPTABLES a pour objectif de « maitriser » l’ouverture / fermeture des PORTS de votre machine distante.

Attention certains logiciels installés sur votre serveur DEDIIE utilisent un PORT spécifique pour communiquer (input/output)… C’est le cas par exemple de votre logiciel FTP qui utilise le PORT 21.

Les ports ouverts par défaut sur les serveurs OVH sont :

21 – ftp (le serveur FTP).
22 – ssh (l’accès au shell crypté, à laisser ! normalement vous avez modifié ce PORT pour éviter les attaques BRUTEFORCE).
23 – telnet (l’accès au shell non crypté, à laisser en dépannage).
25 – smtp (le serveur de courrier sortant, à laisser).
53 – dns (le serveur DNS, à laisser ).
80 – http (le serveur web, à laisser).
110 – pop3 (l’accès aux mails, à laisser ).
143 – imap (l’accès aux mails, à laisser si vous n’utilisez pas pop3).
443 – https (l’accès au web crypté, à laisser selon votre utilisation).
1000 – webmin (panneau de configuration du serveur, à laisser si vous vous en servez – Cf choix de la distribution DEBIAN).
Dans mon cas il faudra prendre en compte le port 8080 (utilisé par ISPCONFIG équivalent à WEBmin) et le port 1337 correspondant à la connexion SSH.
Le firevwall est composé par 3 chaînes :
  1. INPUT (en entrée),
  2. FORWARD (dans le cas d’un routage réseau)
  3. OUPUT (en sortie).
Les actions à entreprendre sont ACCEPT (accepter le paquet), DROP (le refuser).

Par défaut on va interdire toutes les portes :

# Interdire toute connexion entrante et sortante 
iptables -t filter -P INPUT DROP 
iptables -t filter -P FORWARD DROP 
iptables -t filter -P OUTPUT DROP

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

Nous allons créer un script qui sera lancé à chaque démarrage pour mettre en place des règles de base.

Je crée un fichier :
nano firewall
dans lequel je paramètre un ensemble de règles du firewall :
#!/bin/sh
### BEGIN INIT INFO
# Provides:          Firewall maison
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:
# Default-Stop:
# X-Interactive:     false
# Short-Description: Firewall maison
### END INIT INFO
# Mise à 0
iptables -t filter -F
iptables -t filter -X
echo "Mise à 0"
# On bloque tout
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
echo "Interdiction"
# Ne pas casser les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Autorise le loopback (127.0.0.1)
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo "Loopback"
# ICMP (le ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo "Ping ok"
# SSH IN/OUT
iptables -t filter -A INPUT -p tcp --dport 1337 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 1337 -j ACCEPT
echo "SSH ok"
# DNS In/Out
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
echo "dns ok"
# NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
echo "ntp ok"
# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
# HTTP + HTTPS In
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 "http ok"
# FTP Out
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT
# FTP In
# imodprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH
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 "ftp ok"
# 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
echo "mail ok"
# Monitoring - ispconfig
iptables -t filter -A INPUT -p tcp --dport 4598 -j ACCEPT
# ISPCONFIG
iptables -t filter -A INPUT -p tcp --dport 8080 -j ACCEPT
echo "monitoring ok"

J’enregistre/quitte le fichier nano firewall (ctrl -X) et je donne les droits d’exécution du fichier firewall.

chmod +x ./firewall

Ensuite je teste le firewall en exécutant le fichier firewall :

./firewall

 

Afin de l’ajouter aux scripts appelés au démarrage :  attention, cette opération est à exécuter QUE si vous êtes sûr des règles que vous avez mises en place ! UN CONSEIL : testez au préalable les règles et prenez votre temps !

update-rc.d firewall defaults

Pour le retirer, vous pouvez utiliser la commande suivante :

update-rc.d -f firewall remove

 

FAIL2BAN – PARAMETRAGE DE BANNISSEMENT DES IP

Les services à monitorer sont stockés dans jail.conf. Il est recommandé d’en effectuer une copie nommée jail.local qui sera automatiquement utilisée à la place du fichier exemple.

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

Lorsque vous listez (ls) le répertoire  vous retrouvez 5 fichiers avec notamment votre copie (cp) : jail local

/etc/fail2ban# ls
action.d  fail2ban.conf  filter.d  jail.conf  jail.local
 

On édite le fichier jail.local et on va paramétrer les ACTIONS de BANNISSEMENT

nano /etc/fail2ban/jail.local

On modifie les règles en mettant l’ensemble des ACTIONS sur TRUE (hormis celles que vous n’avez pas installées !)

On redemarre : /etc/init.d/fail2ban restart

Derniers articles