Firewall

Adam Saleh,učo 386774, adamthecamper at gmail dot com

Obsah

Úvod

Firewall je tá casť sieťového zariadenia,ktorého hlavným poslaním má byť blokovanie filtrovanie nežiadúcej komunikácie od žiadúcej ktorá cezeň prechádza. Ak má zariadenie operačný systém, býva firewall často jeho súčasťou.Firewall väčšinou robí toto filtrovanie pomocou sledovania jednotlivých packetov sieťovej vrstvy. Tento druh firewall-u sa nazýva paket-filter.

Typ firewallov

stateless firewall
Každý paket skontroluje zvlášť (bez ohľadu na ostatné pakety) a podľa kritérií ho pustí ďalej
statefull firewall
Udržuje si prehľad o všetkých príchodzích paketoch, čo umožňuje oveľa presnejšie pravidlá
Okrem packet-filtrov sú možné aj iné prístupy ku kontrole sieťovej komunikácie:
aplikačná proxy
aplikácia, ktorá sa zvonku tvári ako samotný aplikačný server, ale v skutočnosti len kontroluje príchodzie dáta a preposiela ich na skutočný aplikačný server. Medzi ne napríklad patrí http proxy Squid.
Intrusion Detection/Prevention System
aplikácia ktorá analyzuje sieťovú prevádzku a snaží sa zistiť, či neprebieha nejaký druh útoku. Keď zistí prebiehajúci útok, reaguje podľa nastavaní.Medzi IDS napríklad patrí Snort.

netfilter a iptables

Linux obsahuje firewall už od verzie 1.1, vo verzii 2.4 však prešiel kompletným prepisom. Odvtedy sa jeho architektúra v podstate nemení. Ide o statefull packet filter, pričom net-filter je framework call-backov v jadre naviazaných na sieťové interfacy ktoré môžu využívať ostatné kernel moduly. Netfilter potom ako svoj backend používa kernel modul ip_tables. Iptables je tiež názov administrátorského programu, ktorý slúži na nastavovanie packet-filterovacích pravidiel.

Ip_tables fungujú na princípe niekoľkých tabuliek ktoré obsahujú takzvané tzv. chain-rules. Každé pravidlo, ktoré je súčasťou reťaze musí obsahovať skok -j TARGET. TARGET môže byť buď ďalšia reťaz v tabuľke, alebo jedna zo špeciálnych hodnôt:

ACCEPT
packet bude prijatý
DROP
packet je odmietnutý
QUEUE
packet je posunutý na spracovanie daemonom v user-space
RETURN
vyhodnocovanie sa vráti z momentálne spracovávanej reťaze na predchádzajúcu
Ak sa pravidlo na packet neuplatní,pokračuje sa s ďalším pravidlom v reťazi. Tabulky sú tieto (prevzaté z man-page a odinakiaľ):

filter
Predvolená tabulka, obsahuje tri vstavané reťaze:
input
pre packety,ktoré sú určené na doručenie na stroj
output
pre packety,ktoré sú vytvárané na stroji
forward
pre packety,ktoré sú routované cez stroj
nat
Network Address Translation tabulka, ktorá umožňuje zmeniť ip-addresu packetu. Má tri reťaze pravidiel:
prerouting
zmení ip pred routovaním packetu
output
zaoberá sa odchádzajúcimi packetmi
postrouting
zmení ip po routovaní packetu
mangle
Obsahuje pravidlá na zmeny iných informácií v packete. Má tieto reťaze pravidiel:
prerouting
zaoberá sa packetom pred routovaním
input
zaoberá sa odchádzajúcimi packetmi
forward
zaoberá sa routovanými packetmi
output
zaoberá sa odchádzajúcimi packetmi
postrouting
zaoberá sa packetom po routovaní
raw
prvá aplikovaná tabuľka, vie packet zaradiť medzi nesledované pomocou targetu NOTRACK.

Na wikipedii je pekný graf popisujúci náväznozť jednotlivých tabuliek (v ip_tables je v network layer)

Na samotné editovanie tabuliek a reťazí slúži príkaz iptables, ktorý sa píše vo formáte iptables -t [tabulka] [prikaz] ... . Možné príkazy sú:

  -t tabuľka # tabuľka, ktorá sa má použiť
  -A reťaz pravidlo # pridá pravidlo na koniec reťaze
  -I reťaz [poradie] pravidlo #vloží pravidlo
  -D reťaz poradie  #vymaže pravidlo
  -L [reťaz] #vypíše pravidlá
  -F [reťaz] #vymaže všetky pravidlá
  -N reťaz #definuje reťaz
  -X [reťaz] #zruší reťaz
  -P reťaz cieľ #nastaví default cieľ
Dôležité pravidlá:
  -p [!] protokol #protokol sieťovej vrsty:tcp,udp ...
  -s [!] adresa/maska #zdrojová IP adresa
  --sport port #len tcp,zdrojový port  
  -d [!] adresa/maska #cieľová IP adresa
  --dport port #len tcp,cieľový port
  -i [!] interface #vstupný interface
  -o [!] interface #výstupný interface
   
  -j TARGET #cieľ pravidla
Pravidiel je samozrejme oveľa viac, Na ďalšie pravidlá odporúčam pozrieť manuálovú stránku. Pre samotné filtrovanie je samozrejme najdôležitejšia tabuľka FILTER, táto je aj v iptable nastavená ako predvolená. Príklad použitia, kde zakážeme všetku komunikáciu a potom povolíme len ssh prístup z rovnakej siete a http od hocikiaľ:
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

NAT

Pre potrebu prekladu adries sa používa NAT. Sú dva hlavné prípady, pre použitie NAT-u, jedným je klient vo vnútornej sieti (napríklad v domácnosti pri zdielanom internetovom pripojení).Druhým je server vo vnútornej sieti, ktorého službu ale chceme publikovať aj do vonkajšej siete. V iptable tabuľka nat sa nezaoberá kontrolou packetov, preto je pri nastavovaní preposielania dobré premýšlať aj nad forward pravidlami v tabuľke filter. Pomocou nat tabuľky sa dá nastaviť aj port-forwarding.

Príklad source nat, kde sa mení zdrojová ip-addresa:

## Zmeň zdrojové adresy paketov prichádzajúcich z ethO na 1.2.3.4
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
Príklad destination nat,kde sa mení cieľová adresa:
## Zmeň cielové adresy paketov prichádzajúcich na port 80 na 5.6.7.8, port 8080. Tu ide o portforwarding.
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 5.6.7.8:8080

Literatura