Często widziałem, że zasada była -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
stosowana. Chociaż nie jestem ekspertem, ta konkretna linia dotyczy mnie. Jest całkiem oczywiste, że reguła zezwala na cały ruch z jedynym wyjątkiem, że połączenie musi zostać ustanowione lub powiązane z ustanowionym połączeniem.
Scenariusz
- Pozwolę na połączenia z domyślnym portem SSH
22
z serwerów LAN w podsieci192.168.0.0/16
lub cokolwiek innego. SuperInsecureApp®
odsłania coś na porcie1337
, co dodaję do mojegoINPUT
łańcucha.- Dodałem
conntrack
regułę do akceptowaniaESTABLISHED
iRELATED
ze wszystkich źródeł - Polityka łańcucha jest
DROP
Tak więc w zasadzie ta konfiguracja powinna umożliwiać połączenia SSH tylko z sieci LAN, jednocześnie dopuszczając ruch przychodzący do portu 1337 ze świata.
To tutaj rozkwita moje zamieszanie. Czy conntrack
w jakikolwiek sposób ujawniłby lukę w zabezpieczeniach, która pozwoliłaby uzyskać ustanowione połączenie na 1337 (ponieważ świat jest otwarty), a następnie wykorzystać to połączenie, aby uzyskać dostęp do portu SSH (lub dowolnego innego portu w tym zakresie)?
conntrack
reguła znajduje się na początku lub na końcu łańcucha? Z tego, co rozumiemiptables
, musiałoby przetwarzać wszystkie reguły na ustanowionych połączeniach, gdyby było na końcu, i tylko tę jedną regułę, gdyby została umieszczona na początku?ESTABLISHED i RELATED to cechy „stanowego” filtrowania pakietów, w których filtrowanie nie zależy tylko od statycznego zestawu reguł, ale także od kontekstu, w jakim brane są pod uwagę pakiety. Potrzebujesz ESTABLISHED, aby umożliwić działanie połączeń, i potrzebujesz POWIĄZANE dla odpowiednich komunikatów ICMP. Filtrowanie stanowe pozwala na dokładniejsze filtrowanie w porównaniu do statycznych reguł „bezstanowych”.
Najpierw spójrzmy na ESTABLISHED. Rozważmy na przykład TCP na porcie 22. Inicjator (klient) wysyła
SYN
doserverIPaddr:22
. Serwer wracaSYN+ACK
do klienta. Teraz nadeszła kolej klienta, aby wysłaćACK
. Jak powinna wyglądać reguła filtrowania na serwerze, abyACK
akceptować tylko „dopasowanie” ? Wyglądałaby ogólna zasada bezpaństwowcaco jest bardziej liberalne niż zgodnie z rządową zasadą. Reguła bezpaństwowcem umożliwia dowolne segmenty TCP, EG
ACK
lubFIN
bez nawiązaniu połączenia pierwszy. Skanery portów mogą wykorzystać takie zachowanie do pobierania odcisków palców w systemie operacyjnym.Teraz spójrzmy na POKREWNE. Służy to do komunikatów ICMP, głównie komunikatów o błędach. Na przykład, jeśli pakiet z serwera do klienta zostanie upuszczony, do serwera zostanie wysłany komunikat o błędzie. Ten komunikat o błędzie jest „powiązany” z wcześniej ustanowionym połączeniem. Bez ZWIĄZANEJ reguły należałoby albo ogólnie zezwolić na przychodzące komunikaty o błędach (bez kontekstu), albo, jak to jest w przypadku wielu witryn, całkowicie upuścić ICMP i poczekać na przekroczenie limitu czasu w warstwie transportowej. (Należy pamiętać, że jest to zły pomysł dla IPv6; ICMPv6 odgrywa ważniejszą rolę dla IPv6 niż ICMP dla starszych IP).
źródło