RouterOS (RouterBoard) hálózati eszköz beüzemelése

Innen: AdminWiki

Ez a lap egy hálózati routerként, csomagszűrő tűzfalként, forgalomkorlátozó eszközként, kisirodai hálózatvezérlő eszközként használandó MikroTik RouterBoard (RB) eszköz általános előkészítését (alapkonfigurálását) ismerteti a kicsomagolástól a konkrét szerepre konfigurálás megkezdéséig (kicsit hasonlóan a Debian szerver alaptelepítését tárgyaló wikilaphoz).

A feltételezett eszköz egy rádiós interfésszel nem rendelkező (tipikusan rack mount) router; a leírás készítésekor egy RB3011, egy RB952 és egy RB941 eszközt használtam. Az alábbiak alkalmazhatóak egyszerű SOHO WiFi router beüzemeléséhez is; ez esetben az itt felsoroltak végrehajtása után evvel a leírással folytassuk a telepítést.

Konvenciók

  • Menedzsment hálózatnak nevezzük azt a (másra nem használt - dedikált) fizikai vagy vLAN hálózatot, amelyen keresztül eszközeink beállító felületeit mi magunk elérhetjük, illetve amelyen keresztül eszközeink saját használatra, technikai célból (pl. időszinkron fenntartása, adminisztratív e-mail küldés, frissítések letöltése, stb.) az Internetet elérhetik. Nagyon egyszerű (mini) hálózatok kivételével a menedzsment hálózat használata erősen ajánlott, de ennek a leírásnak alapján akkor is elvégezhetjük a telepítést, ha nincs nincs dedikált menedzsment hálózatunk.
  • A RB eszköz számára a menedzsment hálózat címtartományából kiosztunk egy (statikus vagy dinamikus) IP címet. Az eszköz utolsó (legmagasabb számú) Ethernet portját fenntartjuk menedzsment hozzáférésre, és ha van fizikai menedzsment hálózatunk, úgy ezt a portot ahhoz csatlakoztatjuk. Ha a menedzsment hálózat logikailag (pl. trönkölt vLAN-ban) van megvalósítva (vagy nem létezik), a portot üzemszerűen nem használjuk, azt csak a beüzemelés vagy hibakeresés idejére csatlakoztatjuk egy munkaállomáshoz.
  • Ebben a leírásban a beállításokat (bemásolható) RouterOS konzol parancsokként adtam meg. A parancsablakot a WinBox felületén a New terminal menüponttal hívhatjuk elő. A bemásoláshoz a jobbklikk - Paste egérműveletet és ne a CTRL-V billentyűket használjuk, mert utóbbi a WinBox konzolban nem beilleszt, hanem az igen zavaró automatikus kiegészítést kapcsolja be (a promptban ezt dupla kacsacsőr: >> jelzi, kikapcsolható a CTRL-V újabb megnyomásával)! Egyébként a RouterOS konzol parancsai nagyjából megfelelnek a WinBox menüszerkezetének, így a parancssorok alapján a grafikus felületen is elvégezhetőek a megadott beállítások.

Előkészületek

  • Legalább az első alkalommal olvassuk el a RouterBoard és RouterOS alapjairól szóló wikilapot (TODO!) - addig is RouterOS FAQ (angol).
  • Ha nem használunk menedzsment hálózatot, lehetőség szerint készítsünk egy ideiglenes környezetet pl. egy egyszerű broadband routerrel, amelyre csak a beüzemelendő RB eszközt és munkaállomásunkat fogjuk csatlakoztatni. A leírt telepítés enélkül is elvégezhető (ez esetben a menedzsment hálózatot magán a RB eszközön hozzuk létre), de egy használható Internet uplinkre mindenképpen szükségünk lesz.
  • Foglaljunk le egy fix IP címet a RB eszköz számára a (végleges vagy ideiglenes) menedzsment hálózatban. Válasszunk az eszköz számára egy hálózati gépnevet (hostname).
  • Töltsük le munkaállomásunkra a WinBox legfrissebb verzióját, amely egy WINE alatt is futtatható, telepítést nem igénylő (standalone) .exe állomány.
  • Állítsuk be munkaállomásunk csomagszűrő tűzfalát úgy, hogy elfogadja az UDP 5678 (neighbour discovery) és UDP 20561 (MAC telnet) kapcsolatokat a RB eszközhöz csatlakozó interface-en bárhonnan (ez szükséges az IP nélküli - layer 2 broadcast üzenetekkel megvalósított - WinBox kapcsolódáshoz).
  • Amennyiben a RB eszköz már használatban volt, reseteljük azt az alapértelmezett konfigurációra úgy, hogy a reset nyomógomb lenyomása mellett csatlakoztassuk az eszközt a tápfeszültséghez, és tartsuk is lenyomva a nyomógombot mindaddig, amíg a LED-ek villogni nem kezdenek (akkor azonban engedjük fel, különben NetInstall módba váltunk).

Beállítások

Alapértelmezett konfiguráció törlése

A RB eszközök több, előre definiált konfigurációval rendelkeznek, amelyek egyikét a gyártó alapértelmezettként beállítja, így első indításakor vagy későbbi alapállapotba állítás (hard reset) után az eszköz ezt a konfigurációt tölti be. A jelen leírásban ezt a konfigurációt nem használjuk (beállításait töröljük), és a minimális működőképességet adó alap konfigurációból fogunk kiindulni.

RB basics-00.png
  • Csatlakozzunk munkaállomásunkkal közvetlenül a RB eszköz legmagasabb számú Ethernet portjára (RB3011 esetén ez az ether10 lesz)! Kapcsoljunk ki munkaállomásunkon minden más hálózati interface-t (a wifit is). Vegyünk fel egy tetszőleges, fix IP címet erre az interface-re (célszerű, ha a menedzsment hálózatból származó címet használunk, példánkban legyen ez 192.168.88.10/24, a gateway és a DNS legyen 192.168.88.1).
  • Kapcsoljuk be a RB eszközt, és indítsuk el munkaállomásunkon a WinBoxot, amelynek Neighbours fülén (MAC címmel és IP címmel is) meg kell jelennie az eszköznek. Válaszuk ki az eszközt annak MAC address értékére kattintva (layer 2 kapcsolat, így IP cím változtatás esetén sem veszítjük el az eszközt) és a Connect nyomógombbal csatlakozzunk. Csatlakozás után a WinBox ablakának címsorában (title bar) a MAC cím lesz látható.

A MAC szerinti (IP nélküli) csatlakozás layer 2 broadcast küldésekkel történik, ehhez a közvetlen kapcsolat mellett szükséges az is, hogy munkaállomásunk alapértelmezett kijárata a RB eszközhöz csatlakozó interface legyen. Ezért kapcsoltuk ki a többi interface-t és vettünk fel IP-t és gateway-t is.

  • A WinBox System - Reset Configuration alatt No Default Configuration BE és Reset Configuration (Do you want... YES). Az eszköz újraindul, a WinBox lekapcsolódik.

Amikor az eszköz újra megjelenik a Neighbours listában, IP címe 0.0.0.0 lesz, jelezve, hogy az alapértelmezett bridge-et és IP-jét töröltük (az üres konfigurációban egyik Ethernet port sincs bridge-hez vagy switch chiphez kötve, a rádiók ki vannak kapcsolva és az eszköznek nincsen IP címe).

  • A továbbiakhoz csatlakozzunk a RB eszközhöz (egyelőre a MAC cím alapján), és indítsunk egy parancssoros felületet (New Terminal).

Adminisztrátori jelszó megadása

Alapértelmezésben a RB eszközhöz az admin felhasználónévvel és jelszó nélkül csatlakozva teljes körű hozzáférést kapunk. A beüzemelés idejére hagyjuk meg ezt a felhasználónevet, de védjük a hozzáférést alkalmas (lehetőleg véletlenül generált, de legalábbis nem triviális) jelszóval:

/user set admin password=generated_password

Az eszköz azonosító nevének megadása

Az azonosító (identity) lényegében a RB eszköz Linux hostneve, amely megjelenik a Neighbours listában is, segítve ezzel az eszköz kiválasztását. Alapértelmezetten értéke MikroTik, ezt célszerű megváltoztatni az eszköz leendő hálózati gépnevére:

/system identity set name=hostname

A hostnév változása a konzol promptban azonnal megjelenik.

Menedzsment hálózathoz csatlakoztatás

Az alábbi lépésekkel azt szeretnénk elérni, hogy eszközünk a korábban előkészített, védett menedzsment hálózathoz csatlakozzék (fix vagy DHCP-n kapott IP címmel), így elérje az Internetet is, ami szükséges lesz az időszinkron beállításához, a frissítések letöltéséhez, stb. Ha nem rendelkezünk ilyennel (de van használható Internet uplinkünk), a menedzsment hálózatot magán az eszközön fogjuk létrehozni.

Elsőként készítsünk egy bridge-man nevű bridge-et a menedzsment elérés IP adatai számára (azért bridge-et készítünk, mert ez alá később tetszőleges konkrét slave interface-eket - ethernet portot, vLAN portot, station pseudobridge üzemmódú rádiós interfacet, stb. felvehetünk):

/interface bridge add name=bridge-man

Uplink beállítások

Erre csak akkor van szükség, ha a menedzsment hálózatot magán az eszközön hozzuk létre. Ha már van menedzsment hálózatunk, továbbléphetünk az IP beállításokhoz.

Uplink beállítások 

Csatlakoztassuk az Internet uplinket az eszköz első Ethernet portjához (ether1 - egyéb, pl. WiFi uplink: TODO!), és állítsuk be ezt az interfacet az uplink típusának megfelelően:

  • PPPoE (pl. ADSL) uplink esetén létrehozunk egy új PPPoE interfacet, és megadjuk azonosító adatainkat:
# Töltsük ki a saját adatainkkal!
/interface pppoe-client add disable=no name="pppoe-uplink1" interface=ether1 \
add-default-route=yes use-peer-dns=yes keepalive-timeout=0 \
user="our username" password="our secret password" 

# Ellenőrizzük a kapcsolatot:
/interface pppoe-client monitor
  • DHCP (pl. kábelTV) uplink esetén elegendő engedélyezni a klienst a bridge-man interface-en; a default route és DNS beállításokról az (alábbi parancssorban explicit is megadott) alapértelmezések gondoskodnak:
/ip dhcp-client add disable=no interface=ether1 add-default-route=yes use-peer-dns=yes

# Ellenőrizzük a kapcsolatot (STATUS bound, ADDRESS érvényes):
/ip dhcp-client print 
  • Egyéb esetben:
TODO!

Minden esetben ellenőrizzük, hogy a csatlakozott eszköz valóban kilát-e az Internetre:

# IP cím alapján (leállítás: CTRL-C)
/ping 8.8.8.8

# DNS név alapján (leállítás: CTRL-C)
/ping time.kfki.hu

A további telepítéshez ennyi elegendő is lenne, azonban opcionálisan érdemes engedélyezni, hogy ezt az uplinket a menedzsment hálózatra (ideiglenesen) csatlakozó más eszközök is használhassák (ellenkező esetben pl. csatlakoztatott munkaállomásunkkal nem látunk ki az Internetre). Ha ezt nem szeretnénk megtenni, továbbléphetünk az IP beállításokhoz.

A menedzsment hálózat ellátására beállítunk egy csomagtovábbítást (sNAT/masq), DNS használatot, valamint opcionálisan DHCP-t is biztosítunk. Példánkban a menedzsment hálózat a 192.168.88.0/24 C osztály lesz, a DHCP címtartomány 192.168.88.10-24-ig terjed, a telepítés alatt álló eszköz (mint gateway, DNS- és DHCP szerver) a 192.168.88.1 IP címet kapja.

  • Csomagtovábbítás (sNAT/masq):
# PPPoE uplink esetén (uplink interface pppoe-uplink1)
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 out-interface=pppoe-uplink1

# DHCP uplink esetén (uplink interface ether1)
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 out-interface=ether1
  • DNS továbbítása
/ip dns set allow-remote-requests=yes
  • Opcionális DHCP szolgáltatás
/ip pool add name=man-pool ranges=192.168.88.10-192.168.88.254
/ip dhcp-server network add address=192.168.88.0/24 gateway=192.168.88.1 domain="management.inland" 
/ip dhcp-server add interface=bridge-man address-pool=man-pool lease-time=1h authoritative=yes disabled=no

IP beállítások

Az IP adatok beállítása attól függ, hogy a menedzsment hálózatban (célszerűen statikus) DHCP-t használunk (könnyebb menedzselni, de plusz hibaforrás), vagy manuálisan állítjuk be a fix IP címeket (többletmunka és elrontható).

  • Az eszközön létrehozott menedzsment hálózat esetén csak az eszköz saját IP címét kell felvenni (ha fentebb beállítottuk, a DHCP szerver azonnal aktiválódik):
/ip address add address=192.168.88.1/24 interface=bridge-man
  • DHCP fogadásához elegendő engedélyezni a klienst a bridge-man interface-en; a default route és DNS beállításokról az (alábbi parancssorban explicit is megadott) alapértelmezések gondoskodnak:
/ip dhcp-client add disable=no interface=bridge-man add-default-route=yes use-peer-dns=yes
  • Fix IP cím beállításához a szokásos IP, netmask, gateway adatok mellett manuálisan kell beállítanunk a default route-ot és a DNS kiszolgálók címeit is:
# a nálunk használatos IP-t és netmaskot írjuk be
/ip address add address=192.168.88.X/24 interface=bridge-man
# a menedzsment gateway kerüljön ide
/ip route add dst-address=0.0.0.0/0 gateway=192.168.88.1

# az elsőt csak akkor, ha a menedzsment gateway DNS szerver is; a Google public DNS-t érdemes lehet mindig felvenni
/ip dns set servers=192.168.88.1,8.8.8.8,8.8.4.4 allow-remote-requests=no

Ezzel a menedzsment IP-t előkészítettük; ha felveszünk egy (vagy több) fizikai interfacet a bridge-man alá, azon az IP beállítások azonnal meg fognak jelenni.

Interface beállítások

A menedzsment portot minden esetben hozzá szeretnénk adni a bridge-man-hez (a port hozzáadásakor az rövid időre lekapcsolódik, így leszakadunk az eszközről):

# N az utolsó Ethernet interface száma, RB3011-nél 10
/interface bridge port add bridge=bridge-man interface=etherN

Rögzítsük a bridge-man jelenlegi MAC address-ét, így az nem fog megváltozni, ha további interface-eket veszünk fel a bridge alá:

/interface bridge set bridge-man auto-mac=no admin-mac=[/interface bridge get bridge-man mac-address]
A MAC rögzítés célszerű egyfelől az esetleges statikus DHCP kiosztás, másfelől a MAC alapú kapcsolódás egyszerűsítése érdekében.
Az eszközön létrehozott menedzsment hálózat esetén

Az eszközön létrehozott menedzsment hálózat esetén nincs több teendő - továbbléphetünk a MAC alapú hozzáférés korlátozásához.

Dedikált fizikai menedzsment hálózat esetén

Az alábbi példában a menedzsment hálózat a menedzsment portra csatlakozó, dedikált fizikai Ethernet hálózat. A RB eszköz elérhető ezen keresztül, illetve lecsatlakoztatás után a menedzsment porton közvetlen kábelkapcsolattal, mind MAC mind IP szerint.

RB wiki01a.png

Dedikált (fizikai) Ethernet menedzsment hálózat esetén nincs több teendő - továbbléphetünk a MAC alapú hozzáférés korlátozásához.

Trönkölt menedzsment hálózat esetén

Az alábbi példában a menedzsment hálózat nem fizikai elkülönítéssel, hanem IEEE 802.1q vLAN-okkal van megoldva, és a RB eszközhöz a menedzsment hálózat tagelt trönkön keresztül érkezik. A RB eszköz elérhető a trönkön keresztül, tagelt forgalommal az ether1.5 vLAN interface-en (normál üzem), és fizikai csatlakoztatás után, tageletlen forgalommal a normál üzemben nem használt menedzsment porton IP és MAC kapcsolattal egyaránt. Mindkét TCP/IP port ugyanazt az IP címet (a bridge-man IP címét) használja.

RB basics-02.png

A trönk fogadásához készítenünk kell egy új vLAN interfacet és hozzá kell adjuk ezt a bridge-man-hez. Az alábbi parancssorokban feltételezzük, hogy a trönk az ether1 portra fog csatlakozni és a menedzsment vLAN az ötös számú:

# Interface a menedzsment vLAN-hoz
/interface vlan add interface=ether1 name=ether1.5 vlan-id=5
# Felvesszük a menedzsment bridge-be
/interface bridge port add bridge=bridge-man interface=ether1.5

Ezután továbbléphetünk a MAC alapú hozzáférés korlátozásához.

WiFi menedzsment hálózat esetén

Általában nem ajánlott a menedzsment hálózatot megzavarható és esetleg lehallgatható WiFi kapcsolaton megvalósítani, erre elsősorban fejlesztési-tesztelési környezetben kerülhet sor. Ebben a konfigurációban a RB eszköz elérhető IP kapcsolattal a station-pseudobridge módban működő wireless interface-en, valamint IP és MAC kapcsolattal is a menedzsment porton.

RB basics WiFi.png
  • Hozzunk létre egy security profile-t a management WiFi SSID-val megegyező néven és beállításainak megfelelően:
# Töltsük ki a saját WiFi adatainkkal! A példa WPA2 titkosítást mutat (ügyeljünk a folytatósorokra!).
/interface wireless security-profiles add \
mode=dynamic-keys authentication-types=wpa2-psk \
unicast-ciphers=tkip,aes-ccm group-ciphers=tkip,aes-ccm \
name="our SSID" wpa2-pre-shared-key="our secret password"
  • A grafikus felületen a Wireless táblázat Interfaces fülén duplakattintsunk a megfelelő (2,4 vagy 5 GHz-es) rádió interface-re, és Scan, Start. Válasszuk ki a menedzsment WiFi SSID-t és Connect, ami automatikusan kitölti a Wireless fül adatait. Itt a Mode-ot állítsuk station pseudobridge-re, a Security Profile legördülőből válasszuk ki az imént létrehozott profilt és OK. Ezzel engedélyeztük a rádiós kapcsolatot; a kapcsolódás sikerét a Wireless táblázat regisztrációs fülén ellenőrizhetjük.
  • Opcionálisan állítsuk be az aktív rádió MikroTik technikai nevét is a hostnévvel azonosra:
# Azt a rádiót állítjuk be, amelyiknek SSID-je nem az alapértelmezett
/interface wireless set radio-name=[/system identity get name] [find ssid!=MikroTik]

Ezután továbbléphetünk a MAC alapú hozzáférés korlátozásához.

A MAC alapú hozzáférés korlátozása

A tényleges csatlakoztatás előtt korlátozzuk a MAC szerinti felderíthetőséget és elérhetőséget a menedzsment hálózatra.

# Készítünk egy hivatkozható interface listát  (RouterOS >= 6.40 szintaxishoz szükséges)
/interface list add name="management" comment="contains management interfaces" 
/interface list member add list=management interface=bridge-man

# Csak a menedzsment hálózat interface-eken engedélyezzük
/ip neighbor discovery-settings set discover-interface-list="management"
  • A layer 2 alapú elérhetőséget a MAC szerver tool (TCP 8291) biztosítja:
# Csak a menedzsment hálózat interface-eken engedélyezzük (MAC Telnet és WinBox)
/tool mac-server set allowed-interface-list="management"
/tool mac-server mac-winbox set allowed-interface-list="management"
  • A beállítást követően lecsatlakozással és újracsatlakozással ellenőrizzük ismét a felderíthetőséget és a MAC szerinti kapcsolatot!

Menedzsment hálózat gyorsteszt

  • Csatlakoztassuk fizikailag az RB eszközt a menedzsment hálózathoz, illetve WiFi hálózat esetén adjuk hozzá a rádiót a bridge-man-hez:
# Az aktív rádió interface szerepeljen itt!
/interface bridge port add bridge=bridge-man interface=wlan1
  • Ellenőrizzük az IP címet:
/ip address print
  • és munkaállomásunkkal is a menedzsment hálózatba átlépve, ellenőrizzük a RB eszköz IP címmel történő elérhetőségét.

Az időszinkron beállítása

Internet kapcsolat, vagy a menedzsment hálózatban működő, saját time server birokában érdemes a RB eszköz rendszeróráját ehhez szinkronizálni.

  • Állítsuk be az időzónánkat (érvényes időzónák felsorolása pl. itt):
/system clock set time-zone-name=Europe/Budapest
  • Aktiváljuk a beépített Simple NTP klienst, és adjunk meg egy alkalmas időszolgáltatót, amelyhez szinkronizálni fogunk. Ha a menedzsment hálózatban van NTP szerver, használjuk annak IP címét; ha nincs, Magyarországon a time.kfki.hu jó választás lehet:
# Ha van saját NTP szerverünk (a példában ez a gateway)
/system ntp client set enabled=yes primary-ntp=192.168.88.1
# Ha nincsen, használhatjuk a KFKI-t - DNS nevet írjunk, az IP változhat!
/system ntp client set enabled=yes server-dns-names=time.kfki.hu

# Teszt: beállítások és az idő
/system ntp client print
/system clock print

Ezen a ponton opcionálisan de javasoltan készítsünk egy bináris mentést az eddigi beállításokról a tartalmát kikapcsoláskor is megőrző flash tárhelyre:

# Benne van az admin felhasználó jelszava!
/console clear-history

# Névkonvenció: hostname-YYYYMMMDD-HHMM.backup 
{:local filename ""
:if ([:len [/file find name="flash" type="disk"]]>0) do={:set filename "flash/"}
:set filename ($filename . [/system identity get name] . "-" . [:pick [/system clock get date] 7 11])
:set filename ($filename . [:pick [/system clock get date] 0 3] . [:pick [/system clock get date] 4 6] . "-")
:set filename ($filename . [:pick [/system clock get time] 0 2] . [:pick [/system clock get time] 3 5] . ".backup")
/system backup save name="$filename"}

A mentés magára a RB eszközre készül, de a WinBox File menüjének ablakából munkaállomásunkra egyszerűen áthúzható (drag and drop másolás vagy jobbklikk, Download). Az ajánlott névkonvenció helyett bármilyen más (fájlnévként szabályos) elnevezés is használható.

Csomagszűrő tűzfal beállítások

Figyelem: ez a szakasz csak az IPv4 csomagszűrésre vonatkozik! (TODO!)

Tekintettel arra, hogy maga a RB eszköz csak a menedzsment hálózaton keresztül lesz elérhető, a nem átmenő forgalmat kezelő input és output iptables chain-ek már itt beállíthatóak. Ez a beállítás opcionális, de (elsősorban nagyobb méretű vagy fizikailag védtelenebb) menedzsment hálózat esetén erősen ajánlott.

A csomagszűrő szabályok hozzáadása előtt a konzolon (CTRL-X) vagy a grafikus felületen érdemes bekapcsolni a Safe Mode-ot!

  • Az alábbi szabályokkal a RB eszközre kívülről kezdeményezett forgalmat csak a bridge-man interface-en keresztül fogadjuk el, és csak a használatban lévő szolgáltatások protokolljat és portjait engedélyezzük. A lánc végén fennakadó forgalmat általában nem naplózzuk (de az alábbi készlet - letiltva - tartalmazza az ehhez szükséges szabályt):
/ip firewall filter
add chain=input action=accept connection-state=established,related comment="Accept established and related connections"
add chain=input action=drop connection-state=invalid comment="Drop invalid connections" 
add chain=input action=drop in-interface=!bridge-man comment="Drop everything which isn't target the management interface"
add chain=input action=drop dst-address-type=!broadcast,local comment="Drop everything which aren't broadcasted or destined to our IP address"
add chain=input action=drop src-address-type=!unicast comment="Drop everything which doesn't have unicast source IP address"

add chain=input action=accept protocol=icmp limit=50/5s,2:p comment="Avoid ICMP Flood" 
add chain=input action=accept protocol=tcp dst-port=22 comment="SSH"
add chain=input action=accept protocol=udp dst-port=5678 comment="MikroTik NDP"
add chain=input action=accept protocol=tcp dst-port=8291 comment="WinBox"
add chain=input action=accept protocol=udp dst-port=20561 comment="MAC WinBox"

add chain=input action=log limit=10/1m,5:p disabled=yes comment="Optional log for unhandled input packets to filter"
add chain=input action=drop comment="Drop everything else"
/
  • Az alábbi opcionális szabályokkal a RB eszközről kezdeményezett forgalmat szabályozzuk. Általában nem hiba a kimenő forgalmat nem szűrni; a szűrőn fennakadó csomag azonban jelezhet üzemzavart illetve lebuktathat egy esetleges sikeres behatolást. Ennek érdekében, a lánc végén, a nem kezelt forgalmat naplózzuk.
/ip firewall filter
add chain=output action=accept connection-state=established,related comment="Accept established and related connections"
add chain=output action=drop connection-state=invalid comment="Drop invalid connections" 

add chain=output action=accept protocol=icmp comment="All ICMPs"
add chain=output action=accept protocol=tcp dst-port=22 disabled=yes comment="SSH"
add chain=output action=accept protocol=tcp dst-port=25 comment="SMTP"
add chain=output action=accept protocol=tcp dst-port=53 comment="DNS"
add chain=output action=accept protocol=udp dst-port=53 comment="DNS"
add chain=output action=accept protocol=udp dst-port=123 comment="NTP"
add chain=output action=accept protocol=udp dst-port=67-68 comment="DHCP"
add chain=output action=accept protocol=tcp dst-port=80 comment="HTTP"
add chain=output action=accept protocol=tcp dst-port=443 comment="HTTPs"
add chain=output action=accept protocol=tcp dst-port=465 comment="SMTPs"
add chain=output action=accept protocol=tcp dst-port=587 comment="SMTP/MSA"
add chain=output action=accept protocol=tcp dst-port=2000 comment="Bandwidth test"
add chain=output action=accept protocol=udp dst-port=5678 comment="MikroTik NDP"
add chain=output action=accept protocol=tcp dst-port=8291 comment="WinBox"
add chain=output action=accept protocol=tcp dst-port=11371 comment="PGP keychain"
add chain=output action=accept protocol=udp dst-port=11371 comment="PGP keychain"
add chain=output action=accept protocol=udp dst-port=15252 comment="MikroTik IP cloud service"
add chain=output action=accept protocol=udp dst-port=20561 comment="MAC WinBox"
add chain=output action=accept protocol=udp dst-port=33434-33524 comment="Traceroute"

add chain=output action=drop log="yes" comment="Logdrop everything else"
/
Általában nem szükséges kifelé ssh-zni, de hibakereséshez jól jöhet ez a funkció, ezért a szabálykészletben szerepel, de le van tiltva.

A csomagszűrő szabályok sikeres hozzáadása után a konzolon (CTRL-X) vagy a grafikus felületen kapcsoljuk ki a Safe Mode-ot.

Az SSH megerősítése

Az ssh használata Linux vagy MacOS munkaállomásról kényelmesebb lehet, mint a WINE WinBox felületéről indított MikroTik konzolé, valamint lehetővé teszi a RB eszköz valamelyes távirányítását is.

  • Célszerű az ssh titkosítását megerősíteni (elutasítani a gyengébb titkosítású kapcsolatokat):
/ip ssh set strong-crypto=yes
  • Opcionálisan érdemes lehet beállítani egy bejelentkezéskori üzenetet is, így ha valaki (ssh vagy WinBox Terminal) konzolos belépéssel kerül a rendszerbe, akkor találkozik az alábbi figyelmeztetéssel, és utóbb nem mondhatja azt, hogy nem tudta, hogy tilosban jár, valamint nem panaszkodhat, hogy tevékenységét megfigyeltük, és ezzel megsértettük a személyiségi jogait:
# Töltsük ki a saját cégnevünkkel vagy egyéb, a tulajdonosra utaló szöveggel!
{ :local owner "My Company"

# Ügyeljünk a folytatósorokra!
/system note set note=("\n********************************************************************************\n\
NOTICE TO USERS\n\nThis computer system is the property of " . $owner . ".\n\
It is for authorized use only. Users (authorized or unauthorized) may not have\n\
any expectations - explicit or implicit - of privacy.\n")}

# Engedélyezzük a fenti banner megjelenítését minden konzolos belépéskor:
/system note set show-at-login=yes
A művelet eredményeként az ssh konzolon az alábbihoz hasonló, módosított bejelentkező képernyőt láthatunk:
SSH bejelentkezés figyelmeztetéssel

Megjegyzés: ez a beállítás a flash lemezen, szövegfájlban tárolódik, ezért a RB eszköz gyári alaphelyzetbe visszaállításkor is megmarad!

A nem használt szolgáltatások kikapcsolása

A nem használt szolgáltatások biztonsági kockázatot jelenthetnek (igaz, ezt csökkenti az a tény, hogy elérhetőségüket a csomagszűrő tűzfallal korlátoztuk), ezért érdemes azokat mindaddig kikapcsolni, amíg visszakapcsolásukat a RB eszköz majdani, konkrét feladata nem igényli.

  • A RouterOS publikus szolgáltatásai közül csak az ssh-t és a WinBoxot hagyjuk bekapcsolva, a telnet, ftp, www és www-ssl (WebFig), api és api-ssl szolgáltatásokat kikapcsoljuk:
/ip service disable telnet,ftp,www,www-ssl,api,api-ssl
# Ellenőrzés
/ip service print
/tool bandwidth-server set enabled=no
/tool romon set enabled=no
/ip socks set enabled=no
  • Kapcsoljuk ki az SNMP-t is (jelenleg alapértelmezésben is ki van kapcsolva):
/snmp set enabled=no

A RouterBoard firmware és a RouterOS frissítése

Mind a firmware, mind az operációs rendszer csomagjainak napra készen tartása fontos biztonsági követelmény, valamint megkönnyítheti az üzemeltetést, ha a kezelésünkben lévő eszközök azonos verziójú szoftverrel rendelkeznek. Az alábbi leírásban nem törekszünk a frissítések automatikus telepíttetésére, mert a frissítés az eszköz újraindításával (minimális szolgáltatáskieséssel) jár és van valamelyes esély manuális beavatkozást igénylő hiba kialakulására is. Biztonságosabbnak tűnik a firmware és OS verziók ütemezett, automatikus ellenőrzése és a megtalált frissítések választott időben történő, manuális telepítése.

  • A frissítések ellenőrzésére egy ütemezett feladatot használunk, amely, ha frissítést talál, bejegyzést ír a rendszernaplóba (ennek hatására az alant ismertetett a naplófigyelő szolgáltatás automatikus e-mail értesítést fog küldeni). Az alábbi parancssor UpdateCheck néven elkészíti, és a szükséges jogosultságokkal beütemezi az ellenőrzést úgy, hogy az tesztképpen percenként lefusson:
# Folytatósorokat tartalmaz, egyben másoljuk ezt a kódblokkot a parancssorba!
/system scheduler add policy=read,write,sensitive,policy,test name=UpdateCheck \
start-time=[("04:" . [:pick [/system clock get time] 6 8] . ":00")] interval=1m \
on-event=\
{/system package update check-for-updates
delay 2s
if ([/system package update get status] ~ "System is already up to date") do={nothing} \
   else={/log warning (:put "update-ros: " . [/system package update get status])}

if ([/system routerboard get current-firmware] != [/system routerboard get upgrade-firmware]) \
   do={/log warning (:put "update-rb: New version found " . [/system routerboard get upgrade-firmware])}
}
A start-time beállításánál a percek primitív pszeudorandomizálásának célja, hogy a jelen leírás alapján telepített eszközök ne mind pontosan azonos időben, hanem 4:00-4:59 között nagyjából egyenletesen eloszolva végezzék az ellenőrzést.
  • Újonnan üzembe helyezett eszköznél szinte biztosra vehető, hogy legalább a RouterOS frissítésre szorul, mert a gyártás óta eltelt időben csaknem biztosan történt verzióváltozás. A Log menüponttal nyissuk meg a rendszernaplót, és ellenőrizzük, hogy a következő egész percekben megjelennek-e a figyelmeztető üzenetek!
  • Ha rendben megjelennek az üzenetek, az ütemezést változtassuk meg úgy, hogy az ellenőrzés 24 óránként egyszer fusson le:
/system scheduler set UpdateCheck interval=1d
  • Miután sikeresen beütemeztük és teszteltük a verziók figyelését, végezzük is el a szükséges frissítéseket! Ezt talán legkényelmesebb a grafikus felületen a System, Routerboard, Upgrade; újraindítás (System, Reboot), majd a System, Packages, Check for Updates, Download & Upgrade; újraindítás (System, Reboot, ha nem történik meg automatikusan) lépésekkel elvégezni. A továbbiakban ugyanígy fogunk frissíteni, ha a verziófigyelőtől e-mail értesítést kapunk.

A technikai levelezés beállítása

E-mail küldési lehetőségre elsődlegesen a RB eszköz állapotjelentéseinek továbbítása miatt van szükség.

Alaptelepítés esetén a RouterOS nem tartalmaz SMTP szerver komponenst (csak klienst), így a levéltovábbításhoz külső SMTP szerver (smarthost) megadása szükséges. Noha parancssori levélküldés esetén lehetőség van minden egyes levélnél minden egyes levélküldési paraméter külön-külön történő megadására, amit csak lehet, célszerű egyszerre, alapértelmezésként definiálni.

  • Adjuk meg az alapértelmezett feladót - módosítsuk a példasor adatait a sajátunkra:
# Töltsük ki a saját adatainkkal!
/tool e-mail set from="MT admin <admin@$[/system identity get name].our.management.subdomain>"
  • Adjuk meg a technikai levelek alapértelmezett címzettjét - sajnos, erre az e-mail alapbeállítások között nincs lehetőség, így az SNMP beállítások contact paraméterét fogjuk használni:
# Töltsük ki a saját adatainkkal!
/snmp set contact="Network Administrator <netadmin@our.domain>"
  • Ha a menedzsment gateway egyben smarthost is, azaz a menedzsment hálózatból származó leveleket titkosítatlan SMTP kapcsolaton, authentikáció nélkül továbbításra elfogadja, adjuk meg ezt SMTP kiszolgálónak:
/tool e-mail set address=[/ip route get 0 gateway] port=25 start-tls=no
  • Ha külső smarthost-ot használunk, valószínűleg szükség lesz authentikációra és titkosított kapcsolatra is (az alábbi példában a GMail a smarthost):
# Saját smarthostunkat és hozzáférési adatainkat adjuk meg!
/tool e-mail set address=smtp.gmail.com port=587 start-tls=yes user="username@gmail.com" password="Google password"
Ügyeljünk arra, hogy a GMail használata és bekapcsolt két lépcsős azonosítás esetén alkalmazásjelszót kell generálnunk, valamint a GMail a feladót a smarthost felhasználó GMail címével fogja helyettesíteni (de a látható nevet - példánkban MT admin - változatlanul hagyja). Más smarthost használata esetén egyéb kikötések lehetnek.
  • Ellenőrizzük a beállításokat:
/tool e-mail print
  • Küldjünk egy teszt levelet:
/tool e-mail send to=[/snmp get contact] subject="email test" body="email test" 

Siker esetén a RB eszköz képes technikai e-mailek küldésére.

Naplóbeállítások és riasztások

Rendszernapló átvitele a flash lemezre

A RouterOS alapértelmezésben a memory target-re naplóz, azaz a naplóállományt a RAM diszken hozza létre, így az újraindításkor megsemmisül. Célszerűnek tűnik a naplókat legalább részben a flash lemezre (disk target) áthelyezni:

# Minden, ami nem "info" menjen a RAM diszk helyett a flash lemezre
:local i 0; :while ([:len [/system logging get $i action]]>0) do={
:if ([/system logging get $i action]="memory" && [/system logging get $i topics] != "info") do={
    [/system logging set $i action="disk"]}
set i ($i+1)}

Emellett érdemes a critical szintű hibákat a konzolra írás (echo target) mellett a flash naplóban is feljegyezni:

# Csak akkor, ha még nincs hozzáadva ez a szabály
:do {/system logging get [find topics="critical" action="disk"] topics} \
    on-error={/system logging add topics="critical" action="disk"}

Ellenőrizzük a naplózás szabályait:

# Ezt várjuk: info -> memory; warning, error, critical -> disk; critical -> echo
/system logging print

Rendszernapló elküldése külső naplószerverre

TODO!

Rendszernapló figyelése (MTLogCheck)

Az alább ismertetett, időzített script és szabálykészlet segítségével (amely a közismert logcheck eszköz nagyon leegyszerűsített utánzata) a rendszernaplót periodikusan ellenőrizhetjük, és az újonnan keletkezett, a szabálykészlet alapján relevánsnak tűnő sorokat e-mailben elküldhetjük.

  • Töltsük le az MTLogCheck.src időzítendő scriptet (egyszerű szövegállomány), és célszerűen a WinBox felületén áthúzással (drag and drop) másoljuk a RB eszköz Files, File list listájába. Ügyeljünk arra, hogy ez a másolás ne a RAM diszkre, hanem a flash tárterületre történjék, különben a felmásolt anyag a következő újraindításkor megsemmisülne! Sajnos ezt a scriptet nem tudjuk a script repository-ba importálni, a RouterOS 4 KB-os méretkorlátja miatt (TODO!)
  • Ütemezzük be a feltöltött állomány futtatását csak a szükséges jogosultságok megadásával, tesztképpen minden percben egyszer futtatva:
# Ügyeljünk a folytatósorokra, egyben másoljuk be ezt a kódblokkot!

/system scheduler add name=MTLogCheck start-time=00:00:00 interval=1m policy=ftp,read,write,sensitive,policy,test \
on-event=(":local timestamp \"" . [/file get [/file find name~"MTLogCheck.rsc"] creation-time] ."\"\n"."\
:if ([:len [/file find name~\"MTLogCheck.rsc\"]]=0 || \\" ."\n"."\
     (\$timestamp)!=([/file get [find name~\"MTLogCheck.rsc\"] creation-time])) do={/tool e-mail send \\" ."\n"."\
    to=[/snmp get contact] \\" ."\n"."\
    subject=(\"MTLogCheck WARNING from \" . [/system identity get name]) \\" ."\n"."\
    body=(\"MTLogCheck URGENT at \". [/system clock get date] . \" \" . [/system clock get time] . \\" ."\n"."\
          \" on \" . [/system identity get name] . \"\\n\\n\" .\\" ."\n"."\
          \"Check the integrity of MTLogCheck.rsc script file! \".\\" ."\n"."\
          \"Your logfiles were NOT checked!\") \\" ."\n"."\
} else={/import [/file get [/file find name~\"MTLogCheck.rsc\"] name]}")

Ez a schedule igyekszik védekezni a mérete miatt csak importálással futtatható scriptfile esetleges illetéktelen megváltoztatása ellen: létrehozatalakor feljegyzi a scriptfile időbélyegét (TODO: valamilyen hash használata) és minden futtatáskor ellenőrzi ennek változatlanságát. Ha a scriptfile megváltozott, azt nem futtatja le, helyette e-mail figyelmeztetést küld. Emiatt a scriptfile tervezett frissítésekor a schedule-t módosítani - célszerűen törölni és újra létrehozni - szükséges.
  • Várjuk meg a script első futtatását, és ellenőrizzük, hogy a script repository-ban létrejött-e az alapértelmezett szabálykészletet tartalmazó MTLogCheckRules script. Az alapértelmezett szabálykészlet használata esetén az MTLogCheck első futtatásakor biztosan van jelentenivaló, így meg kell érkeznie a jelentést tartalmazó e-mailnek is; ha ezt megkaptuk, készítsünk egy újabb, jelentendő naplóbejegyzést, és ellenőrizzük, hogy a következő percben megkapjuk-e erről is az e-mail értesítést:
/log warning "Teszt"
  • Siker esetén csökkentsük a naplóellenőrzés gyakoriságát minden ötödik percre:
/system scheduler set interval=5m MTLogCheck
Az öt percenkénti futtatás jó kompromisszumnak tűnik a még időben értesülni és a rendszert kevéssé terhelni kritériumok között.

Az MTLogCheck szabálykészlete szabadon szerkeszthető szöveg, amely biztonsági okból a script repository-ban tárolt (de nem RouterOS parancskód, így nem is futtatható). Alapértelmezett tartalma jelentést küld minden, nem info szintű bejegyzésről, és az info sorok közül is előírja a felhasználó-kezelés bejegyzéseinek, a konzolra (is) szánt info,critical bejegyzéseknek (pl. firmware frissítés utáni újraindítás kérése), a RB eszköz újraindulásának, valamint a csomagszűrésen fennakadó, kimenő kapcsolatoknak a jelentését:

# Szabályok szerkesztése (mentés és kilépés CTRL-O, csak kilépés CTRL-C)
/system script edit MTLogCheckRules source

type="violation";topics="account"
type="violation";topics="critical"
type="violation";message="rebooted"
type="violation";topics="firewall";message="^output:? "
type="ignore";topics="info"
A szabályok felülről lefelé értékelődnek ki, naplósoronként, az első találatig. Ha egyetlen szabály sem illeszkedik, a naplósor jelentendő (bekerül az e-mail értesítésbe). A szabályok type= értéke violation (jelentendő) vagy ignore (figyelmen kívül hagyandó) lehet; a topics= és message= után szabályos kifejezések írhatóak. A szabály teljesül, ha a naplósor topics és message tartalma illeszkedik a szabályban megadott szabályos kifejezésre.

Az MTLogCheck minden naplósort csak egyszer értékel ki, a naplósor keletkezése utáni következő futtatáskor. Újraindításkor előfordulhat, hogy az MTLogCheck elveszíti a szinkront (nem találja az utolsó, kiértékelt naplósort) - ilyenkor az utolsó újraindítástól kezdi a kiértékelést. Emiatt váratlan újraindításról kapott értesítés esetén érdemes lehet belépni és manuálisan megvizsgálni az újraindítás előtti naplósorokat (TODO!).

Monitorozás

TODO!

Globális változók értékének megőrzése (KeepGlobalVars)

Hasznos lehet az általunk definiált, több helyen is felhasznált paramétereket (pl. fix IP esetén a menedzsment aldomain nevét) vagy különféle állapotjelzőket (pl. az MTLogCheck mutatójának értékét) globális környezeti változóban megőrizni. Sajnos, a RB eszköz kikapcsolásakor vagy a RouterOS újraindításakor ezek a változók megsemmisülnek. Az alábbi (innen származó) trükk egy flash lemezen, szövegállományként tárolt RouterOS scriptet használ a változók értékének tárolására és visszaállítására, és egy másikat a tároló karbantartására. Opcionálisan érdemes lehet ezt a segédeszközt telepíteni.

  • Töltsük le a KeepGlobalVars.scr karbantartó scriptet (egyszerű szövegállomány), és célszerűen a WinBox felületén áthúzással (drag and drop) másoljuk a RB eszköz Files, File list gyökérkönyvtárába (lehet, hogy ez a másolás a RAM diszkre történik, ezért a felmásolt anyag a következő újraindításkor megsemmisül, de ez most nem okoz gondot).
  • Importáljuk a feltöltött állomány tartalmát a script repository-ba, csak a szükséges jogosultságok megadásával (az ftp a szövegfájl létrehozatalához szükséges):
/system script add name="KeepGlobalVars" policy="ftp,read,write,sensitive,policy,test" source=[/file get KeepGlobalVars.scr content]

# Ellenőrzés (a script tartalma látható szövegszerkesztőben, kilépés innen CTRL-C-vel)
/system script edit KeepGlobalVars source
  • Nyissunk egy naplóablakot (Log menüpont), és futtassuk le a karbantartó scriptet kétszer, egymás után! Az első futtatáskor a karbantartó script észleli, hogy rendszerindítás óta még sohasem futott (restore üzemmód), és megpróbálja visszaállítani az elmentett változókat (de ez nem sikerül, hiszen még nem történt mentés). Második futtatásakor a karbantartó script létrehozza a GlobalVars.txt nevű tárolót, benne a létező globális változók értékeivel, és minden további meghíváskor ennek tartalmát frissíti.
/system script run KeepGlobalVars
# Log: script,warning [flash/]GlobalVars.txt store file is not found.

/system script run KeepGlobalVars
# Ellenőrzés
:put [/file get [find name~"GlobalVars.txt"] contents]
  • Ütemezzük be a karbantartó script futtatását minden újraindításra és minden percre, így az a háttérben periodikusan fut és automatikusan gondoskodik a globális változók értékének megőrzéséről:
# Rendszerindításkor
/system scheduler add name=RestoreGlobalVars start-time=startup policy=ftp,read,write,sensitive,policy,test on-event=KeepGlobalVars

# Utána minden percben egyszer
/system scheduler add name=SaveGlobalVars start-time=00:00:00 interval=1m policy=ftp,read,write,sensitive,policy,test \
on-event="if ([/system resource get uptime] > 00:01:00) do={/system script run KeepGlobalVars}"
A schedule-nek legalább a meghívott script jogosultságaival rendelkeznie kell. A második feladat időfeltétele gondoskodik arról, hogy a kétféle feladat ne futhasson egyszerre. Megjegyzendő, hogy a KeepGlobalVars nem menti el az aktuálisan üres értékű változókat, így egy újraindítással ezektől továbbra is meg lehet szabadulni (a RouterOS-ben jelenleg csak újraindítással lehet globális változót teljesen megszüntetni).

Záró mentés

Az alapbeállítások lezárásaként készítsünk egy bináris mentést a tartalmát kikapcsoláskor is megőrző flash tárhelyre:

# Jelszavak lehetnek benne
/console clear-history

# Névkonvenció: hostname-YYYYMMMDD-HHMM.backup 
{:local filename ""
:if ([:len [/file find name="flash" type="disk"]]>0) do={:set filename "flash/"}
:set filename ($filename . [/system identity get name] . "-" . [:pick [/system clock get date] 7 11])
:set filename ($filename . [:pick [/system clock get date] 0 3] . [:pick [/system clock get date] 4 6] . "-")
:set filename ($filename . [:pick [/system clock get time] 0 2] . [:pick [/system clock get time] 3 5] . ".backup")
/system backup save name="$filename"}

A mentés magára a RB eszközre készül, de a WinBox File menüjének ablakából munkaállomásunkra egyszerűen áthúzható (drag and drop másolás vagy jobbklikk, Download). Az ajánlott névkonvenció helyett bármilyen más (fájlnévként szabályos) elnevezés is használható.

Irodalom

Források My MikroTik certificate(s)
MTCNA 2017 Budapest