Kako da zaštitite SSH pomoću Fail2Ban servisa na CentOS 7

Povratak

Uvod

Iako povezivanje na vaš server preko SSH-a može biti veoma sigurno, sam SSH demon mora da se koristi na internetu. To sa sobom nosi odredjene rizike i otvara mogućnost za napad potencijalnim napadačima. Svaka usluga koja se nalazi na mreži je potencijalna meta. Ako obratite pažnju na statistike, često ćete videti konstantne pokušaje lažnog prijavljivanja koji predstavljaju napade brute-sile od strane korisnika i botova.

Fail2ban može da ublaži ovaj problem uspostavljanjem pravila koja automatski menjaju konfiguraciju vašeg iptables firewall-a na osnovu unapred definisanog broja neuspešnih pokušaja prijavljivanja. Na ovaj način vaš server može automatski da se brani od nelegitimnih pokušaja pristupa. U ovom vodiču ćemo da vam pokažemo kako da instalirte i koristite Fail2ban na CentOS 7 serveru.

 

Instalirajte Fail2ban na CentOS 7

Iako Fail2ban nije dostupan u zvaničnom repozitorijumu CentOS paketa, on se nalazi unutar EPEL projekta (Extra Packages for Enterprise Linux). Instalirajte ga pomoću ove komande:
 
 
sudo yum install epel-release

Da biste nastavili ---press y, i pritisnite Enter:

yum prompt
Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

Sada bi trebalo da możete da instalirate fail2ban paket:

  • sudo yum install fail2ban

Ponovo pritisnite y i Enter.

Kada instalacija bude bila završena upotrebite systemctl da biste uključili fail2ban servis:

  • sudo systemctl enable fail2ban
 

Lokalna podešavanja

Konfiguracioni fajlovi za Fail2ban servis nalaze se na /etc/fail2ban directory. Tu možete da pronadjete i fajl sa podrazumevanim vrednostima pod nazivom jail.conf. S obzirom na to da ovaj fajl može da bude prepisan kada novi paketi budu instalirani, bolje je da ga ne menjamo već da napravimo novi fajl pod nazivom jail.local. Sve vrednosti koje budu definisane u jail.local biće prepisane u jail.conf.

jail.conf sadrži sekciju [DEFAULT], kao i sekcije za pojedinačne servise jail.local moźe da prepiše sve ove vrednosti. Takodje, fajlovi u /etc/fail2ban/jail.d/ mogu da se koriste za prepisivanje vrednosti u oba ova fajla. Ovo je prioritet po kojima se primenjuju pravila u fajlovima:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, po abecednom redu
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, po abedednom redu

Svaki fajl može da ima [DEFAULT] sekciju, koja se prva izvršava, a može da ima i sekcije za pojedinačne jails.  Prednost ima poslednja vrednost koja je podešena za parametar.

Počnimo sa vrlo jednostavnom verzijom jail.local-a. Otvorite novi fajl koristeći tekst editor (na primer nano):
  • sudo nano /etc/fail2ban/jail.local

Kopirajte sledeće:

/etc/fail2ban/jail.local
[DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true

Ovo će promeniti tri podešavanja: podesiće novi bantime za sve servise, proveriće da li koristimo iptables za konfiguraciju firewall-a, i pokrenuće sshd jail.

Sačuvajte podešavanja i zatvorite fajl. Sada možemo da restartujemo fail2ban servis koristeći systemctl:

  • sudo systemctl restart fail2ban

Ova komanda se završava bez ikakvog ispisa na ekranu. Da bismo proverili da li je servis pokrenut, upotrebićemo fail2ban-client:

  • sudo fail2ban-client status
Ispis
Status |- Number of jail: 1 `- Jail list: sshd

Detaljnije informacije o pojedinačnom jail fajlu možete da dobijete pomoću:

  • sudo fail2ban-client status sshd
 

Ostala podešavanja

Verzija jail.local koju smo definisali je dobar početak, ali možda ćete želeti da prilagodite i neka druga podešavanja. Otvorite jail.conf, kako bismo pogledali neke podrazumevane vrednosti. Ako odlučite da promenite neka od ovih podešavanja imajte na umu da treba ona treba da budu kopirana i u odgovarajući deo jail.local fajla.

  • sudo nano /etc/fail2ban/jail.conf

Podrazumevane vrednosti za sve Jail fajlove

Za početak prodjite kroz [DEFAULT] sekciju.

ignoreip = 127.0.0.1/8

Možete da podesite adrese koje Fail2ban ignoriše tako što ćete da dodate vrednost za ignoreip parametar. Trenutno je podešen da dopušta saobraćaj sa lokalne mašine. Možete da dodate još adresa tako što ćete ih razdvojiti razmakom.

bantime = 600

bantime pomoću ovog parametra odredjujete koliko će dugo klijent biiti zabranjen nakon što nije uspeo da uspešno da es uloguje. Vrednost se definiše u sekundama.

findtime = 600 maxretry = 3

Sledeća dva parametra koja su važna su findtime i maxretry,i koriste se paralelno da bi se definisali uslovi pod kojima će nekom klijentu da bude zabranjen pristup.

Varijabla maxretry odredjuje maksimalan broj pokušaja za logovanje u jedinici vremena koja je definisana pomoću varijable findtime. Podrazumevano podešavanje je da klijent koji ima 3 neuspela logovanja u roku od 10 minuta bude banovan.

destemail = root@localhost sendername = Fail2Ban mta = sendmail

Ako želite da podesite email obaveštenja treba da promenite destemail, sendername i mtasettings. Parametar destemail se koristi za definisanje email adrese koja će da prima obaveštenja o zabranama. Parametar sendername se koristi za definisanje imena pošiljaoca (polje "From"). Parametar mta se koristi za definisanje mail servisa koji će da se koristi za slanje pošte.

action = $(action_)s

Pomoću ovog parametra odredjujete na koji će način Fail2ban da izvrši zabranu. Vrednost  action_ je definisana malo pre toga. Podrazumevana akcija je konfigurisanje firewall-a da odbaci saobraćaj od zabranjenog hosta dok god traje zabrana, odnosno dok ne prodje vreme koje je definisano zabranom.

Ako želite da podesite email obaveštenja, možete ovu vrednost da promenite iz action_ u action_mw. Da biste u email dodali relevantne informacije iz loga unesite action_mwl.

Podešavanja za pojedinačne Jail fajlove

Posle sekcije [DEFAULT] videćete sekcije za konfiguraciju pojedinačnih jail fajlova za različite servise. Tipično ćete pronaći  port koji treba da bude zabranjen kao i logpath za praćenje zlonamernih pokušaja pristupa. Na primer, SSH jail koji je već uključen u jail.local ima sledeća podešavanja:

/etc/fail2ban/jail.local
[sshd] port = ssh logpath = %(sshd_log)s

U ovom slučaju ssh je predefinisana varijabla za standardni SSH port, a %(sshd_log)s ukoristi vrednost koja je definisana u drugom delu Fail2ban standardne konfiguracije (na ovaj način jail.conf može da se portuje i na druge operativne sisteme).

Takodje možete da vidite i podešavanje filter pomoću koga se odredjuje da li neka linija u logu pokazuje neuspeli pokušaj logovanja.

Vrednost filter je zapravo referenca ka fajlu kjoi se nalazi u the /etc/fail2ban/filter.d direktorijumu, bez .conf ekstenzije. Ovaj fajl sadrži regularne izraze koji definišu da li su linije u logu ispravne ili ne.

Svi filteri koji su vam na raspolaganju nalaze se u ovom direktorijumu:

  • ls /etc/fail2ban/filter.d

Ako vidite fajl koji izlgeda kao da je povezan sa servisom koji koristite, trebalo bi da ga otvorite pomoću tekst editora. Većina fajlova je dobro komentarisana i trebalo bi da možete da zaključite za koju je vrstu zabrane/zaštite predvidjen svaki fajlova. Takodje većina fajlova ima (disabled) sekcije u jail.conf koje po potrebi možemo da uključimo pomoću jail.local.

Na primer, zamislite da imamo sajt koji koristi Nginx i da smo primetili da postoji mnogo neuspelih pokušaja logovanja. Možemo Fail2ban servisu da kažemo da koristi the nginx-http-auth.conf fajl da bi ovo proverio pomoću /var/log/nginx/error.log file.

Ovo je zapravo već podešeno u sekciji koja se zove [nginx-http-auth] u fajlu /etc/fail2ban/jail.conf. Potrebno je samo da dodamo parametar enabled za nginx-http-auth jail to jail.local:

/etc/fail2ban/jail.local
[DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true [nginx-http-auth] enabled = true

I da restartujemo fail2ban servis:

  • sudo systemctl restart fail2ban
 

Fail2ban logovi i konfiguracija firewall-a

Za servis kao što je Fail2ban važno je da znate da li sve funkcioniše kako treba. Za početak, proverite status pomoću komande systemctl:

  • sudo systemctl status fail2ban

Ako vam nešto deluje pogrešno, možete dalje da istražite fail2ban log koji se vodi od poslednjeg boot-a:

  • sudo journalctl -b -u fail2ban

Dalje, koristite fail2ban-client da biste ispitali status fail2ban-servera, ili bilo kog od pojedinačnih jail fajlova:

  • sudo fail2ban-client status
  • sudo fail2ban-client status jail_name

Pogledajte Fail2ban log:

  • sudo tail -F /var/log/fail2ban.log

Listajte trenutna poravila koja su definisana za iptables:

  • sudo iptables -L

Show iptables rules in a format that reflects the commands necessary to enable each rule:

  • sudo iptables -S
 

Zaključak

Sada bi trebalo da možete da konfigurišete osnovna pravila i ograničenja u vezi sa vašim uslugma. Fail2ban je vrlo jednostavan za podešavanje i odlično je rešenje za zaštitu bilo koje vrste servisa koja zahteva autentikaciju.