Jeśli nie odpowiadają nam graficzne narzędzia (np. firestarter) do konfiguracji filtra pakietów, możemy za pomocą kilku regułek iptables stworzyć prostą, ale skuteczną zaporę. 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 kilkoma przykładowymi 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

# 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.

The Right Way™ of PLD

Modyfikacja skryptów startowych jest pewną ingerencją w sumy kontrolne RPM, powodującą, że takowy plik niezmieniony jest zamieniany na nową wersję, np. powodującą prawidłowe skonfigurowanie jakiejś nowej opcji, podczas gdyż na zmodyfikowanych plikach przy aktualizacji pakietów są generowane pliki *.rpmnew, co nieraz jest przyczyną nowych postów na forum/liście dyskusyjnej przez zdezorientowanych użytkowników.

Jeżeli jesteś zwolennikiem metod nazywanych 'koszernymi', to zamiast każdorazowego wykonywania skryptu konfigurującego przy starcie systemu, należy zainstalować dodatkowo pakiet iptables-init :

# poldek -i iptables-init

Następnie ustanawiasz wszystkie potrzebne reguły iptables, bądź bezpośrednio z linii poleceń, lub wykonując swój ulubiony skrypt. Teraz wykonujesz zrzut obecnie obowiązujących reguł iptables:

# service iptables save

Przywrócenie zapisanych reguł (np. po eksperymentach) :

# service iptables start

Porzucenie tych reguł :

# service iptables stop

I to tyle… Przy każdym restarcie systemu będą przywracane te reguły z pliku /etc/sysconfig/iptables zależnie od tego jak mamy skonfigurowany start/stop w odpowiednich runlevel-ach SysV. Domyślnie po instalacji w 3-im i 5-tym jest na start, jak w wiekszości usług dostępnych „spod poldka”.

Dopisał : Daniel Dawid Majewski 10 lutego 2008r. o godz. 22:20

pl/przewodniki/prosty-firewall-dla-stacji-roboczej.txt · ostatnio zmienione: 2008/10/31 00:23 przez 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