Sichern von Linux-Servern: iptables vs fail2ban


10

Ich möchte das Gehirn der Community in Bezug auf die Sicherheit von Linux-Servern herausgreifen, insbesondere in Bezug auf Brute-Force-Angriffe und die Verwendung von fail2ban im Vergleich zu benutzerdefinierten iptables .

Es gibt einige ähnliche Fragen, aber keine davon befasst sich zu meiner Zufriedenheit mit dem Thema. Kurz gesagt, ich versuche, die beste Lösung zu finden, um Linux-Server, die dem Internet ausgesetzt sind (mit den üblichen Diensten SSH, Web, Mail), vor Brute-Force-Angriffen zu schützen.

Ich habe einen guten Überblick über die Serversicherheit, dh das Sperren von ssh, indem keine Root- oder Kennwortanmeldungen zugelassen werden, der Standardport geändert wird, sichergestellt wird, dass die Software auf dem neuesten Stand ist, Protokolldateien überprüft werden, nur bestimmten Hosts der Zugriff auf den Server ermöglicht wird und die Sicherheit genutzt wird Auditing-Tools wie Lynis ( https://cisofy.com/lynis/ ) zur allgemeinen Einhaltung der Sicherheitsbestimmungen. Diese Frage bezieht sich daher nicht unbedingt darauf, obwohl Eingaben und Ratschläge immer willkommen sind .

Meine Frage ist, welche Lösung ich verwenden soll (fail2ban oder iptables) und wie ich sie konfigurieren soll oder ob ich eine Kombination aus beiden verwenden soll, um mich vor Brute-Force-Angriffen zu schützen.

Es gibt eine interessante Antwort zum Thema ( Denyhosts vs fail2ban vs iptables - beste Möglichkeit, Brute-Force-Anmeldungen zu verhindern? ). Die für mich persönlich interessanteste Antwort war ( /server//a/128964 ), und das Routing von iptables erfolgt im Kernel im Gegensatz zu fail2ban, bei dem Benutzermodus-Tools zum Parsen von Protokolldateien verwendet werden. Fail2ban verwendet natürlich iptables, muss jedoch noch Protokolldateien analysieren und einem Muster entsprechen, bis eine Aktion ausgeführt wird.

Ist es dann sinnvoll, iptables zu verwenden und die Ratenbegrenzung ( https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/ ) zu verwenden, um Anforderungen von einer IP für einen bestimmten Zeitraum zu löschen? Zeit, die zu viele Verbindungsversuche während eines bestimmten Zeitraums unternimmt, unabhängig davon, zu welchem ​​Protokoll versucht wurde, eine Verbindung herzustellen? Wenn ja, dann gibt es hier einige interessante Gedanken zur Verwendung von Drop vs Reject für diese Pakete ( http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject ), irgendwelche Gedanken dazu?

Fail2ban ermöglicht eine benutzerdefinierte Konfiguration in Form der Möglichkeit, benutzerdefinierte ' Regeln ' für Dienste zu schreiben , die in der Standardkonfiguration möglicherweise nicht behandelt werden. Es ist einfach zu installieren und einzurichten und leistungsstark, aber es könnte ein Overkill sein, wenn ich nur versuche , eine IP vom Server zu blockieren , wenn zwei fehlgeschlagene Zugriffsversuche auf einen Dienst / ein Protokoll über einen x- Betrag durchgeführt werden von Zeit?

Ziel ist es, tägliche Logwatch-Berichte zu öffnen und nicht durch Seiten mit versuchten fehlgeschlagenen Verbindungen zum Server zu scrollen.

Vielen Dank, dass Sie sich die Zeit genommen haben.


3
Möglicherweise benötigen Sie eine Firewall, wenn mein Server gut konfiguriert ist. kann etwas Licht auf das Problem werfen.
MadHatter

Antworten:


21

soll ich fail2ban oder iptables verwenden?

Sie verwenden fail2ban zusätzlich zu einer Firewall-Lösung, um die vorhandenen Firewall-Regeln bei Bedarf um Regeln zu erweitern, mit denen die spezifischen IP-Adressen von Systemen blockiert werden, die unerwünschte Aktionen für ansonsten öffentliche Dienste ausführen. Sie arbeiten zusammen.

Vereinfacht: Eine Firewall erkennt nur Netzwerkverbindungen und -pakete und kann die darin enthaltenen Muster verstehen. Sie verfügt jedoch nicht über die Einsicht auf Anwendungsebene, um gewünschte und gültige Anforderungen von böswilligen, fehlerhaften und unerwünschten Anforderungen zu unterscheiden. Beispielsweise kann Ihre Firewall den Unterschied zwischen einer Reihe von HTTP-API-Anforderungen und einer Reihe falscher Anmeldeversuche, die durch das Erraten von Brute-Force-Kennwörtern auf Ihrer Wordpress-Administrationsseite verursacht wurden, nicht erkennen. Für die Firewall sind beide nur TCP-Verbindungen zu Port 80 oder 443.

Fail2ban ist ein generischer und erweiterbarer Ansatz, um Ihrer Firewall Einblicke auf Anwendungsebene zu gewähren, wenn auch etwas indirekt.
Häufig registrieren und protokollieren Anwendungen böswillige, fehlerhafte und unerwünschte Anforderungen als solche, aber nur selten können sie weiteren Missbrauch verhindern. Obwohl es leicht entkoppelt ist, kann Fail2ban auf diese protokollierten böswilligen Ereignisse reagieren, den Schaden begrenzen und weiteren Missbrauch verhindern, indem in der Regel Ihre Firewall dynamisch neu konfiguriert wird, um den weiteren Zugriff zu verweigern. Mit anderen Worten, Fail2ban bietet Ihren vorhandenen Anwendungen, ohne sie zu ändern, die Möglichkeit, Missbrauch abzuwehren.

Eine andere Methode, um Firewalls Einblicke auf Anwendungsebene zu gewähren, wäre die Verwendung eines Intrusion Detection / Prevention-Systems .


Zum Beispiel ist ein Webserver ein allgemeiner öffentlicher Dienst und in Ihrer Firewall sind die TCP-Ports 80 und 443 für das Internet insgesamt geöffnet.
In der Regel gibt es keine Ratenbeschränkung für die HTTP / HTTPS-Ports, da mehrere gültige Benutzer einen einzigen Ursprung haben können, wenn sie sich beispielsweise hinter einem NAT-Gateway oder einem Webproxy befinden.

Wenn Sie unerwünschte und / oder böswillige Aktionen gegenüber Ihrem Webserver feststellen, verwenden Sie fail2ban, um das Blockieren eines solchen Täters zu automatisieren (entweder blockieren Sie ihn vollständig oder indem Sie nur den Zugriff auf die Ports 80 und 443 sperren).

Auf der anderen Seite ist der SSH-Zugriff kein öffentlicher Dienst. Wenn Sie jedoch nicht in der Lage sind, den SSH-Zugriff in Ihrer Firewall auf nur IP-Adressbereiche auf der weißen Liste zu beschränken, ist die Begrenzung eingehender Verbindungen eine Möglichkeit, das Brute zu verlangsamen -force Angriffe. Ihre Firewall kann jedoch immer noch nicht zwischen einer fünfmaligen erfolgreichen Anmeldung von User Bob unterscheiden, da er ansible Playbooks ausführt, und fünf fehlgeschlagenen Versuchen, sich von einem Bot als Root anzumelden.


Dies ist die Einsicht, nach der ich gesucht habe. Sie macht für mich vollkommen Sinn, danke, dass Sie sich die Zeit genommen haben.
Kingmilo

2
Es gibt jedoch Anwendungsfirewalls (auch als Anwendungsgateways bezeichnet), die eine eingehende Paketprüfung durchführen können.
Gardenhead

@gardenhead stimmte zu und +1; Aufgrund der iptablesvom OP erwähnten konzentrierte ich mich hauptsächlich auf den im Kernel eingebauten Linux-Paketfilter. Meiner Meinung nach überprüfen Anwendungsfirewalls Pakete nicht ganz, sie kennen das Anwendungsprotokoll und sollten die vollständige Anforderung überprüfen. Im Web beschäftigen Sie sich dann mit Produkten wie apaches mod_security, F5 und Bluecoat Appliances und sogar mit "bescheidenen" Reverse-Proxys
HBruijn

@HBruijn Du hast recht - ich habe den Begriff Paket missbraucht. Ich kenne die Details zum Aufbau von Anwendungsgateways nicht, aber ich kann mir vorstellen, dass sie warten, bis sie genug Pakete erhalten, um eine vollständige Nachricht auf Anwendungsebene zusammenzustellen, bevor sie inspiziert und weitergeleitet werden.
Gardenhead

1
Protip: Verwenden Sie das aktuelle iptables- Modul für ssh, auch wenn Sie fail2ban für die anderen Dienste verwenden. Es kann interessante Fehlermodi geben, in denen Regeln nicht ordnungsgemäß bereinigt werden und davon betroffene Anmeldungen sehr ärgerlich sind (und das Debuggen des Problems erschweren). In letzter Zeit müssen sich die tatsächlichen Regeln nicht ändern, sodass Sie gute Chancen haben, wieder Zugriff zu erhalten.
Simon Richter

7

soll ich fail2ban oder iptables verwenden?

Dies ähnelt in etwa der Frage "Soll ich einen Sicherheitsgurt oder ein Auto verwenden?".

Denken Sie zunächst daran, dass fail2ban wirklich nur ein Werkzeug ist, um wiederkehrende Einträge in Textdateien automatisch zu erkennen und einen Befehl auszuführen, wenn diese einen bestimmten Schwellenwert erreichen.

Wir verwenden es häufig zum Blockieren von Hosts, die gegen eine Richtlinie verstoßen. Dies wird durch wiederkehrende Protokolleinträge belegt, die auf einen Richtlinienverstoß hinweisen. Dies ist jedoch nicht das einzige, für das Sie es verwenden können.

Mit fail2ban können Sie bei Bedarf iptables-Regeln hinzufügen (und entfernen). Sie können iptables-Regeln auch manuell hinzufügen und entfernen oder fail2ban verwenden, um als Antwort etwas völlig anderes zu tun. Das ist alles darüber, wie Sie es konfigurieren.

Sie sollten über eine allgemeine Firewall verfügen, unabhängig davon, ob Sie fail2ban ausführen oder nicht. Eine solche Firewall würde beispielsweise dazu dienen, (eingehenden oder ausgehenden) Datenverkehr zu blockieren, von dem Sie wissen, dass er niemals legitim sein wird. Muss dieser Datenbankserver beispielsweise wirklich eingehende Verbindungen auf Port 25 aus dem gesamten Internet verarbeiten?

Darüber hinaus trägt die Reaktion von fail2ban auf Richtlinienverstöße durch Abschneiden der betreffenden IP-Adresse (n) für eine Weile nicht viel zur Sicherung Ihres Servers an sich bei (ein guter Exploit muss nur einmal durch Ihre Firewall gelangen), aber dies wird der Fall sein Reduzieren Sie den Geräuschpegel Ihres Systems, einschließlich, aber nicht beschränkt auf die Systemprotokolle. Der einfache Weg, dies zu tun, besteht darin, fail2ban iptables ausführen zu lassen, um den Kernel so zu konfigurieren, dass die Pakete für eine Weile verworfen werden. Wenn Sie Ihre Perimeter-Firewall anstelle der Host-Firewall neu konfigurieren können, ist dies umso besser.

Mit anderen Worten, in dem Maße, in dem sie überhaupt leicht getrennt werden können, möchten Sie beides.

Könnte es ein Overkill sein, wenn alles, was ich erreichen möchte, darin besteht, eine IP vom Server zu blockieren, wenn zwei fehlgeschlagene Zugriffsversuche auf einen Dienst / ein Protokoll über einen längeren Zeitraum durchgeführt werden?

Das heißt genau der Anwendungsfall fail2ban ist so konzipiert , zu lösen. Die Verwendung eines Werkzeugs für den vorgesehenen Zweck ist fast nie übertrieben.

Ziel ist es, tägliche Logwatch-Berichte zu öffnen und nicht durch Seiten mit versuchten fehlgeschlagenen Verbindungen zum Server zu scrollen.

Nebenbei bemerkt, nicht direkt mit Ihrer Frage verbunden: Wenn Sie Protokolle zur Überprüfung filtern, überlegen Sie, was Sie mit einem bestimmten Eintrag tun werden. Wenn Sie für einen Eintrag nur "meh" sagen und fortfahren möchten, möchten Sie ihn wahrscheinlich herausfiltern. Stellen Sie sicher, dass Sie die vollständigen Protokolle zur Überprüfung speichern, falls dies erforderlich sein sollte, aber übertragen Sie nur die Dinge in Ihren regulären Überwachungsworkflow, mit denen Sie tatsächlich etwas tun werden , wenn sie angezeigt werden. Wenn Sie fail2ban so einrichten, dass ein Host nach einigen fehlgeschlagenen Verbindungsversuchen blockiert wird, stehen die Chancen gut, dass Sie diese nicht manuell überprüfen müssen und sie aus Ihren Überwachungsbenachrichtigungen entfernen können. Wenn sich ein legitimer Benutzer über den Verlust des Zugriffs beschwert, ziehen Sie einfach die vollständigen Protokolle heraus und werfen Sie einen Blick darauf.


Schätzen Sie das umfangreiche Feedback, ich denke, ich hätte nie gedacht, dass die beiden völlig getrennte Funktionen haben.
Kingmilo

4

Ich habe die gleiche Frage vor einigen Jahren gelöst. Ich habe mich aufgrund der Leistung und der einfachen Einrichtung für die Verwendung von iptables mit neuerem Modul entschieden. Ich musste viele virtuelle Container auf Hosts schützen. Denken Sie nur daran, keinen DOS-Vektor mit Ihren Regeln zu öffnen. Verwenden Sie ipset auch, um Netzwerklisten oder IP-Listen in Regeln abzugleichen. Ich benutze es für weiße Listen. Alle Netzwerke eines Landes in einer Liste eignen sich hervorragend zur Feinabstimmung. Und es ist sehr einfach, einen anderen Dienst mit demselben Regelsatz zu schützen, indem nur ein weiterer passender Port hinzugefügt wird. Ich ändere mich also nicht gerne mit fail2ban, aber vielleicht ist jemand mit anderen Bedürfnissen mit fail2ban zufrieden.

Hier ist ein Beispiel:

  #
  # SSH tracking sample
  #
  #################################################################################
  iptables -X IN_SSH
  iptables -N IN_SSH
  iptables -A IN_SSH -m set --match-set net_blacklist src -p tcp -j REJECT
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp --match limit --limit 5/second -j LOG --log-prefix whitelist_de_prefix
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp -j ACCEPT
  # filter update
  iptables -A IN_SSH -m recent --name sshbf --set --rsource
  # connlimit
  iptables -A IN_SSH -m connlimit --connlimit-above 4 --match limit --limit 5/second -j LOG --log-prefix ssh_connlimit_per_ip_above_4
  iptables -A IN_SSH -m connlimit --connlimit-above 4 -j REJECT
  # filter
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 --match limit --limit 5/second -j LOG --log-prefix ssh_filtered_13in60sec
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 -j REJECT
  iptables -A IN_SSH -j ACCEPT

iptables -A FORWARD -p tcp --dport ssh --syn --jump IN_SSH
# iptables -A INPUT -p tcp --dport ssh --syn --jump IN_SSH

Die Ausgabe Ihrer Protokollierungsnachrichten kann mit fail2ban kombiniert werden. Sie können es auch für INPUT-Regeln verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.