Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja | |||
|
bio-sk:iptables [2024/12/11 20:59] jkonczak [Filtracja pakietów] |
bio-sk:iptables [2025/12/04 00:48] (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 208: | Linia 213: | ||
| [[iptables-filter-asciinema|Przykładowe komendy iptables ustawiające filtrację i ich działanie]] | [[iptables-filter-asciinema|Przykładowe komendy iptables ustawiające filtrację i ich działanie]] | ||
| - | ==== Manipulowanie pakietami ==== | + | ==== [Ekstra] Manipulowanie pakietami ==== |
| Przykłady na manipulację pakietami: \\ | Przykłady na manipulację pakietami: \\ | ||
| Linia 320: | 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'' | ||