KMI/POS1 Počítačové sítě: Cvičení 10

Filtrace

Firewall jsme již konfigurovali na cvičení 7. Konkrétně jsme pomocí něj nastavili síťovou maškarádu. Pomocí firewallu je možné konfigurovat chování jednotlivých portů. Například následující kód nastaví odmítnutí spojení (příznak RST) na portu tcp/22 v systému s iptables.

iptables -A INPUT -p tcp -i enp0s3 --dport 22 -j REJECT

INPUT představuje tzv. chain, tedy, kdy je příchozí zpráva zpracována. INPUT slouží pro příchozí komunikaci. OUTPUT pro odchozí a FORWARD pro komunikaci, která je pouze předávána.

L3 zařízení disponují firewallem a mají analogické (mnohdy lepší) možnosti fonfigurace firewallu než klientské stanice. Níže si ukážeme, jak se pracuje s firewallem v RouterOS.

# výpis spojení
ip firewall connection print

# výpis statistik
ip firewall filter print stats

Jednotlivá pravidla nastavená ve firewallu jsou aplikována postupně. Například.

# povolení ping
ip firewall filter add chain=input protocol=icmp action=accept

# povolení SSH
ip firewall filter add chain=input protocol=tcp ports=22 action=accept

# zakázání veškeré ostatní komunikace s routerem
ip firewall filter add chain=input action=drop

Postup, kterým jsou jednotlivé pakety zpracovávány se nazývá packet-flow a na různých firewallech se může lišit. Obecně lze ale pozorovat následující packet-flow. packet-flow

Parametr action lze nastavit na accept, drop, reject, log a další. Navíc lze upřesňovat jednotlivé atributy paketu tcp-flags, src-mac-address, out-interface, in-intrface a řadu dalších.

Následující příklad ukazuje možné zabezpečení routeru.

# povolení navázání spojení
ip firewall filter add action=accept chain=input connection-state=established,related

# povolení přístupu k routeru z venkovní sítě
ip firewall filter add action=accept chain=input src-address-list=povolene_ip

# povolení přístupu k routeru z vnitřní sítě
ip firewall filter add chain=input src-address=192.168.1.0/24 action=accept in-interface=!ether1

# povolení ping
ip firewall filter add action=accept chain=input protocol=icmp

# zakázání ostatní komunikace
ip firewall filter add action=drop chain=input

# určení IP adres pro přístu k routeru
ip firewall address-list add address=192.168.88.2-192.168.88.254 list=povolene_ip

Tunelování (předávání portů) skrze NAT.

# předání z portu 1234 na port 22.
ip firewall nat add chain=dstnat dst-port=1234 action=dst-nat protocol=tcp to-addresses=192.168.1.100 to-ports=22

Zadání (cvičení 10)

  1. úkol 1

    Nakonfigurujte firewall na routeru R1 tak, aby přijímal ping pouze z jedné jediné MAC adresy.

  2. úkol 2

    Nakonfigurujte firewall PC1:

    • tak aby odmítal (reject) ping (protokol icmp) na rozhraní enp0s3
    • tak aby zahazoval (drop) ping (protokol icmp) na rozhraní enp0s3

    Pomocí nástroje Wireshark zachyťte odpovědi v obou případech a určete v čem se liší.

  3. úkol 3

    Vytvořte kopii virtuálního stroje router.ova (R3) a dvě kopie virtuálního stroje linux.ova (PC1 a PC2). Stroje propojte dle obrázku níže.

    Zadání cvičení 7, ukol 2

    PC1 připojte do venkovní (internetové) sítě 10.10.0.0/16 a PC2 do lokální (intranetové) sítě 192.168.88.0/24. Ve výchozí konfifuraci by měl být funkčí ping z PC1 na PC2 a naopak. Nakonfigurujte router tak, aby

    • sítě byly oddělené, tedy PC2 může provést ping na PC1, obrácěně nikoliv;
    • jakmile budou sítě oddělené, zprovozněte přístup k PC2 skrze ip adresu routeru a port 1234. Funkcionalitu ověřte příkazem ssh 10.10.0.1 -p 1234

    Nápověda. Pro splnění prvího bodu je třeba zajistit, aby uzel ve venkovní síti neviděl IP adresy vnitřní sítě (ani vnitřní rozhraní routeru). Rovněž je nutné, aby všechna spojení začínala ve vnitřní síti (connection-state=new) a byl povolen provoz, který s nimi souvisí (connection-state=established,related). Pro splnění druhého bodu je třeba předat port 1234 na port 22 (SSH). Takto předaná komunikace může být identifikována pomocí parametru connection-nat-state.