FreeBSD – Controlul accesului SSH folosind TCP Wrappers

TCP Wrappers este o facilitate ce permite filtrarea pachetelor IP fiind foarte ușor de configurat și de folosit. Cu ajutorul acesti facilități putem controla accesul din exterior către serviciile de rețea ce rulează pe mașina respectivă, definind host-urile care au acces la aceste servicii.
În cazul freeBSD, TCP Wrappers vine în distribuția de bază și nu mai trebuie instalat nimic.
Există două cazuri în care TCP Wrappers poate fi folosit cu un serviciu, depinzând de modul în care este pornit serviciul respectiv:
– pentru serviciile controlate de inetd ( în cazul freeBSD serviciul inetd este activat implicit cu această facilitate);
– pentru serviciile de sine stătătoare, pot fi controlate de această facilitate doar dacă au implementat din construcție suport pentru TCP Wrappers și folosesc librăria libwrap.
În mod normal pentru configurare se folosesc fișierele /etc/hosts.deny și /etc/hosts.allow. În cazul freeBSD, spre deosebire de alte implementări, toate configurările se vor face în fișierul /etc/hosts.allow. În acest fișier avem reguli exprimate prin sintaxa de genul:
serviciu : adresă : acțiune
unde serviciu reprezintă numele serviciului pornit de către inetd sau numele serviciului stand-alone care suportă TCP Wrappers, adresă este un hostname valid, o adresă IPv4 sau chiar o adresă IPv6 (in acest caz trebuie inclusă între paranteze [] ) iar parametrul acțiune poate fi deny sau allow.
Fișierul de configurare este citit de sus în jos până când se găsește o regulă care se potrivește. Atunci când aceasta este găsită, ea se aplică și procesul de căutare este oprit, regulile de după aceasta nu mai sunt luate în considerare. Plecând de la aceste considerente și ținând cont că în cazul freeBSD serviciul SSHd suportă TCP Wrappers putem să scriem următoarele reguli în fișierul /etc/hosts.allow:
sshd : 192.168.1.20 : allow
sshd : 192.168.1.30 : deny
sshd : ALL: deny
ALL : ALL : allow
În acest caz accesul către serviciul SSHd este permis numai de la adresele 192.168.1.20 (prima linie), 192.168.1.30 (a doua linie) iar de a restul host-urilor accesul către serviciul SSHd este restricționat (a treia linie). Către celelalte servicii accesul este permis de la orice adresă (a patra linie).
Aceasta este varianta fericită în care știm de la adrese ne vom loga folosind protocolul SSH la mașina respectivă. Se întâmplă deseori să avem nevoie să administrăm mașina respectivă de la distantă, de la diferite adrese IP. Pentru a beneficia și in acest context de facilitățile oferite de TCP Wrappers putem folosi scriptul denyhosts, existent în porturile freeBSD. Pentru a-l instala rulăm următoarele comenzi:
cd /usr/ports/security/denyhosts
make
make install
make clean
Adăugăm apoi în fișierul /etc/rc.conf linia următoare pentru a-l activa la pornirea sistemului:
denyhosts_enable="YES"
Edităm fișierul /etc/hosts.allow și adăugăm următoarele reguli, având insă grijă de locul unde le inserăm dacă mai avem și alte reguli specifice pentru serviciul SSHd:
sshd : /etc/hosts.deniedssh : deny
sshd : ALL : allow
Cu ajutorul comenzii:
touch /etc/hosts.deniedssh
facem fișierul /etc/hosts.deniedssh în care scriptul va scrie regulile în funcție de configurarea pe care o vom face. Pentru ca scriptul să sesiseze încercările multiple de login, serviciul syslog trebuie să fie pornit cu paramentrul „-c”, lucru pe care îl vom face adăugând linia următoare în /etc/rc.conf:
syslogd_flags="-c"
Urmează configurarea scriptului prin editarea fișierului de configurare /usr/local/etc/denyhosts.conf.
Un exemplu minimal este următorul:
SECURE_LOG = /var/log/auth.log
HOSTS_DENY = /etc/hosts.deniedssh
PURGE_DENY =
BLOCK_SERVICE = sshd
DENY_THRESHOLD_INVALID = 3
DENY_THRESHOLD_VALID = 5
DENY_THRESHOLD_ROOT = 1
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/local/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=NO
LOCK_FILE = /var/run/denyhosts.pid
Explicația fiecărei linii se găseste în fișierul de configurare care se instalează implicit o dată cu scriptul. Bineînteles că mai există și alte facilități care pot fi setate, cum ar fi trimiterea de mail-uri de atenționare atunci când se încearcă o logare nereușită pe mașina respectivă.
Pornirea rulării scriptului se realizează cu comanda:
/usr/local/etc/rc.d/denyhosts start
Comportamentul dat de fișierul de configurare de mai sus este următorul:
– la 3 încercări invalide de logare pe SSH cu un nume utilizator care nu exista pe sistem, adresa IP de la care se încearcă logarea este blocată;
– la 5 încercări invalide de logare pe SSH cu un nume de utilizatori care există pe sistem, adresa IP de la care se încearcă logarea este blocată;
– la o încercare invalidă de logare pe SSH cu userul root, adresa IP de la care se încearcă logarea este blocată;
Blocarea se face pe o durată de timp nedeterminată.

Articole asemanatoare:

Bogdan Turcanu

Bogdan Turcanu

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.