Poniżej przestawię jak stworzyć prosty i jednocześnie skuteczny firewall oparty o Netfilter. Zaczynamy od instalacji programu iptables:

# poldek -i iptables

Podstawowa wersja

Nie da się w zasadzie napisać uniwersalnego filtra pakietów dla serwera, a tym bardziej routera, w każdym tego rodzaju zastosowaniu administrator przygotowuje zestaw reguł “szyty na miarę”. Firewalle dla stacji roboczych są dużo mniej skomplikowane, dzięki czemu można pokusić się o napisanie stosunkowo uniwersalnego zestawu regułek. Zapory dla stacji roboczych mają chronić usługi przed potencjalnymi atakami i jednocześnie pozwalać swobodne korzystanie z sieci. Dodatkowo taki filtr powinien być jak najbardziej bezobsługowy.

Oto podstawowy zestaw reguł:

# iptables -F

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Pierwszy wiersz usuwa istniejące regułki, trzy kolejne ustawiają domyślną politykę, czwarty dopuszcza ruch dla interfejsu pętli zwrotnej a ostatni wpuszcza ruch z zewnątrz pod warunkiem że był nawiązany z lokalnej maszyny. Domyślna polityka DROP powoduje, że odebrane pakiety które nie pasują do regułek będą całkowicie ignorowane. Powyższy przykład to w pełni działający firewall, dzięki temu, że Netfilter jest filtrem stanowym można było znacznie zmniejszyć liczbę koniecznych regułek.

Dodatkowe regułki (opcjonalne)

Opisane poniżej dodatkowe regułki możemy wykonać po podstawowych

Ident

Wiele usług takich jak np. FTP czy SMTP, przed rozpoczęciem sesji próbuje połączyć się z klientem za pomocą usługi Ident. Użycie filtra w najprostszej postaci (jak powyżej) zablokuje takie żądanie, co z kolei zaowocuje kilkusekundowym opóźnieniem. Nie wpływają one na poprawność komunikacji, ale są dosyć uciążliwe. Zakładam, że na Twojej maszynie nie działa Ident, więc będziemy odrzucać tego rodzaju połączenia za wysłaniem pakietu z odmową połączenia.

# iptables -A INPUT -p tcp --dport 113 -j REJECT

Dostęp do usług

Załóżmy, że chcemy by do naszego komputera był dostęp na wskazane usługi, poniżej przedstawiamy kilka przykładów:

  • Dostęp do SSH z całego świata:
# iptables -A INPUT -p tcp --dport ssh -j ACCEPT
  • Dostęp do wszystkich usług z sieci lokalnej (np. 192.168.0.0/24):
# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

ICMP echo

Naiwne poradniki bezpieczeństwa sieciowego zalecają ignorowania zapytań o ICMP ECHO (i nie tylko), prawda jest jednak taka, że technik sprawdzenia działania hosta jest całkiem sporo, a w szczególności w sieci lokalnej. Ataki DoS typu ping flood, są jednymi z najbardziej prymitywnych i najmniej skutecznych, dlatego możemy spokojnie darować sobie blokowanie pingów. Poniżej zamieściłem regułkę dopuszczającą do dwóch pakietów ICMP PING na sekundę (wersja dla bardziej paranoicznych):

# iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 2/s -j ACCEPT

Skrypt

Wydawanie kolejno tych poleceń potrafi być bardzo uciążliwe, dlatego umieścimy je w skrypcie powłoki, łącznie z podanymi regułkami dodatkowymi:

#!/bin/sh
IT=/usr/sbin/iptables

$IT -F

# polityka domyslna
$IT -P INPUT DROP
$IT -P FORWARD DROP
$IT -P OUTPUT ACCEPT

# ruch dopuszczony
$IT -A INPUT -i lo -j ACCEPT
$IT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IT -A INPUT -p tcp --dport ssh -j ACCEPT
$IT -A INPUT -s 192.168.0.0/24 -j ACCEPT

# specjalne: ident
$IT -A INPUT -p tcp --dport 113 -j REJECT

Zapisujemy kod do pliku, nadajemy mu prawo wykonania i już możemy używać skrypt.

pl/przewodniki/prosty-firewall-dla-stacji-roboczej.1194555642.txt.gz · Last modified: 2007/11/08 22:00 by qwiat
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 Powered by Lighttpd - fly light