A korábbi Fail2Ban cikk után itt egy újabb szerver oldali segédlet a biztonság témakörében. Jelen írásomban a publikus feketelistákon szereplő IP címeket fogjuk kitiltani szerverünkről az IPSet kiegészítő és az IPtables tűzfal segítségével.
Miért is jó ez nekünk? Nos azért, mert igen sok naprakész és változatos feketelista található az interneten, ezek pedig összegyűjtik a közismerten kártékony vagy éppen támadólag fellépő IP címeket melyeket érdemes távol tartani weboldalainktól vagy éppen a szerverünktől. Ide tartoznak a botnetek, malware-t terjesztő hálózatok és minden egyéb olyan távoli cím, amelyek viselkedésük miatt felkerültek valamelyik feketelistára. Amennyiben sikerül ezeket a címeket tűzfal szinten tiltani, úgy el sem jutnak a szerveren tárolt weboldalakig, tehát támadásokat sem tudnak indítani valamint sebezhetőségeket sem tudnak keresni. Természetesen esélytelen, hogy minden IP címet egyesével és kézileg adjunk hozzá a tűzfalunk tiltólistájához és értelme sem lenne, mivel ezek folyamatosan változó adatbázisok – egyes IP címek lekerülnek, mások pedig fel. Kell tehát egy automatizált megoldás, ami folyamatosan frissíti az adatbázist a szerverünkön és naprakészen tudja figyelni, hogy az aktuális IP cím beengedhető-e avagy sem.
Erre a problémára jelent megoldást a következő bash script, ami az IPset segítségével elemzi és veti össze az IP címeket a feketelistákkal.
Telepítés Debian/Ubuntu alatt
Letöltjük az “update-blacklist.sh” scriptet a “/usr/local/sbin” könyvtárba:
wget -O /usr/local/sbin/update-blacklist.sh https://raw.githubusercontent.com/trick77/ipset-blacklist/master/update-blacklist.sh
Futtathatóvá tesszük:
chmod +x /usr/local/sbin/update-blacklist.sh
Létrehozzuk a “/etc/ipset-blacklist” könyvtárat, majd letöltjük oda az alapértelmezett “ipset-blacklist.conf” fájlt:
mkdir -p /etc/ipset-blacklist ; wget -O /etc/ipset-blacklist/ipset-blacklist.conf https://raw.githubusercontent.com/trick77/ipset-blacklist/master/ipset-blacklist.conf
Igényeink szerint módosíthatjuk is ezt a fájlt, ha szükséges. Alapértelmezetten a helyi feketelistás IP címek a “/etc/ipset-blacklist/ip-blacklist.restore” fájlba kerülnek mentésre.
Telepítjük az ipset-et:
apt-get install ipset
Első futtatás, hozzuk létre a helyi aktuális feketelistát a konfigurációs fájl alapján:
/usr/local/sbin/update-blacklist.sh /etc/ipset-blacklist/ipset-blacklist.conf
Adjuk ezt hozzá az IPtables tűzfalhoz:
# Feketelisták engedélyezése
ipset restore < /etc/ipset-blacklist/ip-blacklist.restore
iptables -I INPUT 1 -m set --match-set blacklist src -j DROP
Fontos, hogy a fenti sorok bekerüljenek a “/etc/rc.local”-ba vagy bármi egyéb helyre, ahol újraindítás után is lefutnak. Ha ez a lépés kimarad, akkor a szerver újraindítása után nem kerülnek aktiválásra ezek a szabályok és nem fog működni az automatikus tiltás.
Utolsó lépésként hozzunk létre egy cron jobot (ütemezett feladatot) a feketelisták automatikus frissítésére. Ez elég, ha egy nap egyszer fut le.
nano /etc/cron.d/update-blacklist
Legyen ez a tartalma:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
33 23 * * * root /usr/local/sbin/update-blacklist.sh /etc/ipset-blacklist/ipset-blacklist.conf
Kis idő elteltével ellenőrizhetjük is, hogy működik-e a tiltás:
iptables -L INPUT -v --line-numbers
Valami ilyesmit kell látnunk:
# iptables -L INPUT -v --line-numbers
Chain INPUT (policy DROP 60 packets, 17733 bytes)
num pkts bytes target prot opt in out source destination
1 15 1349 DROP all -- any any anywhere anywhere match-set blacklist src
2 0 0 fail2ban-vsftpd tcp -- any any anywhere anywhere multiport dports ftp,ftp-data,ftps,ftps-data
3 912 69233 fail2ban-ssh-ddos tcp -- any any anywhere anywhere multiport dports ssh
4 912 69233 fail2ban-ssh tcp -- any any anywhere anywhere multiport dports ssh
Ha van konfigurálva Fail2Ban is a szerveren (ami erősen ajánlott), akkor érdemes még a következő parancsot is kiadni, ez felel azért, hogy az IPset input lánca kerüljön a legfelső helyre az IPtables tűzfal konfigurációjában, ennek hatására hatékonyabban fog működni a feketelistás címek tiltása:
tee << EOF /etc/fail2ban/action.d/iptables-multiport.local
[Definition]
actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> 2 -p <protocol> -m multiport --dports <port> -j f2b-<name>
EOF
A meglévő és aktív feketelisták módosításához vagy újak hozzáadásához szerkeszd a ” /etc/ipset-blacklist/ipset-blacklist.conf” fájlt:
nano /etc/ipset-blacklist/ipset-blacklist.conf
A fenti megoldás kiegészíthető akár komplett országok tiltásával is, ehhez a következő listáról kell kiválasztani a kívánt országo(ka)t és hozzáadni az “ipset-blacklist.conf” fájlhoz a megfelelő formátumban: http://ipverse.net/ipblocks/data/countries/