Block outdated clients 1


Es kann Probleme mit destination file geben. Eine Lösung dazu findet sich unter xt_recent mit syslog-ng.

Ich habe auf meinem clamav-mirror zahlreiche Connects von veralteten Clients (> 300,000 / day). Daher trage ich die IP mit veralteten Versionen (die einen Apache-Code 403 produzieren) in die Firewall ein.

Voraussetzungen:

Konfiguriere Apache HTTP-Server

Das Access Log von apache muss an syslog-ng gehen:

LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" mirrorlog

CustomLog "| /bin/logger -t apache2" mirrorlog

Solange das log file nur durch die Pipe läuft, werden keine Einträge geschrieben. Damit das Access Log auch als file geschrieben wird, muss entweder die Config von slog-ng um eine destination oder die apache-config um ein weiteres Log erweitert werden.

syslog-ng

Da wir das acces-log über logger direkt an syslog-ng senden, ist es über die normale source ‘internal’ verfügbar.

parser pattern_db {
db_parser ( file(/usr/local/var/patterndb.xml));
};

destination deny-mirror {
file("/proc/net/xt_recent/clamav-403"
template("+${APACHE.SRC-IP}\n"));
};

filter f_mirror {
match("database.clamav.net" value(".apache.domain"))
and match ("403" value(".apache.request_status"));
};

log { 
source(src);
parser(pattern_db);
filter(f_mirror);
destination (deny-mirror);
};

Da jede Message durch den parser pattern_db läuft, brauchen wir auch ein pattern-db-file mit dem folgenden Inhalt:
(wer keine pattern-db verwendet, kann auch den CSV-Parser von hier verwenden).


<?xml version='1.0' encoding='UTF-8'?>
<patterndb version='3' pub_date='2011-07-06'>
<ruleset id='1fba26d756011614557cf496fed7b5c0' name='apache'>
<pattern>apache2</pattern>
<rules>
<rule class='apache.access_log' id='019045a7383c252e57c20435ae5bf86c' provider='fs'>
<patterns>
<pattern>@ESTRING:.apache.domain: @@IPv4:.apache.client_ip@ @ESTRING:.apache.ident_name: @@ESTRING:.apache.user_name: @@QSTRING:.apache.timestamp:[]@ @QSTRING:.apache.request_url:"@ @NUMBER:.apache.request_status@ @NUMBER:.apache.content_length@ @QSTRING:.apache.referer:"@ @QSTRING:.apache.user_agent:"@</pattern>
</patterns>
<tags>
<tag>httpd</tag>
<tag>IPv4</tag>
</tags>
</rule>
</rules>
</ruleset>
</patterndb>

iptables

iptables -N clamav-403
iptables -A INPUT -p tcp --dport 80 -m recent --rcheck --name clamav-403 --seconds 3600 --hitcount 5 -j DROP

Und so funktioniert das ganze

Syslog-ng filtert Logeinträge von Apache mit dem Inhalt database.clamav.net und 403. Als destination ist /proc/net/xt_recent/clamav-403 definiert. Das Template trägt die IP in die Firewall ein. Mit dem Erreichen von “hitcount” ist die ip für “seconds” geblockt.

Wird _rcheck_ durch _update_ ersetzt, bleibt der block länger bestehen. Die _rcheck_ option bedeutet: wir blocken dich für die nächste Stunde. _update_ hingegen bedeutet: wir wollen dich eine Stunde lang nicht sehen. Aber kommst Du innerhlab einer Stunde wieder, läuft die Zeit von neuem.

Grundsätzlich speichert xt_recent 100 IP addresses. Dieses Limit kann mit “modprobe ipt_recent ip_list_tot=10000” (hier 10000) geändert werden. Das ist aber nurmöglich, ehe die erste iptables-rule aktiv ist.

Besser ist es mit

chmod 600 /sys/module/xt_recent/parameters/ip_list_tot

echo 10000 > /sys/module/xt_recent/parameters/ip_list_tot

chmod 400 /sys/module/xt_recent/parameters/ip_list_tot

ip_list_tot “on-the-fly” zu ändern.

Possibly related posts: (automatically generated)


Kommentar erstellen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Ein Gedanke zu “Block outdated clients