August 18, 2019
  • 2:15 pm NameCheap – Kaupallisen SSL-sertifikaatin uusiminen
  • 9:48 pm Ubuntu Server 18.04.3 – Tietoturvapäivitysten automatisointi
  • 1:54 am Tuotantopalvelimen päivitys – Ubuntu Server 16.04 -> 18.04
  • 11:15 pm Kotiverkon toteutus: Ubiquiti EdgeRouter X, Ubiquiti UniFi UAP-AC-Lite, Netgear GS108E-300PES – VLAN-verkkojen ja palomuurisääntöjen konfigurointi
  • 4:00 am Windows 10 – Järjestelmätyökalujen ja yleisten komentojen lunttilappu

Fail2ban on ohjelma, joka suojaa palvelinta mm. bruteforce-hyökkäyksiltä rajoittamalla kirjautumisyrityksiä ja jakelemalla banneja, jos sallittujen yritysten määrä ylittyy. Se voidaan konfiguroida useille eri demoneille, mutta itse käytän sitä tällä hetkellä ainoastaan SSH-liikenteen valvomiseen.

Fail2ban seuraa tietyn demonin lokitiedostoja ja toimii määritellysti niistä luettujen merkintöjen pohjalta. Bannaus tapahtuu estämällä palomuurista kyseisen IP-osoitteen liikenne Fail2banin konfiguraatiossa määritellyksi ajaksi. Tähän se hyödyntää Iptablessia, joka on käyttöliittymä linux-kernelin Netfilter-palomuurille.

Itse käytän vielä lisäksi UFW front-endiä Iptoolsin päällä, jotta palomuurisääntöjen muokkaus olisi yksinkertaisempaa.


Asennus ja konfigurointi:

Ensiksi pakettivarastojen päivitys ja sitten fail2ban:in asennus:

sudo apt-get update
sudo apt-get -y install fail2ban

Siirryin hakemistoon /etc/fail2ban/, jossa on jo oletuksena tiedosto jail.conf. En kuitenkaan tehnyt muutoksia siihen, vaan loin uuden tiedoston nimellä jail.local. Fail2ban lukee ensisijaisesti .local-tiedostoa ja hakee sitten muut asetukset oletustiedostosta jail.conf.

cd /etc/fail2ban/
sudo nano jail.local

Tiedoston sisälle tein säännöt SSH-demonille.

[sshd]
enabled  = true
ignoreip = 127.0.0.1
banaction = ufw
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 600
findtime = 600
  • enabled = true:  merkkaa, että sshd:n säännöstö on otetaan käyttöön.
  • ignoreip: tässä määrittelin kaikki osoitteet, jotka päästetään filteristä läpi. Laitoin tähän ainoastaan oman kotini julkisen IPv4-osoitteen, jonka sitten muutin tätä blogitekstiä localhostiksi.
  • banaction: tämä määrittelee ne toimet, jotka suoritetaan, kun ryhdytään toimenpiteisiin tarpeeksi monen kirjautumisyrityksen jälkeen. Nämä vaihtoehdot löytyvät sijainnista /etc/fail2ban/action.d, jossa ufw.conf -tiedostossa on määriteltynä ne palomuurisäännöt, jotka sitten tarvittaessa määrätään tietylle kohdeosoitteelle. Oletuskonfiguraatiotiedosto on iptables-multiport.conf, mutta itse käytän ufw:ta.
  • port: portti, johon säännöstä noudatetaan. Itselläni on käytössä SSH:n oletusportti 22, joten tähän riitti pelkkä “ssh”. Jos taas portti olisi vaihdettu, laittaisin oikean portin numeron.
  • filter: määrittelee sen filterin, joka on konfiguroitu seuraamaan tiettyä demonia. Nämä löytyvät sijainnista /etc/fail2ban/filter.d, jossa sshd.conf vastaa sshd:n lokitietojen seurannasta.
  • logpath: tämä on se lokitiedosto, jota fail2ban seuraa, ja jonka perusteella se antaa banneja. Tiedot SSH-kirjautumisyrityksistä menevät oletuksena sijaintiin /var/log/auth.log, ja siksi se on määriteltynä tässä.
  • maxretry: sallittujen kirjautumisyritysten määrä. Käytännössä heti, kun fail2ban havaitsee 3 merkintää auth.logissa samasta ip-osoitteesta, se antaa kyseiselle lähteelle bannit.
  • bantime: bannin aika sekunteina. Määrittelin sen 10 minuuttiin.
  • findtime: aika, jonka sisään maxretryn arvon tulee ylittyä, jotta banni annetaan. Eli tässä tapauksessa, jos havaintoja tehdään kolme 10 minuutin sisään, niin kyseinen osoite saa bannit.

Käynnistin fail2ban:in uudelleen, jotta muutokset tulevat voimaan. Sen jälkeen varmistin, että se pyörii taustalla:

sudo service fail2ban restart
sudo service fail2ban status


Testaus:

Nyt kun seuraan fail2ban.logia, näen, kuinka fail2ban havaitsee yhteydenottoja ja jakaa bannit kolmen havainnon jälkeen. Seurasin lokia komennolla:

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

Samalla otin puhelimeni mobiiliverkossa olevalta tietokoneelta SSH-yhteyden satunnaiseen käyttäjään ja yritin kirjautumista kolmesti väärin:

Kuten kuvasta näkyy, sain yrittää kirjautumista kolmesti, kunnes yhteys katkaistiin. Yritin heti ottaa yhteyttä uudelleen, mutta pyyntö evätään palvelimen palomuurin päästä.

Fail2banin lokissa näkyi kaikki nuo yritykseni:

Ylläolevassa kuvassa näkyy punaisella toiselta koneeltani saamani banni, joka esti SSH-yhteysyritykset jail.local-tiedostossa määritetyn bantimen ajaksi.

Keltaiset ovat merkintöjen määrä auth.logista. Kolmannen merkinnän jälkeen se antoi bannit, eikä kirjautumisyrityksiä enää sallittu. Bannin jälkeen se havaitsi vielä kuitenkin ne kaksi merkintää, jotka olivat yrityksiäni ottaa palvelimeen SSH-yhteys yhteyden katkettua kolmannen kirjautumisyrityksen jälkeen. Jos kolmas olisi vielä havaittu, niin se antaisi ilmoituksen “Already banned”.

IP-osoitteeni unbannattiin minuutin päästä, mikä pitikin paikkansa, sillä asetin sen alhaiseksi testaustarkoituksessa, jotta odotusaika olisi pienempi.

Koska fail2ban etsii merkintöjä auth.logista, pystyin myös sieltä halutessani varmistamaan, että havainnot olivat oikeita.

sudo tail -F /var/log/auth.log

Tästä syystä myös bannit tulevat joskus viiveellä reaaliajasta, sillä Fail2ban ei voi toimia, ennen kuin merkinnät ovat ilmestyneet auth.logiin.

Seurailin fail2banin lokista, kuinka eri ip-osoitteita bannailtiin ja monenko yrityksen jälkeen. Fail2ban.log-tiedoston merkinnät INFO-merkinnät vastasivat jail.local -konfiguraatiotiedostossa määrittelemiäni asetuksia. Kaikki bannit annettiin aina kolmannen havainnon jälkeen ja ne vanheni bantimen mukaisesti.

Yksittäiset asetukset pystyy tarkistamaan “fail2ban-client get” -komennolla, jonka jälkeen määritellään jailin nimi ja itse asetus:

sudo fail2ban-client get sshd maxretry
sudo fail2ban-client get sshd bantime
sudo fail2ban-client get sshd findtime

Kaikkien noiden komentojen vastaus vastasi jail.local tiedoston määrityksiä. Näin ollen, ne olivat myös käytössä, mikä kyllä näkyikin jo lokitietoja seuraamalla.

Komennolla “fail2ban-client status” voidaan seurata bannattyjen osoitteiden ja havaintojen määrää:

sudo fail2ban-client status sshd

Aluksi bannit oli annettu yhteensä 340 kertaa eri osoitteille. Tekemäni testin jälkeen se nousi 341:een ja bannattujen IP-osoitteiden listassa oli testiverkkoni osoite, kunnes se unbannattiin.

Samat tiedot näkyivät aina myös UFW:n statuksesta, joissa oli kielteinen palomuurisääntö aina yksittäiselle osoitteelle, joka oli saanut bannit.

sudo ufw status verbose

Muutama osoite oli jo ehtinyt saada tuossa lyhyessä ajassa bannit omani lisäksi:

 

Markus Pyhäranta

RELATED ARTICLES
LEAVE A COMMENT