Skip to main content

11.2 Základy nastavenia firewallu

Firewall je ako vrátnik, ktorý o každom pakete rozhoduje, či ho pustí alebo nie.

Pri plánovaní konfigurácie firewallu sa musíme rozhodnúť, akou základnou stratégiou sa chceme vydať:

  • blacklist - všetko je povolené, okrem výnimiek:
    • používa sa obvykle z LAN do WAN a pre odchádzajúce spojenia (outbound);
  • whitelist - všetko je zakázané, okrem výnimiek:
    • používa sa obvykle z WAN do LAN a pre prichádzajúce spojenia (inbound).

Stratégia nemusí byť jednotná pre celý firewall - prestupové pravidlá môžu byť iné pre každú dvojicu sietí a pre každý smer prenosu.

Vytvorenie firewall pravidla

Na smerovačoch MikroTik môžeme firewall pravidlá definovať vo WinBox ponuke IP/IPv6 → Firewall, záložka Filter Rules. Tento firewall môžeme chápať a označiť aj ako paketový filter. Je dôležité uvedomiť si, že záleží na poradí pravidiel - vyhodnocujú sa postupne podľa poradia.

Reťazce pravidiel

Každé pravidlo musíme v prvom rade prideliť do správneho reťazca pravidiel (chain). Predvolené reťazce vo firewalli sú input, outputforward:

  • Vstupný reťazec input rieši všetky vstupy do smerovača samotného, teda pakety, ktoré sú adresované jemu:
    • ide o prístup na rôzne služby - webové rozhranie, WinBox, SSH, telnet, DNS server, DHCP server, VPN server;
    • účelom firewall pravidiel v tomto reťazci je ochrana smerovača samotného.
  • Výstupný reťazec output rieši požiadavky samotného smerovača, teda pakety, ktoré v ňom vznikli:
    • napríklad pri aktualizácii operačného systému smerovača, DNS dotazovaní, zisťovaní presného času, pripájaní sa na iný VPN server;
    • obvykle nie je potrebné v tomto reťazci obmedzovať smerovač.
  • Prechádzajúci reťazec forward rieši smerovanie medzi sieťami, teda pakety, ktoré smerovačom len prechádzajú a sú preposielané z jedného sieťového rozhrania na druhé:
    • v tomto reťazci býva väčšina pravidiel firewallu;
    • účelom je ochrana pripojenej siete.

Paket, ktorý je spracovávaný firewallom, je najskôr zaradený do príslušného reťazca a následne postupne prechádza pravidlami, kým nenájde také, ktorého podmienkam vyhovuje.

Parametre pravidla

Každému firewall pravidlu môžeme definovať mnoho parametrov, ktoré predstavujú akýsi filter, či podmienky - paket musí vyhovieť všetkým podmienkam súčasne. Niektoré podmienky je možné negovať (symbolom !).

firewall-filter-general.webpNajčastejšie definujeme parametre na záložke General:

  • samozrejme v prvom rade reťazec (Chain), napríklad input;
  • sieťové rozhrania (pričom rozlišujeme vstupné a výstupné), napríklad vstupné rozhranie (In. Interface) ether1-wan;
  • sieťový protokol (Protocol), napríklad TCP;
  • sieťové porty (pričom rozlišujeme zdrojové a cieľové a môžeme ich uviesť aj viac naraz), napríklad cieľové porty (Dst. Port) 22 a 23.

Uvedený príklad by sa týkal požiadaviek na pripojenie k službám smerovača telnet a SSH, ktoré prichádzajú z internetu.

Zvláštnym prípadom je protokol ICMP, pre ktorý je možné špecifikovať aj konkrétny typ ICMP správy (voľba ICMP Options na záložke Advanced), napríklad „echo request“, či „echo reply“.

Akcia pravidla

firewall-filter-action-reject.webpDôležitým parametrom je akcia (Action), ktorú nájdeme na záložke Action. Určuje, čo sa má stať s vyhovujúcim paketom, teda takým paketom, ktorý splnil všetky zadané podmienky. Po vykonaní akcie sa vyšetrovanie podľa postupnosti pravidiel ukončí (pokiaľ nie je uvedené inak parametrom Passthrough).

Najčastejšie používané akcie pre pravidlá sú:

  • accept - paket bude prijatý (povolený);
  • drop - paket bude „potichu“ zahodený (bez informovania odosielateľa);
  • reject - paket bude zahodený, odosielateľ bude informovaný:
    • môžeme zvoliť typ ICMP odpovede (napríklad „admin prohibited“), čo môže pomôcť pri odhaľovaní problémov;
  • passthrough - pokračuje sa na ďalšie pravidlo:
    • nebude vykonaná žiadna akcia, má zmysel pre štatistiky a testovanie.

Pre zaujímavosť, v prípade zákazu cez reject s rôznymi ICMP správami zobrazuje príkaz ping v rôznych OS nasledovné hlásenia:

  • MikroTik RouterOS: totožné s nastavenou správou;
  • Linux: zodpovedajúce nastavenej správe s výnimkou „admin prohibited“ - zobrazí sa „Packet filtered“;
  • Windows: zväčša zodpovedajú nastavenej správe, ale nerozlišuje „prohibited“ (píše „unreachable“) a správu „admin prohibited“ zobrazí ako „Destination net unreachable“.

Fungovanie paketového filtra

Zrekapitulujme si, aká je postupnosť pri vyhodnocovaní prijatého paketu:

  • najskôr sa určí základný reťazec pravidiel (chain);
  • v danom reťazci sa prechádzajú pravidlá podľa ich poradia,
    • často používané pravidlá je rozumné zaradiť skôr ako málo používané;
  • ak sú splnené všetky podmienky pravidla, je vykonaná akcia;
  • vykonaním akcie končí spracovanie paketu,
    • výnimkou sú akcie passthrough, log a skoky (jumpreturn).

firewall-filter.webp

Pred aplikovaním akýchkoľvek pravidiel, ktoré môžu ovplyvniť váš prístup k smerovaču, vždy v hornej lište WinBoxu aktivujte tlačidlo Safe Mode. Ak by ste sa omylom „vymkli“, systém vráti zmeny späť.

Evidencia spojení (Connection Tracking)

Zamyslenie: Potrebujeme dosiahnuť stav, kedy bude zakázaný prístup do LAN z iných sietí, no z LAN bude povolený prístup všade. Na firewalli teda zakážeme prístup z WAN do LAN. Opačný smer (z LAN do WAN) necháme povolený. No žiadna komunikácia nefunguje. V čom je problém? 🤔

Na riešenie nastoleného problému využívame evidenciu spojení (connection tracking) a základnú sadu pravidiel firewallu pre spojenia - táto umožní:

  1. zabezpečiť, aby boli povolené pakety odpovede - pakety patriace k predtým povolenej komunikácii iniciovanej obvykle z LAN, čo umožní aj spätný smer komunikácie do LAN;
  2. výrazne znížiť záťaž CPU smerovača pri zložitejšej konfigurácii firewall (s desiatkami pravidiel), pretože pakety už raz povoleného spojenia budú hneď na úvod povolené.

Aby sme mohli využívať evidenciu spojení vo firewall spojeniach, je potrebné, aby bola povolená - ide o WinBox ponuku IP/IPv6 → Firewall → Connections a v nej tlačidlo Tracking. Predvolená hodnota Auto obvykle vyhovuje - znamená, že sa evidencia spojení automaticky zapne, pokiaľ existuje nejaké firewall pravidlo.

firewall-connections.webp

Zaujímavé je, že smerovač eviduje okrem skutočných TCP spojení aj „spojenia“ UDP, či ICMP.

Základná sada pravidiel pre spojenia

Sadu základných pravidiel pre existujúce spojenia je potrebné pridať na úvod všetkých troch základných reťazcov pravidiel a na ich záver pridať všeobecné pravidlo buď všetko ostatné povoľujúce (v režime blacklist) alebo všetko ostatné zakazujúce (v režime whitelist). Pokiaľ sa používa aj protokol IPv6, je potrebné tieto základné pravidlá použiť samostatne aj pre IPv6 firewall.

Pozrime sa na tieto firewall pravidlá konkrétne:

  1. hneď v úvode povolíme už nadviazané spojenia:
    /ip firewall filter add chain=input connection-state=established,related action=accept;
  2. nesprávne pakety („tvária sa“ ako odpovede, ale nie sú v evidencii spojení pre dané rozhranie) zahodíme:
    /ip firewall filter add chain=input connection-state=invalid action=drop;
  3. ďalej nasledujú vlastné pravidlá určujúce, či sa povolí nové spojenie;
  4. na záver patrí implicitné (default) pravidlo, napríklad:
    /ip firewall filter add chain=input action=accept - pričom bezpečnejší je samozrejme zákaz;
  5. to isté vykonáme aj pre reťazce outputforward a všetko tiež pre IPv6.

firewall-filter-zaklad.webp

Kompletná sada základných pravidiel aj so všeobecným záverečným povolením (pozor, to je potrebné si zmeniť podľa potreby):

/ip firewall filter

add action=accept chain=input comment="INPUT - povol uz nadviazane spojenia" connection-state=established,related
add action=drop chain=input connection-state=invalid
add action=accept chain=input comment="povol vsetko ostatne"

add action=accept chain=output comment="OUTPUT - povol uz nadviazane spojenia" connection-state=established,related
add action=drop chain=output connection-state=invalid
add action=accept chain=output comment="povol vsetko ostatne"

add action=accept chain=forward comment="FORWARD - povol uz nadviazane spojenia" connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=accept chain=forward comment="povol vsetko ostatne"

/ipv6 firewall filter

add action=accept chain=input comment="INPUT - povol uz nadviazane spojenia" connection-state=established,related
add action=drop chain=input connection-state=invalid
add action=accept chain=input comment="povol vsetko ostatne"

add action=accept chain=output comment="OUTPUT - povol uz nadviazane spojenia" connection-state=established,related
add action=drop chain=output connection-state=invalid
add action=accept chain=output comment="povol vsetko ostatne"

add action=accept chain=forward comment="FORWARD - povol uz nadviazane spojenia" connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=accept chain=forward comment="povol vsetko ostatne"

Týmto sme vytvorili základný funkčný firewall, ktorý umožňuje komunikáciu. v nasledujúcej kapitole sa pozrieme na to, ako tento stav zabezpečiť: obmedzíme prístup z internetu, využijeme zoznamy adries a optimalizujeme výkon pomocou funkcie FastTrack.