Packet Filter : protection bruteforce SSH

Boris HUISGEN March 13, 2009

administration bsd pf ssh

Le firewall PacketFilter permet de vous protéger des attaques SSH par brute force. La technique consiste à ajouter dynamiquement les IP fautives dans une table et de bloquer tout connexion entrante de celles-ci.

Il convient donc de mettre en place un fichier de règle PF remplissant les actions suivantes:

  • déclarer la table qui va contenir les IP bannies.
  • bloquer en début de filtrage les connexions entrantes des IPs présentes dans cette table.
  • ajouter les options de collecte des états des connexions sur les règles que l’on souhaite protéger des attaques par bruteforce.
  • optionnelement vider la table par une commande en tâche cron.

Dans le fichier ci-dessous, j’autorise uniquement le trafic ICMP et les connexions SSH mais celles-ci sont protégées des attaques par brute force :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    #
    # pf.conf
    #
    
    # macros
    ext_if = "re0"
    myip = "XX.XX.XX.XX"
    
    # tables
    table <bruteforce> persist {}
    
    # options
    set block-policy drop
    set skip on lo0
    set limit { states 20000, frags 5000, src-nodes 2000 }
    
    # normalization
    scrub in all fragment reassemble
    scrub all reassemble tcp
    scrub in all random-id
    
    #
    # rules
    #
    
    block all
    block quick from <bruteforce>
    antispoof quick for lo0
    
    pass out inet proto tcp all flags S/SA keep state
    pass out inet proto udp all keep state
    
    pass in on $ext_if inet proto icmp from any to any keep state
    pass out on $ext_if inet proto icmp from any to any keep state
    
    pass in on $ext_if inet proto tcp from any to any port 22 flags S/SA keep state (source-track rule, max-src-nodes 8, max-src-conn 8, max-src-conn-rate 10/60, overload <bruteforce> flush global)

Dans le cas où un client se connecte plus de 10 fois par minute, il sera banni et bloqué pour toute nouvelle connexion. Pour débannir les IP au bout de 24 heures par exemple, cette commande est utilisée :

    # /usr/local/sbin/expiretable -t 24h bruteforce

See also

Firebird : script de désinstallation pour Mac OS X
Read more
OpenSSL : client telnet sécurisé
Read more
DNS : vérification des zones de domaine
Read more