Firewall z maskaradą dla prawdziwych nowicjuszy

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)
Kontakt:

Firewall z maskaradą dla prawdziwych nowicjuszy

Post autor: bojleros » 2006-08-29, 15:15

Firewall z maskaradą dla prawdziwych nowicjuszy.

Spis treści:
  • A.Wprowadzenie.
    • 1. Założenia.
      2.Co wypada wiedzieć/umieć/przeczytać ?
    B.No to do dzieła !
    • 1. Krótki komentarz odautorski do skryptu.
      2. Skrypt.
      3.Uruchomienie.
    C.Wskazówki!
    • 1. Skrypt.
      2. Przekazywanie pakietów a działanie internetu na komputerach za natem.
    D.Posłowie


A. Wprowadzenie.


1.Założenia.

Prezentowany opis tematu ma ułatwić konstrukcję własnych firewalli dla osób początkujących ze szczególnym uwzględnieniem posiadaczy popularnej i taniej neostrady. Mając na uwadze fakt, że sporej liczbie tych osób nie zależy na zbytnim zagłębianiu się w temat, opracowanie ograniczy się do zagadnień uważanych za podstawowe tak w dziedzinie przekazywania pakietów jak i filtrowania ruchu przychodzącego do procesów lokalnych. Dodatkowym założeniem skryptu jest jego forma, która ma utrudnić dzikie kopiowanie skryptu bez zastanowienia (i nawet czytania) dlatego poszczególne części kodu skryptu pisane są w różnych znacznikach code.

2.Co wypada wiedzieć/umieć/przeczytać ?

a) konieczna jest umiejętność pracy w konsoli oraz opanowanie jakiegoś edytora tekstowego (proponuję mcedit)
b) wypada mieć pojęcie o protokole ip , wiedzieć jakie sie ma interfejsy , gdzie mamy jaką sieć itp
c) wypada oswoić się z http://www.docum.org/docum.org/kptd/
d) naprawdę warto przeczytać interesujące dokumenty zamieszczone na http://netfilter.org/documentation/inde ... tation-faq
e) skoro już czytasz ten dokument to chyba nie muszę wspominać o korzystaniu z „faq” i „propozycji do faq” oraz pytaniu Wujka http://google.pl :)

Oczywiście realizacja wymienionych tu kroków zależy od naszego zaangażowania i tego co chcemy w osiągnąć.


B. No to do dzieła !

1. Krótki komentarz odautorski do skryptu.

a) zakładam że masz odpowiednie moduły załadowane. Prawdopodobnie jako użytkownik początkujący masz standardowy kernel slackware dlatego załaduj te moduły:

Kod: Zaznacz cały

#!/bin/bash
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ip_nat_ftp
modprobe ip_nat_irc

modprobe ip_tables
modprobe ipt_MASQUERADE
modprobe ip_state
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
Wszelkie wpisy odnośnie modułów robimy w /etc/rc.d/rc.modules jakkolwiek moduły te mogą zostać załadowane przez autoloader w wyniku wywołania iptables.


b) jak wspomniałem skrypt jest dedykowany dla łącza typu neostrada czyli łącza ze zmiennym ip dlatego uczulam :

- po rozłączeniu się neostrady zawsze warto przeładować skrypt firewalla (ja to robiłem zawsze integrując z rp-pppoe)
- opisuję tylko cel MASQUERADE jednak należy pamiętać o istnieniu SNAT !

2. Skrypt

a) należy całkowicie usunąć pozostałości po starym skrypcie gdy takowy był. Gdy już nie mamy żadnego innego skryptu z firewallem (patrz zawartość rc.masq , rc.local , rc.firewall) to tworzymy plik w którym będzie on sobie siedział :

Kod: Zaznacz cały

 touch /etc/rc.d/rc.firewall
i ustawmy mu odpowiednie prawa:

Kod: Zaznacz cały

 chmod 700 /etc/rc.d/rc.firewall

b) edytujemy skrypt w ulubionym edytorze (od tej pory zawartość pól "kod" jest zawartością naszego pliku /etc/rc.d/rc.firewall )


c) pora przygotować skrypt i zafundować czyszczenie poprzednich ustawień iptables

Kod: Zaznacz cały

#!/bin/bash
iptables -F                                                                     
iptables -F -t nat                                                              
iptables -X -t nat                                                              
iptables -F -t mangle                                                          
iptables -X -t mangle                                                          
iptables -F -t filter                                                           
iptables -X -t filter
d) uruchomienie odpowiednich mechanizmów w jądrze systemu. Opis z zachowaniem kolejności :
- ochrona przed atakami syn-flood
- włączenie przekazywania pakietów pomiędzy interfejsami

Kod: Zaznacz cały

echo "1" > /proc/sys/net/ipv4/tcp_syncookies                                      
echo "1" > /proc/sys/net/ipv4/ip_forward
e) ustawienie domyślnych akcji dla pakietów w danych łańcuchach

Kod: Zaznacz cały

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
f) zabieramy się za ruch przeznaczony tylko dla naszego routera (a nie dla komputerów za maskaradą!!! -> patch kptd !). Pierwsze -> odblokowanie loopbacku - urządzenia specjalnego.

Kod: Zaznacz cały

iptables -A INPUT -i lo -j ACCEPT
g) korzystamy z dobrodziejstw śledzenia połączeń pozwalając na połączenia nawiązane i powiązane z innymi

Kod: Zaznacz cały

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
h) OPCJONALNE (patrz punkt "i") . Tworzę nowy łańcuch który uprości regułki pozwalające na dostęp. Należy tutaj zwrócić uwagę na ważną prawidłowość iptables: pakiet wpada do pierwszej regułki do której pasuje potem w zależności od celu (tego po -j) albo wędruje dalej przez firewall albo nie. Cele ACCEPT i DROP powodują zakończenie wędrówki pakietu przez firewall lecz są cele które tego nie robią.

Kod: Zaznacz cały

iptables -N SPRAWDZ
iptables -A SPRAWDZ -m state --state NEW -j ACCEPT
iptables -A SPRAWDZ -j DROP
i) OPCJONALNE(wymaga pkt "h"). Powiedzmy że mam serwer ftp (tylko dla sieci lokalnej podłączonej do eth0 ) i www które chce uczynić ogólnodostępnymi. Znając port na którym nasłuchuje dana usługa i protokół można dodać własne ustawienia (-p tcp - protokół , --dport - port docelowy)

Kod: Zaznacz cały

iptables -A INPUT -p tcp --dport 21 -i eth0  -j SPRAWDZ
iptables -A INPUT -p tcp --dport 80 -j SPRAWDZ
j) WAŻNE!!! Gdy pracujemy na routerze poprzez ssh to najlepiej TYMCZASOWO wybrać taką opcję . Zabezpieczy ona nas przed odcięciem od serwera. WAŻNE! Opcja ma charakter tymczasowy i dla własnego dobra lepiej ograniczyć dostęp do ssh tylko do własnego ip albo do sieci lokalnej. Gdy skrypt będzie dopracowany możesz to zrobić korzystając z dwóch poprzednich podpunktów i testu "-s"

Kod: Zaznacz cały

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

k) pora zająć się przekazywaniem pakietów. Podobnie jak dla łańcucha INPUT przepuszczamy połączenia nawiązane i związane z innymi

Kod: Zaznacz cały

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
l) ze względu na specyfikę maskaradowania praktyczna możliwość inicjacji połączeń należy tylko i wyłącznie do komputerów w sieci lokalnej. WYBIERZ JEDEN ZE SPOSOBÓW :

- globalnie. Pozwalamy całej podsieci (przykładowo 192.168.0.0/24) na korzystanie z przekazywania pakietów oraz z maskaradowania na interfejsie ppp0 na którym mamy internet.

Kod: Zaznacz cały

iptables -A FORWARD -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING  -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
- indywidualnie. Pozwalamy pojedynczemu klientowi (przykładowo 192.168.0.5) na korzystanie z przekazywania pakietów i maskaradowania na interfejsie ppp0 na którym mamy internet. Wpis należy w tym wypadku zwielokrotnić dla każdego ip oddzielnie. Osobiście polecam tą politykę ponieważ łatwo ją rozszerzyć o sprawdzanie adresu mac.

Kod: Zaznacz cały

iptables -A FORWARD -s 192.168.0.5 -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.5 -o ppp0 -j MASQUERADE
ł) OPCJONALNE - PRZYKŁAD , przekierowanie portu tcp/4000 (diablo2) na komputer 192.168.0.10 ; internet na ppp0 :

Kod: Zaznacz cały

iptables -A FORWARD -p tcp --dport 4000 -d 192.168.0.10 -m state -- state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 --dport 4000 -j DNAT --to-destination 192.168.0.10:4000
m) koniec skryptu. Po ostatnim poleceniu nacisnąć enter i zostawić pusta linię na końcu pliku. 3.Uruchomienie.

Kod: Zaznacz cały

 /etc/rc.d/rc.firewall 



C. Wskazówki!

1. Skrypt

a) zachowując kolejność regułek jak w artykule i stosując się do komentarzy (także tych o opcjonalności regułek) masz pewność że firewall ruszy i będzie działał prawidłowo

b) modyfikacji dokonuj z głową pamiętając w szczególności o kolejności regułek

c) w razie problemów z działaniem własnych modyfikacji stosuj # iptables -vL NAZWA_ŁAŃCUCHA | less , pozwoli to zaobserwować gdzie wpadają pakiety a gdzie nie

d) gdy "c" nie pomaga możesz użyć celu LOG , (man iptables)

2. Przekazywanie pakietów a działanie internetu na komputerach za natem

Do poprawnego działania przekazywania pakietów i maskarady potrzeba sprawnych sieci : dostarczającej internet oraz tej lokalnej. Komputery w sieci lokalnej musza mieć oprócz poprawnego adresu i maski ustawiony dodatkowo : serwer dns oraz trasę domyślną tzw. bramę, która jest niczym innym jak tylko adresem ip naszego routera od sieci lokalnej.

Działanie maskarady w pierwszej sprawdzamy narzędziami do tego stworzonymi a nie odpalaniem klienta gg. Dopiero potem gdy mamy ping , dns działa to sprawdzamy czy stronki chodzą , ftp działa , etc...

Lista poleceń , które mogą pomóc:
  • man iptables
    iptables -vL oraz pochodne
    nmap
    ping
    arping
    arp
    ifconfig
    ip
    route
    nslookup

Jednym z problemów spotykanych na neostradzie jest sprawa MTU - maximum transmission unit. Neostrada jest typem łącza wykorzystującym w swoim działaniu tunelowanie co powoduje konieczność zmniejszenia maksymalnej jednostki transmisji. Gdy miałem neostradę to musiałem zmieniać mtu na wszystkich interfejsach serwera oraz u klientów. Robi się to względnie prosto. Na serwerze , dla każdego interfejsu, można wykonać :

Kod: Zaznacz cały

 ifconfig interfejs mtu 1412
Warto zastanowić się nad sprawdzeniem możliwości naszego oprogramowania łączącego pod kontem automatycznego ustawiania odpowiedniego mtu. Na przykład : rp-pppoe to potrafi.


Gdy idzie o konfigurację klienta windowsowego należałoby przegrzebać rejestr lecz istnieje program cmtutool.exe który ustawia mtu na zadaną wartość. Podajemy więc mtu 1412 i dalej aby uniknąć konieczności restartu wchodzimy do „Połączeń sieciowych” i wyłączamy interfejs a następnie włączamy (opcja „Napraw” nie daje rady).


D. Posłowie

Zaleca sią zapoznanie również z dokumentem Firewall (iptables) - typowe rozwiązania


Autor: bojleros
Specjalne podziękowania dla Skyscrapera.
Ostatnio zmieniony 2007-05-10, 21:11 przez bojleros, łącznie zmieniany 8 razy.

ODPOWIEDZ