Protejarea serverului SSHD si Apache2 împotriva atacurilor BruteForce cu fail2ban

Protejarea porturilor deschise împotriva atacurilor de tip BruteForce este importantă din două motive. Primul motiv bineînțeles că este: Prevenirea accesului neautorizat pe server, iar al doilea motiv poate fi considerat economisirea resurselor de pe server (CPU) și a lățimii de bandă.

Un utilitar foarte bun și ușor de utilizat pentru acest lucru este programul fail2ban. Fail2ban poate fi configurat ca să se uite în logurile serverului, și în caz dacă cineva încearcă să ghicească o parolă intr-un mod repetat, de tip bruteforce, acesta adaugă automat o regulă in firewall (cu reguli iptables), prin care restrictionează comunicarea pentru o perioadă cu ip-ul clientului atacator. Astfel, atacatorul nu va mai primi răspuns de la server o perioadă definită (de noi), pachetele fiind aruncate de firewall.

Cum se configurează fail2ban pentru serverul SSHD pe Debian Linux?

Fail2ban are reguli predifinite, adică știe cum să se uite în anumite tipuri de log-uri, pentru a detecta încercări nereușite de login multiple, noi doar trebuie să definim locația acestor loguri, pentru că pe fiecare server acest lucru poate fi customizat. Ca să pornim o instanță de apărare pentru serverul SSHD, trebuie să adăugăm un așa numit JAIL pentru acest server. Adăugarea acestui JAIL constă în modificarea unui fișier de configurare după care programul (daemon-ul) trebuie repornit că să folosească configurația nouă.

Exemplu pentru Jail SSHD

cd /etc/fail2ban/jail.d/

touch jail-debian.local

Conținutul fișierului jail-debian.local

[sshd]
port = 22
maxentry = 3
bantime = 3600
ignoreip = 127.0.0.1/8
logpath = /var/log/auth.log
filter = sshd

port = aici specificăm portul folosit de serverul nostru. Implicit este setat la 22, dacă nu l-am modificat.
maxentry = înseamnă de câte ori poate să introducă un client o parolă greșită, înainte să fie pedepsit cu comunicația întreruptă între server și el/ea
bantime = numărul în  secunde cât timp firewall-ul va bana ip-ul atacatorului (3600 secunde = 1 oră) – putem modifica la alegere
ignoreip = adresa loopback (adică, local)
logpath = fișierul unde trebuie să se uite programul
filter = serviciul la care să fie atent, traficul care trebuie analizat

După ce am creat fișierul jail-debian.local având conținutul de mai sus, trebuie să repornim fail2ban.

/etc/init.d/fail2ban restart

Dacă totul a mers în regulă, atunci putem executa comanda următoare:

fail2ban-client status

Și ar trebui să vedem ceva de genul:

Status
| – Number of jails: 1
– Jail list: sshd

Cum ne uităm dacă serverul sshd a fost atacat recent și ce adresă de ip a fost banat?

executăm comanda:

fail2ban-client status sshd

la care va apărea statistica:

|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

Ștergerea manuală a unei adrese de ip din lista ban

Pentru a șterge o adresă de ip din lista ip-urilor banate, executăm comanda:

fail2ban-client set apache unbanip 192.0.0.105

– sintaxa: fail2ban-client set (numele jailului din care vrem să ștergem) unbanip <–adresă IP –>