Translate Blacklistd chapter into german
Reviewed by: bcr Differential Revision: https://reviews.freebsd.org/D22816
This commit is contained in:
parent
0fad318f0f
commit
81432a090b
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=53689
1 changed files with 343 additions and 1 deletions
|
|
@ -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; 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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue