Iptables
Z Wikipedii
Ten artykuł wymaga dopracowania zgodnie z zaleceniami edycyjnymi. Należy w nim poprawić: styl. Dokładniejsze informacje o tym, co należy poprawić, być może znajdziesz na stronie dyskusji tego artykułu. Po naprawieniu wszystkich błędów można usunąć tę wiadomość. |
Iptables jest programem filtrującym pakiety (głównie używanym jako firewall bądź router) dla systemu operacyjnego GNU/Linux. Został napisany w 1999 roku przez Rusty'ego Russella w języku C. Jego funkcjonalnością jest filtr pakietów jak i tzw. firewall stanowy dla systemów Linux z jądrem począwszy od serii 2.4.x, kontrolujący połączenia wchodzące i wychodzące do sieci komputerowej lub stacji roboczej.
Firewall, uruchamiany jest najczęściej na hostach pełniących rolę routerów. Działanie opiera się na trzech podstawowych regułach delklarujacych dzialanie wobec IP pakietu. Reguła INPUT opisuje działania dla pakietów przychodzących, reguła OUTPUT - wychodzących i FORWARD - dla pakietów przechodzących pomiędzy interfejsami. Możliwe do wykonania działania to ACCEPT (zaakceptowanie pakietu), DROP (usunięcie) i REJECT (odrzucenie z powiadomieniem nadawcy). Reguły iptables pozwalają na dokładniejsze określenie rodzaju i przeznaczenia pakietu, z uwagi na np. port lub host źródłowy/docelowy, wykorzystany protokół, czas życia (TTL).
Spis treści |
[edytuj] Przykład
[edytuj] Firewall
Prosty firewall na podstawie iptables, zakładamy że mamy komputer działający jako router i jednocześnie FTP dla sieci lokalnej oraz server http ogólnie dostępny, interfejs sieciowy to ra0 adres ip: 88.88.88.88, interfejs sieci lokalnej to eth0 adres ip: 192.168.0.1.
Celem jest oczyszczenie wszystkich tablic z poprzednio wpisanych reguł aby nowe mogły działać bez zarzutu:
iptables -F iptables -F -t nat iptables -X -t nat iptables -F -t filter iptables -X -t filter
Nowe przełączniki:
-F {łańcuch} - służy do usunięcia wszystkich dotychczasowych reguł lub reguł w danych łańcuchu gdy podany.
-X {łańcuch} - usuwa wszystkie dowiązania do innych tablic
-t [tablica] - wybiera tablicę w jakiej mają być poczynione zmiany domyślna tablica to filter wybierana, gdy brakuje przełącznika używana głównie do filtrowania pakietów, inne tablice: nat używana przy routingu, są jeszcze tablice: mangle i raw których nie będziemy używać.
Celem danych komend jest zablokowanie wszystkich przychodzących i przechodzących pakietów których w dalszej części nie zaznaczymy jako pożądanych:
iptables -P FORWARD DROP iptables -P INPUT DROP iptables -P OUTPUT ACCEPT
Nowy przełącznik:
-P [łańcuch] [polityka] - służy do ustawiania domyślnej polityki w danym łańcuchu czyli co zrobić z pakietem który nie znalazł swojego miejsca w poprzednich regułkach: (Opis reguł patrz wyżej) ACCEPT (niezalecane), DROP (zalecane), REJECT(odrzucenie z domyślnym powiadomieniem poprzez icmp-port-unreachable czyli że dany port jest niedostępny).
Celem reguł jest udostępnianie połączenia internetowego. poprzez wpuszczanie połączeń internetowych z ra0 oraz wypuszczanie połączeń z sieci lokalnej z eth0 dodatkowo -d i -s mają posłużyć małemu zabezpieczeniu przed podszywaniem się osób z naszej sieci pod inne adresy ip:
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD -i eth0 -o ra0 -s 192.168.0.0/255.255.255.0 -d 0/0 -j ACCEPT iptables -A FORWARD -i ra0 -o eth0 -s 0/0 -d 192.168.0.0/255.255.255.0 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -d 0/0 -j MASQUERADE
Nowe przełączniki:
-A [łańcuch] [reguła] - wybiera łańcuch i dodaje na jego końcu daną regułę
-i [interfejs] - sprawia że dana reguła dotyczy tylko pakietów przychodzących z danego interfejsu (niedostępny w łańcuchu OUTPUT)
-o [interfejs] - jak -i tylko że dotyczy pakietów wychodzących (niedostępny w łańcuchu INPUT)
-s [IP|HOST]/{maska} - wybiera źródło danego pakietu w postaci numeru IP lub adresu host, można także dodać maskę. (0/0 - oznacza wszystkie numery ip i maski)
-d [IP|HOST]/{maska} - tak jak -s tylko że dotyczy numeru IP do którego zmierza pakiet. (0/0 - oznacza wszystkie numery ip i maski)
-j [polityka] - wybór co z danym pakietem zrobić (rodzaje polityki patrz ponad przykład). MASQUERADE - użycie maskarady potrzebne przy udostępnianiu połączenia.
Podobne przełączniki do -A (służące do modyfikacji poleceń łańcuchów) to:
-I [łańcuch] {numer} [reguła] - dodaje regułę na pozycji pierwszej lub jak jest dany numer to dodaje pozycję na tym miejscu przesuwając dalsze o pozycję dalej,
-D [łańcuch] {numer} - usuwa regułę znajdującą się na danej pozycji,
-R [łańcuch] [numer] [reguła] - zamienia regułę o danym numerze na nową.
Ważne!: Pakiet podąża za pierwszą regułą do której pasuje dlatego kolejność ma znaczenie.
Pierwsza instrukcja (echo) włącza przekazywanie pakietów, co jest konieczne na wielu systemach .
Celem jest wpuszczenie wszystkich reguł opartych o interfejs lo czyli interfejs służący do wewnętrznej komunikacji za pośrednictwem tcp/ip:
iptables -A INPUT -i lo -j ACCEPT
Nie wpuszczamy pakietów które przyszły z 'naszego' komputera z sieci gdyż jest to w normalnych warunkach niemożliwe i może to być podstawą jakiegoś ataku.
iptables -A INPUT -i ra0 -s 88.88.88.88 -j DROP
Celem jest wpuszczenie wszystkich połączeń które już wcześniej zostały zaakceptowane:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Nowe przełączniki:
-m [moduł] - powoduje załadowanie modułu w tym przypadku state który sprawdza stan pakietu.
Moduł '{!} state [jaki]' - dostępne po załadowaniu modułu można opierać się na stanie połączeń dostępne to: NEW (połączenia nowo przychodzące), RELATED (połączenia powiązane z wcześniej nawiązanymi), ESTABLISHED (połączenia już ustanowione), UNTRACKED oraz INVALID oznaczają stany z reguły niezbyt poprawne uszkodzone lub 'dziwne' pakiety. Wykrzyknik powoduje zaprzeczenie np '! --ctstate INVALID' wpuści wszystkie stany poza INVALID.
Celem jest włączenie dostępu do naszych serwerów:
iptables -A INPUT -i eth0 -p tcp -m conntrack --ctstate NEW -d 192.168.0.1 --dport 21 -j ACCEPT iptables -A INPUT -p tcp -m conntrack --ctstate NEW --dport 80 -j ACCEPT
Nowe przełączniki: -p [typ] - wybieramy typ pakietu spośród tcp, udp, icmp.
--dport [port] - wybieramy port przeznaczenia dostępne tylko po podaniu -p, możliwość podania poprzez service (np http) w zależności od pliki /etc/services. można także dodać przedział portów jak 21:80.
--sport [port] - p/w tylko że źródłowy.
Moduł multiport - moduł służący do ustawienia wielu portów w jednej regułce oddzielonych przecinkiem np. '--dport 21,80' powoduje otwarcie portu 80 i 21. Regułki służą wpuszczeniu w pierwszym przypadku nowych połączeń do naszego serwera ftp tylko z sieci lokalnej, w drugim nowych połączeń do serwera www zarówno z sieci lokalnej jak i internetu. Później będą one wpuszczane za pomocą poprzedniej regułki ze stanami RELATED i ESTABLISHED. Na tej samej zasadzie można otwierać inne porty.
Przykładowa regułka przekierowująca porty:
iptables -A PREROUTING -t nat -i ra0 -p tcp -d 88.88.88.88 --dport 65333 -j DNAT --to-destination 192.168.0.54:21
Nowe przełączniki: --to-destination [ip]{:port} - przekierowanie połączenia na dany adres ip. można także dodać numer portu za numerem ip na jaki ma zostać dane połączenie przekierowane. W danym przykładzie przekierowano połączenia przychodzące z internetu na port 65333(tcp) na komputer w sieci lokalnej o adresie ip 192.168.0.54 port 21.
Celem jest wpuszczenie pingów:
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
Nowy przełącznik:
--icmp-type [numer | nazwa] - pozwala na wybranie typu pakietów icmp które mają być poddane sprawdzeniu, w tym wypadku jest to nr. 8 czyli echo-requst inne użyteczne to np. 3 destination-unreachable oraz 0 echo-reply.
iptables -A INPUT -i ra0 -m limit -d 88.88.88.88 -j LOG --limit 10/hour --log-prefix '[end]' iptables -A INPUT -i ra0 -p tcp -d 88.88.88.88 -j REJECT --reject-with tcp-reset iptables -A INPUT -i ra0 -p udp -d 88.88.88.88 -j REJECT --reject-with icmp-port-unreachable
Nowe przełączniki:
--log-prefix ['tekst'] - powoduje dopisanie prefiksu do interesującego nas loga dzięki czemu będzie je nam łatwiej rozróżnić w tym przypadku prefiks to end.
--reject-with [nazwa] - powoduje odrzucenie danego pakietu z innym niż domyślnym pakietem icmp do wyboru.
--limit - dostępna po wybraniu modułu limit, jeśli liczba będzie większa niż ta podana dana regułka się nie wykona, w tym wypadku limit to 10 na godzinę.
Jest to nasze końcowe ustawienie pozwalające nam na 1. logowanie pakietów które przeszły aż dotąd i przekazanie ich dwóm ostatnim funkcjom czyli funkcjom które będą odrzucać pakiety wysyłane do nas dzięki czemu nasz komputer nie będzie głuchy co może przyśpieszyć działanie niektórych usług internetowych i jest także zgodne z obowiązującymi standardami. Oraz nie daje potencjalnemu napastnikowi sądzenia że za naszym firewallem coś jest i to coś wartego uwagi.
[edytuj] Blokowanie pojedynczego komputera
iptables -A FORWARD - p all -s 192.168.1.2 -o eth1 -j DROP
[edytuj] Blokowanie odpowiedzi na ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all iptables -A INPUT -i eth0 -s 0/0 -p icmp --icmp-type ping -j DROP
[edytuj] Wyniki naszej pracy można obejrzeć
iptables -L -n --line-numbers
Nowe przełączniki:
-L {łańcuch} - pozwala zobaczyć wszystkie reguły lub te z danego łańcucha,
-n - nie odpytuje DNS, podaje ip zamiast zmieniać je na hosty,
--line-numbers - dodatkowo wyświetla numery obok reguł dzięki czemu łatwiej je zmieniać.
[edytuj] Zobacz też
- przekierowanie portów
- TTL - czas życia pakietu