Automatikus IP blokkolás Synology NAS-on

dsm721_ip_block

Sokan odáig vannak (még én is) Mariuswebhosting blogjáért, ami tele van jobbnál jobb Synologys megoldásokkal. Vérprofi a srác, és közérthetően írja le a frankót. Nagyon hasznos és élvezetes minden mondata, illetve végtelenül gyakorlatias. Akad azonban egy “magyaros” bökkenő: néhány “apróságért” fizetni kell 😦

Rövid mese:

Volt egyszer egy “réteg” blog, ahol akár 2700 oldalletöltés, és 360 látogató is előfordult jobb napokon. 12 éven át saját pénzforrásokból finanszírozták a művüket a bloggerek a köz érdekében, mert látták, hogy népszerű, és hiányt pótló amit tesznek. Évek során több millió forintot olvasztottak el a blogon azért, hogy másoknak jó legyen. De ahogy az a mesékben lenni szokott: rosszra fordult a sorsuk, és elfogyott a pénzük. Hogy mentsék a menthetőt, megpróbálták a közösségi finanszírozás lehetőségét kiaknázni: egy sör árát lehetett ajándékozni ezeknek a srácoknak elismerésként a munkájukért. Fél éven át hiába várták a sörüket, egy korty nem sok, annyit sem adott nekik az a “Nagyérdemű” Olvasóközönség, akikre a milliókat költötték a 12 év alatt. Így hát fogták magukat, bezárták a boltot, és végleg eltávolodtak attól a kiábrándító közegtől, mely kihasználta őket.

A meséből sokat tanultam: én sem mindig fizetek (lojalitást vállalva elődeimmel) olyan dologért, melyhez hasonlót, vagy jobbat ingyen is elérhetek. Ugyanakkor akadnak a neten nem fizetős IP-listák is, ráadásul automatizált szkriptek frissítik, így nem kell hetente/havonta kézzel b@szakodni a frissítésükkel. Ilyet mutatok be most nektek, hogy pénzt takarítsatok meg, és alkalomadtán majd egy sörre meghívhassatok. Az említett szkript nálam már hetek óta hibátlanul teszi a dolgát… most rajtatok a sör… akarom mondani: a sor.

De mi a franc az az IP-blokklista?

Az IP Blokk Lista a Synology NAS eszközök egy olyan funkciója, amely lehetővé teszi, hogy egy listát hozz létre azokról az IP-címekről, amelyeknek a hozzáférését megtagadod. Ezek olyan rosszindulatú IP-címek, amelyek valamikor próbáltak már hozzáférni a NAS rendszeredhez, bármilyen azonosíthatatlan okból kifolyólag. Ez az IP-blokkolási funkció lehetővé teszi, hogy megtagadd ezen a rosszindulatú IP-címek hozzáférését a NAS rendszeredhez. Lehetsz szigorú: örökre kitiltva őket, vagy lehetsz megengedő: csak bizonyos időre zárod ki a renitenskedőt.
Véleményem szerint ez az IP Blokk Lista az egyik legjobb funkciója a Synology NAS eszközöknek, amely a hasznossága és könnyű kezelhetősége révén vált méltán népszerűvé – bár sokan talán ebből a cikkből értesülnek először arról, hogy létezik ilyen dolog. Néhány kattintással jelentősen javíthatod NAS-od biztonságát, de szkriptet használva, akár automatizálhatod is ezt a funkciót.

Mivel a neten számtalan hasznos blokkoló lista elérhető teljesen ingyen, ezért én ellene vagyok a fizetős megoldásoknak – ezt már többször említettem is – főleg úgy, hogy kézzel kell feltölteni azt minden alkalommal (magyarul: nincs automatizálva a rendszer).

Ebből következik, hogy olyan megoldást kerestem, ami:

  1. Ingyenes
  2. Automatikus

És nem is kellett sokáig keresgélnem, mert szembe jött velem a Githubról a svájci illetőségű kichetof által fejlesztett AutoBlockIPList szkriptcsomag, megy teljesíti a fenti 2 pontot. Igaz, van egy kis nehezítés: telepíteni kell ezt-azt, hogy fusson is a szkript, de ha belaktad már a NAS-t, akkor (mint ahogy nálam is) csak a szkriptet kellett lefuttatnom (persze kicsit aktualizálva, mert elsőre nekem nem sikerült a folyamat).

Bár kichetof érthetően leírja, mit, és hogyan csináljunk mégis elrontottam. Aztán második nekifutásra minden sikerült. Most tehát magyarul is megismétlem a főbb részleteket, hogy honfitársaim is jóárusítva kapják meg az automatikus IP Blokk Lista szkriptet és a velük járó rosszindulatú IP-listákat tartalmazó csomagokat.

A szkript telepítése

  • Tesztelt verziók:
    Synology DSM 6 (6.2.4)
    Synology DSM 7 (7.0.x, 7.1.x és 7.2.x)
  • A szkriptben használt IP-cím gyűjtemények:

    #1 – Részletekért ide kattints! Az agresszív változatot lecseréltem a szkriptből, mert fals-pozitív eredményeket hozhat. 30 napos lista.

    #2 – Kombinált 30 napos lista (SSH + HTTP brute-force, illetve Szkennelés és behatolásészlelés)

    #3 – Minden olyan IP-cím, amely megtámadta valamelyik ügyfelüket/szerverüket az elmúlt 48 órában.

A szkript használata

 AutoBlockIPList [-h] [-f [IN_FILE ...]] [-u [IN_URL ...]]
[-e EXPIRE_IN_DAY] [--remove-expired] [-b BACKUP_TO]
[--clear-db] [--dry-run] [-v] [--version]

Választható argumentumok:

-h, --help
Megjeleníti ezt a súgó üzenetet (angolul) és kilép

-f [IN_FILE ...], --in-file [IN_FILE ...]
Helyi szerveren tárolt lista fájl szóközzel elválasztva (pl. /volume1/home/user/list.txt custom.txt)

-u [IN_URL ...], --in-url [IN_URL ...]
Külső lista url címe szóközzel elválasztva (pl. https://example.com/list.txt https://example.com/all.txt)

-e EXPIRE_IN_DAY, --expire-in-day EXPIRE_IN_DAY
Lejárati idő napokban megadva. Alapértelmezett 0: nincs lejárati idő

--remove-expired
Lejárt bejegyzés(ek) törlése

-b BACKUP_TO, --backup-to BACKUP_TO
Az adatbázis biztonsági másolatának tárolására szolgáló mappa

--clear-db
Kitöltés előtt törli a TELJES adatbázist, mely a blokkolt IP-ket tartalmazza

--dry-run
Módosítások nélküli futtatás végrehajtása

-v, --verbose
Megnöveli a kimeneti részletességet.

--version
Megjeleníti a program verziószámát és kilép


A terep előkészítése:

  1. Ha még nincs telepítve a NAS-odra, akkor futtasd a Csomagkezelési központból a Python3 csomagot:python311
  2. A Fájlkezelőben hozz létre egy megosztást (!) a későbbi szkripteknek, és azon belül egy mappát, ennek a blokkoló szkriptnek. Egyszerűség kedvéért legyen a szkriptek megosztása: scripts, majd a benne lévő blokklista szkript mappája: AutoBlockIPList.
    filestation_ipblocklists_empty
  3. Töltsd le a szkript legfrissebb verzióját, ami egy ZIP fájl. Ezt tömörítsd ki a számítógépeden, és a .DS_store fájl kivételével az összes többi fájlt másold be a 2. pontban létrehozott mappába. Ha minden igaz, ezeknek a fájloknak kell benne lennie:autoblocklists_files
  4. Most átmenetileg nyisd meg a 22-es portot (Vezérlőpult / Terminál és SNMP / SSH szolgáltatás engedélyezése / Alkalmaz):blocklist2A gombra kattintás után kapsz egy figyelmeztető üzenetet, ezt fogadd el az OK-val:blocklist3
    Ha jól csináltad, zöld színnel egy darabig látható, hogy:blocklist4
    Most már lehet használni az SSH kapcsolatot a szkript futtatásához. Én a PuTTY-t használtam a varázslathoz:putty_ip
    IP címnek a NAS címét kell beírnod, a 22-es portot használod, és az SSH kapcsolatot pipálod be. Open gombbal megnyílik a terminál ablak, ahová a felhasználót kell beírni, ami a NAS-odban használt felhasználóneved. Enter után a jelszó következik. Ezt nem látod a képernyőn, úgyhogy figyelmesen pötyögd be, majd egy újabb Enterrel nyugtázd. Jön egy kis figyelmeztetés:putty_rsa_key_ok
    Fogadd el az Igen-nel, és már mehetsz is tovább (a képen egy korábbi belépés látszik még egy régi DS412-es NAS-ra):putty_login_to_dsm_2
  5. A terminál ablakban futtasd ezt a parancsot:
    sudo python3 -m ensurepip
  6. Navigálj a /scripts/AutoBlockIPList mappába, és onnan futtasd az alábbi szkriptet:
    sudo python3 -m pip install -r requirements.txt

Első használat

Használatbavétel előtt le kell futtatni pár dolgot SSH-ban, ügyelve, hogy jó elérési utakat adj meg:

  • Az elsőként –backup-to és –dry-run opciókkal végezd el az adatbázisod biztonsági másolatának elkészítését. Keletkezni fog egy .db kiterjesztésű fájl, mely tartalmazza az aktuális blokklista tartalmát (ha üres, akkor is).
  • Utána az –in-file vagy –in-url és –dry-run opciókkal töltsd be a saját listádat (még ha semmi sincs benne, akkor is, de ez akár Marius fizetős listája is lehet).

Vagyis:

sudo python3 /volume1/scripts/AutoBlockIPList/AutoBlockIPList.py -v --dry-run --backup-to /volume1/scripts/AutoBlockIPList --in-file /volume1/scripts/AutoBlockIPList/custom.txt

Mostantól a terminál ablakra már nem lesz szükségünk, ezért az SSH-ról vegyük le a pipát (4-es pont, 22-s port kikapcsolva!)

Végül a Feladatidőzítőben időzítsük a szkriptet root jogosultsággal (!!!), és naponta egyszeri végrehajtásra, úgy, hogy az alábbi szkriptet 30 napos lejárattal futtatjuk:

sudo python3 /volume1/scripts/AutoBlockIPList/AutoBlockIPList.py --in-url https://feodotracker.abuse.ch/downloads/ipblocklist.txt https://blacklist.3coresec.net/lists/all.txt https://list.blocklist.de/lists/all.txt --expire-in-day 30 --remove-expired

Mindez képekben:

autoblocklist_taskscheduler_1

autoblocklist_taskscheduler_2

autoblocklist_taskscheduler_3

task_scheduler

A lista gyarapodása:

2024 január 26-án éjfélkor, a szkript telepítésének napján még csak 30675 blokkolt IP-cím volt a listában:

tiltolista_20240126

2024 február 16-án már 55588 darab:

tiltolista

…és végül 2024 február 27-én már 62211 elem:

30_napos_blokkololista

Egyszerű számítást végezve, napi 1000-nél is több rosszindulatú IP-től óv meg ez a szkript, érdemes tehát beüzemelni!
A dolog érdekessége, hogy ezen rosszindulatú IP-k nagy részét észreveszi a routerem is, és blokkolja őket:

udmse_block_ip

A hozzászólás jelenleg szünetel.