Paaritame fail2ban ja openwrt

Posted: november 12th, 2014 | Author: | Filed under: (k)äkid | Tags: , , , , | No Comments »

Interneti poole vaatavates linuksites on mul kasutusel fail2ban nimeline logianalüsaator, mis leitud ikaldused ja edutud autentimiskatsed tulemüüri lisab. Tean, et tegemist ei ole mingi hea IDSiga. Samas mingit botid ja muidu üritajad ta eemaldab.

Juba pikemat aega oli plaan ette võtta lahendus, et küberkaabakad (küll enamuses robotitest kaabakad) saaksid /kickban kohe päris esimesest tulemüürist.

fail2ban on tegelikult klient-server lahendus. Suhtlus käib üle UNIXi socketite. Algne mõte oli mul panna server tööle OpenWRT purki ja kliendid intereni poole vaatavatesse masinatesse. Sellega on aga mõni häda. Selline süsteem on piisavalt õrn ja läheb kümnel erineval moel katki. Samuti ei mahu python kõige paremini 10 Mb flashi peale.

Natuke googeldamist ja ma tulin sellise suht õudsa häki peale.

Arvuti kus fail2ban töötab võiks ise OpenWRT tulemüüri konfida.

Tean, et selline lahendus on ohtlik ja põhimõtteliselt halb. Ükski arvuti ei tohiks ise tulemüüri konfida ja eriti mitte võtmega root õigustes sisse logida. Ma annan bioneeri ausõna, et teen selle millalgi mõistlikumaks ümber.  Samas, risk ei ole väga suur ja muudatused ei ole permanentsed, vaid kaovad tulemüüri reboodiga. Nii ehk nii on fail2ban poolt blokeeritu ajutine ja mõstlik banni saanud hostid mingi aja pärast jälle vabastada. No kesse ikka tahab oma iptabelites näha 2000+ bannitud hosti. Neid tekkib juurde keskmiselt kümmekond päevas. Millalgi võtan ette ja joonistan siia iseuuenduva kaardi – appi, appi, kurjad häkkerid ründavad.

  •  OpenWRT ssh võtmega autentimine.

Selle töölepanek ei ole eriline raketiteadus. Täiesti kasutatava õpetuse leiab wikist.

  •  ssh script masinasse kus fail2ban töötab.

Selleks, et fail2ban saaks üle ssh ühenduse tulemüüri reegleid muuta tuleb luua lihtne skript näiteks kataloogi /usr/bin/ssh_openwrtpurk

#!/bin/bash
ssh root@openwrtpurk -p 22 -i /privaatvõtme_path "$1"

“$1” on siin eriti oluline selleks, et fail2ban saaks openwrtpurgis käivitatavaid käske edasi anda. Privaatvõti peab olema root kasutajale loetav, sest fail2ban käib root õigustes. Skript muidugi ka käivitatav. Testi see enne ära kui edasi lähed.

  •  fail2ban action.d skript

Fail2ban võimaldab teha erinevaid skripte mida siis logist leitud sündmuste puhul käivitatakse. scriptid asuvad /etc/fail2ban/action.d/

Mina tegin endale scripti. Näiteks iptables-allports-openwrtpurk.conf  Ei hakanud peenutsema, ban läheb kõikidele protokollidele ja portidele. On oluline, et oleks kasutusel mõlemad ahelad, nii INPUT (kõik mis tuleb ja jääb openwrtpurk) kui ka FORWARD (kõik mis suunatakse edasi).

# Fail2Ban configuration file 
# 
# Author: silverk 
# Modified: 20141112 
# 
# Don’t be shy, ban everything you can.
#
[Definition] 

# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD 
# 
actionstart = ssh_openwrtpurk 'iptables -N fail2ban-<name>'
              ssh_openwrtpurk 'iptables -A fail2ban-<name> -j RETURN'
              ssh_openwrtpurk 'iptables -I FORWARD -j fail2ban-<name>'
              ssh_openwrtpurk 'iptables -I INPUT -j fail2ban-<name>'

# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop = ssh_openwrtpurk 'iptables -D FORWARD -j fail2ban-<name>'
             ssh_openwrtpurk 'iptables -D INPUT -j fail2ban-<name>'
             ssh_openwrtpurk 'iptables -F fail2ban-<name>'
             ssh_openwrtpurk 'iptables -X fail2ban-<name>'

# Option:  actioncheck
# Notes.:  command executed once before each actionban command 
# Values:  CMD 
# 
actioncheck = ssh_openwrtpurk 'iptables -n -L FORWARD | grep -q fail2ban-<name>'
              ssh_openwrtpurk 'iptables -n -L INPUT | grep -q fail2ban-<name>'

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights. 
# Tags:    <ip>  IP address 
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time 
# Values:  CMD 
#
actionban = ssh_openwrtpurk 'iptables -I fail2ban-<name> 1 -s <ip> -j DROP'

# Option:  actionunban
# Notes.:  command executed when unbanning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
actionunban = ssh_openwrtpurk 'iptables -D fail2ban-<name> -s <ip> -j DROP'
[Init]

Et wordpressi autentimised ära blokkida pane wordpressi WP fail2ban plugin.

 

jail.cocal võiks välja näha selline (seal on ka parameetreid mida tegelikult ei kasutata)

[DEFAULT]
ignoreip  = 127.0.0.1/8 X.Y.Z.W/24 
bantime   = 864000 
banaction = iptables-allports-openwrtpurk 
action    = %(action_mwl)s
# JAILS 
[ssh] 
enabled   = true 
banaction = iptables-allports-openwrtpurk 
maxretry  = 3 

[pam-generic] 
enabled   = true 
banaction = iptables-allports-openwrtpurk 

[ssh-ddos] 
enabled   = true 
banaction = iptables-allports-openwrtpurk
..... 

[wordpress] 
enabled   = true 
port      = http,https 
filter    = wordpress 
banaction = iptables-allports-openwrtpurk 
action    = %(action_mwl)s 
logpath = /var/log/auth.log 
maxretry = 3

EDIT:

grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
/var/log/fail2ban.log | sort | uniq > mingifail.txt 

sobib hästi logifailist nimekirja kätte saamiseks.