noqqe » blog | sammelsurium | photos | projects | about

Seit gestern versuche ich mittels Fail2ban zu vermeiden, dass mein git-daemon “geDOSt” wird. Also bei ca 10 Downloads die Klappe für die IP schliessen. unter:

git clone git://zwetschge.org/roborobo.git

lässt sich über den Daemon ein Repo auschecken. Der Logeintrag bei Access sieht folgendermaßen aus:

2010-04-20_11:37:52.05907 [16810] Connection from 200.200.200.200:54283

Nun lässt sich über ein einfaches Script, beispielsweise:

for i in $(seq 1 100) ; do git clone git://zwetschge.org/roborobo.git gitrepodos$i ; done

den Server total auslasten. Gerade bei grossen Repos wäre das fatal. Über RegExp und fail2ban-regexp lässt sich der Ausdruck im Logfile auch filtern und testen:

fail2ban-regex '2010-04-20_19:52:01.41131 [26818] Connection from 200.200.200.200:54283' '.*Connection from <HOST>:.{4,5}$'

gibt zurück der Ausdruck würde matchen. Meine Filterregel sieht auch dementsprechend aus:

failregex = .*Connection from <HOST>:.{4,5}$

und der Eintrag in der jail.local (damit als jail erkannt wird):

[git-daemon]
enabled  = true
port     = git
filter   = git-daemon
logpath  = /var/log/git-daemon/current
maxretry = 5

ist eingerichtet. Keine Fehler im Fail2ban-Log. Alles erfolgreich gestartet. Aber der Filter matched einfach nicht wenn ich das Script ausprobiere.

Statusabfrage des Jails:

$ fail2ban-client status git-daemon

Status for the jail: git-daemon
|- filter
|  |- File list:    /var/log/git-daemon/current
|  |- Currently failed:    0
|  `- Total failed:    0
      - action
|- Currently banned:    0
|  `- IP list:
- Total banned:    0

Ich weiss mir gerade nicht zu helfen. Obwohl ich das selbe Spiel mit vsftp auch gemacht habe. LINK