• Advertisement

Import Blocklist to fail2ban (Shell Script / Cronjob)

Anleitungen zu Fail2Ban, blocklist.de und x-arf

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Postby hyper_ch » 14. Sep 2016, 15:49

Bin neu hier und werde das bei Gelegenheit etwas testen. Allenfalls das Skript auch not etwas "optimieren". Eine Frage aber dazu: Wieso das touch der /var/log/empty.log Datei erst am Schluss nachdem der Rest gelaufen ist? Sollte die Datei nicht schon im Zeitpunkt bestehen, wenn f2b-client aufgerufen wird?
hyper_ch
 
Posts: 1
Joined: 12. Sep 2016, 07:18

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Postby jenszrockt » 24. Sep 2016, 03:10

Die Datei habe ich vorher erstellt (leere Datei), durch "touch" wird die Zugriffszeit lediglich geändert, und vorgegaukelt, dass sich die leere Log-Datei geändert und ich bin mir nicht mehr sicher, es war erforderlich meine ich, damit die Bans ausgeführt werden oder ähnlich. Ist schon etwas her :D Auf jeden Fall läuft das alles so immer noch auf meinem Server.
jenszrockt
 
Posts: 7
Joined: 13. Apr 2013, 21:21

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Postby tommi » 11. Sep 2017, 16:40

Hallo zusammen,

da es mich gestört hat das fail2ban beim reload/restart erst alle IP's "unbannt" und dann wieder "bannt" habe ich eine jail gebastelt.

Bin kein Experte da gibt es bestimmt Verbesserungspotential.

JAIL
Code: Select all
[blacklist]
enabled = true
port = 0:65535
action  = blacklist[name=blacklist]
logpath  = /var/log/fail2ban.log
maxretry = 1
findtime = 60
bantime = 100800 ;1 Tag 4 Stunden


FILTER (ignoreregex schließt weite JAIL'S aus)
Code: Select all
# Fail2Ban filter

[INCLUDES]
before = common.conf

[Definition]
maxlines = 1

failregex = \]\s+Found\s+<HOST>

ignoreregex = .*(blacklist|repeatoffender-([0-9]))


ACTION
Code: Select all
# Fail2Ban configuration file

[INCLUDES]

before = iptables-blocktype.conf

[Definition]

actionstart = iptables -N f2b-<name>
              iptables -A f2b-<name> -j RETURN
              iptables -I <chain> -p <protocol> -j f2b-<name>
              touch /etc/fail2ban/f2b-blacklist.log

actionstop  = iptables -D <chain> -p <protocol> -j f2b-<name>
              iptables -F f2b-<name>
              iptables -X f2b-<name>
              rm -f /etc/fail2ban/f2b-blacklist.log


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

actionban = IP=<ip>
            RIP=$(echo $IP | awk -F"." '{print $4"."$3"."$2"."$1}')
            RET=$(host -t any $RIP.allinone.bl.blocklist.de | tr "\n" "#"  | sed '1!d' | sed '/not found/d' | sed 's/^.*127\.0\.0\.[0-9].*/true/g')
            if [ "$RET" = "true" ]
             then
                 iptables -I f2b-<name>  1 -s <ip> -j <blocktype>
                 DATE=$(date -R -u)
                 printf %%b "$DATE Boese $RET  $IP\n" >> /etc/fail2ban/f2b-blacklist.log
            fi


actionunban = if [ "$(iptables -n -L f2b-<name> | grep -c <ip>)" gt 0 ]
               then
                   iptables -D f2b-<name> -s <ip> -j <blocktype>
               fi


[Init]

name = default

# Option:  protocol
# Notes.:  internally used by config reader for interpolations.
# Values:  [ tcp | udp | icmp | all ] Default: tcp
#
protocol = all

# Option:  chain
# Notes    specifies the iptables chain to which the fail2ban rules should be
#          added
# Values:  STRING  Default: INPUT
chain = INPUT


blocktype = REJECT --reject-with icmp-port-unreachable


Nachteil ist das bei schnellem Polling die Meldung "[blacklist] xx.xx.xx.xx already banned" erfolgt.

Gruß
Thomas
tommi
 
Posts: 5
Joined: 8. Sep 2017, 08:22

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Postby tommi » 19. Sep 2017, 12:08

Hallo nochmal,

habe eine, meiner Meinug nach, schönere Lösung gefunden. Ich lade die Blockliste einmal am Tag nach /etc/fail2ban/blocklist.de.
in /etc/fail2ban/filter.d/ignorecommands/blacklist wird geprüft ob in der Blacklist, dann blocken, sonst ignoriern.

/etc/fail2ban/filter.d/ignorecommands/blacklist
Code: Select all
#!/usr/bin/env fail2ban-python
# Inspired by https://isc.sans.edu/forums/diary/When+Google+isnt+Google/15968/
#
# Written in Python to reuse built-in Python batteries and not depend on
# presence of host and cut commands
#
import sys

def process_args(argv):
    if len(argv) != 2:
       sys.stderr.write("Please provide a single IP as an argument. Got: %s\n"
                        % (argv[1:]))
       sys.exit(2)

    ip = argv[1]

    from fail2ban.server.filter import DNSUtils
    if not DNSUtils.isValidIP(ip):
       sys.stderr.write("Argument must be a single valid IP. Got: %s\n"
                        % ip)
       sys.exit(3)
    return ip

def is_blacklisted(ip):
    import re

    if ip in open('/etc/fail2ban/blocklist.de').read():
       sys.exit(1)
    else:
       sys.exit(0)


if __name__ == '__main__':
    is_blacklisted(process_args(sys.argv))


jail.local
Code: Select all
[blacklist]
enabled = true
port = 0:65535
action = %(action_)s
logpath  = /var/log/fail2ban.log
ignorecommand = %(ignorecommands_dir)s/blacklist <ip>
maxretry = 1
findtime = 60
bantime = 100800 ;1 Tag 4 Stunden


Gruß
Thomas
tommi
 
Posts: 5
Joined: 8. Sep 2017, 08:22

Previous

Return to Anleitungen

Who is online

Users browsing this forum: No registered users and 1 guest

  • Advertisement
cron
figurative