tiistai 10. joulukuuta 2024

Rocky Linux 9 asennus osa 6: Fail2ban

Fail2ban auttaa suojautumaan esimerkiksi koputtelijoilta, jotka kuormittavat palvelinta kokeilemalla kymmeniä erilaisia polkuja etsiessään haavoittuvia tiedostoja tai palveluita. Kun Fail2ban huomaa, että tietystä IP-osoitteesta tulee paljon pyyntöjä, niin Fail2ban blokkaa tilapäisesti IP-osoitteen palomuurista, joka hidastaa ja vaikeuttaa koputtelijan toimintaa.

Tarvitset fail2banin asentamiseen EPEL-pakettikirjaston. Jos koneellasi ei ole EPEL-pakettikirjastoa, niin asenna se kuten Apachen ohjeessa.

Asenna Fail2ban komennolla:

sudo yum install fail2ban

Luo tiedosto /etc/fail2ban/jail.local ja liitä tiedostoon koodi

[DEFAULT]
ignoreip = 127.0.0.1/8

[my-sshd-auth]
enabled = true
port = ssh
logpath = /var/log/secure
bantime = 20h
findtime = 10m
maxretry = 3

[my-sshd-flood]
enabled = true
port = ssh
logpath = /var/log/secure
bantime = 20h
findtime = 10m
maxretry = 10

[my-apache-badbots]
enabled = true
port = http,https
logpath = /var/log/httpd/access_log
bantime = 48h
findtime = 10m
maxretry = 1

[my-apache-nofile]
enabled = true
port = http,https
logpath = /var/log/httpd/access_log
bantime = 60m
findtime = 10m
maxretry = 10

[my-apache-flood]
enabled = true
port = http,https
logpath = /var/log/httpd/access_log
bantime = 30m
findtime = 1m
maxretry = 300

[my-apache-errors]
enabled = true
port = http,https
logpath = /var/log/httpd/error_log
bantime = 60m
findtime = 10m
maxretry = 3

Tallenna seuraavat tiedostot /etc/fail2ban/filter.d-hakemistoon.

my-apache-badbots.conf

[Definition]
badbots = Go-http-client|Mozilla/5\.0 zgrab|python-requests|Custom-AsyncHttpClient|l9explore|masscan|Mozilla/5\.0 Keydrop|Gregarius|Expanse|redtail-http
badfiles = \.env|\.git/+config

failregex = ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)*" \d+ (\d+|-) ".*" "(?:%(badbots)s).*"$
        ^[-0-9A-Za-z.]* <HOST> - - \S+ "\S+ /+(?:%(badfiles)s).*" \d+ (\d+|-) ".*" ".*"$
        ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)* HTTP/1.0" \d+ (\d+|-) ".*" ".*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})

my-apache-errors.conf

[INCLUDES]
before = apache-common.conf

[Definition]
failregex = ^%(_apache_error_client)s (?:(?:AH01623: )?client method denied by server configuration|(?:AH01630: )?client denied by server configuration|(?:AH10244: )?invalid URI path|(?:AH001[23][456]: )?Invalid (method|URI) in request\b|(?:AH00565: )?request failed: URI too long \(longer than \d+\)|request failed: erroneous characters after protocol string:|(?:AH00566: )?request failed: invalid characters in URI\b)

ignoreregex = 

my-apache-flood.conf

[Definition]
# Täsmää aivan kaikkiin pyyntöihin access_log tiedostossa.
# Huomaa, että ao. rivi olettaa, että Apachen vhost on määritelty tulostumaan rivin alkuun!
failregex = ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)*" \d+ (\d+|-) ".*" ".*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})

my-apache-nofile.conf

[Definition]
# Täsmää pyyntöihin access_log tiedostossa, joissa palvelin palauttaa 404 virhekoodin.
# Huomaa, että ao. rivi olettaa, että Apachen vhost on määritelty tulostumaan rivin alkuun!
failregex = ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)*" 404 (\d+|-) ".*" ".*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})

my-sshd-auth.conf

[Definition]

# Täsmää epäonnistuneisiin kirjautumisyrityksiin
failregex = sshd(-session)?\[\d+\]: (Invalid user \S* from|Disconnected from authenticating user \S*|Connection (reset|closed) by authenticating user \S*) <HOST> port \d+

ignoreregex =

my-sshd-flood.conf

[Definition]

# Täsmää kaikkiin yhteydenottoihin
failregex = sshd(-session)?\[\d+\]: (Received disconnect from|Connection (closed|reset) by( \S+ user \S*)?|Disconnected from \S+ user \S*|Unable to negotiate with) <HOST> port \d+

# Ohita onnistuneesti kirjautuneiden käyttäjien toiminta
ignoreregex = disconnected by user$

Käynnistä fail2ban ja aseta se käynnistymään automaattisesti

sudo systemctl start fail2ban sudo systemctl enable fail2ban

Tarkista lokista, että fail2ban käynnistyy oikein ja blokkaa haluttuja kutsuja

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

Jos blokkaat vahingossa oman IP-osoitteen, niin voit vapauttaa se komennolla

sudo fail2ban-client unban 80.82.77.202

missä 80.82.77.202 on oma IP-osoitteesi. Jos filterissa on korjattavaa, niin voit vapauttaa kaikki filtterin blokkaamat osoitteet kerralla

sudo fail2ban-client reload --unban my-apache-badbots

Tämä kirjoitus on kuudes osa seikkailua Rocky Linux 9:n parissa. Lue edellinen osa tästä blogista!


Päivitys 9.6.2026: sshd-prosessin nimi my-sshd-flood.conf ja my-sshd-auth.conf tiedostoissa päivitetty sisältämään sshd-session -prosessin