Fail2ban und Blacklist

Hallo User,

meine NC auf dem Raspberry PI lÀuft nun schon mehrere Monate sehr stabil. In den letzten Tagen hÀufen sich aber Mails von fail2ban in Bezug auf fehlerhafte Anmeldeversuche mit Sperrung. Nach Sichtung des Logs kann man schnell fehlerhafte Anmeldeversuche der User von potenziellen Angriffen trennen.
Ich wĂŒrde gern einige IP-Rang komplett von der Anmeldung ausschließen wollen. Nach Recherchen hier im Forum habe ich aber nicht die passende Aussage ĂŒber eine Möglichkeit gefunden.

Wie kann ich gewĂŒnschte IP-Rangs komplett ĂŒber fail2ban dauerhaft sperren? Oder nutzt man dazu andere Tools?

Über Infos wĂ€re ich sehr dankbar.

Thomas

Hallo Thomas

Wenn du einfach ein paar IP-Ranges manuell sperren möchtest, kannst du das direkt in iptables machen


iptables -I INPUT -s 123.123.123.0/24 -j DROP


oder via UFW, einem Frontend fĂŒr iptables:

ufw deny from 123.123.123.0/24

Wenn du Fail2ban nutzen möchtest, um ganze IP-Ranges automatisiert sperren zu lassen, wird es etwas komplizierter


https://unix.stackexchange.com/questions/181114/how-can-i-teach-fail2ban-to-detect-and-block-attacks-from-a-whole-subnet/623907

EDIT:
UFW ergÀnzt.

Hallo bb77,

danke fĂŒr den Tipp. An iptables hĂ€tte ich selber denken können. Dies wĂ€re sicherlich die schnellste Lösung.

iptables -I INPUT -s 84.3.0.0/16 -j DROP

Dies mĂŒsste ich eingeben.

UFW wĂ€re auch eine gute Möglichkeit ĂŒber das Web-GUI von NC zu arbeiten. Ich kenne UFW nicht. Wie wĂ€re die Administration nach Aktivierung von UFW im Web-GUI?

Thomas

Soviel ich weiss gibt es keie Integration der UFW in das WebGUI von Nextcloud. UFW ist ein Kommandozeilen-Frontend fĂŒr Iptables, welches aber deutlich einfacher zu konfigurieren ist, als iptables direkt. Ob es dafĂŒr ein Web-UI gibt, weiss ich ehrlich gesagt nicht. Generell scheinen UIs fĂŒr Linux Firewalls irgendwie recht rar zu sein. Spontan kommt mir eigentlich nur Webmin in den Sinn, welches ein Modul fĂŒr die Konfiguration von iptables integriert hat. Dann gibt es noch Cockpit, welches aber soviel ich weiss nur firewalld unterstĂŒtzt.

Soweit ich jetzt recherchiert habe, kann man ĂŒber den MenĂŒpunkt UFW im NC WebAdminGUI nur rudimentĂ€re Funktionen von UFW ausfĂŒhren. Ich werde doch ĂŒber die Kommandozeile die iptables konfigurieren. Nach der Eingabe erhalte ich von iptables -S:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 84.3.0.0/16 -j DROP

Das sollte ok sein, oder?

Thomas

Meinst du das Admin Interface von NextcloudPI?

Ja via WebGUI kann man dort soviel ich weiss nur Ports öffnen und nicht bestimmte IPs oder IP-Ranges blocken. Solange es nicht aktiv ist, ist grundsÀztlich alles offen.

Jup sieht gut aus.

Möchte dazu aber noch sagen, dass ich kein Experte bin wenn es um iptables geht. Im Moment hast du aber nur eine Regel und solange du einfach weitere DROP-Regeln hinzufĂŒgst bleibt auch alles “easy”. Es kann aber sehr schnell, sehr komplex werden, wenn man viele Regeln hat.

Und ich weiss nicht wie sich das nachtrÀgliche Einschalten von UFW auf schon bestehende iptables Regeln auswirkt. GrundsÀtzlich werden Firewallregeln nach einer bestimmten Reihenfolge abgearbeitet. Wenn du die UFW aktivierst im WebGui von NCP werden alle eingehenden Verbindungen grundsÀtzlich geblockt. Es werden aber auch folgende Regeln gesetzt, wenn du die Ports freigibst


22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere

Das könnte dann evtl. den Zugriff fĂŒr die direkt in iptables gesperrten IP Ranges auf Port 22, 80 und 443 wieder erlauben, je nachdem in welcher Reihenfolge iptables die Regeln abarbeitet. Wenn du also vor hast irgendwann UFW zu nutzen, mach es lieber frĂŒher als spĂ€ter und verwalte die Blockregeln am besten auch auch damit. Ansonsten wird das ganze imho unnötig kompliziert.

EDIT:
Noch ein kleines aber nicht unwichtiges Detail, dass ich gestern vergessen habe: :wink:

Damit die Regeln, welche du via iptables-Befehl erstellt hast, einen Neustart ĂŒberleben, muss unter Ubuntu/Debian das Paket iptables-persitent installiert werden, und die Regeln mĂŒssen aktiv mit dem Befehl iptables-save > /etc/iptables/rules.v4 gespeichert werden.

Ich habe die Regel erstmal in die rc.local geschrieben, damit ĂŒbersteht diese den Neustart. Die Absicht ist, erstmal einige Zeit IP Rang hier zu sammeln. SpĂ€ter dann ein Script zu schreiben. Wenn Sie mit iptables -S ausgegeben wird, ist diese auch aktiv?

Hast Du noch eine Idee, bzw. gibt es eine Möglichkeit, mit “einfachen” Mitteln die Sicherheit von NC gegen externe Angriffe noch zu erhöhen?

Thomas

Ich nehme mal an, dass deine Nextcloud hinter einem Router/Firewall/NAT lĂ€uft und du nur die Ports 80/443 weitergeleitet hast. Dann ist sie zumindest netzwerkmĂ€ssig gegen aussen, schonmal so weit wie möglich abgesichert. Mehr geht da nicht, wenn sie von aussen ohne VPN oder andere zusĂ€tliche Sicherheitsmassnahmen erreichbar sein soll. Allenfalls könnte man das Ganze noch hinter einen Reverse Proxy setzten. Dieser Aufwand lohnt sich aber imho nur, wenn man mehere Dienste bzw. GerĂ€te hosten will. Ansonsten hat NCP schon eine ziemlich gute Default-Konfiguration und es ist eigentlich nicht nötig noch weitere Sicherheitsmassnahmen auf dem System selbst zu ergreifen, solange du nicht noch weitere Dienste darauf hosten willst, was ich aber nicht emfehlen wĂŒrde, wenn du NCP nutzt. Weitere Sicherheitsmassnahmen wĂ€ren noch SSH nur mit Keys zu benutzen anstatt mit Passwort, solange du SSH aber nicht aus dem Internet erreichbar machst, ist das nicht “zwingend” notwendig.

Anderseits kommen Bedrohungen halt in der Regel nicht nur von aussen. Wenn du alle deine GerĂ€te wie PCs, Laptops, Smartphones, Tablets, SmartTVs, Smarte Leuchtmittel usw
 in einem flachen Netzwerk, sprich im gleichen Subnetz betreibst wie deine Nextcloud, besteht halt auch ein potentielles Risiko eines Angriffs von innen. Sprich irgend ein anderes GerĂ€t fĂ€ngt sich etwas ein oder macht eine TĂŒre auf, durch diese dann ein Angriff stattfinden kann. Deshalb wĂŒrde es imho eben schon Sinn machen UFW auf dem NCP-Server zu aktivieren und nur die nötigen Ports zu öffnen.

Ich bin da sogar noch weiter gegangen und betreibe meine verschiedenen GerĂ€te und Dienste in mehreren Subnetzen, und erlaube nur den allernötigsten Traffic zwischen diesen Subnetzten. Ob man soweit gehen möchte, hĂ€ngt natĂŒlich einerseits davon ab, wieviel Aufwand man bereit ist zu betreiben, und andererseits wie paranoid man ist :wink: UFW anschalten auf der NCP-Box kostet aber nichts und du kannst deine zusĂ€tzlichen Blockregeln auch damit hinzufĂŒgen. :slight_smile:

Ich habe UFW nun aktiviert. Meine Regel aus der rc.local ist noch enthalten, wobei die Ausgabe von iptabeles -S erheblich lÀnger ist.

Ich betreibe die NC hinter einem Router und lasse den Domainnamen ĂŒber einen Provider darauf verweisen. Vor der NC hatte ich Jahre einen anderen Server aktiv und immer mit externen Angriffen zu tun. Die gleichen VerdĂ€chtigen kommen jetzt wieder :wink:

Mit fail2ban und UFW fĂŒhle ich mich schon sicherer. Ev. ziehe ich aber mit dem System territorial um und werde dann am neuen Standort die Sicherheit neu planen mĂŒssen. Segmentierung werde ich sicherlich nicht machen, denke im lokalen Netz alles im Griff zu haben.

Habe vielen Dank. Bis bald mal wieder.

Thomas

Die Frage ist halt, ob die Regel noch greift bzw. vollstĂ€ndig greift. Wenn iptables zuerst die UFW-Regeln abarbeitet, und ich befĂŒrchte, dass es sich so verhĂ€lt, werden die geblockten IP-Adressen allenfalls wieder Zugriff haben. Allerdings nur noch auf Port 80 und 443 und nicht mehr auf alle Ports.

Spezifische Blockregeln mĂŒssen vor weniger spezifischen Allow Regeln stehen, ansonsten werden sie ignoriert.

Wenn am Anfang der Chain eine Regel steht, die von ĂŒberall her Zugriff auf einen bestimmten Port erlaubt, wirkt die Blockregel fĂŒr einen bestimmten IP-Bereich danach nicht mehr. Diese Blockregel muss vor der allgemeineren Allow-Regel stehen, damit sie wirkt. Ich hoffe ich habe mich halbwegs verstĂ€ndlich ausgedrĂŒckt :wink:

Habe vielen Dank. Bis bald mal wieder.

Gern geschehen und bis dann
 :slight_smile:

Hier die jungfreuliche Ausgabe von iptables -S:

  • P INPUT DROP
    -P FORWARD DROP
    -P OUTPUT ACCEPT
    -N ufw-before-logging-input
    -N ufw-before-logging-output
    -N ufw-before-logging-forward
    -N ufw-before-input
    -N ufw-before-output
    -N ufw-before-forward
    -N ufw-after-input
    -N ufw-after-output
    -N ufw-after-forward
    -N ufw-after-logging-input
    -N ufw-after-logging-output
    -N ufw-after-logging-forward
    -N ufw-reject-input
    -N ufw-reject-output
    -N ufw-reject-forward
    -N ufw-track-input
    -N ufw-track-output
    -N ufw-track-forward
    -N ufw-logging-deny
    -N ufw-logging-allow
    -N ufw-skip-to-policy-input
    -N ufw-skip-to-policy-output
    -N ufw-skip-to-policy-forward
    -N ufw-not-local
    -N ufw-user-input
    -N ufw-user-output
    -N ufw-user-forward
    -N ufw-user-logging-input
    -N ufw-user-logging-output
    -N ufw-user-logging-forward
    -N ufw-user-limit
    -N ufw-user-limit-accept
    -A INPUT -s 84.3.0.0/16 -j DROP
    -A INPUT -j ufw-before-logging-input
    -A INPUT -j ufw-before-input
    -A INPUT -j ufw-after-input
    -A INPUT -j ufw-after-logging-input
    -A INPUT -j ufw-reject-input
    -A INPUT -j ufw-track-input
    -A FORWARD -j ufw-before-logging-forward
    -A FORWARD -j ufw-before-forward
    -A FORWARD -j ufw-after-forward
    -A FORWARD -j ufw-after-logging-forward
    -A FORWARD -j ufw-reject-forward
    -A FORWARD -j ufw-track-forward
    -A OUTPUT -j ufw-before-logging-output
    -A OUTPUT -j ufw-before-output
    -A OUTPUT -j ufw-after-output
    -A OUTPUT -j ufw-after-logging-output
    -A OUTPUT -j ufw-reject-output
    -A OUTPUT -j ufw-track-output
    -A ufw-before-input -i lo -j ACCEPT
    -A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
    -A ufw-before-input -m conntrack --ctstate INVALID -j DROP
    -A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
    -A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
    -A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
    -A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
    -A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
    -A ufw-before-input -j ufw-not-local
    -A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
    -A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
    -A ufw-before-input -j ufw-user-input
    -A ufw-before-output -o lo -j ACCEPT
    -A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A ufw-before-output -j ufw-user-output
    -A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
    -A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
    -A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
    -A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
    -A ufw-before-forward -j ufw-user-forward
    -A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
    -A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
    -A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
    -A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
    -A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
    -A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
    -A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
    -A ufw-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
    -A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
    -A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
    -A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
    -A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
    -A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
    -A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
    -A ufw-skip-to-policy-input -j DROP
    -A ufw-skip-to-policy-output -j ACCEPT
    -A ufw-skip-to-policy-forward -j DROP
    -A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
    -A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
    -A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
    -A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
    -A ufw-not-local -j DROP
    -A ufw-user-input -p tcp -m tcp --dport 80 -j ACCEPT
    -A ufw-user-input -p tcp -m tcp --dport 443 -j ACCEPT
    -A ufw-user-input -p tcp -m tcp --dport 4443 -j ACCEPT
    -A ufw-user-input -p tcp -m tcp --dport 1010 -j ACCEPT
    -A ufw-user-input -p udp -m udp --dport 1010 -j ACCEPT
    -A ufw-user-input -p tcp -m tcp --dport 53 -m comment --comment “‘dapp_DNS’” -j ACCEPT
    -A ufw-user-input -p udp -m udp --dport 53 -m comment --comment “‘dapp_DNS’” -j ACCEPT
    -A ufw-user-input -p udp -m multiport --dports 137,138 -m comment --comment “‘dapp_Samba’” -j ACCEPT
    -A ufw-user-input -p tcp -m multiport --dports 139,445 -m comment --comment “‘dapp_Samba’” -j ACCEPT
    -A ufw-user-input -p tcp -m tcp --dport 2049 -j ACCEPT
    -A ufw-user-input -p udp -m udp --dport 2049 -j ACCEPT
    -A ufw-user-input -s 192.168.0.0/16 -p udp -j ACCEPT
    -A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
    -A ufw-user-input -p udp -m udp --dport 22 -j ACCEPT
    -A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
    -A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
    -A ufw-user-limit-accept -j ACCEPT

Ich denke es passt. SSH habe ich aktiv, jedoch von extern ĂŒber einen anderen Port. Die Einsrichtung war am Vormittag und bisher ist alles ok.

Thomas

Jup sieht gut aus, soweit ich das beurteilen kann. Die Blockregel steht am Anfang der INPUT-Chain. Ich persönlich wĂŒrde, um unerwartete Wechselwirkungen auszuschliessen und der Einfachheit halber, die Blockregeln trotzdem auch mit UFW zu managen. Wenn es aber fĂŒr dich so funktioniert, ist alles gut :slight_smile:

UFW kenne ich bisher nicht, die Syntax ist neu. Die Regel iptables -I INPUT -s 84.3.0.0/16 -j DROP

wÀre in UFW:

ufw deny proto tcp from 84.3.0.0/16

Was meinst Du?

Thomas

Den Zusatz “proto” brauchst du nur, wenn du das Protokoll spezifzieren möchtest. Mit deinem Beispiel wĂŒrdest du nur TCP-Verbindungen blocken, Ping (ICMP), UDP usw. wĂ€re immer noch erlaubt. Wenn du jeglichen Traffic von diesem IP-Range blocken möchtest, kannst du das “proto tcp” einfach weglassen und der Befehl wĂŒrde dann folgendermassen ausschauen: ufw deny from 84.3.0.0/16

Die Wiki-Seite von Ubuntu gibt ĂŒbrigens einen netten Überblick ĂŒber UFW, leider nur in Englisch.

https://help.ubuntu.com/community/UFW#Other_Resources

Noch etwas:

Ich wĂŒrde immer den Befehl


sudo ufw status numbered --verbose


benutzen, um die Regeln zu kontrollieren.

Und wenn du eine Blockregel wie in deinem Beispiel hinzufĂŒgen willst, aber schon allgemeinere ALLOW Regeln vorhanden sind, sollte die DENY-Regel wie bei iptables vor diesen ALLOW Regeln stehen. Sprich du solltest sie mit folgendem Befehl hinzufĂŒgen:

sudo ufw insert 1 deny from 84.3.0.0/16

Das fĂŒgt die Regel auf Position 1 der Chain ein und die bestehenden Regeln rutschen um eine Position herunter. Mit dem gleichen Befehl und der entsprechenden Nummer, kannst du auch neue Regeln zwischen schon bestehende Regeln einfĂŒgen.

Ich habe meine rc.local wieder bereinigt und die Regel ĂŒber ufw ĂŒbernommen. Sie steht jetzt an Stelle 1. In der Übersicht finde ich aber auch folgende Regel:

[ 8] 2049 ALLOW IN Anywhere
[14] 2049 (v6) ALLOW IN Anywhere (v6)

Der Port sagt mir nichts. Gelöscht ist es schnell. Nach Recherchen wird 2049 aber von NC nicht genutzt.

Port 2049 ist reserviert fĂŒr NFS. Greifst du via NFS auf das Dateissystem deines Servers zu? Wenn nicht kannst du soviel ich weiss den NFS-Dienst im NCP-Admin Interface deaktivieren. Falls die Regel danach immer noch drinn sein sollte, kannst du sie mit sudo ufw delete 8 bzw. sudo ufw delete 14 löschen

NFS habe ich nicht aktiv. Die beiden EintrÀge sind gelöscht. Die restlichen Regeln sind ok.

Habe nochmals vielen Dank.

Thomas

Guten Morgen aus dem warmen SĂŒden,

bevor hier jemand an Mallorca denkt, nein ich bin beruflich noch weiter im SĂŒden am Atlantik. RegelmĂ€ĂŸig kontrolliere ich die NC und stelle jetzt fast tĂ€glich Warnungen fest:

Login failed: '8hYTSUFk' (Remote IP: '161.35.46.24')

Vor Wochen noch vereinzelt, nun tĂ€glich 1 - 3 mal. Die IP ist immer eine andere und somit lohnt es sich nicht per ufw diese zu blocken. Die Konstanz ist mehr der Name 8hYTSUFk, der unregelmĂ€ĂŸig bei den Stellen nur in der Groß- und Kleinschreibung variiert.

Sind davon auch weitere NC Beteiber betroffen und was kann man dagegen machen?

Thomas

Guten Morgen

Ich kann dazu nur sagen, dass sobald ein Dienst im Internet steht, man mit Login Versuchen rechnen muss. Wenn du das komplett verhindern willst, musst du ein VPN fĂŒr den Zugriff von aussen nutzen.

Die IP in deinem Post gehört zu Digital Ocean. Ich nehme an, da hat sich ein angehnder Hobbyhacker einen VPS bei denen geholt und darauf mal ein paar Scripts und Tools installiert, mit denenen er sich nun Random in irgendwelche Dienste einzuloggen versucht.

Fail2ban macht das ja automatisch fĂŒr dich. Einfach die Bantime massiv erhöhen oder sogar auf unendlich einstellen bantime = -1. Dann hast du zumindest nicht mehrfach die gleiche IP in den Logs.

Du kannst natĂŒrlich auch ganze IP-Ranges und Regionen in UFW blocken, wenn es dich ruhiger schlafen lĂ€sst. Aber wie gesagt: Loginversuche 100% verhindern wirst du nicht können, solange ein Dienst direkt aus dem Internet erreichbar ist. Und solange es Login-Versuche bleiben, ist ja alles im grĂŒnen Bereich.