Samotná instalace je na většině Linuxových distribucí jednoduchá, protože software fail2ban se nachází v oficiálních repozitářích. V našem případě pro instalaci
použijeme známý příkaz # apt-get install fail2ban. Fail2ban je napsán v Pythonu, proto si při instalaci stáhne a nainstaluje požadované závislosti.
Po nainstalování se automaticky spustí, většinou může vyhovovat i výchozí konfigurace, ovšem doporučuji ji trochu upravit.
Konfigurace se provádí ve dvou souborech, a to v souboru fail2ban.conf a jail.conf. Oba soubory se nacházejí v adresáři /etc/fail2ban. První
konfigurační soubor není až tak zajímavý - v něm se nastavují vlastnosti služby, v druhém se nastavuje již samotné banování.
Při otevření konfiguračního souboru jail.conf je v první části sekce [Default]. Zde se nastavují výchozí hodnoty, které pak používají ostatní služby.
Najdeme tam možnosti nastavení jako ignoreip, bantime, findtime, maxretry.
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8
bantime = 600
findtime = 600
maxretry = 3
Dále v konfiguračním souboru jsou definovány akce a pod nimi již konečně jail pravidla pro jednotlivé služby. Nastavení pro SSH bude vypadat zhruba následovně:
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
maxretry = 2
Pro každou službu tedy můžeme nadefinovat parametry jako bantime, findtime a maxretry zvlášť. Pokud je nenadefinujeme, použijí se ty ze sekce [Default]. Po
provedených změnách v konfiguračních souborech je nutné službu fail2ban restartovat, to se provede příkazem # service fail2ban restart.
Pokud si nejste jisti, zda služba fail2ban běží, je možno funkčnost zobrazit pomocí příkazu # service fail2ban status. Fail2ban samozřejmě svůj provoz
loguje, ve výchozím nastavení do fail2ban.log (tohle se dá upravit v konfiguračním souboru fail2ban.conf). Takový log může vypadat následovně:
2017-04-19 18:55:14,857 fail2ban.actions [15556]: INFO Set banTime = 600
2017-04-19 18:55:14,859 fail2ban.filter [15556]: INFO Set findtime = 600
2017-04-19 18:55:14,895 fail2ban.jail [15556]: INFO Jail 'ssh' started
2017-04-20 04:40:07,972 fail2ban.filter [15556]: INFO [ssh] Found 61.152.91.20
2017-04-20 04:42:25,793 fail2ban.filter [15556]: INFO [ssh] Found 61.152.91.20
2017-04-20 04:45:03,654 fail2ban.filter [15556]: INFO [ssh] Found 61.152.91.20
2017-04-20 04:45:04,537 fail2ban.actions [15556]: NOTICE [ssh] Ban 61.152.91.20
2017-04-20 06:55:15,935 fail2ban.actions [15556]: NOTICE [ssh] Unban 82.194.76.6
Služba fail2ban má i vlastní statistiky. Ty si můžete zobrazit příkazem # fail2ban-client status anebo si zobrazit statistiku jail pravidla pomocí příkazu
# fail2ban-client status ssh.
lukas@mujstroj ~ $ sudo fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: ssh, ssh-ddos
lukas@mujstroj ~ $ sudo fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 0
| `- Total failed: 1120
`- action
|- Currently banned: 29
| `- IP list: 94.102.53.182 221.208.170.164 77.88.123.53 162.213.25.67 123.30.190.56 211.100.70.54 ...
`- Total banned: 144
Jak jsem zmiňoval výše, fail2ban používá k banování IPtables. Pomocí příkazu # iptables -L si můžeme vypsat seznam pravidel, z kterých opět vyčteme
seznam zablokovaných IP adres.
Chain fail2ban-ssh (1 references)
target |
prot |
opt |
source |
destination |
DROP |
all |
-- |
221.208.170.164 |
anywhere |
DROP |
all |
-- |
94.102.53.182 |
anywhere |
DROP |
all |
-- |
77.88.123.53 |
anywhere |
DROP |
all |
-- |
162.213.25.67 |
anywhere |
DROP |
all |
-- |
123.30.190.56 |
anywhere |
DROP |
all |
-- |
211.100.70.54 |
anywhere |