Compléments à l'installation d'une Debian 4.0 Etch ou 5.0 Lenny
Vous trouverez dans cet article la liste des paquets que j'installe en plus de l'installation par défaut de Etch et Lenny.
En premier lieu, connectez vous en root :
su
Configuration minimale
Nous désactivons la source CDROM d'apt de façon à obtenir tous nos paquets depuis l'internet (si vous lisez cette page, c'est que vous avez l'internet ;)
sed -i -e 's/^\(deb cdrom\)/#\1/' /etc/apt/sources.list
et nous mettons à jour :
apt-get update
Nous installons ensuite le support du temps internet pour garder notre système à l'heure:
apt-get install ntp
Nous installons openssh-server et fail2ban pour avoir un accès ssh sécurisé à notre ordinateur :
apt-get install openssh-server fail2ban
Nous activons la colorisation de la commande ls:
/bin/cp /etc/skel/.bashrc $HOME
/bin/sed -i -e 's/^# \(.*\(LS_OPTIONS\|dircolors\).*\)$/\1/' $HOME/.bashrc
Personnellement, étant un vimiste, il me faut mon outil de travail :
/usr/bin/apt-get install vim
Si vous le souhaitez, vous pouvez mettre en place une configuration par défaut pour Vim. Personnellement, j'utilise :
echo "set list
set number
set expandtab
set tabstop=2
set softtabstop=2
set shiftwidth=2
set nobackup
set encoding=utf-8
set fileencoding=utf-8
syn on" >> $HOME/.vimrc
Une fois ceci fait, déconnectez-vous et reconnectez-vous.
Recevoir des rapports quotidiens sur le fonctionnement de votre serveur
Pour vous assurer que votre serveur fonctionne correctement, et qu'il ne subit ni attaque, ni disfonctionnement, il est important de le configurer pour envoyer régulièrement des rapports sur son fonctionnement. C'est ce que nous allons voir maintenant.
Redirection des emails du compte root
Un système Unix peut être assez bavard, et a tendance a envoyer tous les emails importants au compte Root. Il est très important de suivre ces emails. Pour ce faire, vous pouvez utiliser un lecteur d'e-mail en ligne de commande.... ou alors, rediriger les emails destinés au compte root de la machine vers votre email habituel.
Attention : Suivant la configuration du serveur SMTP de votre fournisseur de compte e-mail, les emails envoyés par votre machine peuvent être rejetés. Personnellement, je n'ai pas ces problèmes avec les comptes GMail.
En premier lieu, renseignez l'email que vous souhaitez utiliser :
ROOT_EMAIL=my-account@gmail.com
Et configurez la redirection des emails du compte Root vers cet email :
/bin/sed -i -e "s/^\\(root:\\).*\$/\\1 ${ROOT_EMAIL}/" \
/etc/aliases
Surveillance des logs
Nous installons logwatch pour surveiller notre système. Le rapport
fourni par ce logiciel nous renseigne sur les tentatives d'intrusions
et les éventuels problèmes rencontrés par le système.
/usr/bin/apt-get install logwatch libdate-manip-perl
Vérification des mises à jour
Afin de recevoir des alertes lorsqu'il est nécessaire de mettre à jour votre Debian, installez cron-apt :
/usr/bin/apt-get install cron-apt
Et configurez le pour envoyer un e-mail au compte root lorsqu'une mise à jour est disponible :
/bin/sed -i -e 's/^#[ \t]*\(MAILTO="root"\)/\1/' \
-e '/^#[ \t]*\(MAILON="error"\)/a\
MAILON="upgrade"' \
/etc/cron-apt/config
Amélioration de la sécurité du serveur
Configuration de Fail2Ban
Depuis que j'ai découvert cet outil, il est devenu mon meilleur ami. Ce script surveille les fichiers journaux, et banni temporairement les IPs qui jouent un peu trop avec votre serveur. C'est un outil IN-DIS-PEN-SABLE si votre serveur est directement présent sur Internet. Si ce n'est déjà fait, installez-le :
/usr/bin/apt-get install fail2ban
Nous allons maintenant activer certaines configurations supplémentaires afin d'augmenter sa portée. En premier lieu, nous activons la protection contre les attaques en déni de service sur le SSH :
/bin/sed -i -e '/\[ssh-ddos\]/, /filter/ {0,/^enabled.*/ s//enabled = true/ }' /etc/fail2ban/jail.conf
Nous activons aussi la protection du système d'authentification PAM (vu que ce mécanisme est présent un peu partout dans un système UNIX, c'est quelquechose de très pratique XD):
/bin/sed -i -e '/\[pam-generic\]/, /filter/ {0,/^enabled.*/ s//enabled = true/ }' /etc/fail2ban/jail.conf
Enfin, nous redémarrons fail2ban pour prendre en compte les nouvelles configurations:
/etc/init.d/fail2ban restart
Rercherche de Root Kits avec RkHunter
Nous installons un outil de vérification de présence de root kits :
/usr/bin/apt-get install rkhunter libmd5-perl
Nous configurons rkhunter en fonction de notre système:
SSH_ROOT_ALLOWED=no
TEST_ROOT_ALLOWED=$(/bin/grep -i "PermitRootLogin.*yes" /etc/ssh/sshd_config)
if [ -n "$TEST_ROOT_ALLOWED" ]; then
SSH_ROOT_ALLOWED=yes
fi
/bin/sed -i -e 's|^[#]*\(ALLOWHIDDENDIR=/dev/.udev\)$|\1|' \
-e 's|^[#]*\(ALLOWHIDDENDIR=/dev/.static\)$|\1|' \
-e 's|^[#]*\(ALLOWHIDDENDIR=/dev/.initramfs\)$|\1|' \
-e "s|^[#]*\\(ALLOW_SSH_ROOT_USER=\\).*$|\\1${SSH_ROOT_ALLOWED}|" \
/etc/rkhunter.conf
Au besoin, nous autorisons la présence de certains fichiers dans le dossier /dev :
if [ -e /dev/shm/network/ifstate ]; then
/bin/sed -i -e '0,/ALLOWDEVFILE/{//a\
ALLOWDEVFILE=/dev/shm/network/ifstate
;}' \
/etc/rkhunter.conf
fi
La version de RkHunter présente dans Debian 5.0 Lenny permet de maintenir une base de signature des fichiers importants basée sur les informations fournies par le gestionnaire de paquets Debian. Cette fonctionnalité est importante car elle permet de détecter plus rapidement les modifications du contenu de certains logiciels (ps, ls, etc...). Pour activer cette fonctionnalité, utilisez la ligne de commande suivante :
/bin/sed -i -e 's|^[#]*\(HASH_FUNC=\).*$|\1md5sum|' \
-e 's|^[#]*\(PKGMGR=\).*$|\1DPKG|' \
/etc/rkhunter.conf
La distribution Debian mettant en place des patchs de sécurité sans mettre à jour les numéros de version des applications, nous désactivons la vérification de ce numéro de version :
/bin/sed -i -e 's|^[#]*\(DISABLE_TESTS=".*\)\(".*\)$|\1 apps\2|' \
/etc/rkhunter.conf
Mettez à jour la base des menaces de RkHunter pour la première fois (par la suite elle est mise à jour chaque semaine):
/usr/bin/rkhunter --update
Si vous avez activé la fonctionnalité de vérification de la signature des fichiers, utilisez cette commande pour mettre à jour la base des signatures :
/usr/bin/rkhunter --propupdate
Afin de ne pas être forcé d'exécuter cette commande après chaque utilisation d'apt-get, faites en sorte qu'elle soit exécutée automatiquement :
/bin/echo '// Update rkhunter file signatures databases after running dpkg.
DPkg::Post-Invoke {
"if [ -x /usr/bin/rkhunter ]; then if [ $(/usr/bin/rkhunter --help | /bin/grep "propupd" | /usr/bin/wc -l) -gt 0 ]; then /usr/bin/rkhunter --propupd; fi; fi";
};' | /usr/bin/tee /etc/apt/apt.conf.d/90rkhunter
Remarque: Pour connaître les informations que vous renverra RkHunter chaque jour, vous pouvez utiliser la commande:
/usr/bin/rkhunter --configfile /etc/rkhunter.conf --report-warnings-only --checkall
Remarque : il existe d'autres outils de recherches de root kits similaires à RkHunter. J'ai longtemps utilisé chkrootkit, mais comme il est impossible de le configurer proprement pour ignorer les faux positifs, j'ai fini par l'abandonner.
Accès SSH (optionnel, mais recommandé)
Si vous souhaitez améliorer encore la sécurité de votre serveur SSH, vous pouvez créé un utilisateur dédié pour l'accès SSH et interdire l'accès SSH au compte root. Une fois identifié sur le serveur, il vous suffira d'utiliser la commande "su" pour vous identifier avec le compte root.
Nous installons un outil de génération de mot de passes:
/usr/bin/apt-get install apg
Choisissez un mot de passe sécurisé. Pour créer un tel mot de passe, vous pouvez utiliser la commande suivante:
/usr/bin/apg -q -a 0 -n 1 -M NCL
Nous créons un compte utilisateur sans privilèges (remplacez "myuser" par le login de votre choix):
/usr/sbin/adduser myuser
Configurez le serveur SSH de façon à ce qu'il n'accepte pas les connexions avec l'utilisateur root. Utilisez pour ce faire les lignes de commande suivantes:
/bin/sed -i -e 's/PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
/etc/init.d/ssh restart
Attention: Ne faites ceci que si vous disposez d'un autre
compte que le compte root sur la machine. Si vous ne disposez pas d'un
compte utilisateur normal, votre machine ne sera plus accessible par
SSH (La création d'un tel utilisateur est faite par la commande "adduser" ci-dessus).
Autres outils
Détection des intrusions
Nous installons snort pour surveiller les tentatives d'intrusion sur notre système. Vous recevrez alors un résumé quotidien des alertes de sécurité.
/usr/bin/apt-get install snort
Protection contre les recherches de ports ouverts (port scanning)
PortSentry permet de se protéger contre les scanners de ports. En premier lieu, il vous l'installer :
DEBIAN_FRONTEND='noninteractive' apt-get install portsentry iptables
Une fois ceci fait, il est nécessaire de configurer proprement portsentry avant de l'activer. La première chose à faire est de faire en sorte que PortSentry ignore votre adresse IP. Cela vous évitera d'être banni de votre propre serveur. En premier lieu, il vous faut entrer votre adresse IP (fixe de préférence):
- Si vous êtes identifé en SSH avec le compte root, il vous suffit d'utiliser la commande suivante :
PROTECTED_IP=$(/usr/bin/who --ips | /bin/grep root | /usr/bin/cut --characters=40-)
/bin/echo "Votre adresse IP est : ${PROTECTED_IP}." - Dans tous les autres cas, rentrez votre adresse IP manuellement :
PROTECTED_IP=83.243.21.40
Vous pouvez maintenant ajouter l'adresse IP à la liste des adresses IP ignorées par PortSentry :
/bin/echo "
# Ignoring root account owner IP:
${PROTECTED_IP}" \
| /usr/bin/tee -a /etc/portsentry/portsentry.ignore.static
A présent, activez le bloquage des scans de ports TCP et UDP :
/bin/sed -i -e 's/^BLOCK_UDP=.*/BLOCK_UDP="1"/' \
-e 's/^BLOCK_TCP=.*/BLOCK_TCP="1"/' \
/etc/portsentry/portsentry.conf
Configurez PortSentry pour utiliser "iptables" plutôt que "route" pour bloquer les attaques :
/bin/sed -i -e 's/^KILL_ROUTE=.*$/#\0/' \
-e '0,/^[\t #]*\(KILL_ROUTE=.*iptables[^\&]*\)$/s//\1/' \
/etc/portsentry/portsentry.conf
Activez le mode de détection avancé de PortSentry :
/bin/sed -i -e 's/^TCP_MODE.*$/TCP_MODE="atcp"/' \
-e 's/^UDP_MODE.*$/UDP_MODE="audp"/' \
/etc/default/portsentry
Enfin, redémarrez PortSentry :
/etc/init.d/portsentry restart
Sources:
- Merci à Cemoi sur irc.freenode.net#debian-facile pour m'avoir rappelé l'existence de cet outil.
- Merci à Chojin pour son article PortSentry - Comment bloquer les attaques de type scan port sur SIVIT.
Encore un peu plus loin :)
Enfin, je vous conseille de suivre les guides suivants pour compléter et améliorer votre système:
Pour aller plus loin
Afin d'améliorer de manière encore plus poussée votre système, je vous conseille ces deux lectures :
- Guide de référence pour Debian
- Manuel de sécurisation de Debian
- Some useful tools for enhenance Debian security
- Fail2ban: an enemy of script-kiddies
Cette dernière est vraiment importante pour protéger votre système des attaques des pirates.
portsentry
j'ai laissé tombé l'utilisation de portsentry et snort car trop contraignant. De plus, c'est assez inutile chez moi, car mes serveurs sont tous dans des machines virtuelles, et j'utilise iptables pour ouvrir ou non les ports adéquats :) Xen powa !.
Si ton serveur subit beaucoup d'attaques, il existe des regles netfilter / iptables pour protéger ton serveur.
Bon courrage
serveur mail
donc ... le serveur ne pourra jamais rien envoyer ?
Dorigo consultants















PortSentry + snort
N'ayant pas d'ip fixe (numéricable :( ) Puis-je remplacer l'ip (pour PortSentry) par un nom de domaine DDNS? Étant donné que mon routeur met tout seul à jour le ddns lorsque mon ip change (tout les deux mois~, ça sert à rien mais c'est numéricable :/ ) je pourrais utiliser cet outil sans risque.
Si oui il y a t il une méthode? Et si non, il y a t il une méthode pour bidouiller?
J'ai maintenant plusieurs serveurs, et ils sont tous soumis aux attaques incessantes, et un outils en plus ne sera pas de trop....
Quand à snort, je l'avais déjà testé, ne fournit pas t il plus d'infos qu'il faudrait? (en fait il surveille tout le réseau...)
Toi même l'utilises tu sur toutes tes installations? Que me conseils tu?
Merci d'avance ;)