Różnice między wybraną wersją a wersją aktualną.
| Nowa wersja | Poprzednia wersja | ||
|
bio-sk:iptables [2024/12/05 01:04] jkonczak utworzono |
bio-sk:iptables [2025/12/10 20:40] (aktualna) jkonczak |
||
|---|---|---|---|
| Linia 7: | Linia 7: | ||
| Do konfiguracji mechanizmów kernela składających się na netfilter służą | Do konfiguracji mechanizmów kernela składających się na netfilter służą | ||
| [[https://upload.wikimedia.org/wikipedia/commons/d/dd/Netfilter-components.svg|programy]]: | [[https://upload.wikimedia.org/wikipedia/commons/d/dd/Netfilter-components.svg|programy]]: | ||
| - | - **''iptables''**, **''ip6tables''**, <small> ''ebtables'', ''arptables''</small> (starsze) | + | <html><div style="margin-top:-1.2em"></div></html> |
| - | - <small>**''nft''**</small> (nowszy) | + | * **''iptables''**, **''ip6tables''**, <small> ''ebtables'', ''arptables''</small> (starsze) |
| + | * **''nft''** (nowszy) | ||
| + | <html><div style="margin-top:-1.2em"></div></html> | ||
| [[http://netfilter.org/|Netfilter project]] jest zbiorem projektów związanych | [[http://netfilter.org/|Netfilter project]] jest zbiorem projektów związanych | ||
| z frameworkiem do filtrowania pakietów, w tym ''iptables'' i ''nftables''. | z frameworkiem do filtrowania pakietów, w tym ''iptables'' i ''nftables''. | ||
| Linia 23: | Linia 24: | ||
| umie wykorzystać tylko pierwszy z tych mechanizmów. | umie wykorzystać tylko pierwszy z tych mechanizmów. | ||
| \\ | \\ | ||
| - | Do użycia nowego mechanizmu zachowując bez zmiany składni i działania poleceń | + | Do użycia nowego mechanizmu zachowując bez zmiany składnię i działania poleceń |
| przygotowano nową implementację komendy ''ipables'', wcześniej dostępną jako | przygotowano nową implementację komendy ''ipables'', wcześniej dostępną jako | ||
| ''ipables-nft'', teraz często już jako ''iptables''. | ''ipables-nft'', teraz często już jako ''iptables''. | ||
| Linia 92: | Linia 93: | ||
| ==== [Ekstra] Trwałość reguł (persistance) ==== | ==== [Ekstra] Trwałość reguł (persistance) ==== | ||
| - | Iptables nie dostarcza mechanizmu automatycznego zapisywania ustawień – po | + | ''iptables'' nie dostarcza mechanizmu automatycznego zapisywania ustawień – po |
| ponownym uruchomieniu lista reguł jest pusta, a polityki domyślne. | ponownym uruchomieniu lista reguł jest pusta, a polityki domyślne. | ||
| Dla odtworzenia reguł przy starcie dystrybucje Linuksa dostarczają odpowiedni | Dla odtworzenia reguł przy starcie dystrybucje Linuksa dostarczają odpowiedni | ||
| Linia 124: | Linia 125: | ||
| * **''-j ACCEPT''** – przepuszcza pakiet | * **''-j ACCEPT''** – przepuszcza pakiet | ||
| * **''-j DROP''** – ignoruje (wyrzuca do śmieci) pakiet | * **''-j DROP''** – ignoruje (wyrzuca do śmieci) pakiet | ||
| - | * **''-j REJECT''** – dodatkowa akcja, symuluje zamknięte gniazdo (wysyła ICMP //destination unreachable//) | + | * **''-j REJECT''** – dodatkowa akcja, symuluje zamknięte gniazdo (np. odsyła ICMP //destination unreachable// czy odpowiada segmentem TCP z flagą //RST//) |
| <html><div style="margin-top:-1.2em"></div></html> | <html><div style="margin-top:-1.2em"></div></html> | ||
| Są też dostępne inne akcje, np. ''LOG'', ''MARK'' i ''SET''. Więcej szczegółow w ''man iptables-extensions'' | Są też dostępne inne akcje, np. ''LOG'', ''MARK'' i ''SET''. Więcej szczegółow w ''man iptables-extensions'' | ||
| Linia 148: | Linia 149: | ||
| Przykładowe rozszerzenia: | Przykładowe rozszerzenia: | ||
| <html><div style="margin-top:-1.2em"></div></html> | <html><div style="margin-top:-1.2em"></div></html> | ||
| - | * ''-m tcp/udp'' jest **automatycznie** ładowany razem z ''-p udp/tcp''; pozwala ustalić m. inn. port źródłowy i docelowy ''--sport / --dport'', | + | * ''-m tcp/udp'' jest **automatycznie** ładowany razem z ''-p udp/tcp''; \\ pozwala ustalić m. inn. port źródłowy i docelowy ''--sport / --dport'', |
| * ''-m conntrack'' wybiera stan połączenia ''--ctstate'', m. inn.: ''INVALID,NEW,ESTABLISHED,RELATED'', | * ''-m conntrack'' wybiera stan połączenia ''--ctstate'', m. inn.: ''INVALID,NEW,ESTABLISHED,RELATED'', | ||
| * ''-m comment'' pozwala na dowolny komentarz ''--comment <tekst>'', | * ''-m comment'' pozwala na dowolny komentarz ''--comment <tekst>'', | ||
| Linia 172: | Linia 173: | ||
| Najczęściej stosowana do wpuszczania tylko pożądanego ruchu. \\ | Najczęściej stosowana do wpuszczania tylko pożądanego ruchu. \\ | ||
| - | Typowe podejście to zabronienie wszystkiego, co nie jest wprost dozwolone. | + | Typowe podejście to zabronienie wszystkiego, co nie jest wprost dozwolone. \\ |
| Przykładowe polecenia: \\ | Przykładowe polecenia: \\ | ||
| Linia 179: | Linia 180: | ||
| ''iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT'' – pozwala przychodzić pakietom nawiązanych wcześniej połączeń \\ | ''iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT'' – pozwala przychodzić pakietom nawiązanych wcześniej połączeń \\ | ||
| ''iptables -A INPUT -p tcp --dport 22 -j ACCEPT'' – pozwala na dostęp do ssh | ''iptables -A INPUT -p tcp --dport 22 -j ACCEPT'' – pozwala na dostęp do ssh | ||
| + | |||
| + | __Uwaga__: konfigurując zdalnie firewall trzeba najpierw dodać regułę która | ||
| + | wpuszcza połączenie użyte do konfiguracji, przetestować że działa, a dopiero | ||
| + | potem dodawać reguły ograniczające ruch. | ||
| === Filtracja pakietów przechodzących === | === Filtracja pakietów przechodzących === | ||
| Linia 206: | Linia 211: | ||
| **[[sk1:nf_fw|Filtracja pakietów w systemie Linux - ćwiczenia]]** | **[[sk1:nf_fw|Filtracja pakietów w systemie Linux - ćwiczenia]]** | ||
| - | ==== Manipulowanie pakietami ==== | + | [[iptables-filter-asciinema|Przykładowe komendy iptables ustawiające filtrację i ich działanie]] |
| + | |||
| + | ==== [Ekstra] Manipulowanie pakietami ==== | ||
| Przykłady na manipulację pakietami: \\ | Przykłady na manipulację pakietami: \\ | ||
| Linia 222: | Linia 229: | ||
| prywatnych – odbiorca nie ma szansy odpowiedzieć (bo gdzie miałby?). | prywatnych – odbiorca nie ma szansy odpowiedzieć (bo gdzie miałby?). | ||
| <small>Routery z publicznym IP powinny automatycznie wycinać takie wiadomości | <small>Routery z publicznym IP powinny automatycznie wycinać takie wiadomości | ||
| - | [[https://tools.ietf.org/html/rfc1918|RFC 1918, str. 5]].</small> | + | [[https://tools.ietf.org/html/rfc1918#page-5|RFC 1918, str. 5]].</small> |
| Dlatego konieczne jest by na styku adresacji prywatnej i publicznej adresy były | Dlatego konieczne jest by na styku adresacji prywatnej i publicznej adresy były | ||
| Linia 265: | Linia 272: | ||
| * protokołu TCP, na port docelowy 443 | * protokołu TCP, na port docelowy 443 | ||
| - R2 dostaje wiadomość z 93.184.216.34 na swój adres IP | - R2 dostaje wiadomość z 93.184.216.34 na swój adres IP | ||
| - | - Przed wykonaniem trasowania (PREROUTING) R2 sprawdza czy dla tego pakietu powinien wykonać trasowanie | + | - Przed wykonaniem trasowania (PREROUTING) R2 sprawdza czy dla tego pakietu powinien wykonać translację |
| - R2 znajduje regułę: //pakiety TCP adresowane na port 443 tego komputera mają trafiać do 192.168.0.3//, więc dokonuje **translacji adresu docelowego**: zmienia adres docelowy 150.254.5.114 na 192.168.0.3 | - R2 znajduje regułę: //pakiety TCP adresowane na port 443 tego komputera mają trafiać do 192.168.0.3//, więc dokonuje **translacji adresu docelowego**: zmienia adres docelowy 150.254.5.114 na 192.168.0.3 | ||
| - R2 wykonuje trasowanie i określa, że pakiet kierowany do 192.168.0.3 ma trafić do //Serwer WWW// | - R2 wykonuje trasowanie i określa, że pakiet kierowany do 192.168.0.3 ma trafić do //Serwer WWW// | ||
| Linia 318: | Linia 325: | ||
| Inne moduły: | Inne moduły: | ||
| - | *'' recent'' pozwala filtrować biorąc pod uwagę wcześniejszą aktywność danego IP/ danej sieci, np: \\ ''iptables -A INPUT -p tcp --dport 139 -m recent --name unwanted --set --seconds 15 -j DROP'' \\ ''iptables -A INPUT -m recent --update --seconds 15 -j DROP'' | + | *'' recent'' pozwala filtrować biorąc pod uwagę wcześniejszą aktywność danego IP / danej sieci, np: \\ ''iptables -A INPUT -p tcp --dport 139 -m recent --name unwanted --set --seconds 15 -j DROP'' \\ ''iptables -A INPUT -m recent --update --seconds 15 -j DROP'' |
| * ''string'' pozwalający dopasowywać tekst i moduł ''u32'' pozwalający dopasowywać dana na podanej pozycji, np: \\ ''iptables -A FORWARD -p udp --dport domain -m string --algo bm --hex-string '|08|facebook|03|com|00|' -j LOG --log-prefix 'facebook ' '' | * ''string'' pozwalający dopasowywać tekst i moduł ''u32'' pozwalający dopasowywać dana na podanej pozycji, np: \\ ''iptables -A FORWARD -p udp --dport domain -m string --algo bm --hex-string '|08|facebook|03|com|00|' -j LOG --log-prefix 'facebook ' '' | ||
| * ''mac'' pozwala filtrację adresów MAC, np: \\ ''iptables -A input -m mac ! --mac-source 00:12:34:56:78:ab -j DROP'' | * ''mac'' pozwala filtrację adresów MAC, np: \\ ''iptables -A input -m mac ! --mac-source 00:12:34:56:78:ab -j DROP'' | ||
| *''-p icmp'' pozwala na filtrowania icmp, np: \\ ''iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT'' | *''-p icmp'' pozwala na filtrowania icmp, np: \\ ''iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT'' | ||
| - | API systemów Windows do tworzenia firewalli: https://msdn.microsoft.com/en-us/library/aa366510%28v=vs.85%29.aspx | + | API systemów Windows do tworzenia firewalli: [[https://msdn.microsoft.com/en-us/library/aa366510%28v=vs.85%29.aspx|msdn.microsoft.com/…]] \\ |
| - | + | Konfiguracja programu Windows Firewall dostarczanego z systemami Windows: [[https://learn.microsoft.com/en-us/windows/security/operating-system-security/network-security/windows-firewall/configure-with-command-line?tabs=cmd|learn.microsoft.com/…]] | |