Fail2Ban sperrt, fremder host hat trotzdem zugriff ?

rosenwelt

New Member
Hi.

Ich bräcuhte mal Hilfe bei der Fail2Ban Konfiguration.
Problem generell: gebannte IP's haben trotz f2b-iptables Eintrag noch Zugriff.
--------------------------------------------------------------------------------------------------
-- LOG:
2022-04-02 18:48:59,264 fail2ban.filter [4351]: INFO [scanbuster] Found 69.30.255.234
2022-04-02 18:49:00,083 fail2ban.actions [4351]: NOTICE [scanbuster] Ban 69.30.255.234
2022-04-02 19:11:36,899 fail2ban.filter [4351]: INFO [scanbuster] Found 69.30.255.234
2022-04-02 19:11:37,723 fail2ban.actions [4351]: NOTICE [scanbuster] 69.30.255.234 already banned
2022-04-02 21:31:04,136 fail2ban.filter [4351]: INFO [scanbuster] Found 69.30.255.234
2022-04-02 21:31:04,457 fail2ban.actions [4351]: NOTICE [scanbuster] 69.30.255.234 already banned

-- IPTABLES:
root@rs55-dns-root:/# iptables -L -n | grep 69.30.255.234
DROP all -- 69.30.255.234 0.0.0.0/0
root@rs55-dns-root:/#

-- IPTABLES-dump (gekürzt):
# Generated by iptables-save v1.6.0 on Sun Apr 3 07:20:24 2022
*filter
:INPUT ACCEPT [7:280]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:672]
:f2b-scanbuster - [0:0]
-A INPUT -p tcp -m multiport --dports 0:65535 -j f2b-scanbuster
-A f2b-scanbuster -s 81.17.20.98/32 -j DROP
-A f2b-scanbuster -j RETURN
COMMIT
# Completed on Sun Apr 3 07:20:24 2022

-- F2B-Jail:
[scanbuster]
logpath = /var/log/daemon.log
maxretry = 0
bantime = -1

--F2B action -- iptables-multiport.conf:
[INCLUDES]
before = iptables-common.conf

[Definition]
actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>

actionstop = <iptables> -D <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
<iptables> -F f2b-<name>
<iptables> -X f2b-<name>

actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'

actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
/usr/bin/php /home/scanbuster/sbworker.php <name> <protocol> <port> <ip>

actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>

[Init]


--F2B action -- iptables-common.conf:
[INCLUDES]
after = iptables-blocktype.local
iptables-common.local

[Init]
chain = INPUT
name = default
port = ssh
protocol = tcp
blocktype = DROP
returntype = RETURN
lockingopt = -w
iptables = iptables <lockingopt>

--------------------------------------------------------------------------------------------------
... jetzt , wo ich mir das so anschaue ... hmmm "protocol TCP", ...
Ich vermute gerade, f2b sperrt hier nur das tcp protokoll.
Falls ich damit richtig liege: ... Wie kann ich TCP und UDP gleichzeitig sperren?
 
... ich bin ein idi .... ahhm *hust* , betriebsblinder Mensch :D
-> "-A INPUT -p tcp -m multiport --dports 0:65535 -j f2b-scanbuster"
Ja, da wird nur TCP gesperrt und die requests sind UDP Requests.
Wie bekomme ich TCP und UDP gleichzeitig da gesperrt , gibt es einen FLAG wie z.Bsp. "protocol = all", oder protocol angabe leer lassen?
 
Erledigt, wer lesen kann ist klar im Vorteil:´...
# Option: protocol
# Notes.: internally used by config reader for interpolations.
# Values: [ tcp | udp | icmp | all ] Default: tcp
#

... Danke fürs zuhören / mitlesen ;)
 
okay doch nicht erledigt, irgendwas hab ich noch übersehen ...
Es wird immernoch nur das TCP protocol gesperrt:
"-A INPUT -p tcp -m multiport --dports 0:65535 -j f2b-scanbuster"

Hat jemadn noch eine Idee?
 
Was hindert dich denn in deinem Jail zwei Actions einzusetzen, eine für TCP und die andere für UDP.
Annäherungsweise:
Code:
action_  = %(default/action_)s[name=%(__name__)s-tcp, protocol="tcp"]
           %(default/action_)s[name=%(__name__)s-udp, protocol="udp"]
...
...
...
action = %(action_)s

Ich kenne dein Jail ja nich’.
 
Last edited:
Die doppelte Menge an iptables-einträgen, die daraus resultiert ... (je einer für TCP und UDP)
Ich habe das "Problem" für meine Zwecke anders/individuell mit einer seperaten action-config gelöst.
(Ich hab mich da noch nicht weiter "reingearbeitet", aber am Ende war alles klar und logisch. ;) )
 
okay ;)
... da ich DNS Scanner und co generell komplett sperre braucht hier kein expliziter Port und kein Protokoll angegeben werden, die IP's werden "blank" gesperrt. ...
------------------------------------------------------
/etc/fail2ban/jail.conf:
[scanbuster]
logpath = /var/log/daemon.log
maxretry = 0
bantime = -1
banaction = iptables-scanbuster
------------------------------------------------------
/etc/fail2ban/action.d/iptables-scanbuster.conf:
[INCLUDES]

before = iptables-common.conf
[Definition]

actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> -j f2b-<name>

actionstop = <iptables> -D <chain> -j f2b-<name>
<iptables> -F f2b-<name>
<iptables> -X f2b-<name>

actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'

actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
/usr/bin/php /home/scanbuster/sbworker.php <name> <protocol> <port> <ip>

actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>

[Init]

------------------------------------------------------
"sbworker.php" meldet die Funde an meinen scanbuster Hauptserver, welcher dann entsprechend automatisch alle productiv-clients bestückt
In der iptables-common.conf habe ich den blocktype auf "DROP" gesetzt. (Ankommende Datenpakete von der entsprechenden IP werden direkt verworfen.)
------------------------------------------------------
Wichtiger Hinweis:
Bei dem System handelt es sich um einen "leeren" authorativen DNS Server, dessen einzige Aufgabe es ist, "scanner" und co zu dedektieren. JEDER DNS-Zugriff führt dabei zum Bann.
hier noch der Filter:
/etc/fail2ban/filter.d/scanbuster.conf
# Fail2Ban filter for scanbuster
[Definition]
failregex = ^.* Remote <HOST> wants.*$
^.* from TCP client <HOST>: Did.*$
^.* from TCP client <HOST>: Timeout.*$
^.* too short from <HOST>.*$
^.* packet from <HOST>, error.*$
^.* client IP <HOST> has no permission.*$
ignoreregex =
datepattern = ^[^\[]*\[({DATE})
{^LN-BEG}
# DEV Notes:
#
# Author: Wormaus
# Thanks: DerHass
# Reference: none
------------------------------------------------------
 
Last edited:
Deine RegEx lässt sich vielfältig mit 0.0.0.0/8 füllen und dank der Haltezeit von -1 ist somit Dein System vom Netz und Du kommst nichtmal mehr selbst remote ran.

Solche Spielchen sollte man nur machen, wenn man weiss was man macht...
 
Ahh, verstehe.
- Auf dem MainServer gibt es Filter zur plausibilitätsprüfung.
- Auf den Dedektoren schiess ich mich auch nicht raus, genau dafür gibt es Firewall-Regeln (ACCEPT), die vor F2B-Regeln greifen.
 
1.: Es werden nur Meldungen eigener / bekannter Detection-Server aufgenommen/zugelassen.
2.: Es wird die konformität der ipv4/6 adressen geprüft (und falschmeldungen geloggt)
3.: Es werden "private" und "reservierte" IP-Ranges herausgefiltert (und falschmeldungen geloggt)
4.: Es werden die zum System und zu den Clienten gehörenden IP's gefiltert und die Meldungen geloggt und die entsprechenden User informiert.
5.: Es werden IP's statischer bekannter "scanner-Netze" (wie z.Bsp. "Censys") herausgefiltert. Diese können per Einstellung mit in die Bannliste der entsprechenden Client-Server übernommen werden.
... usw ...
 
Back
Top