Sophos Firewall: Invalid TCP reserved bit spowodowany przez Accurate ECN
Jeśli Sophos Firewall odrzuca prawidłowy ruch TCP z powodem Invalid TCP reserved bit, przyczyną może być Accurate ECN. Dodatkowa reguła zezwalająca ani wyjątek w filtrze WWW wtedy nie pomogą, ponieważ odrzucenie następuje już podczas ścisłej kontroli TCP.
Sophos wskazuje globalne wyłączenie strict-policy jako obejście. Tę zmianę należy wprowadzić dopiero po uzyskaniu jednoznacznego potwierdzenia: dotyczy ona całej zapory, a nie tylko analizowanego przepływu danych.
Jednoznaczne rozpoznanie błędu
Obejście jest właściwe tylko wtedy, gdy spełnione są wszystkie poniższe warunki:
- Określone połączenie TCP zrywa się w sposób powtarzalny lub w ogóle nie jest nawiązywane.
- Log Viewer lub Packet Capture pokazuje Invalid TCP reserved bit jako przyczynę odrzucenia.
- Reguła zapory, NAT i routing odpowiadają oczekiwanej ścieżce danych.
- Szeroka reguła zezwalająca nie zmienia tego zachowania.
- Przechwycony handshake TCP pokazuje bity AE, CWR i ECE ustawione w odrzuconym początkowym SYN. Bit AE był wcześniej nazywany NS i Sophos oraz starsze dekodery nadal oznaczają go jako
NS.
W pierwszym teście należy otworzyć Log viewer w prawym górnym rogu Web Admin, wybrać moduł Firewall, a następnie zawęzić wyniki według czasu, źródłowego i docelowego adresu IP za pomocą Timer filter i Add filter. W wyszukiwaniu tekstowym trzeba też podać Invalid TCP reserved bit. Przerwana sesja może jednak nie pojawić się od razu: Sophos Firewall zwykle zapisuje sesje zapory dopiero po zamknięciu połączenia.
Dlatego przyczynę odrzucenia należy potwierdzić w Diagnostics > Packet capture. W Configure poniższy filtr BPF ogranicza na przykład widok do dwóch adresów dokumentacyjnych i HTTPS:
host 192.0.2.10 and host 198.51.100.20 and port 443
Oba adresy IP i port należy zastąpić wartościami niedziałającego połączenia. Następnie włączyć Trace On, wykonać dokładnie jedną próbę połączenia i zatrzymać przechwytywanie. W Display filter wybrać Status: Violation i Reason: INVALID_TRAFFIC. W ten sposób SFOS potwierdza naruszenie i przyczynę Invalid TCP reserved bit; widoku WebAdmin należy używać tylko do tego potwierdzenia.
Do pełnej analizy handshake TCP i flag trzeba osobno wykonać przez SSH przechwytywanie tcpdump ograniczone czasowo oraz filtrowane według hostów i portu. Zapisać je jako PCAP i otworzyć w Wiresharku lub innym dekoderze. Należy skorzystać z instrukcji Zbieranie logów narzędziem tcpdump na Sophos Firewall. Aktualny Wireshark używa pola tcp.flags.ae; tcp.flags.ns to starsza terminologia.
Jeśli nie ma konkretnej przyczyny odrzucenia, nie należy wyłączać strict-policy na podstawie przypuszczenia. Najpierw trzeba sprawdzić regułę zapory, NAT i przepływ pakietów.
Dlaczego Accurate ECN jest uznawane za nieprawidłowe
Explicit Congestion Notification, w skrócie ECN, sygnalizuje przeciążenie bez odrzucania pakietu wyłącznie w tym celu. Accurate ECN nazywa bit znany wcześniej jako NS obecnie AE. Sophos NC-169842 i starsze dekodery nadal używają nazwy NS.
Aby rozpoznać sygnaturę znanego problemu, trzeba przechwycić handshake TCP: odrzucony początkowy SYN ma ustawiony SYN oraz AE (wcześniej NS), CWR i ECE. Jeśli SYN zostanie przekazany, należy sprawdzić SYN/ACK, aby ustalić, czy negocjacja Accurate ECN zakończyła się powodzeniem. Sam AE/NS nie jest rozstrzygający. W ustanowionym przepływie kombinacje AE, CWR i ECE tworzą licznik ACE, a nie zachowują dawnych znaczeń poszczególnych flag. Zobacz RFC 9768, sekcja 3.1.1 i sekcja 3.2.2.
Sophos opisuje w zgłoszeniu NC-169842, że ścisła kontrola może zinterpretować bit AE, nadal nazywany tam NS, jako zarezerwowany bit TCP i odrzucić ruch. W dzienniku pojawia się dlatego Invalid TCP reserved bit, chociaż nadawca używa tych bitów dla Accurate ECN. Definicja problemu sprawdzona dla tej procedury wskazuje ECE, CWR i NS (obecnie AE) jako sygnaturę oraz dwie możliwości: wygenerowanie ruchu bez tych bitów Accurate ECN albo wyłączenie kontroli TCP Strict Policy z CLI.
Ta procedura jest celowo ograniczona do jedynej wersji wskazanej wtedy jako objęta problemem: SFOS 21.5.0 GA Build 171 (21.5.0.171); nie wskazano wersji z poprawką. Pomoc SFOS 22.0 nadal dokumentuje parametr strict-policy, ale nie potwierdza to, że NC-169842 dotyczy również SFOS 22.0. W innej kompilacji obejście należy zastosować dopiero po potwierdzeniu pełnej sygnatury, a wcześniej otworzyć Support Case z przechwyconymi pakietami i wyciągiem z dziennika. Jeśli informacje o nowszej wersji wyraźnie wskazują usunięcie NC-169842, należy wybrać tę przetestowaną aktualizację zamiast pozostawiać globalne obejście.
Sprawdzanie Strict Policy
Polecenia wykonuje się w wierszu console> konsoli Device Console, a nie w Advanced Shell:
- Zalogować się do zapory przez SSH lub konsolę lokalną.
- W menu głównym wybrać 4. Device Console.
- Wyświetlić aktualny stan:
show advanced-firewall
W danych wyjściowych odszukać następujący wiersz:
Strict Policy : on
Pełne dane wyjściowe zawierają inne globalne parametry zapory. Nie należy ich zmieniać na potrzeby tego testu. Jeśli dostęp nie został jeszcze skonfigurowany, pomocny jest artykuł Łączenie się z Sophos Firewall przez SSH.
W SFOS 22.0 udokumentowaną wartością domyślną jest on. Dla wycofania miarodajna pozostaje jednak wartość bieżąca odczytana poleceniem show advanced-firewall. Jeśli wynosi już off, obejście jest aktywne; nie należy nic przełączać, lecz przeanalizować przypadek z Sophos Support. Bezpieczne sprawdzanie Advanced Firewall Settings objaśnia pozostałe wartości, stan bazowy, test kontrolny i wycofanie zmiany.
Kontrolowany test obejścia
⚠️ Wpływ na bezpieczeństwo:
strict-policy offglobalnie wyłącza ścisłą kontrolę pakietów. Sophos Firewall nie odrzuca wtedy za pomocą tej kontroli niektórych nietypowych lub potencjalnie szkodliwych wzorców pakietów. To polecenie nie tworzy wyjątku dla pojedynczego adresu IP, domeny ani reguły zapory.
Przed zmianą należy zapisać aktualny stan konfiguracji, udokumentować analizowany przypadek testowy i zaplanować okno serwisowe. Następnie wykonać:
set advanced-firewall strict-policy off
Sprawdzić nowy stan:
show advanced-firewall
Oczekiwany wiersz:
Strict Policy : off
Teraz należy ponownie przetestować wyłącznie wcześniej udokumentowany przepływ. Jeśli zacznie działać natychmiast, a Invalid TCP reserved bit zniknie, potwierdza to, że Strict Policy powoduje odrzucenie. Tylko przechwycony handshake z SYN oraz AE/NS, CWR i ECE w odrzuconym początkowym SYN wiąże odrzucenie z sygnaturą NC-169842.
Jeśli błąd pozostanie bez zmian, należy natychmiast ponownie włączyć strict-policy. Przyczyna leży wtedy prawdopodobnie w innym miejscu przepływu pakietów.
Ponowne włączanie Strict Policy
Jeśli wartością zapisaną przed zmianą było on, polecenie wycofujące ma postać:
set advanced-firewall strict-policy on
Następnie trzeba ponownie sprawdzić za pomocą show advanced-firewall, czy wyświetlany jest stan Strict Policy : on, oraz skontrolować przypadek testowy i normalny ruch. Jeśli powtórzony początkowy SYN zawiera tę samą sygnaturę AE/NS, CWR i ECE i biegnie tą samą ścieżką, Invalid TCP reserved bit powinien pojawić się ponownie. W przeciwnym razie przed wyciągnięciem wniosku porównać flagi handshake’u i ścieżkę.
Nawet jeśli obejście działa, strict-policy off nie powinno bez oceny stać się stanem trwałym. Zalecana kolejność działań jest następująca:
- Sprawdzić, czy nadawca, system operacyjny, aplikacja lub usługa pośrednia pozwala wyłączyć Accurate ECN albo negocjować je w inny sposób.
- Sprawdzić, czy informacje o dostępnych wydaniach SFOS Maintenance Release wyraźnie wymieniają poprawkę dla
NC-169842. - Przekazać do Sophos Support wersję SFOS, znacznik czasu, Source i Destination, przyczynę odrzucenia oraz Packet Capture.
- Tylko jeśli nie jest dostępne bardziej precyzyjne rozwiązanie, pozostawić globalną zmianę wraz z akceptacją ryzyka, monitoringiem i udokumentowaną procedurą powrotu.
Potrzebne materiały można zebrać przy użyciu instrukcji Zapisywanie dzienników Sophos Firewall dla Support Case.
Co nie pomaga
- Szersza reguła zapory: Ścisła kontrola TCP nie jest standardowym dopasowaniem reguły.
- Wyjątki Web lub TLS: Odrzucenie może nastąpić przed przetworzeniem ruchu przez te polityki.
- Wyjątek IPS dodany na podstawie przypuszczenia: W przypadku
NC-169842Sophos wyraźnie wskazuje Strict Policy jako przyczynę i obejście. - Globalne wyłączenie bez wartości bazowej: Bez powtarzalnego testu przed zmianą i po niej nie ma potwierdzenia, że przyczyną było Accurate ECN.