Fail2ban – Admin ports

Disons-le de suite, modifier le port par défaut de votre ssh ou de votre rds ne sécurisera pas les failles de sécurité de votre logiciel d’administration. Par contre…. ça peut permettre de detecter des comportements suspects.

En première instance, il faut se méfier des tentatives de connexions sur les ports :

  • FTP
  • SSH
  • TELNET
  • Windows RPC
  • RDS / TSE
  • WinRM http
  • WinRM https

Est ce qu’il faut avoir une attention particulière pour les ports par défaut des base de données ? (mysql, mssql )… la question est ouverte. Si possible, restez OS Agnostic, ce n’est pas parce que vous tournez sur unix-like que vous devez ne pas surveiller les ports MS.

Allons y !!

Le préquis est de loguer les tentatives de connexions. Par defaut ipfw ne logue pas les deny saus si c’est explicetement indiqué dans la règle ou alors il logue tous les events (Seeya FreeSpace) … Il va donc nous falloir ajouter des règles de rejets explicites en indiquant que nous souhaitons les loguer. Le but est aussi de faire une configuration facile à retenir, j’ai donc choisi de modifier le /etc/rc.conf avec une entréé firewall_logports et fait les modifications necessaire dans le fichier /etc/rc.firewall afin de pouvoir activer cette option

if [ -n “${firewall_logports}” ] ; then
sysctl net.inet.ip.fw.verbose=1 >/dev/null
log=”log logamount 500″ # The default of 100 is too low.
for i in ${firewall_logports} ; do
${fwcmd} add deny $log ip from any to me $i in
done
fi

et pour le rc.conf

firewall_logports=”21 22 23 135 3389 5986 5985″

Après le lancement du Firewall, les règles contiennent donc

65400 11 448 deny log logamount 500 ip from any to me 21 in
65500 37 1592 deny log logamount 500 ip from any to me 22 in
65500 38 1564 deny log logamount 500 ip from any to me 23 in
65500 30 1228 deny log logamount 500 ip from any to me 3389 in
65500 3 120 deny log logamount 500 ip from any to me 5986 in
65500 0 0 deny log logamount 500 ip from any to me 5985 in

et le log se remplit déjà de deny

Dec 21 11:47:28 toto kernel: ipfw: 65500 Deny TCP 115.21.200.224:21355 1.1.1.1:23 in via igb0
Dec 21 11:56:36 toto kernel: ipfw: 65500 Deny TCP 142.154.20.47:37391 1.1.1.1:22 in via igb0
Dec 21 12:18:01 toto kernel: ipfw: 65500 Deny TCP 89.248.165.144:42642 1.1.1.1:3389 in via igb0
Dec 21 12:22:14 toto kernel: ipfw: 65500 Deny TCP 154.89.5.66:58914 1.1.1.1:22 in via igb0
Dec 21 12:34:29 toto kernel: ipfw: 65500 Deny UDP 64.62.197.79:36113 1.1.1.1:3389 in via igb0
Dec 21 12:36:27 toto kernel: ipfw: 65500 Deny TCP 162.244.32.210:55307 1.1.1.1:22 in via igb0
Dec 21 12:38:06 toto kernel: ipfw: 65500 Deny TCP 61.127.192.178:9796 1.1.1.1:23 in via igb0
Dec 21 12:41:52 toto kernel: ipfw: 65400 Deny TCP 167.248.133.24:60076 1.1.1.1:21 in via igb0
Dec 21 12:48:29 toto kernel: ipfw: 65500 Deny TCP 192.35.168.126:47940 1.1.1.1:23 in via igb0
Dec 21 12:59:07 toto kernel: ipfw: 65400 Deny TCP 193.118.53.131:26952 1.1.1.1:21 in via igb0
Dec 21 13:03:29 toto kernel: ipfw: 65500 Deny TCP 221.163.55.202:34199 1.1.1.1:23 in via igb0
Dec 21 13:23:59 toto kernel: ipfw: 65500 Deny TCP 93.75.27.188:5317 1.1.1.1:23 in via igb0
Dec 21 13:24:20 toto kernel: ipfw: 65500 Deny TCP 138.199.32.98:48240 1.1.1.1:23 in via igb0
Dec 21 13:25:08 toto kernel: ipfw: 65500 Deny TCP 64.52.173.104:56744 1.1.1.1:3389 in via igb0
Dec 21 13:30:26 toto kernel: ipfw: 65500 Deny TCP 161.35.201.142:47065 1.1.1.1:22 in via igb0
Dec 21 13:34:22 toto kernel: ipfw: 65500 Deny TCP 45.129.137.241:44700 1.1.1.1:3389 in via igb0
Dec 21 13:35:36 toto kernel: ipfw: 65500 Deny TCP 138.199.32.100:41651 1.1.1.1:22 in via igb0
Dec 21 13:38:05 toto kernel: ipfw: 65500 Deny TCP 27.124.5.45:48813 1.1.1.1:22 in via igb0
Dec 21 13:45:13 toto kernel: ipfw: 65500 Deny TCP 143.198.64.38:49220 1.1.1.1:22 in via igb0
Dec 21 14:15:38 toto kernel: ipfw: 65500 Deny TCP 223.70.137.244:57344 1.1.1.1:23 in via igb0
Dec 21 14:21:58 toto kernel: ipfw: 65500 Deny TCP 138.68.94.147:49012 1.1.1.1:3389 in via igb0
Dec 21 14:39:56 toto kernel: ipfw: 65500 Deny TCP 92.118.161.21:60516 1.1.1.1:22 in via igb0
Dec 21 14:42:25 toto kernel: ipfw: 65500 Deny TCP 45.155.204.188:51227 1.1.1.1:3389 in via igb0
Dec 21 14:55:08 toto kernel: ipfw: 65500 Deny TCP 109.195.198.87:54765 1.1.1.1:3389 in via igb0

De la matière pour fail2ban !

Depuis ce log nous allons recupérer les ip à bloquer par fail2ban. Pour la lisibilité j’ai préféré eclater les regexp sur plusieurs lignes, il est possible de tout mettre dans un seul regexp.

[Definition]

_daemon = ipfw

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = ^.* :\d+ .*?:3389 in via .*$
^.* :\d+ .*?:21 in via .*$
^.* :\d+ .*?:22 in via .*$
^.* :\d+ .*?:23 in via .*$
^.* :\d+ .*?:135 in via .*$
^.* :\d+ .*?:5985 in via .*$
^.* :\d+ .*?:5986 in via .*$

Pour vérfier que votre configuration est ok, vous pouvez utiliser la commande fail2ban-regex qui va lancer une analyse de votre filtre sur le log choisi.

# fail2ban-regex /var/log/security /usr/local/etc/fail2ban/filter.d/bsd-ipfw-port.conf

Running tests
=============

Use failregex filter file : bsd-ipfw-port, basedir: /usr/local/etc/fail2ban
Use datepattern : {^LN-BEG} : Default Detectors
Use log file : /var/log/security
Use encoding : UTF-8

Results
=======

Failregex: 243 total
|- #) [# of hits] regular expression
| 1) [36] ^.* :\d+ .*?:3389 in via .*$
| 2) [13] ^.* :\d+ .*?:21 in via .*$
| 3) [145] ^.* :\d+ .*?:22 in via .*$
| 4) [42] ^.* :\d+ .*?:23 in via .*$
| 6) [3] ^.* :\d+ .*?:5986 in via .*$
`-

Il ne reste plus qu’à configurer le jail. Ici, j’ai choisi d’utiliser la table ipfw par defaut (table 1), mais il est totalement possible de la nommer.

[ipfw-ipfw]
usedns = no
enabled = true
filter = bsd-ipfw-port
action = bsd-ipfw[port=any]
logpath = /var/log/security
findtime = 600
maxretry = 1
bantime = 86400

Il suffit de relancer fail2ban afin qu’il créé les entrées specifique ipfw et voir les tables se remplir

# ipfw table 1 list | wc -l
139

Leave a Reply

Your email address will not be published. Required fields are marked *