Nazwa łańcucha to nie hak: iptables kontra nftables
Łańcuch to pojemnik; hak decyduje, czy jądro go sprawdza. Porównaj wbudowane łańcuchy iptables z łańcuchami bazowymi nftables, zanim zmienisz reguły.
Obie zapory mogą filtrować przekazywany ruch VPN, a reguły przypinają do ścieżki pakietu na różne sposoby. iptables ma wbudowane łańcuchy w tabeli, więc FORWARD istnieje jako nazwany punkt haka. nftables oddziela nazwę łańcucha od jego typu, haka i priorytetu, co oznacza, że zwykły łańcuch o nazwie FORWARD niczego nie filtruje. Porównanie obu modeli wyjaśnia, dlaczego wpis, który wygląda poprawnie w jednym narzędziu, nie działa w drugim.
Łańcuch to pojemnik. To, czy jądro go sprawdza, zależy od implementacji i od tego, jak zbiór reguł go przypina.
Dwa modele, dwa różne przypięcia
W iptables tabela filter zawiera trzy wbudowane łańcuchy, INPUT, FORWARD i OUTPUT, a -N tworzy łańcuch zdefiniowany przez użytkownika, który działa tylko wtedy, gdy skacze się do niego z jednego z nich. Podręcznik nftables definiuje natomiast łańcuchy bazowe, które deklarują typ, hak i priorytet, oraz łańcuchy zwykłe, które tego nie robią. Łańcuch bazowy może mieć dowolną nazwę, a zwykły łańcuch o nazwie FORWARD nie zyskuje żadnych właściwości od swojej etykiety. To cała różnica i jest niewidoczna w poradniku, który pokazuje tylko tekst reguł.
Zaplecza zgodności dodają drugi powód, by nie wnioskować o zachowaniu z nazwy polecenia. Dokumentacja iptables odnotowuje operacje, które różnią się pod iptables-nft, więc traktuj natywne nftables, iptables-nft i starszy zbiór reguł jako trzy systemy, a nie trzy zapisy jednego.
Czytaj błąd w jego rzeczywistym kontekście
Brakująca tabela, błąd uprawnień, niedostępna funkcja jądra i brakujący nazwany łańcuch to cztery różne ustalenia, a tylko jedno dotyczy łańcucha. Zapisz wersję narzędzia, żądaną rodzinę adresów i tabelę, przestrzeń nazw sieci oraz pierwszy dokładny błąd. Następnie sprawdź, który komponent posiada zbiór reguł: usługa zapory lub brama zarządzana przez produkt może generować własne łańcuchy i kolejność. Dodanie natywnego łańcucha obok nich pozostawia zarządzaną politykę nietkniętą, a inwentarz bardziej mylący.
Przestrzeń nazw kontenera może zawierać inny zbiór reguł niż host, więc polecenie uruchomione w złym kontekście nie pokaże, który łańcuch widział przekazany pakiet. Podnoszenie uprawnień dlatego, że oczekiwany łańcuch nie był widoczny, nie jest diagnozą.
Liczniki dowodzą dotarcia, nie wyroku
Liczniki reguł mówią, że reguła została osiągnięta. Nie mówią, że późniejsza reguła zezwoliła na operację, i nie dowodzą, że każda alternatywna ścieżka została odrzucona. Czytaj je podczas jednego nieszkodliwego autoryzowanego przepływu, wraz z kolejnością reguł i przypięciem łańcucha, i traktuj je jako jedną obserwację, a nie wyrok. Licznik różny od zera na regule drop oznacza, że ruch w nią trafił; nie mówi nic o ruchu, który nie trafił.
Przekazywanie IP w jądrze to całkowicie osobne ustawienie. Istnienie łańcucha nie włącza przekazywania, a brak znanej etykiety nie oznacza, że przekazywanie ustało.
Opisz przepływ, który chcesz chronić
Zapisz jedno żądanie klienta po dekapsulacji: jego źródło, cel, rodzinę adresów oraz to, czy kończy się na bramie, czy przez nią przechodzi. Wejście usługi lokalnej i ruch przekazywany są obserwowane w różnych punktach, więc wymagają innych reguł i innych testów. W przypadku VPN mostkowego sprawdź także ścieżkę mostu, ponieważ łańcuch na poziomie IP nie kontroluje automatycznie ramek Ethernet.
Zachowaj niezależny dostęp do odzyskiwania przed zmianą zdalnej bramy. Następnie potwierdź zamierzony przepływ i wymagane odmowy w ramach tego samego zbioru reguł. Nowy pusty łańcuch o znanej nazwie nie jest naprawą.
Porównanie kończy się jednym pytaniem: który hak jądro naprawdę wywołuje dla tego pakietu? Odpowiedz na to, a nazwa łańcucha przestaje mieć znaczenie.