A minap a Youtube-on belefutottam egy tavalyi, Tanya Csenöl videóba. A címe, Harc Mikrotikkel a robotok ellen volt. A video elgondolkodtatott, hogy a két szerveremen ugyanezt, iptables és Fail2Ban segítségével könnyedén meg tudom oldani. Némi Google segítséggel (a regexp nem a legnagyobb barátom), sikerült is elkészítenem a megoldást, ami figyeli a 22-es portot, és ha valaki ott próbál rámenni a szerverre, bannolja, egy évre.
Nézzük, hogyan készült:
Először is, telepítettem az iptables-persistent csomagot, ami elmenti az Iptables beállításait, így egy restart során, nem vész el.
Második körben, az alábbi Iptables kódra van szükségünk:
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix '** SSH Probe **' --log-level 4
Innentől a syslog fájlba, minden 22-es portra próbálkozás, bekerül ** SSH Probe ** jelöléssel.
Következzék a Fail2Ban feldolgozás. Az /etc/fail2ban/filter.d könyvtárba hozzunk létre egy sshprobe.conf nevű fájlt, majd az alábbi sorokat tegyük bele:
# Fail2Ban configuration file
#
# Author: Lajos Agoston
[Definition]
# 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 "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = ^.*\\*\\* SSH Probe \\*\\*.* SRC=<HOST> .*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Ha ezzel megvagyunk, az /etc/fail2ban/jail.d mappába szintén hozzunk létre egy sshprobe.conf fájlt, az alábbi sorokkal:
[sshprobe]
enabled = true
filter = sshprobe
action = iptables-allports[name=sshprobe]
logpath = /var/log/syslog
maxretry = 1
# findtime: 1 day
findtime = 86400
# bantime: 1 year
bantime = 31536000
Ez is kész, nincs más hátra, mint újraindítani a fail2ban szolgáltatást:
systemctl restart fail2ban
Innentől, ha valaki megpiszkálja a 22-es portját a szerverünknek, egy évre teljes kitiltást kap.