Détection de scan serveur
Scanner un serveur permet de découvrir quels ports sont ouverts. Potentiellement, ça permet également découvrir quels services et logiciels sont utilisés sur la machine.
L'objectif d'un scan n'est pas nécessairement de faire du mal mais c'est souvent le prémice d'une ou plusieurs attaques.
Dans cet article, je vais vous expliquez très rapidement comment détecter un scan pour ensuite vous prévenir. Dans l'exemple ci-dessous, je décide de ne pas bannir l'ip associée au scan : ça serait trop bourrin et il est préférable de faire du cas par cas.
Dans un premier temps, nous allons installer portsentry, un daemon qui est dédié à la détection de scans. Sur Debian, il suffira d'utiliser le gestionnaire de paquets :
# aptitude update && aptitude install portsentry
Voyons à présent comment configurer (rapidement) l'outil.
Le fichier de configuration est /etc/portsentry/portsentry.conf. Nous allons l'éditer et modifier les variables suivantes : ADVANCED_PORTS_TCP
et ADVANCED_PORTS_UDP
. Dans chacune d'elles, il faudra indiquer les ports ouverts et accessibles de votre serveur. Admettons que vous avez un serveur SSH, un serveur Web et un serveur FTP :
ADVANCED_PORTS_TCP="21,22,80,443" ADVANCED_PORTS_UDP="21,22,80,443"
Maintenant, éditons le fichier /etc/default/portsentry. Remplacez "tcp" et "udp" par "atcp" et "audp" de manière à avoir cette config (c'est plus efficace) :
TCP_MODE="atcp" UDP_MODE="audp"
Nous allons de nouveau éditer /etc/portsentry/portsentry.conf pour s'assurer qu'aucun bann n'est fait suite à une détection. Recherchez dans le fichier ces variables et placez leur valeur à "2" : BLOCK_UDP
et BLOCK_TCP
.
BLOCK_UDP="2" BLOCK_TCP="2
Cette configuration permet de déléguer à un script externe les tâches à effectuer pendant la détection.
Nous allons écrire un script qui va envoyer un mail avec les informations suivante : l'IP initiatrice du scan, le port scanné et le mode de scan (atcp ou audp).
Si vous n'avez pas de serveur SMTP, installez postfix :
# aptitude install postfix # echo "votre.notre.de.domaine" > /etc/mailname # service postfix restart
Voici un script simple que je vous invite à améliorer :
# mkdir ~/bin/ && touch ~/bin/scan_report && chmod u+x ~/bin/scan_report
#!/bin/sh MAIL=vous@example.com SUJET="[IMPORTANT] Scan détecté" IP="$1" PORT="$2" TYPE="$3" ( echo "Scan détecté :" echo "---------------------------------------" echo "IP : $IP" echo "PORT : $PORT" echo "TYPE : $TYPE" echo "---------------------------------------" ) | mail -s "$SUJET" "$MAIL"
Indiquons à portsentry d'éxécuter ce script. Éditez de nouveau /etc/portsentry/portsentry.conf puis recherchez la chaine $TARGET$
. Placez à cette endroit du fichier cette ligne (un exemple est commenté) :
KILL_RUN_CMD="/root/bin/scan_report $TARGET$ $PORT$ $MODE$"
Vous pourrez modifier la valeur de SCAN_TRIGGER
et placer un niveau d'alerte. Par défaut c'est "0" : la réaction est immédiate. De mon coté je l'ai laissé à "0" et je la changerai si ça me pose des problèmes.
La configuration effectuée, vous pouvez maintenant relancer portsentry de cette manière :
# service portsentry restart
En cas de détection de scan, des logs sont générés dans /var/log/syslog. Pour les retrouver, utilisez le mot clé "attackalert" comme suit :
# grep attackalert /var/log/syslog
En principe on est tout bon :)