SKORI WEBLAPJA
Mikrotik2

Jelen oldal a korábbi, Mikrotik routrekrõl szóló írásom folytatása. Tehát akit a téma érdekel, és esetleg még nem olvasta, annak érdemes lehet az elõzõvel kezdeni, és utána áttérni erre az oldalra. A Mikrotik routerekre, az elõzõ errõl szóló írásom óta, újabb RouterOs verziók jeletek meg, és bár vannak kisebb-nagyobb változások, ezek nagyrészt elõnyére szolgáltak ezeknek az eszközöknek.

Több újdonság is szóba jöhetne amirõl most írni lehetne, fontolgattam pl., hogy a Wireguard VPN Mikrotik féle megvalósításáról (is) írhatnék, de errõl már vannak jó leírások, és igazából egy másik, egy ideje már megvalósított, és jól mûködõ ötlet miatt kezdtem el írni. Persze erre az oldalra több dolog is felkerülhet még a késõbbiekben (akár egy kis Wireguardról szóló írás is).

Amiról most szó lesz, az egy tûzfal megoldás, vagy inkább kiegészítés, ami (reményeim szerint) növelheti egy Mikrotik routerre bízott kis hálózat biztonságát.

Abban az esetben ha bizonyos szolgáltatásokat, otthoni eszközöket stb... szeretnénk az interneten keresztül is elérni, arra az egyik lehetséges megoldás, hogy az elérni kívánt eszközök által megnyitott portot, a routerünk megnyitja az internet felé, és az erre érkezõ csomagokat oda-vissza továbbítja. Természetesen ez rejt magában valamilyen szintû kockázatot is, hiszen az így megnyitott port egyúttal támadási felületet is ad, olyanoknak akik ezt rossz szándékkel próbálják felhasználni. Ezért manapság inkább azt szokták ajánlani, hogy valamilyen VPN megoldást használjunk, pl. Wireguard-ot, Openvpn-t, L2TP(+IPSEC) VPN-t, és ezen keresztül érjük el az otthoni dolgainkat. Ez teljesen jó megoldás, de nem mindig, és nem minden esetben. Van amikor nem kerülhetõ el egy-egy port megnyitása. Ha pl. webszervert mûködtetünk (pl. egy saját kis weboldalt) akkor a hozzá szükséges 80-as (http) és 443-as (https) portok kinyitását nem lehet elkerülni a mûködéshez. Az is elõfordulhat, hogy olyan helyrõl szeretnénk elérni az otthoni hálózatot, ahol valamiért nincs lehetõségünk VPN-t használni, de mégis szeretnénk valamilyen biztonságos megoldást. Ezen kívül (saját példa) néha használok, PPTP VPN-t, ami elavultnak, és sebezhetõnek számít, és ma már nem igazán ajánlott, de az ehhez használt belépési pontot is védhetjük pluszban, az oldalon leírt módszerrel.

Ezt a megoldást akkor tudjuk majd használni, ha üzemeltetünk egy saját webszervert, vagy egy NAS-t, amire telepíthetõ webszerver, (sõt esetleg van is rajta, csak használatba kell venni). A Xpenology-ról készült írásom végén is megemlítettem, hogy a NAS, és a Mikrotik router együttmûködésével egy ügyes tûzfal megoldást alakíthatunk ki.
Hogyan mûködhet ez?

Képzeljük el pl. ,hogy a winbox által használt 8291-es portot szeretném elérni az interneten keresztül. Ez bizony "veszélyes játék"! Sokan voltak, akik ezt meg is tapasztalták, amikor egy régi RouterOs verzióban levõ hiba miatt, routerek tömkelegét hackelték meg, és egy részüket használhatatlanná is tették rosszindulatú hackerek. Persze ez csak úgy sikerülhetett, hogy a rendszerben levõ hibán kívül, ezek az eszközök elérhetõk voltak az interneten, azaz nyitva volt a 8291-es TCP port az internet felé is. Ha a most leírt, voltaképpen egyszerû megoldást használták volna, akkor ezen eszközök igen nagy része megmenekült volna attól, hogy feltörjék. De nem húzom tovább, elõször jöjjön a lényeg röviden, majd a részletek, és a hogyanok...

A 8291-es portot úgy kell megnyitni, hogy a számunkra nyitva legyen, mások számára viszont nem... A tûzfalat alaphelyzetben úgy állítjuk be, hogy minden port zárva legyen, de létre hozunk a routerben egy IP listát, azon IP címek számára amelyek kivételezettek, és ezek számára nyitjuk csak meg a portot. Ok, de nem tudhatjuk elõre, hogy milyen IP címrõl akarjuk majd mi elérni, és milyen IP címrõl akarják majd támadni a routerünket. Hogyan oldjuk meg, hogy a mi aktuális IP címünk legyen rajta ezen a listán? Ha ezt meg tudjuk oldani, akkor készen is vagyunk.
Itt jön a képbe az otthoni NAS. Készítünk egy kis weboldalt rá, amely látja az IP címünket (de ezt akár módosíthatjuk is), és mondjuk itt, egy jelszó (vagy név + jelszó páros) beírása esetén felkerülhet az IP címünk az említett "fehérlistára". Hogy mûködhet ez? A weboldalon olyan PHP kódot kell használnunk, ami mindössze csak annyit csinál, hogy ellenõrzi a megadott jelszót, majd az adott IP címre, egy kitüntetett porton (ez legyen mondjuk: 49511) küld egy UDP csomagot. (a NAS-on a PHP beállításokban engedélyezni kell az UDP csomagok küldését). A küldött adatcsomag tartalma közömbös, lehet mondjuk egy "HELLO" üzenet. Mivel ez a csomag az internet felé indul el, ezért a NAS a gateway felé fogja küldeni, ami jelen esetben a Mikrotik routerünk. A routerben két tûzfal szabály fogja kezelni ezt a kis csomagot.
- Amennyiben a forráscím a NAS belsõ IP címe, a cél port a megadott (pl. 49511), akkor a cél címét (tehát aki a jelszót helyesen megadta) beteszi egy IP cím listába (fehérlistába, vagy engedélyezõ listába, lényegében mindegy hogy hívjuk). Nyilván nem örökre kerül fel a listára ez az IP cím, hanem csak egy adott idõtartamra, ami pl. 1 óra.
- Ugyanezt a csomagot utána eldobja a router, hiszen nem az volt a célja, hogy üzenjünk, vagy hogy bármi módon jelezzük, hogy a jelszó helyes volt, hanem csak annyi, hogy a routerünk tudomást szerezhessen arról az IP címrõl, amit fel kell vennie az engedéllyel rendelkezõk listájába.

Egy (vagy több) további tûzfalszabály ezután lehetõvé teszi, hogy a listában szereplõ IP címekrõl elérhessük a kívánt portokat, ill. szolgáltatásokat, pl. akár az említett, winbox által használt 8291-es TCP portot is. Aki olyan IP címrõl próbálja elérni az adott portot, amely nem szerepel az IP listán, az csak azt fogja látni, hogy az adott szolgáltatás nem létezik, ill. nem elérhetõ. Tehát annyi a dolgunk, hogy elõször megnyitjuk a weboldalt, és beírjuk a jelszót. Ezután a szokásos módon el tudjuk érni a számunka megnyitott portokat.

Ez így leírva egyszerûnek tûnik, de azért kell hozzá néhány dolog (a Mikrotik routeren kívül), hogy ez tényleg jól mûködjön. Nézzük sorjában:
- Szükségünk lesz hozzá egy kicsi webszerverre. Ez lehet pl. az otthoni NAS, vagy mondjuk egy RaspberryPi, de Arduino felhasználók, akár egy ESP8266-al, vagy ESP32-vel is meg tudják oldani.
- Elérhetõvé kell tennünk a webszervert az internet irányából. Azaz portot kell nyitni számra a routeren (TCP: 80 és esetleg 443 is).
- Célszerû valamilyen domain nevet használni, a könnyû elérhetõséghez. Ez lehet egy ingyenes dinamikus DNS szolgáltatás, amire beregisztrálunk az interneten, (dynDND, duckDNS, freeDNS, stb...) és/vagy használhatjuk a Mikrotik router IP cloud szolgáltatását is.
- Ahhoz, hogy a webszerverünk (routerünk, vagy bármely szolgálatás) közvetlenül elérhetõ legyen az interneten, úgynevezett publikus IP címünknek kell lennie. Ez internet szolgáltatás függõ, némelyik szolgáltató csak NAT-olt, belsõ IP címet ad a felhasználóinak, míg mások rendes, publikus IP-t osztanak ki.
- A webszerverre kell egy PHP szkript (vagy ESP-k esetén megfelelõ szoftver) ami a korábban említett feladatot elvégzi. A webszervert megfelelõen be kell állítani, a php-t, és az UDP küldést engedélyezni kell.
- A Mikrotik routerben létre kell hozni a megfelelõ tûzfal szabályokat. Mindenképpen meg kell említeni, hogy ezzel bár fokozhatjuk a hálózatunk védettségét, de tudjuk azt is, hogy semmi sem nyújt 100%-os védelmet. Bizonyára ez is kijátszható, ha valaki kellõ energiát fordít a gyenge pontok megkeresésére, és kihasználására, ezért a leírtakat ennek tudatában kezeljük.

Esetemben az otthoni NAS adott volt. Erre telepítettem a Web Stationt (webszerver) és a PHP-t.


Socketek engedélyezése az UDP csomagok küldéséhez:

A szükséges php kód valami ilyesmi lehetne. Persze ez csak egy minimal verzió, át kellene írni benne az üdvözlõ szöveget, a fejlécet, a jelszót, portot, stb..., a saját igényeink szerint, lehetne ügyesebbé tenni, szépíteni stb... Esetleg az is megfontolandó, hogy ezt az oldalt is kicsit eldugjuk, pl. nem a standard, http/https portokon tesszük elérhetõvé, illetve kicsit hosszabb nevet is kitalálhatunk, amit egy hacker (fõleg ha nem magyar) akkor nehezen talál meg, lehetne pl.: aztafuzfanfutyulorezangyalat.php néven. Persze ennek csak akkor van értelme, ha ezt nem tesszük ki a fõoldalon egy linkre, amire csak kattintani kellene.
A fenti PHP oldal kb. így néz ki alaphelyzetben (Firefox-al):
 
Mivel az oldal jelszót is küld, ezért ha lehetséges, akkor https-el kapcsolódjunk hozzá.
Nézzük a Mikrotik routeren használandó beállításokat!
Portfordítás példa a webszerverhez:
Ezek a beállítások az internet felõl, a 80-as, ill. a 443-as portra érkezõ csomagokat továbbítják a NAS belsõ IP címére.

IP lista létrehozása a NAS által küldött UDP csomag alapján (példa):
Azoknak az UDP csomagoknak a cél IP címét adja a "winboxenablelist" nevû listához, 1 óra idõtartamra, amelyek a NAS belsõ IP címérõl érkeznek, és a 49511 portra vannak irányítva. A második szabály ugyanezen csomagokat eldobja, miután az IP bekerült a listába

Engedély(ek) az IP listán szereplõ IP címek számára (példa):
Ez a szabály, az említett "winboxenablelist" nevû listán szereplõ IP címû források-tól érkezõ, és a winbox (8291) portjára címzett csomagokat átengedi a tûzfalon.


A fenti módszerrel többféle IP listát is létrehozhatunk, amelyekkel a különbözõ szolgáltatásokhoz való hozzáférést szabályozhatjuk, ill. kiegészíthetjük a routerünk funkcióit. Pl. adhatunk ilyen módon egyedi engedélyeket vendéghálózatra csatlakozó eszköznek. Védhetünk fokozottabban bizonyos hozzáféréseket (pl. FTP-t, vagy egy régi PPTP VPN-t)az internet irányából, vagy mint a példában: szabályozhatjuk a winbox-al való elérést.

Felhívom a figyelmet, hogy a fentiekben leírt megoldásra semmiféle garanciát nem vállalok, sem a mûködésére, sem a biztonságosságára nézve!
A fentiek csupán egy ötletet, egy lehetõséget mutatnak be, amit ha valaki használni szeretne, akkor célszerû azt "testre szabni", azaz a pontos igényekhez kell igazítani.



Skori@2024majus



Máris ide kívánkozik egy kis folytatás. A prohardver fórum, mikrotikes témájában, lionhearted (nick) felvetett egy lehetséges gyenge pontot, ami bár nem használható ki könyen, de nem is leheteten. Ha a NAS-on futó egyéb alkalmazás (pl. torrent) valamelyik kliens felé véletlenül (vagy szándékosan) pont ugyanezen a porton (amit itt is haszáltunk) küld és fogad adatokat, azzal bizony felkerülhet a címe a listára. Azonban erre is van egyszerû és szerintem hatékony megoldás. Már módosítottam is a saját routeremben a szabályokat és teszteltem, hogy mûködik-e. Az eredetileg felvetett ötletben azt írtam, hogy az UDP csomag tartalma lényegében mindegy, lehet pl. egy "Helo" üzenet, mint ahogy fent szereplõ, PHP programban is ez szerepel. De akkor inkább ne legyen mindegy, hogy mit tartalmaz az UDP csomag, hanem legyen egyedi, és a router ellenõrizze is a tartalmát.
Tehát a PHP programban írjuk át ezt az üzenetet, azaz cseréljük le ezt a sort:

Remélem mindenki számára világos miért azt a "katyvaszt" írtam oda, és az is, hogy mindenki használjon egyedi "saját katyvasz"-t!
Ezután a mikrotikben egészítsük ki az UDP csomagunkat kezelõ tûzfal szabályokat a content=45s6jbGghqcvF3k45hjbv2 résszel.
Tehát valahogy így:
Aki nem szereti az ilyesfalyta katyvasz-ok használatát, az persze nyugodtan használhatja helyette pl. a "LujzaEngedjBe" vagy valamilyen hasonló üzenetet! :) :)

Az UDP csomag ellenõrzésekor a csomagméretet is érdemes megadni a tûzfal-szabályban.
Elsõ körben csak megsaccoljuk, hogy mondjuk valahol 10 és 100 bájt közötti méretû lesz:
Esetemben a csomagméret 28 bájttal volt nagyobb mint a küldött üzenet, de ezt e legegyszerûbb úgy meghatározni, hogy amikor már mûködik a dolog, akkor a túzfalszabályban bekapcsoljuk LOG-ot. Ezután a log-ban megnézzük mekkora volt a tényleges csomagméret, majd utólag pontosíthatjuk ezzel is a tûzfal szabályunkat. Pl.:


Skori@2024majus


u.i. itt folytatom legközelebb....


Támogasd az oldalt!