SSH/FTP : Limiter les tentatives d'intrusion

Le
Zouplaz
Bonjour, je cherche à configurer correctement blockhosts pour empecher
les tentatives d'intrusion à répétition et banir temporairement les
adresses IP sources.

J'aurais voulu essayer fail2ban mais il requiert une version de Python
non encore dispo sur ma distribution (CentOS 4.5)

Le problème est que depuis que j'utilise blockhosts je n'arrive plus à
me connecter en FTP sur le serveur.

Ce que je ne comprends pas c'est que blockhosts.py n'est exécuté qu'une
fois pas heure, et que dans l'intervalle il n'apparait pas dans ps - Al
Pourtant quand je tente de me connecter avec un client ftp, j'obtiens
ceci dans /var/log/messages
blockhosts: echo tag: 192.168.1.1-vsftpd@192.168.1.11

Je ne comprends pas comment blockhosts peut s'exécuter sur demande,
d'ailleurs iptables --list retourne ceci :
Chain INPUT (policy ACCEPT)
target prot opt source destination
blockhosts all -- anywhere anywhere

Que fait cette target 'blockhosts' ici, à quoi correspond elle ? Est-ce
que ça signifie que blockhosts.py est exécuté par iptables ? Comme un
filtre ? Mais où est-ce que c'est déclaré ce genre de comportement ?

Voila, si vous avez un peu d'aide à me fournir ça serait sympa !


/etc/blockhosts.cfg (ne comportant que les sections que j'ai modifié)

#--
[common]
# common section is variables that may be used by main program, mail, etc

#HOSTS_BLOCKFILE = "/etc/hosts.allow"
# the name of the block-file on your computer - usually hosts.allow or
# hosts.deny, see "man 5 hosts_access" for details on these files.
# default is hosts.allow

#HOST_BLOCKLINE = ["ALL: ", " : deny"]
# the line to output, with Host Ip Address in between the strings above,
# to turn on blocking of that IP address

#VERBOSE = Log.MESSAGE_LEVEL_ERROR #-> error (same as --quiet option)
VERBOSE = Log.MESSAGE_LEVEL_WARNING #-> warning (default)
#VERBOSE = Log.MESSAGE_LEVEL_INFO #-> info (same as --verbose option)
#VERBOSE = Log.MESSAGE_LEVEL_DEBUG #-> debug (same as --debug option)
# logging message levels - each level includes all levels above it

#--
[filters]
# filters section defines configuration for filtering watched hosts
# into the blocked hosts list

COUNT_THRESHOLD = 7
# number of invalid attempts after which host is blocked
# note that actual denial make take one or more attempts - depends on the
# timing of when LOGFILES are updated by the system, and when this script
# gets to run

#AGE_THRESHOLD = 12
# number of hours after which host entry is discarded from hosts.deny
# 24 -> one day, 168 -> one week, 720 -> 30 days, integer values only
# most attackers go away after they are blocked, so to keep hosts.deny
# file size small, no reason to make this any more than, say, half-a-day

WHITELIST = [ "127.0.0.1", "192.168.1.1", "194.146.224.129"]
#WHITELIST = []
#WHITELIST = [ "127.0.0.1", "10.0.0..*", ]
# A list of IP (IPv4) addresses or regular expressions that represent
# a IP (IPv4) address - this is the list of white-listed IP addresses.
# When considering IPs to block, if a IP address maches any item in this
# list, then it will be removed from the block list - so won't be blocked.

#BLACKLIST = []
#BLACKLIST = [ "192.168.10.1", "10..*", ]
# A list of IP (IPv4) addresses or regular expressions that represent
# a IP (IPv4) address - this is the list of black-listed IP addresses.
# When considering IPs to block, if a IP address maches any item in this
# list, then it will be immediately added to the block list, even if
# COUNT_THRESHOLD may not have been reached.
# IP addresses directly specified in this list without a regular expression
# will be immediately added to the blocked list.
# WHITELIST takes precedence over BLACKLIST - so a match in both will mean
# it is white-listed.

#--
[blockhosts]
# blockhosts section defines the log files to scan and patterns to look for

#LOGFILES = [ "/var/log/secure", ]
#LOGFILES = [ "/var/log/auth.log", ]
LOGFILES = [ "/var/log/secure", "/var/log/xferlog", ]
# default list of logs to process, comma separated, can follow Python
# syntax, should be a sequence (list or tuple) of strings representing
# filenames: 1 or more files, default is single file: /var/log/secure

#LOCKFILE = "/tmp/blockhosts.lock"
# need create/write access to this file, used to make sure only one
# instance of blockhosts.py script writes the HOSTS_BLOCKFILE at one time
# note that the mail/iptables/iproute parts of the program do not serialize

#--
[ipblock]
# ipblock section for enabling protection using TCP/IP level blocking -
# by using null routes, or iptables filtering, all network communication
# is stopped from a particular IP address

#IPBLOCK = ""
#IPBLOCK = "iproute"
IPBLOCK = "iptables"
# "iproute": Do TCP/IP blocking using route commands to setup null-routes.
# ip route add <ip-addr> via 127.0.0.1
# "iptable": Do TCP/IP blocking, using iptables packet filtering.
# iptables --append blockhosts --source <ip-addr> -j DROP

#--
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mihamina Rakotomandimby
Le #1904457
Zouplaz wrote:
Bonjour, je cherche à configurer correctement blockhosts pour empecher
les tentatives d'intrusion à répétition et banir temporairement les
adresses IP sources.


Connais-tu le port knocking, dans ce domaine?
http://cahierspip.ww7.be/spip.php?article64

Tu peux par exemple configurer ton firewall pour qu'il n'accepte la
connexion sur le 22 que pour une machine qui a fait des tentatives de
connexion sur le port X,Y,Z et ce dans cet ordre.

Il y a une discussion à ce sujet sur fr.comp.securite, ou on débat de
l'efficacité de la technique,...

Kevin Denis
Le #1904456
Le 16-10-2007, Zouplaz
Ce que je ne comprends pas c'est que blockhosts.py n'est exécuté qu'une
fois pas heure, et que dans l'intervalle il n'apparait pas dans ps - Al

C'est qu'il doit etre lance par cron. man crontab, man crond.


Je ne comprends pas comment blockhosts peut s'exécuter sur demande,


c'est le boulot de cron.
--
Kevin

Zouplaz
Le #1904455
le 16/10/2007 15:50, Kevin Denis nous a dit:
Ce que je ne comprends pas c'est que blockhosts.py n'est exécuté qu'une
fois pas heure, et que dans l'intervalle il n'apparait pas dans ps - Al

C'est qu'il doit etre lance par cron. man crontab, man crond.


Je ne comprends pas comment blockhosts peut s'exécuter sur demande,


c'est le boulot de cron.


Bien sur qu'il s'exécute par cron puisque c'est moi qui ait déclaré la
tâche cron, là n'est pas la question. Ce que je ne comprends pas c'est
que le process n'apparaissent nulle part et que pourtant il se passe
quelque chose à chaque tentative de connexion ftp alors que pour moi il
ne devrait y avoir que traitement par batch et pas à chaque connexion.

Et comme la doc du bidule en question est pas claire.

Si vous avez un autre outil du même genre, je prends

Merci


gerbier
Le #1904454
Zouplaz wrote:

Et comme la doc du bidule en question est pas claire.

Si vous avez un autre outil du même genre, je prends


fail2ban ( http://www.fail2ban.org/wiki/index.php/Main_Page )

le principe est d'utiliser gamin pour surveiller les log (pas de polling)

Zouplaz
Le #1904452
le 16/10/2007 17:34, gerbier nous a dit:
Zouplaz wrote:

Et comme la doc du bidule en question est pas claire.

Si vous avez un autre outil du même genre, je prends


fail2ban ( http://www.fail2ban.org/wiki/index.php/Main_Page )

le principe est d'utiliser gamin pour surveiller les log (pas de polling)


Ah ben voila, c'est celui sur lequel je lorgnais mais manque de bol
CentOS 4.5 ne propose pas la version la python adéquate pour le faire
tourner (il faut une 2.4.x et j'ai une 2.3.x) - Et je préfère éviter les
install tar balls


Pascal Hambourg
Le #1904446
Salut,


d'ailleurs iptables --list retourne ceci :
Chain INPUT (policy ACCEPT)
target prot opt source destination
blockhosts all -- anywhere anywhere

Que fait cette target 'blockhosts' ici, à quoi correspond elle ?


C'est une chaîne utilisateur qui est appelée par la chaîne INPUT
(paquets entrants à destination de la machine) et qui contient les
règles de blocage d'adresses sources créées par blockhost.

Est-ce que ça signifie que blockhosts.py est exécuté par iptables ?


Non. C'est juste une chaîne utilisateur qui aurait pu s'appeler
n'importe comment.

/etc/blockhosts.cfg (ne comportant que les sections que j'ai modifié)
[...]

# "iptable": Do TCP/IP blocking, using iptables packet filtering.
# iptables --append blockhosts --source <ip-addr> -j DROP


Voilà, pour chaque adresse bannie une règle est créée dans la chaîne
"blockhost".

newsreader
Le #1904443
Bonjour, je cherche à configurer correctement blockhosts pour empecher
les tentatives d'intrusion à répétition et banir temporairement les
adresses IP sources.



J'avais aussi des attaques fréquentes sur le port 22, j'ai fait quelques
tout petits changements tout bêtes sans utiliser d'autres outils que
Netfilter et maintenant mon serveur SSH ne voit plus que mes propres
connexions :
- j'ai changé le port du serveur SSH à une valeur haute (y a jusqu'à
65535) non encore utilisée sur mon serveur
- j'ai mis une règle iptables "limit" sur ce port empêchant plus de 2
nouvelles connexions par minute (c'est amplement suffisant pour moi qui
n'ouvre pas 60 000 connexions...) depuis l'Internet

Du coup, ben comme y a plus personne qui répond au 22, ben la plupart
abandonnent au deuxième essai.
Pour l'instant personne n'a trouvé le "bon" port SSH quelque part dans les
65535 parce qu'en général les scans se font sur une liste de ports
prédéfinie parce que sinon c'est trop long et parce que l'objectif c'est
de s'attaquer aux PC administrés par des novices, c'est plus facile.
Enfin, j'ai remarqué que lors d'attaques, les tentatives étaient espacées
de quelques secondes seulement, donc avec max 2/minute, ça devrait
rapidement calmer le script qui essaie d'entrer. Si un jour un entre, il
va quand même s'amuser un moment à trouver le couple user/password qui va
bien à 2 tentatives/minute... et si ça arrive, je le calmerai autrement...

Lolotte



--
(enlever pasdespam pour répondre)
http://www.dansmongrenier.com/ : les pages du manuel, les newsgroups,
recherche whois, les codes postaux, des jeux et plein d'autres bêtises...

Pascal Hambourg
Le #1904442

- j'ai changé le port du serveur SSH à une valeur haute (y a jusqu'à
65535) non encore utilisée sur mon serveur
- j'ai mis une règle iptables "limit" sur ce port empêchant plus de 2
nouvelles connexions par minute (c'est amplement suffisant pour moi qui
n'ouvre pas 60 000 connexions...) depuis l'Internet

Pour l'instant personne n'a trouvé le "bon" port SSH


Attention au risque de déni de service si quelqu'un le trouve. Si un
attaquant "bombarde" en continu ta machine de tentatives de connexions,
tu risques d'avoir du mal à te connecter à cause de la règle "limit".

Luc.Habert.00__arjf
Le #1904440
Pascal Hambourg :

Attention au risque de déni de service si quelqu'un le trouve. Si un
attaquant "bombarde" en continu ta machine de tentatives de connexions,
tu risques d'avoir du mal à te connecter à cause de la règle "limit".


Peut-être est-ce deux connexions par minute depuis une même adresse?

Nicolas George
Le #1904439
Luc Habert wrote in message
Peut-être est-ce deux connexions par minute depuis une même adresse?


Je ne crois pas qu'iptables sache faire ça.

Et puis pour la complétion de rsync ou scp, ce serait pénible...

Publicité
Poster une réponse
Anonyme