środa, 2 stycznia 2013

Bezpieczeństwo systemu GNU/Linux - Iptables cz.2

Iptables jest zbiorem reguł sterujących filtrem systemu, który decyduje jakie pakiety powinny mieć możliwość wejścia oraz wyjścia a które nie. Mówiąc prościej jak niesfornemu użytkownikowi wyłączyć dostęp do programów p2p. Domyślnie w systemie GNU/Linux iptables już się znajduje, może występować w 2 lokalizacjach: /usr/sbin/iptables  lub /sbin/iptables, można je edytować będąc zalogowanym jako root.



1) Składnia iptables:

Dodawanie nowej reguły na końcu łańcucha (obydwie reguły mają te same znaczenia):

iptables [-t TABELA] -A ŁAŃCUCH WŁAŚCIWOŚCI_REGUŁY [OPCJE]
iptables [-t TABELA] --append ŁAŃCUCH WŁAŚCIWOŚCI_REGUŁY [OPCJE]


Usuwanie reguły:



iptables [-t TABELA] -D ŁAŃCUCH WŁAŚCIWOŚCI_REGUŁY [OPCJE]
iptables [-t TABELA] --delete ŁAŃCUCH WŁAŚCIWOŚCI_REGUŁY [OPCJE]

oraz


iptables [-t TABELA] -D ŁAŃCUCH NUMER_REGUŁY [OPCJE]
iptables [-t TABELA] --delete ŁAŃCUCH NUMER_REGUŁY [OPCJE]

Dodanie nowej reguły wewnątrz łańcucha:


iptables [-t TABELA] -I ŁAŃCUCH [NUMER_REGUŁY] WŁAŚCIWOŚCI_REGUŁY [OPCJE]
iptables [-t TABELA] --insert ŁAŃCUCH [NUMER_REGUŁY] WŁAŚCIWOŚCI_REGUŁY [OPCJE]

Wymienienie istniejącej reguły na nową:


iptables [-t TABELA] -R ŁAŃCUCH NUMER_REGUŁY WŁAŚCIWOŚCI_REGUŁY [OPCJE]
iptables [-t TABELA] --replace ŁAŃCUCH NUMER_REGUŁY WŁAŚCIWOŚCI_REGUŁY [OPCJE]


Wylistowanie reguł w danym łańcuchu/tabeli

iptables [-t TABELA] -L [ŁAŃCUCH] [OPCJE]
iptables [-t TABELA] --list [ŁAŃCUCH] [OPCJE]

(jeśli nie jest podany ŁAŃCUCH wylistuje wszystkie reguły w danej tabeli).

Usunięcie wszystkich reguł danego łańcucha:

iptables [-t TABELA] -F [ŁAŃCUCH] [OPCJE]
iptables [-t TABELA] --flush [ŁAŃCUCH] [OPCJE]
(jeśli nie jest podany ŁAŃCUCH usunie wszystkie reguły w danej tabeli).

Wyzerowanie licznika pakietów i bajtów dla łańcuchów:

iptables [-t TABELA] -Z [ŁAŃCUCH] [OPCJE]
iptables [-t TABELA] --zero [ŁAŃCUCH] [OPCJE]
(jeśli nie jest podany ŁAŃCUCH wyzeruje wszystkie liczniki w danej tabeli).

Utworzenie nowego łańcucha:

iptables [-t TABELA] -N ŁAŃCUCH
iptables [-t TABELA] --new-chain ŁAŃCUCH

Usunięcie łańcucha

iptables [-t TABELA] -X [ŁAŃCUCH]
iptables [-t TABELA] --delete-chain [ŁAŃCUCH]
(jeśli nazwa łańcucha nie została podana usunie wszystkie nie wbudowane łańcuchy z podanej tabeli. ŁAŃCUCH musi być pusty - nie może zawierać żadnych reguł aby zostać usuniętym).

Zmiana nazwy łańcucha:

iptables [-t TABELA] -E STARA_NAZWA_ŁAŃCUCHA NOWA_NAZWA_ŁAŃCUCHA
iptables [-t TABELA] --rename-chain STARA_NAZWA_ŁAŃCUCHA NOWA_NAZWA_ŁAŃCUCHA

Ustawia domyślny sposób postępowania dla łańcucha:

iptables [-t TABELA] -P ŁAŃCUCH CEL [OPCJE]
iptables [-t TABELA] --policy ŁAŃCUCH CEL [OPCJE]
(działa tylko dla wbudowanych łańcuchów).

Wyświetlenie krótkiej pomocy:
iptables -h


Tabele:

Tabela filter

Zawiera wbudowane łańcuchy:

INPUT - pakiety przeznaczone do odbioru przez lokalny komputer.
FORWARD - pakiety routowane poprzez lokalny komputer.
OUTPUT - pakiety wygenerowane przez lokalny komputer.

Tabela nat


Trafiają do niej pakiety nawiązujące nowe połączenia. Zawiera wbudowane łańcuchy:

PREROUTING - dla zmian w pakietach w momencie, kiedy się pojawiają.
OUTPUT - dla zmian w pakietach, które utworzone zostały na lokalnym komputerze, przed ich routingiem.
POSTROUTING - dla zmian w pakietach tuż przed ich przesłaniem dalej.

Tabela mangle


Zawiera wbudowane łańcuchy:

PREROUTING - dla zmian w przychodzących pakietach zanim zostaną one routowane.
OUTPUT - dla zmian w pakietach, które utworzone zostały na lokalnym komputerze, przed ich routingiem.
INPUT (od kernela 2.4.18) - dla pakietów zmierzających do lokalnego komputera.
FORWARD (od kernela 2.4.18) - dla pakietów będących routowanymi przez lokalny komputer.
POSTROUTING (od kernela 2.4.18) - dla pakietów po procesie routowania, zanim opuszczą one lokalny komputer.

Tabela raw

Używana przed wszystkimi innymi tablicami. Zawiera następujące łańcuchy:

PREROUTING - dla pakietów przychodzących przez jakiekolwiek urządzenie sieciowe (w rozumieniu eth0, ppp0, lo itd.)
OUTPUT - dla pakietów wygenerowanych przez lokalne procesy.






2) Przykłady użycia:


Blokada p2p 08.00-16.00:

iptables -t mangle -A PREROUTING -m time --timestart 08:00 --timestop 16:00  -m ipp2p --ipp2p -j DROP

Jak wyżej, tyle że dla konkretnego IP:

iptables -I FORWARD -s 192.168.1.101 -m time --timestart 17:00 --timestop 22:00 -m ipp2p --ipp2p -j DROP

Całkowita blokada p2p dla konkretnego IP:

iptables -I FORWARD -s 192.168.1.101 -m ipp2p --ipp2p -j DROP

Przekierowanie portu 1900 dla ip 192.168.1.101 (p2p):

iptables -I FORWARD -p tcp -d 192.168.1.101 --dport 1900 -j ACCEPT 
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 1900 -j DNAT --to 192.168.1.101

Blokada konkretnego MAC'a:


iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 -j DROP 

iptables -A FORWARD -m mac --mac-source 00:00:00:00:00:01 -j DROP

Limit podłączeń:



iptables -A FORWARD -p tcp -m connlimit --connlimt-above 70 --connlimit-mask 32 -j DROP

Blokada portów TCP/UDP dla konkretnego IP:


iptables -I FORWARD -s 192.168.1.101 -p tcp --dport 600:800 -j DROP 

iptables -I FORWARD -s 192.168.1.101 -p udp --dport 600:800 -j DROP

Blokada konkretnego adresu IP:

iptables -A INPUT -s 192.168.1.101 -j DROP 
iptables -A FORWARD -s 192.168.1.101 -j DROP 
iptables -A INPUT -d 192.168.1.101 -j DROP 
iptables -A FORWARD -d 192.168.1.101 -j DROP

Przycięcie TTL do 1 (ludek nie będzie udostępniał internetu innym):

iptables -t mangle -A POSTROUTING -d 192.168.1.101 -j TTL --ttl-set 1

To samo, ale dla całej sieci (tutaj eth1, zmieniając na eth2,3,4 itd robimy to dla wszystkich podsieci):

iptables -t mangle -A POSTROUTING -o eth1 -j TTL --ttl-set 1

Otwarcie portu 80 dla eth0:

iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT

Zamknięcie portu 25 (nie wyślemy maila) dla konkretnego IP:

iptables -I FORWARD -p tcp --dport 25 -s 192.168.1.101 -j DROP

Strona informacyjna dla nie płacących rachunki na porcie 83

iptables -A PREROUTING -t nat -s 192.168.1.101 -p tcp --dport 1:65535 -j DNAT --to- 192.168.1.1:83 

Odblokowanie:

iptables -D PREROUTING -t nat -s 192.168.1.12 -p tcp --dport 1:65535 -j DNAT --to- 192.168.1.1:83

Dzielenie łącza - maskarada dla sieci 10.0.0.0:

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F -t nat
iptables -X -t nat
iptables -F -t filter
iptables -X -t filter
iptables -t filter -P FORWARD DROP
iptables -t filter -A FORWARD -s 10.0.0.0/255.255.255.0 -d 0/0 -j ACCEPT
iptables -t filter -A FORWARD -s 0/0 -d 10.0.0.0/255.255.255.0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -d 0/0 -j MASQUERADE

Źródło:
http://iptables.pl/
http://zsk.wsti.pl/publikacje/iptables_przystepnie.htm



Brak komentarzy:

Prześlij komentarz