Index: head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml +++ head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml @@ -5,7 +5,7 @@ $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/firewalls/chapter.xml,v 1.53 2012/04/30 16:15:52 bcr Exp $ - basiert auf: r52944 + basiert auf: r53425 --> icmp 3/3 für die Nachricht Port unreachable. + + + + + Blacklistd + + Blacklistd ist ein Daemon der auf Sockets lauscht, um + Benachrichtigungen von anderen Daemons über fehlgeschlagene + oder erfolgreiche Verbindungsversuche zu erhalten. Dieser + Daemon wird häufig verwendet, um zu viele Verbindungsversuche + auf offenen Ports zu blockieren. Ein Beispiel ist + SSH, das viele Anfragen von Bots oder + Skripten erhält, die versuchen, Passwörter zu erraten und + Zugriff zu erhalten. Mit Hilfe von + blacklistd kann der Daemon + die Firewall benachrichtigen, eine Filterregel zu erstellen, um + übermäßige Verbindungsversuche einer einzigen Quelle nach einer + Reihe von Versuchen zu blockieren. Blacklistd wurde + ursprünglich auf NetBSD entwickelt und erschien dort in der + Version 7. &os; 11 hat blacklistd von NetBSD + importiert. + + In diesem Kapitel wird die Einrichtung und Konfiguration + von blacklistd besprochen. Sie finden aber auch Beispiele für + die Verwendung von blacklistd. Sie sollten allerdings mit + grundlegenden Firewall-Konzepten wie Filterregeln vertraut sein. + Weitere Informationen finden Sie im Kapitel Firewalls. In + diesen Beispielen wird PF benutzt, aber auch andere unter &os; + verfügbare Firewalls sollten in der Lage sein mit blacklistd + zusammen zu arbeiten. + + + Blacklistd aktivieren + + Die Konfiguration für blacklistd wird in + &man.blacklistd.conf.5; gespeichert. Um das Laufzeitverhalten + von blacklistd zu beeinflussen, sind verschiedene + Kommandozeilenoptionen verfügbar. Die permanente + Konfiguration über Neustarts hinweg sollte in + /etc/blacklistd.conf gespeichert + werden. Um den Daemon während des Systemstarts zu aktivieren, + fügen Sie eine Zeile blacklistd_enable in + /etc/rc.conf hinzu: + + &prompt.root; sysrc blacklistd_enable=yes + + Sie können den Daemon auch manuell starten: + + &prompt.root; service blacklistd start + + + + Erstellen von Blacklistd-Regeln + + Die Regeln für blacklistd werden in + &man.blacklistd.conf.5; mit einem Eintrag pro Zeile + konfiguriert. Jede Regel enthält ein Tupel, das durch + Leerzeichen oder Tabulator getrennt ist. Eine Regel gilt + entweder für einen lokalen oder einen + entfernten Rechner. + + + Lokale Regeln + + Ein typischer Eintrag für eine lokale Regel in + /etc/blacklistd.conf sieht wie + folgt aus: + + [local] +ssh stream * * * 3 24h + + Alle Regeln, die dem Abschnitt + [local] folgen, werden als lokale Regeln + behandelt, die für den lokalen Rechner gelten. In einem + [remote]-Abschnitt gelten alle Regeln für + entfernte Maschinen. + + Die sieben Felder einer Regel werden entweder durch + Tabulator oder Leerzeichen getrennt. Die ersten vier Felder + identifizieren den Netzwerkverkehr, welcher geblockt werden + soll. Die drei folgenden Felder definieren das Verhalten + von blacklistd. Wildcards werden mit einem Sternchen + (*) gekennzeichnet und stimmen mit allen + anderen in diesem Feld überein. Das erste Feld definiert + den Standort. In den lokalen Regeln sind dies die Ports. + Die Syntax ist wie folgt: + + [address|interface][/mask][:port] + + Adressen können als IPv4 im numerischen Format oder IPv6 + in eckigen Klammern angegeben werden. Ebenfalls kann der + Name der Schnittstelle wie + em0 verwendet + werden. + + Im zweiten Feld wird der Socket-Typ definiert. + TCP-Sockets sind vom Typ stream, + wohingegen UDP als dgram bezeichnet wird. + Das obige Beispiel verwendet TCP, weil SSH dieses Protokoll + benutzt. + + Im dritten Feld kann ein Protokoll definiert werden. + Die folgenden Protokolle können verwendet werden: + tcp, udp, + tcp6, udp6 oder + numerisch. Eine Wildcard, wie im Beispiel, wird + typischerweise verwendet, um alle Protokolle abzubilden, es + sei denn, es gibt einen Grund, den Verkehr nach einem + bestimmten Protokoll zu differenzieren. + + Im vierten Feld wird der effektive Benutzer oder + Eigentümer des Daemon-Prozesses definiert, welcher das + Ereignis meldet. Hier kann der Benutzer oder die + UID sowie eine Wildcard verwendet + werden (siehe Beispiel oben). + + Der Name der Firewallregel wird im fünften Feld + definiert. In der Voreinstellung setzt blacklistd + alle geblockten Pakete unter einen pf-Anker namens + blacklistd in + pf.conf wie folgt: + + anchor "blacklistd/*" in on $ext_if +block in +pass out + + Für separate Blacklists kann in diesem Feld ein + Ankername benutzt werden. In anderen Fällen genügt eine + Wildcard. Ein Name mit vorangestelltem Bindestrich + (-) bedeutet, das ein Anker mit dem + voreingestellten Regelnamen verwendet werden sollte. Ein + modifiziertes Beispiel von oben mit dem Bindestrich würde + so aussehen: + + ssh stream * * -ssh 3 24h + + Mit einer solchen Regel werden alle neuen + Blacklistregeln zu einem Anker namens + blacklistd-ssh hinzugefügt. + + Um ganze Subnetze für eine einzelne Regelverletzung zu + blockieren, kann ein / im Regelnamen + benutzt werden. Dadurch wird der verbleibende Teil des + Namens als Maske interpretiert, die auf die in der Regel + angegebene Adresse angewendet wird. Diese Regel würde + beispielsweise jede Adresse blockieren, die an + /24 angrenzt: + + 22 stream tcp * */24 3 24h + + + Es ist wichtig, hier das richtige Protokoll anzugeben. + IPv4 und IPv6 behandeln /24 + unterschiedlich, deshalb kann * im + dritten Feld für diese Regel nicht benutzt werden. + + + Diese Regel bewirkt, dass, wenn ein Rechner in + diesem Netzwerk wegen seines Verhaltens blockiert wird, + auch alle anderen Rechner aus diesem Netzwerk blockiert + werden. + + Das sechste Feld, genannt nfail, legt + die Anzahl der Anmeldeversuche fest, die erforderlich sind, + um die betreffende IP auf die Blacklist zu setzen. Eine + Wildcard an dieser Stelle bedeutet, dass niemals geblockt + wird. Im obigen Beispiel ist eine Anzahl von 3 definiert, + was bedeutet, dass die IP nach drei fehlgeschlagenen + Anmeldeversuchen über SSH + gesperrt wird. + + Das letzte Feld in der Regel gibt an, wie lange ein + Rechner auf der Blacklist steht. Die Standardeinheit ist + Sekunden, aber Suffixe wie m (Minuten), + h (Stunden) und d + (Tage) können auch angegeben werden. + + Die Regel im Beispiel besagt, dass nach dreimaliger + Authentifizierung über SSH eine + neue PF-Regel für diesen Rechner angelegt wird. Beim + Überprüfen der Regeln werden zuerst lokale Regeln, von sehr + spezifisch bis am wenigsten spezifisch, geprüft. Wenn eine + Übereinstimmung auftritt, werden die + remote-Regeln angewendet und die Felder + name, nfail und + disable werden durch die entsprechende + remote-Regel geändert. + + + + + Remote-Regeln + + Mit Remote-Regeln wird das Verhalten von blacklistd, in + Abhängigkeit vom aktuell ausgewerteten Remote-Rechner, + festgelegt. Die einzelnen Felder einer Remote-Regel sind + identisch mit den Feldern einer lokalen Regel. Der einzige + Unterschied besteht darin, wie blacklistd sie verwendet. + Zur besseren Verständlichkeit wird folgende Regel + benutzt: + + [remote] +203.0.113.128/25 * * * =/25 = 48h + + Das Adressfeld kann eine IP-Adresse (entweder v4 oder + v6), einen Port oder beides beinhalten. Dies ermöglicht es, + wie in diesem Beispiel, spezielle Regeln für einen + bestimmten entfernten Adressbereich festzulegen. Die Felder + für den Socket-Typ, Protokoll und Besitzer werden genauso + wie in den lokalen Regeln interpretiert. + + Die Felder für den Namen sind jedoch unterschiedlich. + Das Gleichheitszeichen (=) in einer + Remote-Regel weist blacklistd an, den Wert aus der + entsprechenden lokalen Regel zu verwenden. Das bedeutet, + dass der Eintrag der Firewall-Regel übernommen und das + Präfix /25 (eine + Netzmaske von 255.255.255.128) hinzugefügt + wird. Wenn eine Verbindung aus diesem Adressbereich + geblockt wird, ist das gesamte Subnetz betroffen. Ein + PF-Ankername kann auch hier verwendet werden. In diesem + Fall fügt blacklistd Regeln für diesen Adressbereich dem + Namen des Ankers hinzu. Die Standardtabelle wird verwendet, + wenn eine Wildcard angegeben wird. + + Für eine Adresse kann im Feld nfail + die Anzahl von Fehlversuchen definiert werden. Dies ist + nützlich für Ausnahmen, um weniger strenge Anwendungen zu + ermöglichen, oder um Anmeldeversuche ein wenig nachsichtiger + zu gestalten. Die Sperrung wird aufgehoben, wenn im + sechsten Feld eine Wildcard benutzt wird. + + Remote-Regeln ermöglichen eine strengere Durchsetzung + der Beschränkungen bei Anmeldeversuchen im Vergleich zu + Anmeldeversuchen die aus dem lokalen Netzwerk kommen. + + + + + Blacklistd Client Konfiguration + + Es gibt einige Softwarepakete in &os;, die die + Funktionalität von blacklistd nutzen können. Die beiden + bekanntesten sind &man.ftpd.8; und &man.sshd.8;. Beide + Programme nutzen blacklistd, um übermäßige Verbindungsversuche + zu unterbinden. Um blacklistd im SSH-Daemon zu aktivieren, + muss folgend Zeile in + /etc/ssh/sshd_config hinzugefügt + werden: + + UseBlacklist yes + + Damit die Änderungen wirksam werden, muss sshd im + Anschluss neu gestartet werden. + + Für &man.ftpd.8; wird blacklistd mit dem Schalter + -B aktiviert. Entweder in + /etc/inetd.conf oder in + /etc/rc.conf: + + ftpd_flags="-B" + + Das ist alles, was benötigt wird, damit diese Programme + mit blacklist kommunizieren. + + + + Blacklistd Verwaltung + + Blacklistd stellt dem Benutzer das Verwaltungswerkzeug + &man.blacklistctl.8; zur Verfügung. Es zeigt blockierte + Adressen und Netzwerke an, die nach den in + &man.blacklistd.conf.5; definierten Regeln auf der Blacklist + stehen. Um die Liste der aktuell blockierten Rechner + anzuzeigen, benutzen Sie dump zusammen mit + der Option : + + &prompt.root; blacklistctl dump -b + address/ma:port id nfail last access +213.0.123.128/25:22 OK 6/3 2019/06/08 14:30:19 + + Dieses Beispiel zeigt, dass es sechs von drei erlaubten + Anmeldeversuchen auf Port 22 aus dem Adressbereich 213.0.123.128/25 gab. Es sind + mehr Versuche aufgelistet, als erlaubt sind, da SSH es einem + Client erlaubt, mehrere Anmeldungen über eine einzige + TCP-Verbindung zu tätigen. Eine derzeit laufende Verbindung + wird nicht von blacklistd unterbunden. Der letzte + Verbindungsversuch ist in der letzten Spalte der Ausgabe + aufgeführt. + + Um die verbleibende Zeit zu sehen, die sich dieser Rechner + auf der Blacklist befindet, fügen Sie zum + vorherigen Befehl hinzu: + + &prompt.root; blacklistctl dump -br + address/ma:port id nfail remaining time +213.0.123.128/25:22 OK 6/3 36s + + In diesem Beispiel bleiben noch 36 Sekunden, bis dieser + Rechner nicht mehr blockiert wird. + + + + Rechner aus der Blocklist entfernen + + Manchmal ist es notwendig, einen Rechner aus der Blocklist + zu entfernen, bevor die verbleibende Zeit abgelaufen ist. + Leider bietet blacklistd keine Möglichkeit dies zu tun. Es + ist jedoch möglich, die Adresse mit pfctl + aus der PF-Tabelle zu entfernen. Für den blockierten Port + gibt es einen untergeordneten Anker innerhalb des definierten + blacklistd-Ankers in /etc/pf.conf. Wenn + es beispielsweise einen untergeordneten Anker zum Blockieren + von Port 22 gibt, wird dieser als + blacklistd/22 bezeichnet. In diesem + untergeordneten Anker befindet sich eine Tabelle, die die + blockierten Adressen enthält. Diese Tabelle wird Port + genannt, gefolgt von der Portnummer. In diesem Beispiel würde + es port22 heißen. Mit diesen Informationen + und &man.pfctl.8; ist es nun möglich, alle geblockten Adressen + anzuzeigen: + + &prompt.root; pfctl -a blacklistd/22 -t port22 -T show +... +213.0.123.128/25 +... + + Nachdem Sie die entsprechende Adresse ermittelt wurde, + kann sie mit folgendem Befehl aus der Liste entfernt + werden: + + &prompt.root; pfctl -a blacklistd/22 -T delete 213.0.123.128/25 + + Die Adresse ist nun aus PF entfernt, erscheint aber immer + noch in der Liste von blacklistctl, da + dieser keine Kenntnis von Änderungen an PF hat. Der Eintrag + in blacklist's Datenbank wird irgendwann ablaufen und dann aus + der Ausgabe entfernt werden. Der Eintrag wird wieder + hinzugefügt, falls der Rechner erneut gegen eine der Regeln + von blacklistd verstößt.