Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:blockhosts [2011/03/31 16:00]
127.0.0.1 external edit
tux:blockhosts [2011/04/22 14:50] (aktuell)
wikisysop [Server Dienst Zugangskontrolle: BlockHosts Skript]
Zeile 4: Zeile 4:
 Wer zB einen öffentlich zugänglichen FTP-Server betreibt, kennt das Szenario: Beim checken der Server Logs wird das Logfiles mit zahlreichen fehlgeschlagenen Anmeldeversuchen förmlich zugespammt. Ich konnte zB auf unseren Servern in Spitzenzeiten mehrere Hunderttausend fehlgeschlagener Anmeldeversuche in einer Nacht feststellen. Meist harmlos, weil da einfach mittels Brute Force((http://​de.wikipedia.org/​wiki/​Brute-Force-Methode)) versucht wird das Passwort zu knacken. IdR ist dies ein Zeichen dafür, dass harmlose Script Kiddies ihr Unwesen treiben. Der unangenehme Nebeneffekt dieser Aktionen besteht allerdings darin, dass das Logfile nicht mehr vernünftig ausgewertet werden kann und die Gefahr steigt, zwischen den endlosen Zeilen doch mal eine wichtige Meldung zu übersehen. Dazu gesellt sich noch die nicht zu unterschätzende Last am Server und der meist begrenzten Internet Bandbreite. Wer zB einen öffentlich zugänglichen FTP-Server betreibt, kennt das Szenario: Beim checken der Server Logs wird das Logfiles mit zahlreichen fehlgeschlagenen Anmeldeversuchen förmlich zugespammt. Ich konnte zB auf unseren Servern in Spitzenzeiten mehrere Hunderttausend fehlgeschlagener Anmeldeversuche in einer Nacht feststellen. Meist harmlos, weil da einfach mittels Brute Force((http://​de.wikipedia.org/​wiki/​Brute-Force-Methode)) versucht wird das Passwort zu knacken. IdR ist dies ein Zeichen dafür, dass harmlose Script Kiddies ihr Unwesen treiben. Der unangenehme Nebeneffekt dieser Aktionen besteht allerdings darin, dass das Logfile nicht mehr vernünftig ausgewertet werden kann und die Gefahr steigt, zwischen den endlosen Zeilen doch mal eine wichtige Meldung zu übersehen. Dazu gesellt sich noch die nicht zu unterschätzende Last am Server und der meist begrenzten Internet Bandbreite.
  
-Man kann diese Art eines Angriffs abwehren, in dem man bei jedem Anmeldeversuch die Logfiles der zu schützenden Dienste nach fehlerhaften Anmeldeversuchen durchsucht und bei einer bestimmten Anzahl fehlerhaften Anmeldeversuche die IP-Adresse des Angreifers für einen bestimmten Zeitraum blockiert. Eine mögliche Variante für dieses Szenario ist das Phyton Script <fc #​008000>​BlockHosts</​fc>​((http://​www.aczoom.com/​cms/​blockhosts)). Die IP Adresse des Angreifers wird nach Erreichen einer bestimmten Anzahl fehlerhaften Anmeldeversuche entweder vorübergehend in die Datei <fc #​008000>/​etc/​hosts.allow</​fc>​((http://​linux.die.net/​man/​5/​hosts.allow)) mit dem <fc #​008000>​deny-Flag</​fc>​ eingetragen oder die Systemfirewall <fc #​008000>​iptables</​fc>​ wird mit einer <fc #​008000>​Drop Regel</​fc>​ konfiguriert bzw. es kann ein <fc #​008000>​Null-Routing</​fc>​ konfiguriert werden, um die TCP-Pakete des Angreifers im Nirvana verschwinden zu lassen. Dieses Tutorial beschränkt sich auf die hosts.allow Variante.  ​+Man kann diese Art eines Angriffs abwehren, in dem man bei jedem Anmeldeversuch die Logfiles der zu schützenden Dienste nach fehlerhaften Anmeldeversuchen durchsucht und bei einer bestimmten Anzahl fehlerhaften Anmeldeversuche die IP-Adresse des Angreifers für einen bestimmten Zeitraum blockiert. Eine mögliche Variante für dieses Szenario ist das Phyton Script <fc #​008000>​BlockHosts</​fc>​((http://​www.aczoom.com/​cms/​blockhosts)). Die IP Adresse des Angreifers wird nach Erreichen einer bestimmten Anzahl fehlerhaften Anmeldeversuche entweder vorübergehend in die Datei <fc #​008000>/​etc/​hosts.allow</​fc>​((http://​linux.die.net/​man/​5/​hosts.allow)) mit dem <fc #​008000>​deny-Flag</​fc>​ eingetragen oder die Systemfirewall <fc #​008000>​iptables</​fc>​ wird mit einer <fc #​008000>​Drop Regel</​fc>​ konfiguriert bzw. es kann ein <fc #​008000>​Null-Routing</​fc>​ konfiguriert werden, um die TCP-Pakete des Angreifers im Nirvana verschwinden zu lassen. Dieses Tutorial beschränkt sich auf die hosts.allow Variante ​in Verbindung mit dem freien FTP-Server [[:​tux/​vsftpd|»vsftpd«]]((http://​vsftpd.beasts.org/​)).  ​
  
 ==== Vorraussetzungen:​ ==== ==== Vorraussetzungen:​ ====
Zeile 12: Zeile 12:
 Überprüfen Sie ob >>​Python<<​ auf dem System vorhanden ist: Überprüfen Sie ob >>​Python<<​ auf dem System vorhanden ist:
  
-<xterm2>​vmdebian3:/​etc/#​ <fc #​008000>​which python</​fc>​+<xterm>​vmdebian3:/​etc/#​ <fc #​008000>​which python</​fc>​
 /​usr/​bin/​python /​usr/​bin/​python
 vmdebian3:/​etc/#​ <fc #​008000>​python <​nowiki>​--version</​nowiki></​fc>​ vmdebian3:/​etc/#​ <fc #​008000>​python <​nowiki>​--version</​nowiki></​fc>​
 Python 2.5.2 Python 2.5.2
-</xterm2>+</xterm>
  
 ==== Installation:​ ==== ==== Installation:​ ====
Zeile 22: Zeile 22:
 Laden Sie sich den Quellcode des BlockHost Skripts von der Webseite herunter und entpacken es: Laden Sie sich den Quellcode des BlockHost Skripts von der Webseite herunter und entpacken es:
  
-<xterm2>​vmdebian3:/​etc#​ <fc #​008000>​cd /​tmp/</​fc>​+<xterm>​vmdebian3:/​etc#​ <fc #​008000>​cd /​tmp/</​fc>​
 vmdebian3:/​tmp#​ <fc #​008000>​wget <​nowiki>​http://​www.aczoom.com/​tools/​blockhosts/​BlockHosts-2.4.0.tar.gz</​nowiki></​fc>​ vmdebian3:/​tmp#​ <fc #​008000>​wget <​nowiki>​http://​www.aczoom.com/​tools/​blockhosts/​BlockHosts-2.4.0.tar.gz</​nowiki></​fc>​
 vmdebian3:/​tmp#​ <fc #​008000>​tar -xvf BlockHosts-2.4.0.tar.gz</​fc>​ vmdebian3:/​tmp#​ <fc #​008000>​tar -xvf BlockHosts-2.4.0.tar.gz</​fc>​
Zeile 31: Zeile 31:
 vmdebian3:/​tmp#​ <fc #​008000>​cd BlockHosts-2.4.0</​fc>​ vmdebian3:/​tmp#​ <fc #​008000>​cd BlockHosts-2.4.0</​fc>​
 vmdebian3:/​tmp/​BlockHosts-2.4.0#​ <fc #​008000>​ls</​fc>​ vmdebian3:/​tmp/​BlockHosts-2.4.0#​ <fc #​008000>​ls</​fc>​
-bhrss.html ​ blockhosts.cfg ​  ​blockhosts.py ​ <fc #800000>​INSTALL</​fc> ​ logrotate.d ​ MANIFEST ​ README ​ <fc #800000>​setup.py</​fc> ​ test_data+bhrss.html ​ blockhosts.cfg ​  ​blockhosts.py ​ <fc #0000FF>​INSTALL</​fc> ​ logrotate.d ​ MANIFEST ​ README ​ <fc #0000FF>​setup.py</​fc> ​ test_data
 bhrss.py ​   blockhosts.html ​ CHANGES  ​   LICENSE ​ logwatch  ​ PKG-INFO ​ setup.cfg ​ test_blockhosts.py bhrss.py ​   blockhosts.html ​ CHANGES  ​   LICENSE ​ logwatch  ​ PKG-INFO ​ setup.cfg ​ test_blockhosts.py
-</xterm2+</xterm
 \\  \\ 
 Führen Sie für eine Neuinstallation das Python Skript <fc #​008000>​setup.py</​fc>​ aus. Für detaillierte Information lesen Sie bitte das <fc #​008000>​INSTALL</​fc>​ File im BlockHosts Verzeichnis:​ Führen Sie für eine Neuinstallation das Python Skript <fc #​008000>​setup.py</​fc>​ aus. Für detaillierte Information lesen Sie bitte das <fc #​008000>​INSTALL</​fc>​ File im BlockHosts Verzeichnis:​
  
-<xterm2>​vmdebian3:/​tmp/​BlockHosts-2.4.0#​ <fc #​008000>​python setup.py install <​nowiki>​--force</​nowiki></​fc>​+<xterm>​vmdebian3:/​tmp/​BlockHosts-2.4.0#​ <fc #​008000>​python setup.py install <​nowiki>​--force</​nowiki></​fc>​
 running install running install
 running build running build
Zeile 58: Zeile 58:
 Writing /​usr/​lib/​python2.5/​site-packages/​BlockHosts-2.4.0.egg-info Writing /​usr/​lib/​python2.5/​site-packages/​BlockHosts-2.4.0.egg-info
 vmdebian3:/​tmp/​BlockHosts-2.4.0#​ vmdebian3:/​tmp/​BlockHosts-2.4.0#​
-</xterm2>+</xterm>
  
  
 ==== Konfiguration ==== ==== Konfiguration ====
  
-Die zentrale Konfigurations-Datei von BlockHosts ist <fc #​008000>/​etc/​blockhosts.cfg</​fc>​. Hier werden wir das Skript unseren Bedürfnissen anpassen. Des Weiteren ist die <fc #​008000>/​etc/​hosts.allow</​fc>​ das zentrale Blockhost File. Hier ist es sinnvoll auch eine Whitelist anzulegen, um zu verhindern, dass wichtige Kunden oder möglicherweise sogar sich selbst versehentlich ​selbst aussperrt. Letzteres wäre vor allem bei SSH peinlich. Da der TCP-Wrapper bei jedem Aufruf eines Dienstes diese Datei auswertet, wird auch hier der Aufruf des BlockHosts Skripts platziert. So wird sichergestellt,​ dass das Skript bei jedem Aufruf eines Dienstes die Logfiles der konfigurierten Dienste überprüft werden und ggf die Sperrliste aktualisiert wird.+Die zentrale Konfigurations-Datei von BlockHosts ist <fc #​008000>/​etc/​blockhosts.cfg</​fc>​. Hier werden wir das Skript unseren Bedürfnissen anpassen. Des Weiteren ist die <fc #​008000>/​etc/​hosts.allow</​fc>​ das zentrale Blockhost File. Hier ist es sinnvoll auch eine Whitelist anzulegen, um zu verhindern, dass wichtige Kunden oder möglicherweise sogar Sie selbst versehentlich ​ausgesperrt werden. Letzteres wäre vor allem bei SSH peinlich. Da der TCP-Wrapper bei jedem Aufruf eines Dienstes diese Datei auswertet, wird auch hier der Aufruf des BlockHosts Skripts platziert. So wird sichergestellt,​ dass das Skript bei jedem Aufruf eines Dienstes die Logfiles der konfigurierten Dienste überprüft werden und ggf die Sperrliste aktualisiert wird.
  
 Kommentieren Sie in der Datei <fc #​008000>/​etc/​blockhosts.cfg</​fc>​ folgende Zeilen aus: Kommentieren Sie in der Datei <fc #​008000>/​etc/​blockhosts.cfg</​fc>​ folgende Zeilen aus:
Zeile 86: Zeile 86:
 Führen Sie das Script <fc #​008000>​blockhosts.py <​nowiki>​--verbose</​nowiki></​fc>​ im entpackten BlockHosts Paket aus. Dadurch werden die konfigurierten Logfiles das erste mal ausgewertet und der Offset festgelegt, ab wann das Logfile gelesen werden soll. Dadurch wird verhindert, dass bei bereits laufenden Servern beim ersten produktiven Lauf sämtliche FAIL LOGIN Einträge auswertet und alle bislang bestehenden Hosts mit fehlerhaften Logins auf einmal gesperrt werden. Des Weiteren werden weitere Tags in die Datei <fc #​008000>/​etc/​hosts.allow</​fc>​ eingefügt. Führen Sie das Script <fc #​008000>​blockhosts.py <​nowiki>​--verbose</​nowiki></​fc>​ im entpackten BlockHosts Paket aus. Dadurch werden die konfigurierten Logfiles das erste mal ausgewertet und der Offset festgelegt, ab wann das Logfile gelesen werden soll. Dadurch wird verhindert, dass bei bereits laufenden Servern beim ersten produktiven Lauf sämtliche FAIL LOGIN Einträge auswertet und alle bislang bestehenden Hosts mit fehlerhaften Logins auf einmal gesperrt werden. Des Weiteren werden weitere Tags in die Datei <fc #​008000>/​etc/​hosts.allow</​fc>​ eingefügt.
  
-<xterm2>​vmdebian3:​~#​ <fc #​008000>​cd /​tmp/​BlockHosts-2.4.0/</​fc>​+<xterm>​vmdebian3:​~#​ <fc #​008000>​cd /​tmp/​BlockHosts-2.4.0/</​fc>​
 vmdebian3:/​tmp/​BlockHosts-2.4.0#​ <fc #​008000>​blockhosts.py <​nowiki>​--verbose</​nowiki></​fc>​ vmdebian3:/​tmp/​BlockHosts-2.4.0#​ <fc #​008000>​blockhosts.py <​nowiki>​--verbose</​nowiki></​fc>​
 blockhosts 2.4.0 started: 2010-04-25 02:02:07 CEST blockhosts 2.4.0 started: 2010-04-25 02:02:07 CEST
  ... loaded /​etc/​hosts.allow,​ starting counts: blocked 0, watched 0  ... loaded /​etc/​hosts.allow,​ starting counts: blocked 0, watched 0
  ... loading log file /​var/​log/​secure,​ offset: 0  ... loading log file /​var/​log/​secure,​ offset: 0
- ... loading log file /​var/​log/​vsftpd.log,​ <fc #800000>offset: 4621</​fc>​+ ... loading log file /​var/​log/​vsftpd.log,​ <fc #0000FF>offset: 4621</​fc>​
  ... discarding all host entries older than  2010-04-24 14:02:07 CEST  ... discarding all host entries older than  2010-04-24 14:02:07 CEST
  ... final counts: blocked 0, watched 0  ... final counts: blocked 0, watched 0
-</xterm2>+</xterm>
  
 **Fertig** **Fertig**
Zeile 157: Zeile 157:
 Der Login am Server sieht für den Angreifer dann wie folgt aus: Der Login am Server sieht für den Angreifer dann wie folgt aus:
  
-<xterm2>$ <fc #​008000>​ftp 192.168.172.132</​fc>​+<xterm>$ <fc #​008000>​ftp 192.168.172.132</​fc>​
 Connected to 192.168.172.132. Connected to 192.168.172.132.
-<fc #800000>421 Service not available, remote server has closed connection.</​fc>​ +<fc #0000FF>421 Service not available, remote server has closed connection.</​fc>​ 
-</xterm2>+</xterm>
  
 **Note:** Testen Sie Ihre Konfiguration nicht auf der lokalen Maschine, weil der <fc #​008000>​localhost</​fc>​ in einer Whitelist steht und nicht vom BlockHosts Skript berücksichtigt wird! **Note:** Testen Sie Ihre Konfiguration nicht auf der lokalen Maschine, weil der <fc #​008000>​localhost</​fc>​ in einer Whitelist steht und nicht vom BlockHosts Skript berücksichtigt wird!
Zeile 166: Zeile 166:
 === false positive === === false positive ===
  
-Häufig genug kommt es vor, dass auch Kunden oder gar Mitarbeiter in der <fc #​008000>/​etc/​hosts.allow</​fc>​ geparkt werden. Das bekommen Sie relativ rasch mit, wenn sich Support Anfragen in dieser Richtung häufen. Es reicht dann aus die beiden ​ersten ​Zeilen aus der <fc #​008000>/​etc/​hosts.allow</​fc>​ zu löschen:+Häufig genug kommt es vor, dass auch Kunden oder gar Mitarbeiter in der <fc #​008000>/​etc/​hosts.allow</​fc>​ geparkt werden. Das bekommen Sie relativ rasch mit, wenn sich Support Anfragen in dieser Richtung häufen. Es reicht dann aus die beiden ​dazugehörigen ​Zeilen ​(hier mit <fc #​008000>#​ ← DELETE</​fc>​) ​aus der <fc #​008000>/​etc/​hosts.allow</​fc>​ zu löschen:
  
 <code xorg_conf|/​etc/​hosts.allow>​ <code xorg_conf|/​etc/​hosts.allow>​
 #---- BlockHosts Additions #---- BlockHosts Additions
-ALL:   ​192.168.172.1 : deny+ALL:   ​192.168.172.1 : deny # ← DELETE
  
-#bh: ip:   ​192.168.172.1 :   8 : 2010-04-25 02:29:46 CEST+#bh: ip:   ​192.168.172.1 :   8 : 2010-04-25 02:29:46 CEST # ← DELETE
  
 #bh: logfile: /​var/​log/​secure #bh: logfile: /​var/​log/​secure
tux/blockhosts.1301580007.txt.gz (20814 views) · Zuletzt geändert: 2011/04/16 22:19 (Externe Bearbeitung)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0