Hogyan integráltam az UptimeRobotot a Synology tűzfallal úgy, hogy a biztonság is megmaradjon

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_FIREWALLFORWARD_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:

  1. Készítettem egy mentést a jelenlegi iptables szabályokról egy fájlba (fw-before-uptimerobot.rules).
  2. Ebbe a fájlba, a *filter táblán belül, az INPUT_FIREWALL és FORWARD_FIREWALL lá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 RETURN Ugyanez a minta ismétlődik végig az összes UptimeRobot IP-re.
  3. Ü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_FIREWALL sorok,
  • 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 és FORWARD_FIREWALL lá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 &

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.
  • 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ó.

Könyvjelző Közvetlen hivatkozás.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.