Magazine

Sécurisation du serveur

Publié le 20 décembre 2009 par Mydoom666

Sécurisation du serveurMaintenant que nous avons un accès SSH au serveur, la première chose à faire est de sécuriser celui-ci. Il est fortement recommandé de s’en occuper le plus vite possible. Entendons-nous bien, un serveur non sécurisé équivaut à partir en vacances sans verrouiller votre porte d’entrée…

Dans ce billet nous allons : changer le mot de passe du compte root, créer un compte utilisateur, changer le port SSH par défaut, interdire la connexion du compte root via SSH, configurer le firewall Netfilter via Iptables, mettre en place Fail2ban.


Mot de passe Root

La première chose à faire est de modifier le mot passe du compte utilisateur Root qui a été attribué par défaut. Veiller à ce que le mot de passe employé pour ce compte soit complexe (au moins 8 caractères mêlant lettres et chiffres) et surtout différent des autres mots de passe. Pour cela :

root@serveur:$ passwd root


Création d’un compte utilisateur

Sur un serveur, on ne travail jamais sous le compte root, sauf lorsque c’est nécessaire (problème de permissions) ! Celui-ci servant uniquement à la maintenance. Pour l’exemple j’utiliserais le nom d’utilisateur « miku »

root@serveur:$ adduser miku
Ajout de l'utilisateur « miku »...
Ajout du nouveau groupe « miku » (1001)...
Ajout du nouvel utilisateur « miku » (1001) avec le groupe « miku »...
Création du répertoire personnel « /home/miku »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur miku
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []: Miku
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:
Ces informations sont-elles correctes ? [O/n] o

Dorénavant on se connecte uniquement sur ce compte.
Si besoin de passer en root :

miku@serveur:$ sudo -s
[sudo] password for miku:
root@serveur:~# echo "Je suis en root ! Et maintenant je me déconnecte..."
Je suis en root ! Et maintenant je me déconnecte...
root@serveur:~# exit
exit
miku@serveur:~$ echo "Je suis revenu sous le compte miku"
Je suis revenu sous le compte miku
miku@serveur:~$


Configuration SSH

Afin d’éviter les brutes forces et autres tentatives de connexions sur le serveur, il est recommandé de changer le port par défaut (22) et d’interdire la connexion du compte root. Pour cela, éditer le fichier de configuration avec Vim (comment utiliser Vim ?) ou tout autre éditeur de texte :

root@serveur:$ vi /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd(8) manpage for details
 
# What ports, IPs and protocols we listen for
Port 8008
 
# Authentication:
LoginGraceTime 120
PermitRootLogin no

Attention ! Il faut également veiller à ce que le port modifié (ici 8008) soit ouvert dans le pare-feu ou bien vous n’aurez plus accès au serveur.

On redémarre le service :

root@serveur:$ /etc/init.d/ssh restart


Firewall – Iptables / Netfilter

Pense-bête des commandes (devant être tapées en root)

Réinitialiser la configuration :

root@serveur:$ iptables -t filter -F
root@serveur:$ iptables -t filter -X

Lister les règles actives :

root@serveur:$ iptables -v –L

Permettre à une connexion déjà ouverte de recevoir du trafic :

root@serveur:$ iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
root@serveur:$ iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Bannir l’adresse IP 10.14.20.26 :

root@serveur:$ iptables -t filter -A INPUT -s 10.14.20.26 -j DROP

Ajouter une règle :

iptables -t filter -A INPUT/OUPUT -p PROTOCOLE -i INTERFACE –dport XX -j ACCEPT/DROP

INPUT désignant une connexion entrante.
OUTPUT désignant une connexion sortante.
PROTOCOLE TCP, UDP, ICMP…
INTERFACE représente l’interface réseau concernée : lo, eth0, eth1
XX représente le numéro de port.
ACCEPT autorise la connexion.
DROP refuse la connexion.

Donc pour autoriser le trafic entrant sur le port 8008 de eth0 :

root@serveur:$ iptables -t filter -A INPUT -p tcp -i eth0 --dport 8008 -j ACCEPT

Bloquer tout le trafic entrant/sortant :

root@serveur:$ iptables -t filter -P INPUT DROP
root@serveur:$ iptables -t filter -P FORWARD DROP
root@serveur:$ iptables -t filter -P OUTPUT DROP

Autoriser loopback

root@serveur:$ iptables -t filter -A INPUT -i lo -j ACCEPT
root@serveur:$ iptables -t filter -A OUTPUT -o lo -j ACCEPT

Autoriser le protocole ICMP

root@serveur:$ iptables -t filter -A INPUT -p icmp -j ACCEPT
root@serveur:$ iptables -t filter -A OUTPUT -p icmp -j ACCEPT

Maintenant il va falloir procéder a la création d’un script servant à appliquer les règles au démarrage du serveur.

root@serveur:$ vi /etc/init.d/firewall

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh 
iptables -t filter -F 
iptables -t filter -X 
 
iptables -t filter -P INPUT DROP 
iptables -t filter -P FORWARD DROP 
iptables -t filter -P OUTPUT DROP 
 
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -t filter -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
 
#Loopback 
iptables -t filter -A INPUT -i lo -j ACCEPT 
iptables -t filter -A OUTPUT -o lo -j ACCEPT 
 
#ICMP
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 8008 -j ACCEPT

Attention à ne pas bloquer le protocole ICMP, celui-ci servant aux systèmes de monitoring d’OVH (et probablement des autres hébergeurs)

Rendre le script exécutable :

root@serveur:$ chmod +x /etc/init.d/firewall

Avant d’en faire un script de démarrage, il est impératif de vérifier le bon fonctionnement des règles ! Pour cela, exécuter le script en ligne de commande :

root@serveur:$ ./etc/init.d/firewall

Et pour que le système l’exécute au démarrage :

root@serveur:$ vi /etc/rc.local

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/etc/init.d/firewall
 
exit 0

Terminé ! Le système chargera la configuration à chaque démarrage.

Je ne donnerais pas de script de configuration Iptables complet. Tout simplement parce qu’il en existe déjà un bon nombre mais aussi et surtout parce que j’estime que la configuration doit se faire au cas par cas, et qu’il ne sert à rien de prendre les règles du voisins.


Fail2ban

Fail2ban est un deamon qui s’occupe de lire les fichiers journaux (logs) tel que /var/log/pwdfail ou /var/log/apache/error_log et bannit les adresses IP qui ont obtenu un trop grand nombre d’échecs lors de l’authentification. Il met à jour les règles du pare-feu pour rejeter cette adresse IP pendant un certains laps de temps. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache.

Installation de Fail2ban (depôts universe)

root@serveur:$ aptitude install fail2ban

Éditer le fichier de configuration :

root@serveur:$ vi /etc/fail2ban/jail.conf
[DEFAULT]
 
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip  = 127.0.0.1 #<-- Adresse IP qui ne sera jamais bannie par Fail2ban.
bantime  = 3600 #<-- temps du bannissement par défaut en secondes.
maxretry = 3 #<-- nombre d'échecs par défaut avant le ban.
 
[ssh]
 
enabled = <strong>true</strong>
port = ssh,sftp
filter = sshd
logpath = /var/log/auth.log
maxretry = 6 #<-- nombre d'échecs d'authentification avant le ban.

Redémarrer le service :

root@serveur:$ fail2ban-client reload

Vous pouvez tester Fail2ban mais pensez à régler le bantime à 5-10min (300-600 secondes). Ca évitera de poiroter 1 heure…



Retour à La Une de Logo Paperblog

A propos de l’auteur


Mydoom666 3 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

Dossier Paperblog