Nastavení firewallu shorewall pro IPv6

Před několika dny jsem popsal konfiguraci IPv6 na Scientific Linuxu. Zprovozněním IP adresy to ale nekončí, je potřeba přístup na server zabezpečit, firewallem, stejně jako na IPv4. Osobně používám pro konfiguraci firewallu balík shorewall, konfigurace v článku bude pro něj.

Trocha teorie

Nejprve něco málo o ICMP packetech, určitě je znáte, posílá je třeba utilita „ping“. U IPv4 protokolu, je možné jej komplet zablokovat, bez většího dopadu na funkčnost sítě, i když by se to dělat nemělo. Ne tak u IPv6, kde když ICMP zablokujete, tak se o Vás nedozví Váš místní router a nepošle Vám žádná data. Není ale vhodné povolit celý ICMP protokol, některé informace, které může poskytnout nepotřebuje nikdo cizí vědět. Naštěstí shorewall6 automaticky nastavuje všechna potřebná ICMP a ostatní standardně zahazuje. Zvláštní povolení potřebují jen dvojice ping-pong (Echo Request a Echo Reply), které povolíme zvlášť.

Konfigurace shorewall6 je velmi podobná shorewallu, až na několik výjimek. Z těch nejpodstatnějších bych zmínil neexistenci NATu (ale ten aktuálně neexistuje ani v protokolu) a ipv6 místo ipv4 v popisu zóny. Jinak je konfigurace, až na IP adresy v podstatě totožná.

Praxe

Firewall nastavuji na jeden server. Dovnitř povoluji přístup jen na běžící služby, kde je to potřeba, ven povoluji vše. Verze shorewall6 je 4.5.4, ip6tables 1.4.7, distribuce Scientific Linux 6.2. Zkontrolujte v /etc/shorewall/shorewall.conf povolení IPv6.

DISABLE_IPV6=No

Další konfigurace už se odehrává v /etc/shorewall6/. Ve standardní konfiguraci je v tomto adresáři zbytečně moc souborů, promažte jej tak, aby zbyly jen tyto soubory:

# ls -1
interfaces
Makefile
policy
rules
shorewall6.conf
zones

Pokud by jste potřebovali později některý ze smazaných souborů, najdete je v /usr/share/shorewall6/configfiles/.

Následující soubory jsou všechny v adresáří /etc/shorewall6/. Vždy uvedu jméno souboru a řádky potřebné k nastavení. Jako síťový interface uvedu eth0, je na Vás dodat si správný interface Vašeho serveru.

shorewall6.conf – povolíme start shorewall6

STARTUP_ENABLED=Yes

zones nadefinujeme 2 zóny, fw je firewall, tedy samotný server, net je internet

fw    firewall
net   ipv6

interfaces – propojíme internet se síťovým rozhraním, aby shorewall věděl kam má umístit pravidla. Tcpflags příznak nastaví zahazování packetů, které mají „nemožnou“ kombinaci TCP příznaků. Takové packety by se na síti neměly vůbec objevit, není proto problém je rovnou zahodit.

net     eth0   tcpflags

policy – nastavíme výchozí politiku pro pravidla firewallu na zahazování všeho co míří na server a povolení všeho co míří ze serveru ven. Parametr info je nepovinný, zajistí zalogování každého zahozeného packetu. Tato konfigurace není tak bezpečná, jako kdybychom pro odchozí pakety nastavili DROP a povolili přístup ven jen tam, kde je to potřeba, ale na ukázku to stačí.

$FW     net     ACCEPT
net     $FW     DROP    info
# The FOLLOWING POLICY MUST BE LAST
all     all     DROP    info

rules – povolíme provoz na serveru pro aplikace, které jej potřebují. Povoluji:

  • přístup na ssh na server (přístup ze serveru je povolen díky policy)
  • DNS dotazy na nameservery
  • ping serveru zvenčí
SECTION NEW
# ssh
SSH(ACCEPT)     net     $FW

# PING
ACCEPT  net     $FW     ipv6-icmp       128
ACCEPT  net     $FW     ipv6-icmp       129

Poslední věc, která zbývá je aktivovat firewall a zajistit jeho spouštění po startu serveru:

shorewall6 start
chkconfig shorewall6 on

Toto je základní konfigurace, máte-li na serveru například webserver, musíte si povolit i přístupy  na port 80 a 443, ale to už je stejné, jako v konfiguraci shorewall.

Komentování je uzavřeno.