Tiltás feketelisták alapján – IPset + IPTables

[Ezt a cikket 4 perc elolvasni.]

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/

Ha tetszik, mutasd meg másoknak is: