Iptables
Iptables jest narzędziem służącym do tworzenia, usuwania i sprawdzania właściwości tabel zarządzania pakietami sieciowymi IPV4 w systemach operacyjnych typu Linux. Wywołuje się go z linii poleceń lub skryptu tylko po to, aby dodać nową regułę postępowania z pakietami, skasować lub wylistować obecne. Routing i filtracja pakietów odbywa się z poziomu jądra (kernela) systemu.
W iptables występują łańcuchy predefiniowane jak INPUT, OUTPUT, FORWARD i tabele jak filter, mangle, nat. Istnieje także możliwość definiowania łańcuchów przez użytkownika.
Spis treści |
Najczęściej wykorzystywane warunki
- -s – adres źródłowy
- -d – adres docelowych
- --sport – port źródłowy lub zakres portów (początek zakresu : koniec zakresu)
- --dport – port docelowy lub zakres portów
- -i – interfejs wejściowy
- -o – interfejs wyjściowy
- -j – akcja
- -p – protokół
- -A – dodanie reguły na końcu łańcucha
- -I – dodanie reguły na początku łańcucha
- -D – usunięcie reguły
- -R – zmiana reguły
- -P – domyślna polityka
Parametry dla łańcuchów
- -N – tworzenie nowego łańcucha
- -F – czyszczenie łańcucha
- -X – kasowanie łańcucha
- -L – przeglądanie reguł łańcucha
Akcje
Akcje definiuje się, używając parametru -j:
- ACCEPT – akceptuje pakiet.
- DROP – odrzuca pakiet bez żadnego komunikatu.
- REJECT – odrzuca pakiet i odsyła komunikat o błędzie, domyślnie ICMP port unreachable.
- MARK – oznacza pakiet za pomocą wartości numerycznej podanej w parametrze --set-mark. Operacja użyteczna w tabeli mangle. Używana zwykle w celu przekazania informacji do iproute2.
- MASQUERAD – maskuje adres nadawcy pakietu. Operacja użyteczna wyłącznie w łańcuchu POSTROUTING tabeli nat. Należy używać tylko przy dynamicznym adresie IP.
- SNAT – zmienia adres źródłowy pakietów i zapamiętuje tę zmianę dla danego połączenia. Operacja używana w celu podłączania sieci LAN do Internetu przez łącze ze stałym adresem IP. Ma sens wyłącznie w łańcuchu POSTROUTING tabeli nat. Wykorzystuje parametr --to-source, wskazujący adres IP, który należy wstawić jako adres źródłowy (przeważnie IP interfejsu internetowego).
- DNAT – zmienia adres docelowy pakietów i zapamiętuje zmianę dla danego połączenia. Operacja używana do przekazywania połączeń z interfejsu internetowego do maszyn w sieci lokalnej. Ma sens w łańcuchach PREROUTING i OUTPUT tabeli NAT. Wykorzystuje parametr --to-destination, określający adres z opcjonalnym portem docelowym (wg formatu adres:port).
- REDIRECT – przekierowuje pakiet do lokalnej maszyny, ma sens w łańcuchach PREROUTING i OUTPUT tabeli nat. Opcjonalny argument --to-ports pozwala przekierować połączenia na dowolnie wybrany port lokalnej maszyny.
- RETURN – powoduje powrót z łańcucha zdefiniowanego przez administratora do łańcucha, z którego został on wykonany.
Kolejność reguł
Pod dodaniu odpowiednich reguł, a po tym jak pojawi się jakiś pakiet, sprawdzane jest dopasowanie tego pakietu do reguł. Reguły dotyczyć mogą właściwości pakietu takich jak protokół, adres z którego pakiet został wygenerowany lub do którego pakiet zmierza, a także wielu innych. Za pomocą reguł decydujemy co zrobić z pakietem, możemy go całkowicie zignorować, przesłać dalej, przesłać zmieniając jego właściwości jak czas życia czy adres docelowy. Możemy także zarejestrować jego wystąpienie w syslogu. Reguły są sprawdzane po kolei, więc jeśli reguła tyczy się danego pakietu wykonuje się akcja tej reguły i dalsze sprawdzanie nie następuje! Jeśli reguła tyczy się czegoś innego, następuje porównanie do kolejnej reguły. Gdy pakiet nie spełnia żadnych reguł, wykonywana jest domyślna akcja (np. odrzucenie).
Przykłady
Pojedyncza reguła
iptables -A INPUT -i eth1 -s 0/0 -d 192.168.2.1 -p tcp -dport 80 -j ACCEPT
Spowoduje to dodanie reguły iptables na koniec łańcucha INPUT (ruch do urządzenia, na którym działa firewall) tabeli filter (domyślna tabela). Reguła ta akceptuje ruch tcp pochodzący z interfejsu eth1, z dowolnego adresu ip (0/0), którego celem jest port 80 (www) na komputerze o adresie 192.168.2.1.
Skrypt firewalla
1. Czyszczenie reguł
#!/bin/bash # wlaczenie w kernelu forwardowania echo 1 > /proc/sys/net/ipv4/ip_forward IPT="/sbin/iptables" #wyczyszczenie i usuniecie regul i lancuchow uzytkownika tabeli filter $IPT -F $IPT -X #wyczyszczenie i usuniecie regul i lancuchow uzytkownika tabeli nat $IPT -t nat -F $IPT -t nat -X #wyczyszczenie i usuniecie regul i lancuchow uzytkownika tabeli mangle $IPT -t mangle -F $IPT -t mangle -X #wyzerowanie licznikow $IPT -Z $IPT -t nat -Z $IPT -t mangle -Z
2. Firewall, który blokuje wszystko, poza pingami i ruchem na lo.
#konfigurowanie polityk poszczegolnych tabel $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP #przepuszczanie ruchu na interfejsie loopback $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT #przepuszczanie pakietow protukolu ICMP $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $IPT -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $IPT -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
3. Udostępnienie internetu ze stałym ip innym komputerom w sieci
$IPT -t nat -A POSTROUTING -s network/mask -o wan_int -j SNAT --to wan_ip
4. Reguły dla INPUT. 4.1. Przepuszcza pakiety w stanie ESTABLISHED i RELATED.
#INPUT $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
4.2. Dla stanu NEW przepuszczane są pakiety tylko te, które rzeczywiście są potrzebne. Jeśli zostaną przepuszczone to później będą akceptowane przez ESTABLISHED. W momencie gdy ustalone połączenie wywoła kolejne, zostanie przepuszczone przez RELATED.
$IPT -A INPUT -p tcp -m multiport --dport 20,21,22,53,80 -m state --state NEW -j ACCEPT
Pozwoli to na ruch przychodzący do maszyny na której uruchomiony jest firewall dla ftp, ssh, dns i www.
4.3. Odrzucenie pakietów w stanie INVALID.
$IPT -A INPUT -m state --state INVALID -j DROP
4.4. Logowanie odrzuconych pakietów (w celu zdiagnozowania przyczyny niedziałającej usługi).
$IPT -A INPUT -j LOG --log-prefix "DROP_INPUT " --log-tcp-options --log-ip-options --log-tcp-sequence
4.5. Dla pakietów niedopasowanych wykona się domyślna polityka (DROP) zadeklarowana wcześniej. Końcowy schemat reguł dla INPUT'a:
#INPUT $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -p tcp -m multiport --dport 20,21,22,53,80 -m state --state NEW -j ACCEPT #inne reguły $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A INPUT -j LOG --log-prefix "DROP_INPUT " --log-tcp-options --log-ip-options --log-tcp-sequence
5. Dla łańcuchów OUTPUT (ruch wychodzący z maszyny na którym jest firewall) i FORWARD (ruch poza maszyną - inne komputery w sieci) należy dodać analogiczne reguły udostępniając te porty, które rzeczywiście są potrzebne.