DNS
Nyní však musíme na chvilku odbočit od Shorewallu a vyřešit jeden drobný problém - překlad jmenných adres na IP adresy. Samozřejmě by bylo možné zadat na všech stanicích i na routeru DNS přidělené providerem, bylo by to ale nepraktické, protože pokud by došlo například ke změně poskytovatele připojení, bylo by nutné na všech počítačích tyto údaje měnit. Rovněž hlavně v případě pomalejšího připojení dotazy na externí DNS citelně prodlužují dobu načítání www stránek. Proto je velmi výhodné zprovoznit vlastní cache DNS server. Zejména u pomalých připojení s nízkou latencí (ADSL, EDGE/CDMA...) je možné zvýšit odezvu na DNS dotazy.
Pro tyto účely nám dokonale poslouží bind, jehož balíček je obsažen snad v každé distribuci. V případě Mandrakelinuxu jej nainstalujeme pomocí:
# urpmi caching nameserver
Tím se nainstaluje balíček bind + konfigurační soubory nastavené pro provoz kešovacího nameserveru. V konfiguračním souboru /etc/named.conf uděláme jedinou drobnou změnu, v sekci options doplníme:
forward first; forwarders { 62.129.50.20; 62.129.32.100; };
Parametr forward first řekne bindu, že má v první řadě o překlad adresy požádat nameservery, které jsou uvedeny v parametru forwarders (zde samozřejmě zadáte IP adresy DNS, které vám přidělil váš poskytovatel připojení). Pokud mu tyto DNS neposkytnou odpověď, provede bind dotaz na kořenové servery. Tuto změnu jsme provedli proto, aby každý první dotaz nemusel směřovat příliš daleko do internetu a rovněž proto, abychom zbytečně nezatěžovali kořenové servery. Pokud změníme providera, jednoduše změníme IP adresy DNS serverů v /etc/named.conf.
Dále ještě změníme soubor /etc/resolv.conf, kde zakomentujeme původní nameservery a zadáme:
nameserver 127.0.0.1
takže od této chvíle se náš systém bude dožadovat překladu adres lokálního nameserveru. Nastavíme spouštění služby named po startu systému a named spustíme:
# /etc/init.d/named start
Nyní opět vyzkoušíme pomocí příkazu ping, zda bind funguje:
# ping www.seznam.cz
Pokud obdržíme odpověď, konfigurace a spuštění bindu proběhlo úspěšně.
Zbývá nastavit všem stanicím v lokální síti adresu brány a adresu DNS, což bude v obou případech IP adresa našeho počítače se Shorewallem a bindem, tedy 192.168.1.1. S tímto nastavením budou stanice připojeny do internetu a mohou připojení okamžitě začít používat.
DHCP
Abychom nemuseli zadávat IP adresy ručně, můžeme použít DHCP. Je to výhodné hlavně ve větší síti, kde by ruční přidělování IP adres bylo příliš pracné. Také v situaci, kdy se do sítě často připojují uživatelé s notebooky a my jim potřebujeme přidělit IP adresu, adresu brány a DNS, se může DHCP docela hodit. Pokud tedy máme nainstalován DHCP server, například pomocí obligátního mandrakovského urpmi dhcp-server, upravíme konfigurační soubor /etc/dhcpd.conf.
# IP adresa naší brány option routers 192.168.1.1; # DNS, které chceme přidělovat option domain-name-servers 192.168.1.1; # maska, kterou chceme přidělovat option subnet-mask 255.255.255.0; # adresa broadcastu option broadcast-address 192.168.1.255; # dynamic dns nechceme použít ddns-update-style none; # rozmezí, ze kterého chceme přidělovat adresy subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; # jak dlouho se má přidělená adresa rezervovat default-lease-time 21600; max-lease-time 43200; } # pokud chceme některým MAC adresám přidělit # vždy stejnou IP adresu, zadáme ji zde: host pocitac1 { hardware ethernet 00:08:18:04:86:FC; fixed-address 192.168.1.200; }
Stačí dhcpd spustit a na stanicích v síti nastavit, aby si nastavení vyžadovaly od DHCP serveru 192.168.1.1. Nezapomeňte v souboru /etc/shorewall/interfaces nastavit u lokálního rozhraní parametr dhcp a samozřejmě nastavit spouštění DHCP serveru po startu systému.
Ve většině případů lze v konfiguračních souborech použít namísto IP adresy MAC adresu síťového rozhraní, které bude k firewallu přistupovat. To je výhodné v případě, že používáte přidělování adres pomocí DHCP, takže počítače v síti mají pokaždé jinou IP adresu.
Další možnosti Shorewallu
Nechat Shorewall pouze filtrovat a předávat pakety, na to by ho byla škoda. Umí toho totiž mnohem více. První věcí, kterou zmíním, je optimalizace propustnosti dat, což oceníme hlavně v případě pomalé nebo hodně vytížené linky. Pomocí souboru /etc/shorewall/tos můžeme - například pokud je pro naši síť prioritní rychlost surfování po www stránkách - upřednostnit protokol http. To uděláme pomocí pravidla:
all all tcp http - 8 all all tcp - http 8
To, jakým způsobem se má s pakety zacházet, rozhoduje číselná hodnota na konci. Máme na výběr z následujících možností:
- 16 - minimalizace zpoždění (vhodné např. pro SSH);
- 8 - maximalizace propustnosti (např. FTP);
- 4 - maximalizace spolehlivosti;
- 2 - minimalizace nákladů na spojení;
- 0 - normální stav.
Dalším velice zajímavým souborem je /etc/shorewall/hosts, který použijeme v případě, že náš router má zprostředkovávat komunikaci mezi počítači, které se nacházejí v jiných IP rozsazích. Dejme tomu, že máme další síťovou kartu eth2, na které je připojena síť v rozsahu 10.0.0.0 a je zařazena do zóny loc2. Potřebujeme, aby se počítače z rozsahu 192.168.1.0 dostaly i do druhé sítě 10.0.0.0. Není nic jednoduššího, než v tomto souboru nastavit:
loc eth2:10.0.0.0/24
Případně navíc přidat
loc2 eth0:192.168.1.0/24
pokud chceme umožnit vzájemný přístup všem počítačům v obou rozsazích. Můžeme použít i jednodušší zápis:
eth0:eth2
Velmi užitečný je soubor /etc/shorewall/blacklist, který slouží - jak vyplývá z názvu - k vytváření černé listiny. Dejme tomu, že na IP adrese 192.168.1.5 máme neukázněného uživatele, který i přes opakované upozornění přetěžuje linku stahováním dat z FTP serverů. Takže přidáme pravidlo:
192.168.1.5 tcp 21
a z této IP adresy se už na FTP jednoduše nikdo nepřipojí. Výhodou je, že všechny ostatní služby zůstanou přístupné. Aby Shorewall věděl, že má blacklist používat, je třeba v souboru /etc/shorewall/interfaces uvést u rozhraní, které chceme pomocí blacklistu kontrolovat, volbu blacklist. Samotnou akci, která má být provedena (výchozí je DROP), lze nastavit v souboru /etc/shorewall/shorewall.conf v parametru BLACKLIST_DISPOSITION.
Ostatní konfigurační soubory
Zde uvádím stručný popis ostatních konfiguračních souborů. Detailní popis naleznete v dokumentaci nebo na stránkách projektu.
- /etc/shorewall/accounting - nastavení počítání paketů;
- /etc/shorewall/actions - vytváření vlastních akcí typu ACCEPT, DROP pomocí iptables;
- /etc/shorewall/ecn - seznam cílů, pro které chceme vypnout ECN (Explicit Congestion Notification);
- /etc/shorewall/init - příkazy, které se mají vykonat před spuštěním Shorewallu;
- /etc/shorewall/initdone - příkazy, které se mají vykonat během spouštění Shorewallu;
- /etc/shorewall/maclist - seznam MAC adres. Pokud zadáte i IP adresu, musí MAC a IP adresa souhlasit, jinak budou pakety zamítnuty;
- /etc/shorewall/modules - seznam modulů, které se zavedou při spuštění Shorewallu;
- /etc/shorewall/nat - pokud vám nestačí obyčejný IP forwarding a potřebujete nastavit vlastní pravidla pro předávání paketů, použijte tento soubor;
- /etc/shorewall/netmap - slouží k mapování adres v jedné síti a odpovídajících adres v síti druhé. Je třeba, aby vaše jádro a iptables podporovaly NETMAP;
- /etc/shorewall/params - sem patří všechny doplňující parametry Shorewallu;
- /etc/shorewall/proxyarp - soubor pro definování proxy ARP;
- /etc/shorewall/start - příkazy, které se mají vykonat po spuštění Shorewallu;
- /etc/shorewall/stop - příkazy, které se mají vykonat před zastavením Shorewallu;
- /etc/shorewall/stopped - příkazy, které se mají vykonat po zastavení Shorewallu;
- /etc/shorewall/tcrules - pravidla pro traffic control. Je třeba v /etc/shorewall/shorewall.conf nastavit TC_ENABLED=Yes;
- /etc/shorewall/tunnels - pomocí tohoto souboru se definují IPSEC, GRE, IPIP a OpenVPN tunely.
Vzhledem k tomu, že přednastavená pravidla Shorewallu mohou povolit určité porty, které mít otevřené nechceme, doporučuji na konci konfiguračního souboru /etc/shorewall/rules nastavit zahazování (DROP) všech paketů mimo těch, které jsme v předchozích pravidlech povolili (ACCEPT).