Pakalbėsiu apie tai, kaip apsisaugoti nuo bandymų nulaužti sistemą bandant nuspėti slaptažodžius. Apie tai, kaip viena nedidelė programėlė gali ženkliai apsunkinti bruteforce robotų darbą.
Visai neseniai rašiau kaip padaryti saugesnį prisijungimą prie savo serverio nenaudojant slaptažodžio. Apie tai galite paskaityti Saugus SSH prisijungimas be slaptažodžio. Šiame straipsnyje aprašysiu vieną įdomią programą, kuri nemaža dalimi papildo serverio saugumą.
Tarkime kažkas bando atspėti jūsų prisijungimo duomenis, pasitelkę programas slaptažodžių laužimui. Dažniausiai tam reikalui yra programos-robotai, kurios pasitelkdamos žodynus bando nuspėti slaptažodį. Įsivaizduokime situaciją, kad mes turime vieną “gerą” slaptažodį, kurį naudojame forumuose, tinklapiuose ir šiaip visur, kur tik reikalauja autorizacijos. Ir įsivaizduokite, kad kažkurį iš tų tinklapių nulaužia, pavagia duomenų bazę su visais slaptažodžiais, pastaruosius patalpindami į slaptažodžių žodynus. Programai-bobotui atrinkti slaptažodį teliks laiko klausimas.
Ir čia ateina toks dalykas kaip fail2ban programa, kuri stebi sistemos logus ir ieško juose įtartinos veiklos. Jos tikslas – surasti įtartiną veiklą, tarkime bandymą slaptažodžio parinkimą ir užblokuoti piktadario IP. Viskas paprasta kaip 2×2.
Taigi mažiau kalbų, daugiau darbų. Diegiame fail2ban ir suderiname, kad filtruotų ssh prisijungimus. Linux terminale vedame komandą:
sudo apt install fail2ban
OK. Sudiegus mums reikia parašyti taisyklę. Tam reikalui /etc/fail2ban aplanke teikia sukurti failą fail2ban.local, kuriame ir aprašinėsime taisykles. Kuriame failą:
/etc/fail2ban/fail2ban.local
Atsidariusiame lange suvedame taip:
[DEFAULT]
# "bantime" is the number of seconds that a host is banned.
bantime = 15m
# A host is banned if it has generated "maxretry" during the last "findtime" seconds.
findtime = 15m
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
# SSH apsauga
[ssh]
ignoreip = 127.0.0.1/8 ::1 192.168.0.1/32
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Išsaugome nuspaudę klavišų kombinaciją CTRL+O (O raidė) ir išeiname spausdami CTRL+X
Šiek tiek apie tai, ką mes ten suvedėme. [DEFAULT] reikšmės bantime, findtime ir maxentry
[DEFAULT]
# "bantime" is the number of seconds that a host is banned.
bantime = 15m
# A host is banned if it has generated "maxretry" during the last "findtime" seconds.
findtime = 15m
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
yra nukopijuota iš jail.conf failo, kurį nerekomenduojama redaguoti. Arba jei norima tiesiogiai redaguoti, tai geriau pasidaryti to failo kopiją. Toliau trumpai kas čia per nustatymai:
- bantime = kiek minučių bus užblokuotas IP ;
- findtime = hostas bus užblokuotas, jei pakartotinai per nurodytą laiką bandys laužtis;
- maxretry = numatytas galimų suklydimų skaičius, jei nenurodo kitaip taisyklė;
Na ir žemiau aprašoma taisyklė, kurią monitorins fail2ban:
[ssh]
ignoreip = 127.0.0.1/8 ::1 192.168.0.1/32
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Detaliau apie ką mes čia:
- ignoreip = IP adresai į kuriuos fail2ban nekreips dėmesio;
- enable = true (įjungta taisyklė);
- port = kuriam portui taikoma taisyklė;
- filter = sshd (aplanke filter.d esančios taisyklės aprašymo failo pavadinimas be plėtinio;
- logpath = /var/log/auth.log (kokį log failą stebėti, šiuo atveju stebimas; prisijungimus registruojantis logas);
- maxretry = 3 (kiek kartų galima suklysti vedant slaptažodį);
Po visko perkraunam fail2ban servisą:
sudo service fail2ban restart
Ir pasižiūrime, koks serviso statusas:
sudo service fail2ban status
Jei viskas gerai, turime gauti kažką tokio:
Tame pačiame faile aprašomos ir kitos taisyklės. Jei norite sukurti savo taisyklę, tai jos konfigūraciją suvedame naujame faile, kurį patalpiname filter.d aplanke.
Norėdami pasižiūrėti, koks pačio fail2ban statusas, kokios taisyklės aktyvios, vedame:
sudo fail2ban-client status
Norėdami pasižiūrėti vienos taisyklės, tarkime sshd statusą vedame:
sudo fail2ban-client status sshd
Statuso atsakymas:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Jei norime nuimti IP draudimą, vedame:
fail2ban-client set ssh unbanip ip_adresas
Analogiškai jei norime fail2ban pagalba užblokuoti IP adresą:
fail2ban-client set ssh banip ip_adresas
Tai va maždaug tiek. Lai būna jūsų kompiuteriai saugūs.