Translate Blacklistd chapter into german

Reviewed by:	bcr
Differential Revision:	https://reviews.freebsd.org/D22816
This commit is contained in:
Bjoern Heidotting 2019-12-14 20:12:21 +00:00
parent 0fad318f0f
commit 81432a090b
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=53689

View file

@ -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
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
@ -3887,4 +3887,346 @@ LOG_ERR - packets which have been logged and which can be considered short due t
<foreignphrase>Port unreachable</foreignphrase>.</para>
</sect2>
</sect1>
<sect1 xml:id="firewalls-blacklistd">
<title>Blacklistd</title>
<para>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
<application>SSH</application>, das viele Anfragen von Bots oder
Skripten erhält, die versuchen, Passwörter zu erraten und
Zugriff zu erhalten. Mit Hilfe von
<application>blacklistd</application> 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;&nbsp;11 hat blacklistd von NetBSD
importiert.</para>
<para>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.</para>
<sect2>
<title>Blacklistd aktivieren</title>
<para>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
<filename>/etc/blacklistd.conf</filename> gespeichert
werden. Um den Daemon während des Systemstarts zu aktivieren,
fügen Sie eine Zeile <literal>blacklistd_enable</literal> in
<filename>/etc/rc.conf</filename> hinzu:</para>
<screen>&prompt.root; <userinput>sysrc blacklistd_enable=yes</userinput></screen>
<para>Sie können den Daemon auch manuell starten:</para>
<screen>&prompt.root; <userinput>service blacklistd start</userinput></screen>
</sect2>
<sect2>
<title>Erstellen von Blacklistd-Regeln</title>
<para>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.</para>
<sect3>
<title>Lokale Regeln</title>
<para>Ein typischer Eintrag für eine lokale Regel in
<filename>/etc/blacklistd.conf</filename> sieht wie
folgt aus:</para>
<programlisting>[local]
ssh stream * * * 3 24h</programlisting>
<para>Alle Regeln, die dem Abschnitt
<literal>[local]</literal> folgen, werden als lokale Regeln
behandelt, die für den lokalen Rechner gelten. In einem
<literal>[remote]</literal>-Abschnitt gelten alle Regeln für
entfernte Maschinen.</para>
<para>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
(<literal>*</literal>) 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:</para>
<programlisting>[<replaceable>address</replaceable>|<replaceable>interface</replaceable>][/<replaceable>mask</replaceable>][:<replaceable>port</replaceable>]</programlisting>
<para>Adressen können als IPv4 im numerischen Format oder IPv6
in eckigen Klammern angegeben werden. Ebenfalls kann der
Name der Schnittstelle wie
<literal><replaceable>em0</replaceable></literal> verwendet
werden.</para>
<para>Im zweiten Feld wird der Socket-Typ definiert.
TCP-Sockets sind vom Typ <literal>stream</literal>,
wohingegen UDP als <literal>dgram</literal> bezeichnet wird.
Das obige Beispiel verwendet TCP, weil SSH dieses Protokoll
benutzt.</para>
<para>Im dritten Feld kann ein Protokoll definiert werden.
Die folgenden Protokolle können verwendet werden:
<literal>tcp</literal>, <literal>udp</literal>,
<literal>tcp6</literal>, <literal>udp6</literal> 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.</para>
<para>Im vierten Feld wird der effektive Benutzer oder
Eigentümer des Daemon-Prozesses definiert, welcher das
Ereignis meldet. Hier kann der Benutzer oder die
<acronym>UID</acronym> sowie eine Wildcard verwendet
werden (siehe Beispiel oben).</para>
<para>Der Name der Firewallregel wird im fünften Feld
definiert. In der Voreinstellung setzt blacklistd
alle geblockten Pakete unter einen pf-Anker namens
<literal>blacklistd</literal> in
<filename>pf.conf</filename> wie folgt:</para>
<programlisting>anchor "blacklistd/*" in on $ext_if
block in
pass out</programlisting>
<para>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
(<literal>-</literal>) bedeutet, das ein Anker mit dem
voreingestellten Regelnamen verwendet werden sollte. Ein
modifiziertes Beispiel von oben mit dem Bindestrich würde
so aussehen:</para>
<programlisting>ssh stream * * -ssh 3 24h</programlisting>
<para>Mit einer solchen Regel werden alle neuen
Blacklistregeln zu einem Anker namens
<literal>blacklistd-ssh</literal> hinzugefügt.</para>
<para>Um ganze Subnetze für eine einzelne Regelverletzung zu
blockieren, kann ein <literal>/</literal> 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
<literal>/24</literal> angrenzt:</para>
<programlisting>22 stream tcp * */24 3 24h</programlisting>
<note>
<para>Es ist wichtig, hier das richtige Protokoll anzugeben.
IPv4 und IPv6 behandeln <literal>/24</literal>
unterschiedlich, deshalb kann <literal>*</literal> im
dritten Feld für diese Regel nicht benutzt werden.</para>
</note>
<para>Diese Regel bewirkt, dass, wenn ein Rechner in
diesem Netzwerk wegen seines Verhaltens blockiert wird,
auch alle anderen Rechner aus diesem Netzwerk blockiert
werden.</para>
<para>Das sechste Feld, genannt <literal>nfail</literal>, 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 <application>SSH</application>
gesperrt wird.</para>
<para>Das letzte Feld in der Regel gibt an, wie lange ein
Rechner auf der Blacklist steht. Die Standardeinheit ist
Sekunden, aber Suffixe wie <literal>m</literal> (Minuten),
<literal>h</literal> (Stunden) und <literal>d</literal>
(Tage) können auch angegeben werden.</para>
<para>Die Regel im Beispiel besagt, dass nach dreimaliger
Authentifizierung über <application>SSH</application> 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
<literal>remote</literal>-Regeln angewendet und die Felder
<literal>name</literal>, <literal>nfail</literal> und
<literal>disable</literal> werden durch die entsprechende
<literal>remote</literal>-Regel geändert.</para>
</sect3>
<sect3>
<title>Remote-Regeln</title>
<para>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:</para>
<programlisting>[remote]
203.0.113.128/25 * * * =/25 = 48h</programlisting>
<para>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.</para>
<para>Die Felder für den Namen sind jedoch unterschiedlich.
Das Gleichheitszeichen (<literal>=</literal>) 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 <systemitem class="netmask">/25</systemitem> (eine
Netzmaske von <systemitem
class="netmask">255.255.255.128</systemitem>) 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.</para>
<para>Für eine Adresse kann im Feld <literal>nfail</literal>
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.</para>
<para>Remote-Regeln ermöglichen eine strengere Durchsetzung
der Beschränkungen bei Anmeldeversuchen im Vergleich zu
Anmeldeversuchen die aus dem lokalen Netzwerk kommen.</para>
</sect3>
</sect2>
<sect2>
<title>Blacklistd Client Konfiguration</title>
<para>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
<filename>/etc/ssh/sshd_config</filename> hinzugefügt
werden:</para>
<programlisting>UseBlacklist yes</programlisting>
<para>Damit die Änderungen wirksam werden, muss sshd im
Anschluss neu gestartet werden.</para>
<para>Für &man.ftpd.8; wird blacklistd mit dem Schalter
<literal>-B</literal> aktiviert. Entweder in
<filename>/etc/inetd.conf</filename> oder in
<filename>/etc/rc.conf</filename>:</para>
<programlisting>ftpd_flags="-B"</programlisting>
<para>Das ist alles, was benötigt wird, damit diese Programme
mit blacklist kommunizieren.</para>
</sect2>
<sect2>
<title>Blacklistd Verwaltung</title>
<para>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 <command>dump</command> zusammen mit
der Option <option>-b</option>:</para>
<screen>&prompt.root; <userinput>blacklistctl dump -b</userinput>
address/ma:port id nfail last access
213.0.123.128/25:22 OK 6/3 2019/06/08 14:30:19</screen>
<para>Dieses Beispiel zeigt, dass es sechs von drei erlaubten
Anmeldeversuchen auf Port 22 aus dem Adressbereich <systemitem
class="netmask">213.0.123.128/25</systemitem> 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.</para>
<para>Um die verbleibende Zeit zu sehen, die sich dieser Rechner
auf der Blacklist befindet, fügen Sie <option>-r</option> zum
vorherigen Befehl hinzu:</para>
<screen>&prompt.root; <userinput>blacklistctl dump -br</userinput>
address/ma:port id nfail remaining time
213.0.123.128/25:22 OK 6/3 36s</screen>
<para>In diesem Beispiel bleiben noch 36 Sekunden, bis dieser
Rechner nicht mehr blockiert wird.</para>
</sect2>
<sect2>
<title>Rechner aus der Blocklist entfernen</title>
<para>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 <command>pfctl</command>
aus der PF-Tabelle zu entfernen. Für den blockierten Port
gibt es einen untergeordneten Anker innerhalb des definierten
blacklistd-Ankers in <filename>/etc/pf.conf</filename>. Wenn
es beispielsweise einen untergeordneten Anker zum Blockieren
von Port 22 gibt, wird dieser als
<literal>blacklistd/22</literal> 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 <literal>port22</literal> heißen. Mit diesen Informationen
und &man.pfctl.8; ist es nun möglich, alle geblockten Adressen
anzuzeigen:</para>
<screen>&prompt.root; <userinput>pfctl -a <replaceable>blacklistd/22</replaceable> -t <replaceable>port22</replaceable> -T show</userinput>
...
213.0.123.128/25
...</screen>
<para>Nachdem Sie die entsprechende Adresse ermittelt wurde,
kann sie mit folgendem Befehl aus der Liste entfernt
werden:</para>
<screen>&prompt.root; <userinput>pfctl -a <replaceable>blacklistd/22</replaceable> -T delete <replaceable>213.0.123.128/25</replaceable></userinput></screen>
<para>Die Adresse ist nun aus PF entfernt, erscheint aber immer
noch in der Liste von <command>blacklistctl</command>, 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.</para>
</sect2>
</sect1>
</chapter>