Podczas korzystania z reguł zapory iptables, dlaczego potwierdzać stan NOWY na wszystkich dozwolonych portach?

23

Często widzę, że iptables są skonfigurowane tak, aby zezwalały wszystkim pakietom na POWIĄZANE połączenia, a określone porty usługi na NOWE połączenia.

Jaki jest powód podania NOWY? Jeśli połączenie nie jest NOWE, to chyba RELATED, więc określona reguła portu nie wykona żadnego. Dlaczego więc jawnie definiować porty serwisowe za pomocą NOWEGO, a nie tylko protokołu i numeru portu?

dronus
źródło

Odpowiedzi:

21

Reguły w zaporze sieciowej filtru sieciowego (iptables) są sprawdzane sekwencyjnie, a los pakietu (ACCEPT, DROP, REJECT itp.) Jest ustalany na podstawie pierwszego meczu.

Ustawiając zaporę stanową i pierwszą regułę, typowa -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTjest znaczna większość legalnego ruchu do serwera po przejściu tylko tej jednej reguły. Ten ruch nie musi przekraczać żadnych innych reguł.

W zależności od rozmiaru podstawy reguł, co może oznaczać znaczącą różnicę w wydajności zapory.

Jedynym ruchem, który zapora ogniowa musi teraz sprawdzić, są wyraźnie nowe połączenia.

To znaczy porównaj zaporę dla publicznego serwera WWW z dostępem dla garstki webmasterów ze swoich stacji roboczych:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Około 99% legalnych pakietów będzie należeć do ustanowionych połączeń, z zachowaniem tylko pierwszej reguły. Z pakietów, które nie pasują do tej reguły, większość powinna stanowić nowe połączenia z witryną, moduł wieloportowy może przyznać dostęp do HTTP lub HTTPS w ramach jednej reguły. Webmasterzy logują się z wielu stacji roboczych ze stałymi adresami przy użyciu ssh i sftp i wszystko inne jest odrzucane.

Zapora ogniowa, w której reguły są logicznie uporządkowane przez port TCP:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

Tutaj każdy pakiet do twojego serwera HTTP musiałby zostać sprawdzony pod kątem 5 reguł przed udzieleniem dostępu. A przy większej liczbie usług działających na serwerze, które mogą z łatwością stać się 50 regułami lub znacznie więcej, gdy na przykład użyjesz fail2ban lub podobnych produktów.

HBruijn
źródło
1
Doskonała odpowiedź (+1 ode mnie!), Z tą różnicą, że mówisz „ dostęp jest dozwolony na podstawie pierwszego meczu ”. Jeśli pierwszym dopasowaniem będzie DROP lub REJECT, nie pozwoli to na dostęp; jeśli jest to DZIENNIK, musisz kontynuować wyszukiwanie późniejszego dopasowania; a jeśli zaangażują się łańcuchy niestandardowe, sprawy mogą stać się barokowe. Powiedziałbym raczej, że „ los pakietu jest ustalany na podstawie pierwszego dopasowania ”.
MadHatter obsługuje Monikę
5
Czy możesz zastanowić się nad przypadkiem, w którym related/establishedlinia jest obecna, ale kolejne reguły nie zapewniają NEW?
Daniel Widrick
13

NEW oznacza, że ​​pakiet rozpoczął nowe połączenie.

Jest obsługiwane przez moduły jądra zwanych ip_conntrack_*które sprawiają, że Twój Firewall Stateful . Zapory stanowe mogą oglądać strumienie ruchu.

Jeśli podasz tylko protokół i numer portu, zapora sieciowa nie będzie stanowa, ale bezstanowa. Oznacza, że ​​po prostu ogranicza lub blokuje pakiety. Tego typu zapory ogniowe nie są świadome przepływów danych.

Dobrym przykładem jest FTP: aktywny FTP używa portu 21 dla kanału sterującego, ale następnie używa portu 20 dla kanału danych. W przypadku stanowej zapory ogniowej nie trzeba jawnie otwierać portu 20, ponieważ jest on związany z poprzednim nowym ustanowionym połączeniem na porcie 21.

Oto fragment iptablesstrony man:

NOWOŚĆ - co oznacza, że ​​pakiet nawiązał nowe połączenie lub w inny sposób jest powiązany z połączeniem, które nie widziało pakietów w obu kierunkach.

USTANOWIONO - oznacza, że ​​pakiet jest powiązany z połączeniem, które widziało pakiety w obu kierunkach.

POWIĄZANE - co oznacza, że ​​pakiet rozpoczyna nowe połączenie, ale jest powiązany z istniejącym połączeniem, takim jak transfer danych FTP lub błąd ICMP.

krisFR
źródło
1
Jaki mechanizm „skojarzy” port 20 z portem 21? Czy otwarte połączenie IP można przenieść na inny port?
dronus
nf_conntrack_ftp.ko
mateusza
7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

Powyższy zestaw reguł pozwoli pakietom na port TCP 22 ze stanem INVALIDprzelotuACCEPT

Nieprawidłowy : jeśli żaden z poprzednich stanów nie ma zastosowania, pakiet jest w stanie NIEPRAWIDŁOWYM. Może to być spowodowane różnymi rodzajami ukrytych sond sieciowych lub może oznaczać, że kończy Ci się liczba wpisów CONNTRACK (co również powinieneś zobaczyć w dziennikach). Lub może być po prostu całkowicie łagodny.

/unix/57423/how-to-understand-why-the-packet-was-consanted-invalid-by-the-iptables


Ustawienie STATE NEWzapewnia, że ​​pakiety NIEPRAWIDŁOWE nie zostaną przypadkowo przyzwolone.

I aby wyjaśnić znaczenie:

  • NOWOŚĆ : to nowe połączenia
  • ESTABLISHED : jest to pakiet zaangażowany w bieżące połączenie
  • POWIĄZANE : To jest nowe połączenie, ale zostało przewidywane przez istniejące połączenie
  • NIEPRAWIDŁOWE : Żadne z powyższych nie mają zastosowania.
Daniel Widrick
źródło