Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pl:przewodniki:prosty-firewall-dla-stacji-roboczej [2007/11/08 01:14]
qwiat
pl:przewodniki:prosty-firewall-dla-stacji-roboczej [2008/10/31 00:23] (current)
qwiat firestarter
Line 1: Line 1:
-Poniżej przestawię jak stworzyć ​prosty i jednocześnie skuteczny firewall oparty o **Netfilter**. Zaczynamy od instalacji programu iptables: +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: 
-<​code>​poldek -i iptables</​code>​+<​code>​poldek -i iptables</​code>​ 
  
 ====== Podstawowa wersja ====== ====== Podstawowa wersja ======
Line 16: Line 17:
 # iptables -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT</​code>​ # iptables -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT</​code>​
  
-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. ​Aby przyjrzeć się ustawionym ​regułkom wydajemy następujące polecenie:+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.
  
-<​code>#​iptables -L -v 
-Chain INPUT (policy DROP 3 packets, 4500 bytes) 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         
-    0     0 ACCEPT ​    ​all ​ --  lo     ​any ​    ​anywhere ​            ​anywhere ​           ​ 
-  107  158K ACCEPT ​    ​all ​ --  any    any     ​anywhere ​            ​anywhere ​           state RELATED,​ESTABLISHED ​ 
  
-Chain FORWARD (policy DROP 0 packets, 0 bytes) 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         
  
-Chain OUTPUT ​(policy ACCEPT 80 packets, 4358 bytes) +====== Dodatkowe regułki ​(opcjonalne======
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination</​code>​+
  
 +Opisane poniżej dodatkowe regułki możemy wykonać po podstawowych
  
-====== Dodatkowe regułki ====== 
 ==== Ident ==== ==== 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.+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 Identwięc będziemy odrzucać tego rodzaju połączenia za wysłaniem pakietu z odmową połączenia
 + 
 +<​code>#​ iptables -A INPUT -p tcp --dport 113 -j REJECT</​code>​ 
 + 
 + 
 +==== 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: 
 +<​code>#​ iptables -A INPUT -p tcp --dport ssh -j ACCEPT</​code>​ 
 +  * Dostęp do wszystkich usług z sieci lokalnej (np. 192.168.0.0/​24):​ 
 +<​code>#​ iptables -A INPUT -s 192.168.0.0/​24 -j ACCEPT</​code>​ 
 + 
 + 
 + 
 + 
 +==== 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):​ 
 + 
 +<​code>#​ iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/s -j ACCEPT</​code>​ 
 + 
 + 
 +====== 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:​ 
 +<​code>#​!/​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 
 +</​code>​ 
 + 
 +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.
  
-iptables -A INPUT -p tcp --dport 113 -j REJECT+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 : 
 +<​code>​ 
 +# poldek ​-i iptables-init 
 +</​code>​ 
 +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: 
 +<​code>​ 
 +# service iptables save 
 +</​code>​ 
 +Przywrócenie zapisanych reguł (np. po eksperymentach) : 
 +<​code>​ 
 +# service iptables start 
 +</​code>​ 
 +Porzucenie tych reguł : 
 +<​code>​ 
 +# service iptables stop 
 +</​code>​
  
 +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.1194480898.txt.gz · Last modified: 2007/11/08 01:14 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