KONFIGURACJA FILTRACJI PAKIETÓW POPRZEZ iptables


Drogi pakietów i łańcuchy przetwarzania reguł.

 


Drogi pakietów przy translacji adresów NAT.

 


Parametry polecenia iptables

Operacje na całych łańcuchach:

-N Stworzenie nowego łańcucha
-X Skasowanie pustego łańcucha
-P Zmiana polityki dla wbudowanego łańcucha
-L Wylistowanie reguł w łańcuchu
-F Wyczyszczenie łańcucha z reguł
-Z Wyzerowanie liczników w łańcuchu

Manipulowanie regułami w obrębie łańcucha:

-A Dodanie nowej reguły do łańcucha
-I Wstawienie nowej reguły na pewnej pozycji w łańcuchu
-R Zamiana reguły na pewnej pozycji w łańcuchu
-D Skasowanie reguły na pewnej pozycji w łańcuchu, lub pierwszej która pasuje

Opcje definiowania reguł
-i Interfejs wejściowy np. eth0
-o Interfejs wyjściowy np. ppp0
-s Adres źródłowy np. 192.168.1.1, 192.168.1.0/24., pc01.domena.pl
-d Adres docelowy
-p Protokół np. tcp, udp, icmp
--sport Port źródłowy np. 22, ssh
--dport Port docelowy

Reguły filtrowania
-j ACCEPT Zaakceptuj - przepuść
-j REJECT Odrzuć
-j DROP Odrzuć tak jakby pakiet nigdy nie dotarł
-j nowy Przenieś do łańcuch nowy

Aby dowiedzieć się więcej przeczytaj polskie tłumaczenia dokumentacji iptables

Przykładowa zawartość pliku konfigurującego prosty firewall i NAT.



# 
# PRZYKŁADOWY SKRYPT FIREWALLA DLA SERWERA USŁUG I ROUTERA DOSTĘPU DO SIECI
# 

# Czyscimy wszystkie reguly iptables
iptables -F
iptables -X
iptables -t nat -F

# Ustalamy domyslne reguly filtracji
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# Zezwalamy na pakiety przychodzace z zaufanych interfejsow lo i eth1 to siec lokalna
iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -i eth1 
# Zezwalamy na odbieranie pakietow z ustawiona flaga ACK 
# oznacza to odpowiedzi na zestawione przez nasz komputer polaczenia
iptables -A INPUT -j ACCEPT -p tcp --tcp-flags ACK ACK 
# Albo dokladniej obejmuje rowniez polaczenia skojarzone
iptables -A INPUT -j ACCEPT -p tcp -m state --state ESTABLISHED,RELATED 
# Zezwalamy na przychodzace odpowiedzi z serwerow DNS
iptables -A INPUT -j ACCEPT -p udp --sport 53 --dport 1024:65535

# Limit liczby nowych połaczeń
iptables -N syn_flood
iptables -A INPUT -p tcp -syn -j syn_flood
iptables -A syn_flood -m limit -limit 10/s -limit-burst 5 -j RETURN
iptables -A syn_flood -j DROP

# Limit liczby obsługiwanych ramek ICMP Uwaga: następne reguły ICMP nie mają sensu
iptables -A INPUT -p icmp -m limit -limit 2/s -limit-burst 4 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

# Zezwalamy na wybrane typy pakietów ICMP tj. ping-pong i typowe błędy sieci
for type in echo-request echo-reply destination-unreachable source-quench time-exceeded parameter-problem; do
    iptables -A INPUT -j ACCEPT -p icmp --icmp-type $type 
done

# WYJATKI FIREWALLA - zezwalamy na dostęp do działających usługi
# Zdalna praca poprzez SSH
iptables -A INPUT -j ACCEPT -p tcp --dport 22
# Zdalna autoryzacja AUTH
#iptables -A INPUT -j ACCEPT -p tcp --dport 113
# Czytanie poczty POP3 POP3S IMAP
#iptables -A INPUT -j ACCEPT -p tcp --dport 110 
iptables -A INPUT -j ACCEPT -p tcp --dport 995
#iptables -A INPUT -j ACCEPT -p tcp --dport 143
# Wysyłanie poczty SMTP
iptables -A INPUT -j ACCEPT -p tcp --dport 25
# Serwer WWW HTTP, HTTPS, PROXY
iptables -A INPUT -j ACCEPT -p tcp --dport 80
iptables -A INPUT -j ACCEPT -p tcp --dport 443
#iptables -A INPUT -j ACCEPT -p tcp --dport 8080
# FTP ale tylko w trybie pasywnym
iptables -A INPUT -j ACCEPT -p tcp --dport 21
# Przykład innej niestandardowej usługi na porcie 1000
iptables -A INPUT -j ACCEPT -p tcp --dport 1000
#iptables -A INPUT -j ACCEPT -p tcp --dport 10000

# Udostepniamy internet dla sieci lokalnej poprzez SNAT
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/16 -j SNAT --to 80.50.200.1
#iptables -t nat -A POSTROUTING -o ppp0 -s 10.8.0.0/16 -j MASQUARADE
# Włączamy routing pakietów
echo "1" > /proc/sys/net/ipv4/ip_forward

# Zmuszamy użytkowników sieci lokalnej do korzystania z naszego TRANSPARENT PROXY
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3128 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j REDIRECT --to-port 8080

# Przepuszczamy odwołania do wybranych komputerów w sieci lokalnej PORT FORWARDING
iptables -A PREROUTING -t nat -p tcp -d gd.domena.pl --dport 10080 -j DNAT --to 10.8.1.148:80
iptables -A PREROUTING -t nat -p tcp -d gd.domena.pl --dport 10021 -j DNAT --to 10.8.1.147:21
iptables -A PREROUTING -t nat -p tcp -d gd.domena.pl --dport 5900 -j DNAT --to 10.8.1.169
iptables -A PREROUTING -t nat -p tcp -d gd.domena.pl --dport 3389 -j DNAT --to 10.8.1.170:3389