Sécurisation et configuration d'un serveur Ubuntu / Debian

Initialisation et sécurisation d'une distribution Ubuntu / Debian

Nettoyage de notre distribution

Avant de commencer à configurer notre distribution Ubuntu 8.04, nous allons supprimer les applications que nous n'utiliserons pas et qui peuvent contenir des failles de sécuritées.
En ce qui me concerne, voici un certain nombre d'application que je vous conseil de supprimer.Pour cela, nous allons utiliser la commande APT-GET avec les options d'auto-suppression des pacquets installé n'ayant plus de dépendance et l'option de purge des fichiers de configurations.

Voila ce que cela donne:
apt-get -qq autoremove --purge ppp lpr nfs-common pidentd pcmcia-cs pppconfig telnet time ftp pcmciautils gij gij-4.2
apt-get -y -qq clean
apt-get -y -qq purge


Petite explication sur 2 autres options que vous avez certainement constaté ci-dessus.
l'option -y permet de forcer par une afirmation, les réponses aux différentes questions posées.
l'option -qq diminue la verbosité de l'information affiché à l'écran.
Ces 2 options peuvent être supprimé en face d'analyse ou debug d'un script
.

Mise à jour de notre distribution


Partons sur de bonne base et continuons par la mise à jour de la liste des dépots de paquet .
apt-get -qq update

Nous continuons par la mise à jour des paquets de distribution et d'application tiers.
apt-get -qq upgrade
apt-get -qq dist- upgrade


Ces mise à jour sont très importante car elles vont supprimer un certain nombre de faille de securité qui pourait mettre en danger votre serveur.

Configuration de SSH

Une des attaques les plus connu sur les serveurs SSH est l'attaque BRUTE-FORCE.
Cette attaque consiste en une multitude de tentative de connexion afin de prendre de contrôle de votre machine.

Pour ce protéger de cette attaque il existe 2 solutions que je vous propose de découvrir et que nous  critiquerons par la suite.

l'ensemble des configuration de ce chapitre seront à réaliser dans le fichier de configuration du serveur SSH (/etc/ssh/sshd_config). Un redémarrage du serveur SSH sera nécessaire pour la prise en compte des évolutions

  1. Interdire purement et simplement la connection de l'utilisateur ROOT au serveur.
    Pour réaliser cette interdiction, il nous faut modifier le paramètre "PermitRootLogin" et le mettre à false.
  2. Interdire la connection de l'ensemble des utilisateurs par mots de passe.
    Afin de permettre une connexion sécurisé, nous allons mettre un place une politique de d'identification par certificat. Il en existe plusieurs type dont les plus connu sont RSA et DSA.
    Création des clés privé/public sur le poste client: ssh-keygen -t dsa.
    Exportation de la clé sur le serveur: ssh-copy-id -i ~/.ssh/id_dsa.pub monutilisateur@monserveur.
    Desactivation des connexions par mots de passe: changer le paramètre "PasswordAuthentication" à "no".
    Activation des authentification par clé: changer le paramètre "RSAAuthentication" et "PubkeyAuthentication" à "yes"

La première solution vous protège contre la prise de contrôle par le compte super-administrateur mais n'empèchera pas une attaque brute-force sur vos autre compte. Le mal sera moindre à partir du moment ou les droits d'accès autorisé depuis les comptes SSH sont limité (surtout pas de droit d'accès root).
La deuxième solution vous impose de disposer d'une partie de la clé de connexion SSH sur chacune des machines qui est suceptible de ce connecter à votre serveur.

Si vous avez choisi la solution une, il n'y aura pas beaucoup de changement hormis l'utilisation de la commande SU pour vous connecter en root après vous être connecter avec votre compte habituel.
Si vous avez choisi la solution deux, vous devrez vous connecter avec la commande suivante: ssh root@mon_ip

Sécurisation des communications (IpTables, Fail2Ban, ...)

Nous allons maintenant passé à la sécurisation du serveur par la mise en place d'un FireWall, de règle de banissage d'ip ayant des activitées douteuse, mais également le contrôle de l'absence de RootKit (virus permettant l'accès à votre machine frauduleusement).

apt-get -y -qq install --purge fail2ban chkrootkit iptables mailx

Configuration IpTables

Le rôle d'IpTables est de filtrer  les connections entrantes et sortantes présent sur un interface réseau.
Pour cela, nous allons créer un script qui sera lancé au démarrage du serveur.

Voici le script qui sera commenté à la suite:

#!/bin/sh
# chkconfig: 3 21 91
# description: Firewall

case "$1" in
start)

# Vider les tables actuelles
iptables -F
iptables -X

# Maintien de connection établi
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# SSH In/Out port 22
iptables -t filter -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport ssh -j ACCEPT

# DNS In/Out port 53
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

# NTP Out port 123
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# HTTP  In/Out port 80
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS In/Out port 443
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# MANAGER GLASSFISH
iptables -t filter -A OUTPUT -p tcp --dport 4848 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 4848 -j ACCEPT

# Mail SMTP port 25
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT


# Règle de PING pour OVH
iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --source XXX.XXX.XXX.251 -j ACCEPT # IP pour system de monitoring
iptables -A INPUT -i eth0 -p icmp --source XXX.XXX.XXX.250 -j ACCEPT # IP pour system de monitoring
iptables -A INPUT -i eth0 -p icmp --source XXX.XXX.XXX.249 -j ACCEPT # IP pour system de monitoring

# Règle pour le filer OVH
iptables -A INPUT -i eth0 -p tcp --source XXX.XXX.XXX.XXX -j ACCEPT

# Serveur ICMP de surveillance
iptables -A INPUT -i eth0 -p icmp --source sla-rbx2-6.ovh.net -j ACCEPT

# ISCSI
iptables -A OUTPUT -p tcp --dport 3260 -m state --state NEW,ESTABLISHED -j ACCEPT


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

exit 0
;;

stop)
#
# reset the default policies in the filter table.
#
IPTABLES -P INPUT ACCEPT
IPTABLES -P FORWARD ACCEPT
IPTABLES -P OUTPUT ACCEPT

#
# reset the default policies in the nat table.
#
IPTABLES -t nat -P PREROUTING ACCEPT
IPTABLES -t nat -P POSTROUTING ACCEPT
IPTABLES -t nat -P OUTPUT ACCEPT

#
# reset the default policies in the mangle table.
#
IPTABLES -t mangle -P PREROUTING ACCEPT
IPTABLES -t mangle -P OUTPUT ACCEPT

#
# flush all the rules in the filter and nat tables.
#
IPTABLES -F
IPTABLES -t nat -F
IPTABLES -t mangle -F
#
# erase all chains that's not default in filter and nat table.
#
IPTABLES -X
IPTABLES -t nat -X
IPTABLES -t mangle -X

exit0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac


Pour l'activation du script en automatique voici la commande:
update-rc.d firewall defaults


EN COURS

 

Redirection apache pour webmin

Afin de pouvoir accéder à mon webmin depuis n'importe ou, j'ai configuré un virutalhost apache qui pointe directement sur mon webmin.

En voici la configuration.

 

Attention il est nécessaire de désactiver le ssl sur webmin.

 

SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache_https.crt
SSLCertificateKeyFile /etc/ssl/private/apache_https.key

ProxyPass / http://87.98.160.202:10000/
ProxyPassReverse / http://87.98.160.202:10000/
<Proxy *>
allow from all
</Proxy>

 

 

 

Voic les manipulation pour l'installation et l'interconnexion d'apache et glassfish

apt-get install apache2-mpm-prefork libapache2-mod-jk

 

Pour être informé des derniers articles, inscrivez vous :