Testowanie zmian w zaporze sieciowej bez zamykania sobie drogi
Uporządkuj ścieżki odzyskiwania, zanim reguła wejdzie, a potem weryfikuj przepływem, który nowa polityka musi ocenić, a nie sesją, która przetrwała.
Reguła wchodzi, terminal, który już masz, nadal odpowiada, a następne logowanie jest odrzucane. Ta luka to cała trudność testowania zmiany zapory przez połączenie, które właśnie zmieniasz. Śledzenie połączeń decyduje raz, a potem przestaje patrzeć, więc ustalony przepływ jest jedynym testem, który nie może zobaczyć nowej polityki. Dalej porównano trzy drogi powrotu, a następnie ustalono kolejność zmieniania i sprawdzania reguł.
Dlaczego ocalała sesja jest najsłabszym dowodem
Zapora stanowa ocenia pierwszy pakiet przepływu i trzyma ten wyrok tak długo, jak żyje wpis. Reguły dodane później dotyczą przepływów, które zaczynają się później, dlatego okno, w którym piszesz, pozostaje użyteczne, podczas gdy wszyscy inni są odrzucani. To, czego się z niego dowiesz, opisuje politykę obowiązującą kilka minut temu. Nawet przechwycenie zrobione na tym przepływie pokazuje decyzję, którą maszyna już podjęła.
Traktuj działającą sesję jako wyjście awaryjne, a nie pomiar. Każdy test, który ma sens, musi otworzyć nowy przepływ ze źródła, które oceni nowa reguła, a pierwszy test powinien być tym, którego porażka boli najbardziej. Gdy ta sesja jest jedyną drogą do środka, zmiana nie jest gotowa do wprowadzenia.
Trzy drogi powrotu, uporządkowane według tego, od czego zależy każda
Uporządkuj opcje według tego, jak bardzo zależą od testowanego urządzenia, bo do tej kolejności sięgasz, gdy reguła okaże się błędna. Konsola, która nigdy nie przechodzi przez zaporę, jest niezależna, przećwiczony powrót prawie tak, a już otwarta sesja nie.
| Way back in | What it survives | Where it fails |
|---|---|---|
| out-of-band or hypervisor console | a policy that blocks new logins | needs separate access you have already tried |
| rollback rehearsed on that platform | a rule that breaks remote access | fails when nobody ever ran it |
| the session that is already open | the change itself | cannot show whether new flows work |
Przed zmianą zaloguj się przez konsolę i udowodnij, że działa, bo ścieżka poza pasmem, której nigdy nie użyłeś, jest schematem, a nie planem awaryjnym. Powrót zasługuje na swoje miejsce dopiero po ćwiczeniu na tej platformie, z tym zestawem reguł, według zatwierdzonej procedury, a nie improwizacji na żywej maszynie. Zapisz kroki i poproś kogoś innego o ich odczytanie. Jeśli sekwencja potrzebuje twojej pamięci, by się zakończyć, to nie jest plan.
Jedna zmiana, potem połączenie, które trzeba ocenić
Zapisz działający zestaw reguł i plik, który jest jego właścicielem, a następnie wykonaj jedną wąską zmianę. Jedna zmiana na test pozwala przypisać wynik; dwie naraz zostawiają działającą maszynę i brak pojęcia, która zmiana wykonała pracę. Tam, gdzie platforma potrafi przeanalizować konfigurację bez jej wczytywania, zrób to najpierw, żeby literówka zawiodła, gdy nic nie jest na szali.
nft list ruleset > /root/ruleset.before
nft -c -f /etc/nftables.conf
Następnie uruchom nową sesję ze źródła, do którego będzie pasować zmieniona reguła, gdy konsola jest jeszcze podłączona. Powtórz raz, jeśli się uda, bo pierwsza próba może trafić na wpis, który tabela już miała. Jeśli się nie uda, nadal masz drogę do środka i decyzję do wycofania, a to najtańszy zły wynik, jaki jest dostępny.
Liczniki, stan i plik odpowiadają na różne pytania
Każda z trzech obserwacji może z osobna wydawać się przekonująca i mylić cię co do dwóch pozostałych. Liczniki pokazują, czy właśnie utworzony przepływ dotarł do edytowanej reguły. Tabela stanu pokazuje, które przepływy maszyna uznaje za już ustalone, i tak zepsuta reguła nadal może wyglądać zdrowo. Zapisany plik pokazuje, co urządzenie zrobi po następnym przeładowaniu, a to może nie być to, co robi teraz działający zestaw reguł.
ss -tn state established
Czytaj liczniki jako deltę, a nie sumę, bo jedyną liczbą, która ma znaczenie, jest ta, którą przesunął twój przepływ testowy. Reguła, której licznik nigdy nie rośnie, nie pasuje, choćby na papierze wyglądała najpoprawniej. Potwierdź też przypadek odrzucenia: polityka, która nigdy niczego nie odrzuciła, nigdy nie dowiodła, że odrzuca to, co chciałeś zablokować. Przejdź przez jeden interfejs w każdej rodzinie, którą wdrożenie naprawdę niesie, bo reguła v4 nie mówi nic o przepływie v6.
Przywróć z zapisanego zestawu reguł, a potem doprowadź plik do zgodności
Gdy zmiana zawiedzie, wczytaj zapisany zestaw reguł zamiast dodawać reguły zezwalające, aż logowania znów zaczną działać. Każde dodatkowe zezwolenie ucisza objaw i zostawia dziurę, która przeżyje incydent i pamięć o nim. Przywróć, połącz się ponownie, a potem trzymaj nieudane porównanie obok zapisu tego, czego próbowałeś.
Po udanej zmianie spraw, by plik na dysku opisywał działający zestaw reguł, i potwierdź, że przeładowanie go odtwarza. Działający zestaw reguł, który oddalił się od własnego pliku konfiguracji, to pułapka zastawiona na następny restart.