spójrzmy na te dwie reguły iptables, które są często używane, aby umożliwić wychodzący DNS:
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53
-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024:65535
-m state --state ESTABLISHED -j ACCEPT
Moje pytanie brzmi: jak dokładnie powinienem rozumieć stan USTANOWIONY w UDP? UDP jest bezpaństwowcem.
Oto moja intuicja - chciałbym wiedzieć, czy jest to nieprawidłowe:
Strona podręcznika mówi mi to:
stan
Ten moduł, w połączeniu ze śledzeniem połączeń, umożliwia dostęp do stan śledzenia połączenia dla tego pakietu. --stan ...
Iptables w zasadzie pamięta numer portu, który został użyty dla pakietu wychodzącego (co jeszcze mógłby zapamiętać dla pakietu UDP?) , A następnie zezwala na pierwszy przychodzący pakiet, który jest wysyłany z powrotem w krótkim czasie? Osoba atakująca musiałaby odgadnąć numer portu (czy to naprawdę byłoby zbyt trudne?)
O unikaniu konfliktów:
Jądro śledzi, które porty są blokowane (przez inne usługi lub przez poprzednie wychodzące pakiety UDP), aby porty te nie były wykorzystywane w nowych wychodzących pakietach DNS w określonym czasie? (Co by się stało, gdybym przypadkowo próbował uruchomić usługę na tym porcie w określonym przedziale czasowym - czy próba ta zostałaby odrzucona / zablokowana?)
Proszę znaleźć wszystkie błędy w powyższym tekście :-) Dzięki,
Chris
źródło
echo "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
NB: Ta odpowiedź została zredagowana.
Pomimo tego, co mówią strony podręcznika,
ESTABLISHED
wydaje się oznaczać „stanowy”. W przypadku UDP oznacza to po prostu (jak sugerujesz) zapamiętywanie przez pewien czas każdego wychodzącego pakietu UDP (krotka „src ip, src port dst ip, dst port”) i rozpoznawanie jego odpowiedzi.FWIW, moje normalne reguły dla ruchu DNS wyglądałyby mniej więcej tak:
tj. kontroluj ruch w
OUTPUT
łańcuchu, a następnie pozwóliptables
modułom stanu obsłużyć wszystko inne wINPUT
łańcuchu.Zobacz także to powiązane pytanie .
źródło
RELATED
pakiety UDP dla RTP.Twórcy iptables uznali, że stanem „USTANOWIONYM” była sytuacja, w której pakiety były widziane w obu kierunkach, niezależnie od protokołu między dwoma klientami.
rozszerzenie stanu jest częścią conntrack. Jądro rozumie stan z tabeli
Przykład stanów iptable dla UDP w tabeli nf_conntrack z punktu widzenia nadawcy. Wyobraźmy sobie, że wysyłasz zapytanie DNS na UDP
Pakiet został wysłany. Nie odpowiedział i och, tabela zawiera dane tego, czego się oczekuje w zamian (pakiet odpowiedzi DNS).
Odpowiedź nadeszła, brak odpowiedzi, oznacza to, że połączenie UDP jest w USTAWIENIU przez krótki czas zdefiniowany w twoim systemie.
źródło