Régi problémám volt, hogy a Synology NAS-okon szigorú, ország alapú (GeoIP) tűzfalat használok, miközben az UptimeRobotnak is el kell érnie a DSM webfelületét és pingelnie kell a szervert. Ez elsőre ellentmondásnak tűnik: hogyan engedjek be egy rakás külföldi IP-t úgy, hogy közben a tűzfal továbbra is mindent tiltson, ami nem kell?
Ebben a bejegyzésben leírom, hogyan oldottam meg ezt két Synology NAS-on (köztük egy DS220+ készüléken), úgy, hogy:
- az UptimeRobot minden monitorja stabilan zöld marad,
- a DSM tűzfal továbbra is csak Magyarországról (és adott esetben még néhány országból) enged be forgalmat,
- a megoldás reboot-álló, azaz újraindítás után automatikusan visszaállnak a szabályok.
Kiindulási helyzet: DSM tűzfal, GeoIP és UptimeRobot
A DSM beépített tűzfala alapból jól használható, de két fontos korlátja van:
- Nem kezel IP-listákat dinamikusan (pl. UptimeRobot IP-k hosszú listája).
- Reboot vagy Docker indulása után a belső iptables struktúrák változhatnak, ezért ha kézzel piszkáljuk, az nem tartós.
A saját NAS-aimon a tűzfal úgy néz ki, hogy az egyedi láncok (INPUT_FIREWALL, FORWARD_FIREWALL) végén van egy olyan szabály, ami csak bizonyos országkódokat enged (pl. GB,HU), utána pedig egy végső DROP. Ez szuper biztonságos, de az UptimeRobot szerverei jellemzően több országból, különböző IP-tartományokból érkeznek.
A cél tehát az volt, hogy:
- Az UptimeRobot IP-k kapjanak RETURN szabályt a lánc elején (icmp + TCP 5000/5001),
- Minden más csak a GeoIP-szabályon keresztül mehessen,
- Ezeket a plusz szabályokat automatikusan visszatöltsük minden reboot után.
1. UptimeRobot IP-k beépítése a mentett iptables szabályokba
Először kellett egy stabil, „referencia” iptables konfiguráció, amibe bele lehet injektálni az UptimeRobot IP-ket.
A lépések nagy vonalakban:
- Készítettem egy mentést a jelenlegi iptables szabályokról egy fájlba (
fw-before-uptimerobot.rules). - Ebbe a fájlba, a
*filtertáblán belül, azINPUT_FIREWALLésFORWARD_FIREWALLlánc végénél beszúrtam az UptimeRobot kommenteket és a hozzájuk tartozó szabályokat, például:bash# UptimeRobot – 3.12.251.153 -A INPUT_FIREWALL -s 3.12.251.153/32 -p icmp -j RETURN -A INPUT_FIREWALL -s 3.12.251.153/32 -p tcp -m multiport --dports 5000,5001 -j RETURN -A FORWARD_FIREWALL -s 3.12.251.153/32 -p icmp -j RETURN -A FORWARD_FIREWALL -s 3.12.251.153/32 -p tcp -m multiport --dports 5000,5001 -j RETURNUgyanez a minta ismétlődik végig az összes UptimeRobot IP-re. - Ügyeltem rá, hogy ezek a szabályok a GeoIP RETURN és a DROP elé kerüljenek, hogy az UptimeRobot sose essen bele a tiltásba.
Ezzel lett egy „golden” rules fájlom (fw-uptimerobot-stable.rules), amiben a filter tábla már tartalmazza az UptimeRobot számára szükséges engedélyeket.
2. Csak a filter tábla kivágása: fw-uptimerobot-filter.rules
Nem akartam az egész iptables állapotot visszatölteni, csak a filter táblát, azon belül is a saját láncokat érintő részeket. Ehhez egy egyszerű awk parancsot használtam, amivel a *filter és a hozzá tartozó COMMIT közötti rész került egy külön fájlba:
bashawk '
$0 ~ /^\*filter/ {p=1; print; next}
$0 ~ /^COMMIT/ && p==1 {print; exit}
p==1 {print}
' /root/fw-uptimerobot-stable.rules > /root/fw-uptimerobot-filter.rules
Ellenőrzésként egy head és egy tail:
bashhead -n 20 /root/fw-uptimerobot-filter.rules
tail -n 20 /root/fw-uptimerobot-filter.rules
A végeredményben:
- fent látszanak a láncdefiníciók (
:INPUT_FIREWALL - [0:0], stb.), - lent a sok
# UptimeRobot – ...komment és a hozzájuk tartozó-A INPUT_FIREWALL/-A FORWARD_FIREWALLsorok, - végén a GeoIP szabály és a
DROP.
3. restore-iptables.sh: a varázsscript, ami mindent visszaállít
A kulcs a tartóssághoz egy kis shell script lett, amelyet a NAS bootolás után automatikusan futtatok. A script feladata:
- várni egy kicsit, amíg DSM és Docker teljesen feláll;
- kiüríteni az
INPUT_FIREWALLésFORWARD_FIREWALLláncokat; - soronként visszatölteni csak azokat a szabályokat, amelyek ezekre a láncokra vonatkoznak (beleértve az UptimeRobot IP-ket).
A script tartalma:
bash#!/bin/sh
# 120 mp várakozás, hogy DSM + Docker felálljon
sleep 120
RULES_FILE="/root/fw-uptimerobot-filter.rules"
if [ -f "$RULES_FILE" ]; then
# 1) Kiürítjük a saját láncokat az élő táblában
/sbin/iptables -F INPUT_FIREWALL
/sbin/iptables -F FORWARD_FIREWALL
# 2) Csak az INPUT_FIREWALL / FORWARD_FIREWALL sorokat adjuk hozzá soronként a mentett rules-ból
grep '^-A INPUT_FIREWALL ' "$RULES_FILE" | while read line; do /sbin/iptables $line; done
grep '^-A FORWARD_FIREWALL ' "$RULES_FILE" | while read line; do /sbin/iptables $line; done
fi
exit 0
A scriptet elmentettem ide:
bash/usr/local/bin/restore-iptables.sh
chmod +x /usr/local/bin/restore-iptables.sh
Kézi teszthez csak futtatni kell:
bash/usr/local/bin/restore-iptables.sh &
A sleep 120 miatt kell egy kis türelem, de utána az iptables -L INPUT_FIREWALL -n -v | head és az iptables -L FORWARD_FIREWALL -n -v | head már szépen mutatja az UptimeRobot IP-ket a láncok elején.
4. Automatizálás: DSM Feladatütemező
Hogy rebootok után is minden magától helyreálljon, a DSM Feladatütemezőben hoztam létre egy új feladatot:
- Típus: Felhasználó által megadott script.
- Futó felhasználó:
root. - Ütemezés: Indításkor (system boot után).
- Parancs:bash
/usr/local/bin/restore-iptables.sh
Nem kötelező a &, mert a scriptben benne van a sleep 120, ettől függetlenül a rendszer ettől nem „akad meg”, a feladat simán lefut a háttérben.
Ezt a megoldást több NAS-on is ugyanazzal a logikával alkalmaztam (köztük egy DS220+), így mindenhol egységes:
- UptimeRobot gond nélkül éri el a NAS-t pinggel és a DSM portokon,
- a GeoIP-alapú ország szűrés és a többi tűzfalszabály változatlanul éles,
- reboot után sem kell kézzel „igazítani” az iptables beállításokon.
Összegzés
Ez a megoldás egy praktikus kompromisszum a monitorozhatóság és a biztonság között:
- A DSM saját tűzfalát használja, nem „tapossa szét” a Synology logikáját.
- Az UptimeRobot IP-k külön, átlátható blokkban vannak, könnyen frissíthetők.
- A
restore-iptables.shés a Feladatütemező gondoskodik arról, hogy az egész konfiguráció tartós legyen.
Ha te is erősen szűrt, GeoIP-alapú tűzfalat használsz Synology NAS-on, és közben szeretnéd UptimeRobottal monitorozni a DSM-et (ping + webfelület), ez a módszer bevált, stabil és viszonylag egyszerűen karbantartható.











