Drupal webmotorok támadás elleni védelme fail2ban logelemző segítségével


Laikus szekció


Sok problémát okoz az oldalak üzemeltetőinek, fejlesztőinek, hogy a "látogatások" egy jó része elsősorban spamgyártásról, illetve feltörési kísérletről szól. Jól látszanak ezek a "hozzáférések" a webmotorok logjaiban.
A szervert már építésekor érdemes felszerelni egy logokon alapuló automatikusan alkalmazkodó tűzfallal. Pontosabb információkat a fail2ban.org honlapján találhatnak az érdeklődők.
A védelem lényege, hogy a rendszer logolja a támadásokat is. Ezek lehetnek egy webmotor által biztosított hozzászólással, regisztrációval, vagy éppen a webmotor valamilyen hibájának kihasználásával működő támadások. A logok alapján, amennyiben a megfelelő szűrőket alkalmazzuk, a támadót az IP címe alapján ki lehet iktatni. Természetesen nem véglegesen, mert általában ezek a támadások valamilyen DHCP szolgáltatás által szórt címről érkeznek, és amennyiben véglegesen kitiltanánk az IP-t, akkor esetleg olyan felhasználót is kitiltanánk, akit nem akarunk. A kitiltási idő állítható.
Fontos, hogy a kitiltás a tűzfal szintjén megy végbe, ami azért nagyon fontos, mert nem a webmotorok védelmi rendszerét - így az apache, a mysql, stb. - erőforrásait köti le, hanem már a szerver megszólításakor "elintéződik" az ügy.
Ezzel kapcsolatban azt tapasztaltuk, hogy a támadónak is "elmegy" a kedve a próbálkozásoktól.
A korszerű webmotorok általában rendelkeznek logolási technológiával, ezek általában adatbázis alapúak. Sok motor azonban más, fileorientált logolást is támogat, ami jól használható arra, hogy a szerver saját tűzfalát használjuk a támadások elhárítására.


Szakmai szekció


Most példaként a drupalhoz kapcsolódó beállításokat mutatjuk be Debian squeeze környezetben:


Drupal alatt be kell kapcsolni a syslog modult.
Majd a /admin/settings/logging/syslog alatt be kell állítani:
Syslog identity: drupal
és a Események naplózása erre a syslog csatornára:
LOG_LOCAL_1 - Local 1 -re


Azoknak a webszerver üzemeltetőknek, akik Debian alatt dolgoznak a további beállításokat is közre adjuk:


A /etc/fail2ban/jail.local file végére szúrjuk be a következőt:


[drupal-fail2ban]

enabled = true
port = http,https
protocol = tcp
filter = drupal-fail2ban
logpath = /var/log/syslog
maxretry = 3
findtime = 172800
bantime = 3600


Ez követően hozzunk létre a /etc/fail2ban/filter.d alatt egy drupal-fail2ban.conf nevű file-t.
A fileba másoljuk be a következő szöveget:


[Definition]
failregex = \|CAPTCHA\|\|.*\|user_login_blocked(.+)\.$
\|page not found\|\|.*\|(.+)$
\|access denied\|\|.*\|(.+)$
\|access denied\|\|.*\|user(.+)\.$
\|user\|\|.*\|Login attempt failed(.+)$

ignoreregex =


Természetesen több szűrés is megadható.


Ezt követően indítsuk újra a fail2ban-t: /etc/init.d/fail2ban restart


Ahhoz, hogy a logolás a /var/log/syslog-ba kerüljön a debian linuxnál a rsyslog konfigurációját is állítanunk kell, íly módon:


Hozzunk létre a /etc/rsyslog.d/ alatt egy drupal.conf file-t. Mivel a /etc/rsyslog.conf file-ban általában benne van, hogy a /etc/rsyslog.d/*.conf file-okat is szúrja be a rsyslog démon konfigurációjába, így erre külön nem kell hivatkoznunk.

A /etc/rsyslog.d/drupal.conf file-ba szúrjuk be a következő két sort:

$template RFC3164fmt,"1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%- - - %msg%\n"
local1.* -/var/log/drupal.log;RFC3164fmt

Mentsük el és indítsuk újra a rsyslogd: /etc/init.d/rsyslog reload


Remélem sokaknak sikerült segítenünk ezzel a cikkel.


A Robonet csapata