Ich habe das Script entsprechend der Angaben verbaut und gerade ein paar IPs, die mir im Mailcow’s Netfilter Log angezeigt werden, gegen die dabei angelegte abuseipdb_blacklist gecheckt. Dabei habe ich eine IP gefunden, die in der abuseipdb_blacklist enthalten ist und trotzdem von Mailcow geblockt wurde. Sie ist also nicht vor Mailcow fallen gelassen worden sondern ist bis zu Mailcow’s fail2ban durch gekommen. Was könnte da falsch gelaufen sein?

Mailcow: Banning 188.244.154.53/32 for 10 zillion minutes after a hasty login attempt
abuseipdb_blacklist: sudo ipset test abuseipdb_blacklist_v4 188.244.154.53
Warning: 188.244.154.53 is in set abuseipdb_blacklist_v4.

Ich habe:

  • sudo apt install -y ipset
  • sudo docker compose down
  • den letzten Stand des Skripts von DocFraggle in /usr/local/bin/abuseipdb_sync.sh, chmod + Skript ausführen
  • Cronjob einstellen
  • sudo docker compose up -d

    Stimmt habe ich auch gerade genauso feststellen können. Bei mir die IP 223.241.214.127

    • DocFraggle

      • Community Hero
      Moolevel 274

    Konstrukteur Ich habe:
    sudo apt install -y ipset
    sudo docker compose down
    den letzten Stand des Skripts von DocFraggle in /usr/local/bin/abuseipdb_sync.sh, chmod + Skript ausführen
    Cronjob einstellen
    sudo docker compose up -d

    Warum genau hast Du Docker gestoppt und gestartet? Beim Starten von netfilter-mailcow wird die Chain MAILCOW resettet, da sind dann nur noch ggf vorhandene Blocks drin, die abuseipdb_blacklist wird dabei gelöscht. Du musst das Script ausführen während Mailcow läuft, bzw, auch nachdem Du Mailcow neu gestartet hast. Dann wird die Regel ganz oben in der MAILCOW Chain eingefügt

      • DocFraggle

        • Community Hero
        Moolevel 274

      Ganzjahresgriller Ich habe Docker nicht gestoppt oder neu gestartet ….

      Hier wäre dann die Frage: wann genau war der Block von Fail2Ban und ist die IP evtl erst später in die AbuseIPDB augenommen worden? Denn die DROP Regel in der MAILCOW Chain blockt das ja komplett

      Da hast Du recht. Stellt sich nur die Frage wie man das überprüfen kann …

      DocFraggle 💗

      Mein Gedankengang war, dass die Datei ja auf dem Level des VPS angelegt wird und dann von Mailcow gelesen wird. War wohl falsch ;0)

      Nach deinem Hinweis habe ich jetzt bei sudo iptables -L ganz oben im entsprechenden Segment:
      Chain MAILCOW (1 references)
      target prot opt source destination
      DROP all -- anywhere anywhere match-set abuseipdb_blacklist_v4 src

      Das scheint jetzt mehr Sinn zu machen.

      Das Lernen hört niemals auf … it just never stops.

      Danke dir für das Teilen deines Wissens und Respekt 🙏 !

      • Sstefan21

          Moolevel 16
        • Edited

        DocFraggle Grund: 10000+ iptables DROP Rules können zu Performance-Einbußen führen!

        Good catch.

        Thank’s again.

        @[deleted]

        Soweit ich verstehe wird mit dem letzten Srcipt die mailcow API nicht mehr benötigt. Macht es nicht Sinn, die vorgenommenen Einstellungen wieder auf den Default zu setzen? Falls ja, wie?

        Ich kann weder Access-Control-Allow-Origin noch die IP Adresse beim Lese-Schreib-Zugriff und auch nicht die keys zurücksetzen.

        Auch die f2b-banlist?id bei den Fail2ban-Parameter mit den ausgesperrten IP’s aus der importierten Liste lassen sich nicht löschen bzw. zurücksetzen…

        Ein restart des Netfilters hilft. Und auf der cli das Löschen der json-liste. Aber die Einträge unter API lassen sich nicht zurück setzen. Wer kann damit helfen?

        @DocFraggle : Danke für das tolle Skript, hab es gestern Abend bei mir installiert und läuft wunderbar. Endlich kehrt ein bisschen mehr ruhe ein. War die letzten Tage schon auffällig mehr geworden.

        • DocFraggle

          • Community Hero
          Moolevel 274
        • Edited

        Gern geschehen 🙂

        Hier die neuste Version, man kann via --skip-abuseipdb jetzt den Abruf bei der AbuseIPDB skippen. So kann man die Rule einfach noch Mal setzen ohne dass Tageslimit zu reißen. Z.B. nach einem Neustart der Mailcow, denn dann wird die Chain durch den netfilter Container resettet und die Rule verschwindet dadurch

        DocFraggle/mailcow-scriptsblob/v2.1/abuseipdb.sh

        Ich nutze aktuell noch die erste Version. Um das klar zu verstehen, kann ich die letzte Version des Scripts wie folgt installieren?

        1) apt-get install -y jq
        2) nano mailcow_abuseipdb.sh (script mit dem neuen ersetzen und absueipdb API eintragen)

        Fertig? Oder muss ich noch irgendwas löschen? ich bin etwas verwirrt da einige Posts hier dazwischen sind und das Script paar updates erhalten hat.

        • DocFraggle

          • Community Hero
          Moolevel 274

        Hi, siehe:

        DocFraggle Wer das übernehmen/testen will muss vorher Folgendes machen:

        via Mailcow UI die bestehende Blacklist aus dem entsprechenden Textfeld löschen und speichern
        via CLI docker compose down netfilter-mailcow; docker compose up netfilter-mailcow -d (dadurch wird der Ursprungszustand wieder hergestellt
        Paket ‘ipset’ installieren

        Und “jq” auch, genau. Das sollte es gewesen sein

        I followed the instructions and ran the script. I see the blocked ip with this command:

        Name: abuseipdb_blacklist_v4
        Type: hash:ip
        Revision: 6
        Header: family inet hashsize 4096 maxelem 65536 bucketsize 12 initval 0xc42f362f
        Size in memory: 240168
        References: 1
        Number of entries: 9969
        Members:
        157.230.242.104
        107.150.117.187
        64.62.156.27
        91.196.152.25
        14.225.206.98
        45.158.8.66
        8.211.39.61
        8.219.120.85
        195.184.76.111
        109.167.197.20
        183.82.105.140
        :
        

        So it looks like the list is generated.
        I don’t see any of the IP’s in the blacklist .
        How long will it take for them to show up.

        I also see this in iptables:

        [root@mail demo]# iptables -L MAILCOW
        Chain MAILCOW (2 references)
        target     prot opt source               destination
        DROP       all  --  anywhere             anywhere             match-set abuseipdb_blacklist_v4 src
        DROP       tcp  --  anywhere             anywhere             multiport dports mysql,redis,8983,italk
        

        Can I monitor it with something like this command:

        Every 5.0s: iptables -n -v -L MAILCOW | grep -v "0     0"                                                                                                     mail: 10:55:43
                                                                                                                                                                       in 0.010s (0)
        Chain MAILCOW (2 references)
         pkts bytes target     prot opt in     out     source               destination
           27 35316 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set abuseipdb_blacklist_v4 src
        

          maybl8 How long will it take for them to show up.

          If you are referring to the Mailcow Fail2Ban UI, they won’t! The new version of the script wraps up all IPs in one ipset, and this ipset is referenced in the top rule in the MAILCOW chain

          DROP all -- anywhere anywhere match-set abuseipdb_blacklist_v4 src

          Have a look at this website, it describes ipset: IPSET with IPTABLES

            DocFraggle Is there a way to see when one of the IP in the list tries to hit my server?

            You would need to add a logging rule before the DROP rule, as per default it’s not logged.

            iptables -I MAILCOW 1 -m set --match-set abuseipdb_blacklist_v4 src -j LOG --log-prefix "MAILCOW-DROP: " --log-level 4
            ip6tables -I MAILCOW 1 -m set --match-set abuseipdb_blacklist_v6 src -j LOG --log-prefix "MAILCOW-DROP: " --log-level 4

              DocFraggle Thanks for that . It didn’t like the ip6tables line but I am just learning to deal with this iptables stuff.
              I now see this but where is the log located.
              I tried to do a journalctl -k but didn’t see anything log related.

              Chain MAILCOW (2 references)
              target     prot opt source               destination
              LOG        all  --  0.0.0.0/0            0.0.0.0/0            match-set abuseipdb_blacklist_v4 src LOG flags 0 level 4 prefix "MAILCOW-DROP: "
              DROP       all  --  0.0.0.0/0            0.0.0.0/0            match-set abuseipdb_blacklist_v4 src
              DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 3306,6379,8983,12345
              

              Yes, journalctl. But it only logs something if one of the IPs from AbuseIPDB tries to connect