Protéger et surveiller son serveur
Portsentry

 

 

Plan

1- Présentation

2- Récupération et installation le produit

3- Configuration

a- portsentry.conf

b- portsentry.mode

c- portentry.ignore

4- Ca marche ?

5- Liens

 

 

 

 

 

 

1- Présentation

Portsentry est un qui permet de détecter les attaques de type scan de façon active, c'est à dire qu'en plus de la détection, il va pouvoir entreprendre certaines actions :
- Les attaques seront notées dans les fichiers /var/log/message* et pourront être récupérés par l'administrateur par courier elctronique avec logcheck par exemple
- l'hôte "attaqueur" est automatiquement rajouté dans /etc/hosts.deny
- Grace à ipchains, tout ce qui vient de l'hôte "attaqueur" sera rejeté
- L'interface de communication peut être coupée en cas d'attaque.

 

vers haut de la page

 

2-Récupérer et installer le produit

Ici je décris ce que j'ai fait sur ma machine : j'ai récupérer portsentry-1.1-fr5.i386.rpm sur le site rpmfind.net. Sinon voir au paragraphe liens

Pour l'installation :

# rpm -Uvh portsentry-1.1-fr5.i386.rpm

et c'est tout.

Les fichiers de configuration se trouvent dans /etc/portsenty, le binaire dans /usr/bin et il se lance en tant que service (/etc/rc.d/init.d/portsentry), il est remis à jour dans /tec/cron.d/portsentry.

 

vers haut de la page

 

3- Configuration

a- porsentry.conf

C'est le fichier principal de configuration que l'on va éditer :

# vi /etc/portsentry/porstentry.conf

######################
# Configuration Files#
######################
#
# Hosts to ignore
IGNORE_FILE="/etc/portsentry/portsentry.ignore"
# Hosts that have been denied (running history)
HISTORY_FILE="/etc/portsentry/portsentry.history"
# Hosts that have been denied this session only (temporary until next restart)
BLOCKED_FILE="/etc/portsentry/portsentry.blocked"

On vérifie que les chemins sont bons.

  • Dans porstentry.ignore, on trouvera les adresse IP des machines que l'on ne veut pas bloquer.
  • Dans portsentry.histiry, on trouve les machines qui ont été bloquées (historique)
  • Dans portsentry.bocked, on trouve les machines bloquées seulement pendant cette session.

# ipchains support for linux

KILL_ROUTE = "/sbin/ipchains -I input -s $TARGET$ -j DENY -l

On décommente cette ligne qui ajoute une règle à ipchains pour refuser l'accés à la machine "attaquante" et un message sera écrit dans /var/log/message

###############
# TCP Wrappers#
###############
# This text will be dropped into the hosts.deny file for wrappers
# to use. There are two formats for TCP wrappers:
#
# Format One: Old Style - The default when extended host processing
# options are not enabled.
#
KILL_HOSTS_DENY="ALL: $TARGET$"

La machine qui a tenté une attaque, sera inscrite dans le fichier /etc/hosts.deny (attention si vous faites des tests depuis un client de votre réseau, vous riquez de ne plus pouvoir disposer des ressources du serveur comme par exemple l'accés à internet ou à la messagerie mais on ne s'inquiète pas, on va voir plus loin comment remédier à cela ...)

###################
# External Command#
###################
.....

#
# KILL_RUN_CMD="/some/path/here/script $TARGET$ $PORT$"
#KILL_RUN_CMD="/bin/mail -s 'Portscan from $TARGET on port $PORTS' user@host <dev<null"
KILL_RUN_CMD="/etc/rc.d/init.d/diald stop"

Si on dispose d'une connection via un modem.

Ou alors on dé-commente la ligne KILL_RUN_CMD_FIRST="0"

Si on veut recevoir un mail sur le compte de root en cas d'attaque, il faut modifier les lignes

# KILL_RUN_CMD_FIRST="0"
# KILL_RUN_CMD="/some/path/here/script $TARGET$ $PORT$"

ainsi :

KILL_RUN_CMD_FIRST="0"
KILL_RUN_CMD="/bin/echo ' ' | /bin/mail -s 'Tentative de scan de $TARGET$ ' root "

De cette façon, root reçoit un message avec pour sujet : Tentative de scan de IP-de-l'attaquant

Ou encore mieux, si on a installé logcheck, on peut lui demander d'être exécuté en cas d'attaque :

KILL_RUN_CMD=".usr/bin/logcheck.sh"

Malin, non ? ;))

vers haut de la page

b- porstentry.mode

Ici on définit comment va fonctionner portsentry :

Portsentry peut utiliser six modes différents, selon l'option choisie au démarrage.
- La première option "-tcp" est le mode de base. Avec cette option, portsentry lie les ports TCP trouvés dans le fichier de config dans la partie "port configuration". Il peut lier jusqu'à 64 ports.
- La seconde "-udp" fait la même chose que la précédente pour les ports UDP.
- La troisième est "-stcp", le "s" signifiant stealth (furtif). Cette option et les suivantes ne sont disponibles que sous Linux. Avec l'option "-stcp", portsentry utilise un "socket" pour surveiller les paquets en entrée, autrement dit, les ports ne sont liés à rien.
-La quatrième "-sudp" fait la même chose que la précédente pour les ports UDP.
- Les cinquième et sixième sont "-atcp" et "-audp". Ce sont les options les plus efficaces (le "a" signifie avancé). Avec ces options, portsentry établit une liste des ports à l'écoute, TCP et UDP si vous sélectionnez les deux, et bloque l'hôte qui se connecte à ces ports, à moins qu'il ne figure dans le fichier portsentry.ignore.

Là on décommente les options que l'on souhaite utiliser :

# This is the modes files for Portsentry. Uncomment the modes you want to run portsentry to run in #.For information about each mode, please see the Portsentry docummentation.

tcp

udp

#stcp

#sudp

atcp

audp

vers haut de la page

c- portsentry.ignore

Ici, il faut placer les adresse IP des machines que vous autorisez à scanner le serveur.

Aux lignes :

127.0.01
0.0.0.0

Rajouez par exemple 172.16.0.200 (l'ip de la machine qui servura pour vos tests)

vers haut de la page

 

4- Essais

Pour lancer portsentry :

#portsentry -[ option]

ou alors, si on a renseigné le fichier portsentry.mode :

# service portsentry start

Pour un démarrage automatique au boot de la machine, j'ai ajouté cette ligne dans /etc/rc.local

Un scan :

Un deuxième scan :

Ici, on n'a plus d'info., de plus, si on n'a renseigné le fichier portsentry.conf avec l'IP du client, on voit dans les messages de log :

Jan 4 04:45:27 e-smith portsentry[2714]: attackalert: Connect from host: pc-00200.nunux.dyndns.org/172.16.0.200 to TCP port: 110
Jan 4 04:45:27 e-smith portsentry[2714]: attackalert: Host 172.16.0.200 has been blocked via dropped route using command: "/sbin/ipchains -I input -s 172.16.0.200 -j DENY -l"
.....

Jan 4 04:48:36 e-smith kernel: Packet log: input DENY eth0 PROTO=6 172.16.0.200:3382 172.16.0.1:110 L=40 S=0x00 I=25450 F=0x4000 T=128 (#1)
Jan 4 04:48:36 e-smith kernel: Packet log: input DENY eth0 PROTO=6 172.16.0.200:3380 172.16.0.1:25 L=40 S=0x00 I=25706 F=0x4000 T=128 (#1)
Jan 4 04:48:46 e-smith kernel: Packet log: input DENY eth0 PROTO=6 172.16.0.200:3379 172.16.0.1:21 L=40 S=0x00 I=25962 F=0x0000 T=128 (#1)
Si non :

vers haut de la page

5- liens

 

Pour récupérer le produit :

www.psionic.com/abacus/portsentry pour la tarbal

www.e-smith.org/contrib/rpm-index/ pour le rpm

Pour plus de détails théorique :

L'excellent site Funix : à la section détecter les attaques en temps réel En plus, ici, les installations de Tcplogd et de Portsentry depuis les tarbals sont décrites.

l'article de Georges Tarbouriech sur linuxfocus.org

 

vers haut de la page

 

 

Accueil