Netfilter jako Ściana Ognia
Aukasz Klimek
Szczecińska Grupa Użytkowników Linuksa/Uniksa
www.SzLUUG.org
Plan wykładu
Wstęp
Rozwinięcie
Zakończenie
Podstawowe pojęcia
reguła (ang. rule) zasada postępowania z
pakietami składająca się z:
testów (ang. match), które określają, których pakietów
dotyczy dana reguła
akcji (ang. action) która ma zostać wykonana
łańcuch (ang. chain) zbiór reguł ułożonych w
określonej kolejności
tablica (ang. table) - zbiór łańcuchów
Przykładowa reguła
iptables -I INPUT -s 192.168.1.1 -j DROP -t filter
INPUT łańcuch
-s 192.168.1.1 test adres zródłowy
-j DROP akcja porzucenie pakietu
-t filter tablica filter
Składnia polecenia iptables
iptables [-t tablica] komenda [testy] [cel]
tablica: filter | nat | mangle
komenda: -I n | -A | -D | -R | -L | -F | -Z | -N |
-X | -P | -E
testy: -p | -s | -d | -i | -o | ...
cel: -j ACCEPT | -j DENY | -j REJECT | -j DROP
| -j inny_lancuch
Tablica filter
domyślna tablica, jeśli nie podamy opcji -t
używana do filtrowania pakietów
główne cele:
LOG, DROP, ACCEPT
REJECT
--reject-with icmp-net-unreachable | icmp-host-unreachable
| icmp-port-unreachable | icmp-proto-unreachable
| icmp-net-prohibited | icmp-host-prohibited
| icmp-admin-prohibited
Tablica nat
służy do definiowania zasad działania NAT
trafiają do niej tylko pakiety otwierające nowe
połączenie
specjalne cele:
SNAT Source NAT zmiana adresu zródłowego
DNAT Destanation NAT zmiana adresu celu
MASQUERADE wolniejszy SNAT; sprawdza za
każdym razem adres IP, wspiera dynamiczne IP
Tablica mangle
służy głównie do modyfikowania pakietów
specjalne cele:
TOS zmiana flag Type Of Service
TTL zmiana Time To Live czasu życia pakietu
MARK znakowanie pakietów
Droga przez mękę ;)
dest=localhost
mangle: nat:
Sieć routing
PREROUTING PREROUTING
Proces filter: mangle:
lokalny INPUT INPUT
Droga przez mękę ;)
src=localhost
Proces mangle:
nat:
routing
lokalny OUTPUT
OUTPUT
nat: mangle: filter:
POSTROUTING POSTROUTING OUTPUT
Sieć
Droga przez mękę ;)
forwarding
mangle: nat:
Sieć 1
routing
PREROUTING PREROUTING
mangle: filter: mangle:
POSTROUTING FORWARD FORWARD
nat:
Sieć 2
POSTROUTING
Dodawanie i usuwanie reguł
iptables -I INPUT -s 192.168.1.1 -j DROP -t filter
wstawienie reguły na początku łańcucha INPUT
iptables -A INPUT -s 192.168.1.1 -j DROP -t filter
wstawienie reguły na końcu łańcucha INPUT
iptables -I INPUT 5 -s 192.168.1.1 -j DROP -t filter
wstawienie reguły na pozycji piątej łańcucha INPUT
iptables -D INPUT 3
usunięcie reguły z pozycji 3 łańcucha INPUT
iptables -D INPUT -s 192.168.1.1 -j DROP -t filter
usunięcie pierwszej reguły identycznej z podaną
Wyświetlanie listy reguł
iptables -L INPUT -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 1.2.3.3 anywhere
DROP all -- 1.2.3.7 anywhere
DROP all -- 1.2.3.4 anywhere
DROP all -- 1.2.3.3 anywhere
Nie podanie nazwy łańcucha spowoduje wyświetlenie
reguł dla wszystkich łańcuchów w danej tabeli
Zastępowanie reguł
iptables -R INPUT 3 -s 127.0.0.1 -j ACCEPT -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 1.2.3.3 anywhere
DROP all -- 1.2.3.7 anywhere
ACCEPT all -- localhost anywhere
DROP all -- 1.2.3.3 anywhere
Zarządzanie łańcuchami
iptables -N nazwałańcucha -t filter
dodanie nowego łańcucha o nazwie nazwałańcucha
iptables -F nazwałańcucha -t filter
usunięcie wszystkich reguł z łańcucha nazwałańcucha
iptables -X nazwałańcucha -t filter
usunięcie łańcucha nazwałańcucha; nie może on
zawierać żadnych reguł
iptables -Z nazwałańcucha -t filter
wyzerowanie liczników dla danego łańcucha
Liczniki
każda reguła posiada licznik trafień
ilość pakietów
ilość bajtów
przykład:
iptables -I OUTPUT -d 81.210.40.2 -p icmp
zauważmy brak celu! dzięki temu zliczamy pakiety
iptables -v -L ...
Chain OUTPUT (policy ACCEPT 130 packets, 9161 bytes)
pkts bytes target prot opt in out source destination
26 2184 icmp -- * * 0.0.0.0/0 81.210.40.2
Zarządzanie łańcuchami - c.d.
iptables -P nazwałańcucha cel -t filter
ustalenie domyślnego celu dla łańcucha; łańcuch musi
być jednym z łańcuchów wbudowanych (INPUT,
FORWARD, OUTPUT, PREROUTING,
POSTROUTING), a cel to DROP lub ACCEPT
iptables -E staranazwa nowanazwa -t filter
zmiana nazwy łańcucha
Inne przydatne opcje
iptables
-n nie zamieniaj adresów IP na nazwy hostów
-v bądz głośny podawaj więcej informacji
wartości liczbowe będą podawane z przyrostkami krotności
(M,G,...) chyba, że podamy argument -x
--line-numbers pokazuj numery reguł
-c użyte przy wstawianiu ustawia liczniki na podane
wartości, np. -c 20 4000
Podstawowe testy
iptables -I łańcuch -t tablica -p protokół
wybór protokołu, którego ma dotyczyć reguła;
najczęściej używane to tcp, udp i icmp oraz ALL;
pełna lista protokołów dostępna jest w pliku
/etc/protocols
iptables -I łańcuch -t tablica -s 192.168.1.234
zródłowy adres ip pakietu którego dotyczy reguła
iptables -I łańcuch -t tablica -d 192.168.1.234
docelowy adres ip pakietu którego dotyczy reguła
Podstawowe testy(2)
iptables -I łańcuch -t tablica -i eth0
wybór interfejsu (karty sieciowej) przez który wchodzą
pakiety
iptables -I łańcuch -t tablica -o eth0
wybór interfejsu (karty sieciowej) przez który
wychodzą pakiety
Protokół TCP
--sport NNN port zródłowy pakietu
--dport NNN port docelowy pakietu
--tcp-flags SYN, ACK, FIN, RST, URG, PSH |
ALL | NONE
flagi nagłówka TCP
--syn = --tcp-flags SYN,RST,ACK SYN
oznacza pakiet nawiązujący połączenie
--tcp-option N sprawdza czy w nagłówku
ustawiona jest dana opcja
UDP i ICMP
UDP:
--sport, --dport
ICMP:
--icmp-type (patrz: iptables -p icmp -h)
modyfikator !
zanegowanie wartości znajdującej się za znakiem !
dotyczy większości testów
Przykłady
Zablokowanie wychodzących pakietów tcp
otwierających połączenie ze stroną www.wp.pl
iptables -A OUTPUT -d www.wp.pl -p tcp --dport 80 \
--syn -j DROP
wersja 2:
iptables -A OUTPUT -d www.wp.pl -p tcp --dport 80 \
--syn -j REJECT --reject-with icmp-admin-prohibited
Na czym (w praktyce) polega różnica?
Przykłady(2).
Wyłączenie odpowiadania na ping:
iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
Reguły zabezpieczające sieć lokalną
Załóżmy, że mamy 2 karty sieciowe: eth0 wyjście do
Internetu, eth1 sieć lokalna 1.2.3.0/24....
iptables -I FORWARD -s 1.2.3.0/24 -i eth1 -j ACCEPT
iptables -I FORWARD -d 1.2.3.0/24 -o eth1 -j ACCEPT
iptables -P FORWARD DROP
Przykłady - c.d.
Firewall na serwerze DNS
iptables -A INPUT -p tcp --dport ! 53 -j DROP
iptables -A INPUT -p udp --dport ! 53 -j DROP
wersja 2:
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
Bardziej skomplikowane zadanie
Stwórzmy 3 łańcuchy:
lancuch_tcp i lancuch_udp, zawierający dozwolone
porty odpowiednio dla protokołu TCP i UDP
łańcuch loguj_odrzuc, który zapisze informacje z
przechodzących przez niego pakietów do logów, a
następnie odrzuci je
Będziemy akceptować pakiety wychodzące na port
80 (tcp) i 53 (udp).
Bardziej skomplikowane zadanie(2)
iptables -N lancuch_tcp
iptables -N lancuch_udp
iptables -N loguj_odrzuc
iptables -A OUTPUT -p tcp -j lancuch_tcp
iptables -A OUTPUT -p udp -j lancuch_udp
iptables -A OUTPUT -j loguj_odrzuc
loguj_odrzuc
Logowanie pakietu:
iptables -A loguj_odrzuc -j LOG
Odrzucanie pakietu:
iptables -A loguj_odrzuc -j REJECT
lancuch_tcp, podejście 1
iptables -I lancuch_tcp -p tcp --dport ! 80 -j DROP
Efekt: pakiety wysyłane na port 80 także są odrzucane.
DLACZEGO ???
Przepływ danych przez nasze tabele
Pakiet na port 80 (tcp)
INPUT: TAK lancuch_tcp:
1. -p tcp -j lancuch_tcp 1. --dport ! 80 -j DROP
NIE
INPUT: Powrót lancuch_tcp:
2. koniec łańcucha
2. -p udp -j lancuch_udp
INPUT: loguj_odrzuc:
3. -j loguj_odrzuc 1. -j LOG
Pakiet loguj_odrzuc:
odrzucony 2. -j REJECT
SNAT i DNAT
SNAT Source Network Address Translation
technika pozwalająca na dynamiczną zamianę
adresu zródłowego w przechodzących przez daną
maszynę pakietach
DNAT Destanation Network Address
Translation technika pozwalająca na dynamiczną
zamianę adresu docelowego w przechodzących
przez daną maszynę pakietach
Prosty SNAT
SNAT może być używany do korzystania z Internetu
przez wiele maszyn z użyciem tylko 1 rzeczywistego
adresu IP.
Załóżmy, że posiadamy sieć lokalną 10.0.0.0/8 i
rzeczywisty (zewnętrzny) adres IP 1.2.3.4.
Najprostsza forma SNAT:
iptables -A POSTROUTING -t nat -s 10.0.0.0/8 \
-j SNAT --to 1.2.3.4
Pytanie: jaki teraz będzie efekt regułki:
iptables -I FORWARD -s 1.2.3.4 -j DROP
DNAT
NAT może być m.in. wykorzystane do prostego
load balancingu.
Załóżmy, że mamy klaster 2 serwerów www:
1.2.3.2 i 1.2.3.3. Z Internetem łączy je router
1.2.3.1 operujący na Linuksie. Niech
www.serwer.com wskazuje na host 1.2.3.1.
iptables -I PREROUTING -d 1.2.3.1 -p tcp \
--dport 80 -j DNAT --to 1.2.3.2 --to 1.2.3.3 -t nat
Regułka ta powoduje, że połowa żądań będzie
wysłana do serwera 1.2.3.2 a reszta do 1.2.3.3
Adres MAC
Czasem chcemy, aby użytkownicy mogli uzyskać
dostęp do Sieci tylko z określonych adresów mac
Służy to tego polecenie
iptables .... -m mac --mac 12:34:56:78:90:ab
Opcja -m pozwala skorzystać z dodatkowych, nie
uwzględnianych domyślnie, testów.
Adres MAC - przykład
Chcemy zablokować możliwość wysyłania
pakietów do użytkownika o adresie MAC
12:34:56:78:90:ab
[root@Coth: casa]# iptables -I OUTPUT -m mac \
--mac 12:34:56:78:90:ab -j DROP
iptables: Target problem
Wniosek: dopasowanie match może być używane
tylko tablicach wejściowych (PREROUTING,
INPUT, FORWARD), gdzie znany jest mac
nadawcy pakietu.
Adres MAC przykład 2
Nadajemy użytkownikom dostęp do Sieci tylko
wtedy gdy ich adres IP pasuje do adresu MAC
# iptables -A FORWARD -m mac \
--mac 12:34:56:78:90:ab -s 1.2.3.4 -j ACCEPT
...
# iptables -A FORWARD -d 1.2.3.4 -j ACCEPT
# iptables -P FORWARD DROP
Problem: dużo reguł
Jeśli mamy dużo reguł podanych na poprzedniej
stronie i duży ruch, będą one spowalniały
działanie naszej sieci. Każdy pakiet będzie
bowiem musiał przejść (w najgorszym
przypadku) przez wszystkie reguły.
Obejście podział na łańcuchy
Podział na łańcuchy
Przykład: sieć 1.2.3.0/24 dzielimy na 2 łańcuchy
# iptables -N siec1; iptables -N siec2; iptables -P FORWARD DROP
# iptables -A FORWARD -s 1.2.3.0/25 -j siec1
# iptables -A FORWARD -s 1.2.3.128/25 -j siec2
# iptables -A FORWARD -d 1.2.3.0/24 -j ACCEPT
# iptables -A siec1 -s 1.2.3.1 -m mac .... -j ACCEPT
...
# iptables -A siec1 -s 1.2.3.127 -m mac .... -j ACCEPT
# iptables -A siec1 -s 1.2.3.128 -m mac .... -j ACCEPT
...
# iptables -A siec1 -s 1.2.3.254 -m mac .... -j ACCEPT
Efekt podziału pakiet odrzucony
Oszacowanie ilości porównań
pakiet
pakiet
N reguł
3 reguły
pakiet
pakiet
odrzucony
odrzucony
Przed podziałem
Po podziale
Jaki jest inny sposób minimalizacji ilości porównań w tym przypadku?
Efekt podziału pakiet przyjęty
Przypadek najgorszy
pakiet
pakiet
N-1 reguł
1-2 reguły
pakiet
N/2 reguł
N/2 reguł
przyjęty
pakiet
przyjęty
Przed podziałem
N-1 porównań
Po podziale N/2 + ok. 1 reguły
Efekt podziału pakiet przyjęty
Przypadek średni
pakiet
pakiet
N/2 reguł
1 reguła
pakiet
N/4 reguł
N/4 reguł
przyjęty
pakiet
przyjęty
Przed podziałem
N/2 porównań
Po podziale N/4 + 1 porównań
Podział regułek - podsumowanie
Istnieje możliwość takiego skonstruowania reguł,
aby ilość porównań w najgorszym wypadku
wynosiła log2(N)
Jednak czy warto?
łańcuchy zajmują zasoby
przemieszczanie się między łańcuchami troszkę trwa
Patch-o-matic
Patch-o-matic to zbiór dodatkowych dopasowań i
celów dla iptables.
Przykład test limit:
iptables -A INPUT -p tcp --dport 80 -m limit --limit
5/min -j LOG
Przykład test multiport
iptables -A INPUT -p tcp -m multiport --dports
80,81,82 -m limit --limit 5/min -j LOG
Literatura
man 8 iptables
http://www.netfilter.org/documentation/
http://iptables-tutorial.frozentux.net/iptables-
tutorial.html
KONIEC
Dziękuję za uwagę
Wyszukiwarka
Podobne podstrony:
E marketing PoĹĽegnanie z banerem 10 2004
wrozka 10 2004
wykład psb 28 10 2014
04 28 10
Głosowanie nad nowym prawem wyborczym w czwartek (28 10 2009)
28 10 2011 expression écrit
Prawne aspekty etosu zawodowego pracownikow administracji publicznej 28 10 2015 (1)
Materiały do wykładu 4 (28 10 2011)
FM wyklad 4 28 10 2010
MN 28 10 09 Kamil Ostaszewski sprawozdanie
Analiza Wykład 4 (28 10 10) ogarnijtemat com
więcej podobnych podstron