Dlaczego nie zablokować ICMP?

53

Myślę, że prawie mam ukończoną konfigurację iptables w moim systemie CentOS 5.3. Oto mój skrypt ...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

W kontekście ten komputer jest hostem aplikacji wirtualnego serwera prywatnego.

W poprzednim pytaniu Lee B powiedział, że powinienem „trochę zablokować ICMP”. Dlaczego nie po prostu całkowicie go zablokować? Co by się stało, gdybym to zrobił (co złego by się stało)?

Jeśli muszę nie blokować ICMP, jak mogę bardziej go zablokować?

Agvorth
źródło
4
iptables -A INPUT -j DROP <źle (opinia) powinieneś ustawić politykę na iptables -P INPUT DROP, co jest w zasadzie takie samo jak ustawienie domyślne. ODRZUĆ DOMYŚLNIE.
Xenoterracide
2
Dowiedz się, dlaczego zablokowanie icmp jest złym pomysłem: security.stackexchange.com/a/22713/485
Rory Alsop,

Odpowiedzi:

117

ICMP to znacznie więcej niż „traceroute” i „ping”. Służy do przesyłania informacji zwrotnych po uruchomieniu serwera DNS (portu nieosiągalnego), który w nowoczesnym serwerze DNS może faktycznie pomóc w wyborze innej maszyny, która będzie szybciej wyszukiwać.

ICMP jest również, jak wspomniano powyżej, wykorzystywany do wykrywania ścieżki MTU. Możliwe, że Twój system operacyjny ustawia „DF” (nie fragmentuj) na wysyłanych pakietach TCP. Oczekuje, że otrzyma z powrotem pakiet „wymaganej fragmentacji” ICMP, jeśli coś wzdłuż ścieżki nie obsłuży tego rozmiaru pakietu. Jeśli zablokujesz cały ICMP, twoja maszyna będzie musiała użyć innych mechanizmów awaryjnych, które w zasadzie wykorzystują limit czasu do wykrycia „czarnej dziury” PMTU i nigdy nie będą poprawnie optymalizowane.

Ponadto powinieneś zadać sobie pytanie, dlaczego chcesz zablokować ICMP. Czego konkretnie próbujesz tutaj zapobiec? Jest całkiem jasne, że nie rozumiesz, do czego służy ICMP, co jest dość powszechne. Byłbym bardzo ostrożny w blokowaniu czegoś, czego nie do końca rozumiesz.

Aby jeszcze trudniej się o tym dowiedzieć, wiele popularnych książek o zaporach mówi „blokuj ICMP” - jasne jest, że ich autorzy nigdy nie czytali RFC ani nie musieli rozwiązywać problemów związanych z takimi poradami. Złą radą jest blokowanie całego ICMP.

Teraz ograniczenie prędkości może również boleć. Jeśli Twój komputer jest zajęty, a nawet nie, możesz uzyskać duży ruch ICMP. Mój serwer internetowy prawdopodobnie otrzymuje około 10-100 pakietów ICMP na minutę, z których większość to odkrycie PMTU. Nawet jeśli ktoś zdecyduje się zaatakować mój serwer pakietami ICMP jakiegoś typu, to naprawdę nie jest taka wielka sprawa. Jeśli twój komputer akceptuje nawet jedno połączenie TCP (ssh, http, mail, itp.), Istnieje większe prawdopodobieństwo, że będzie to większy wektor ataku niż kiedykolwiek źle zrozumiany ICMP.

Michael Graff
źródło
4
Nie mógłbym tego lepiej powiedzieć. +1
Massimo,
9
Istnieje jeden typ ICMP, który może być szkodliwy dla tego redirecttypu. To jedyny typ ICMP, jaki należy rozważyć w przypadku blokowania.
Hubert Kario
2
@Hubert byłoby bardzo pomocne, gdybyś mógł znaleźć link do dodatkowych porad na temat blokowania redirect. Rozumiem teraz, że powinienem to rozważyć, ale nie mam nic lepszego - wciąż nie mogę zdecydować w ten czy inny sposób :) Czy to ryzyko, czy nie?
RomanSt
Komunikat przekierowania ICMP informuje host (routery nigdy nie powinny ich akceptować), że taka i taka podsieć lub host są dostępne w innej bramie (zwykle przez szybszy router). Przynajmniej tak mówi RFC1122.
Hubert Kario,
2
Uważam, że przekierowania są domyślnie ignorowane w systemie Linux. Ale tak, lepiej to przefiltrować.
Fox
26

ICMP jest używany do szeregu funkcji diagnostycznych (np. Ping, traceroute) i kontroli sieci (np. Wykrywanie PMTU). Bezkrytyczne blokowanie ICMP powoduje u innych ludzi zgagę i jeśli nie wiesz dokładnie, co robisz, powinieneś zostawić to w spokoju.

womble
źródło
14

Nigdy nie zrozumiałem, dlaczego ludzie taktują ICMP, jak powiedziano powyżej, tylko powodują bóle głowy dla ciebie i innych. Możesz ustalić, czy host działa wystarczająco łatwo i dopóki jest wystarczająco ograniczony, aby nie być używany jako DOS, nigdy nie słyszałem żadnych istotnych powodów, aby go zablokować. (Jeśli ktoś może wymyślić powód, proszę opublikować)

Odszczepienie
źródło
5
Jest to część kultu bezpieczeństwa informacji. Ludzie bezpieczeństwa czują, że nie muszą uzasadniać rzeczy, ponieważ zwykli śmiertelnicy nie są w stanie zrozumieć konsekwencji bezpieczeństwa. Z drugiej strony, bóle głowy administratora sieci i systemu można przypisać zwykłemu lenistwu. W końcu, gdyby administratorzy wiedzieli, co się dzieje, rzeczy nigdy by się nie
zepsuły
po prostu wydaje mi się dziwne zabijanie narzędzi diagnostycznych ze względu na to; ponieważ informacje, którymi mógłby zainteresować się atakujący, można uzyskać, zakładając, że na komputerze działa jakakolwiek inna usługa. Masz rację; wydaje się to bardzo „kultowe”, nie pytaj tylko.
Antitribu
6
Nigdy nie zrozumiałem, dlaczego autorzy książek o zaporach ogniowych całkowicie tęsknią za tym, że ICMP to coś więcej niż „ping” i „traceroute”, a jednak książki i blogi oraz JAK-TO wszyscy mówią „blokuj ICMP”.
Michael Graff
1
poziomy i poziomy tego, twoja odpowiedź została właściwie przegłosowana, dobrze ujęta. W większości wiem, że kiedy jest zablokowany, nigdy nie można do końca powiedzieć, co się dzieje z przerywanymi rzeczami, szczególnie gdy po drodze jest wiele bloków ICMP.
Antitribu
8

możesz po prostu spróbować ograniczyć icmp w ten sposób, że nie może być użyty jako atak DOS. ale istnieje zbyt wiele narzędzi do rozwiązywania problemów, takich jak ping, mtr (nie pamiętam odpowiednika systemu Windows), traceroute (tracert), które używają icmp. ich całkowite upuszczenie jest po prostu głupie. Jest to dobry sposób na sprawdzenie, czy instancja działa, nawet jeśli nie można telnetować na żadnym porcie.

--limit 10/second
do twoich reguł icmp jest prawdopodobnie przyzwoity limit, biorąc pod uwagę, ile komputer naprawdę może obsłużyć.

ksenoterracid
źródło
6

Oto alternatywny punkt widzenia w duchu sugestii teorii bezpieczeństwa. Inne plakaty mają rację, że praktyki bezpieczeństwa są często nadgorliwe, ale ich podstawa jest dobra.

Teoria bezpieczeństwa polega na tym, że włączasz tylko to, czego potrzebujesz. Inne rzeczy (które mogą być przydatne - np. Odpowiedzi ping) mogą zostać wykorzystane przez atakującego do ograniczenia zasięgu systemu lub ewentualnie jako wektor ataku w przypadku niektórych luk, które dopiero zostaną odkryte.

Patrząc na typy komunikatów ICMP, czego POTRZEBUJESZ do normalnej, poprawnej pracy systemu?

  • echo odpowiedz (ping) - nie za bardzo
  • cel nieosiągalny - tutaj znajdziesz wiele przydatnych informacji. Wyłącz to, a niektórzy klienci utracą dostęp do serwera.
  • tłumienie źródła - przestarzałe od 1995 r. i najwyraźniej usunięte z implementacji hosta od (najpóźniej) 2005 r. tools.ietf.org/html/rfc6633#section-1.
  • przekierowanie - prawie na pewno nie
  • reklama i pozyskiwanie routerów - nie ma potrzeby, jeśli statycznie konfigurujesz swoje trasy, i może być używany do DoS. Zablokowałbym go, chyba że wiesz, że go potrzebujesz, a jeśli potrzebujesz, koduj regułę, aby akceptować informacje tylko z możliwych znanych routerów.
  • przekroczono ttl - nie tylko dla traceroute, informuje, że ruch nie dociera do miejsca docelowego

...i tak dalej. Jeśli naprawdę chcesz to zrozumieć, dowiedz się o różnych typach ICMP i do czego służą. Artykuł w Wikipedii jest dobrym punktem wyjścia.

W praktyce naprawdę brzydkie jest przekierowanie; jeśli chcesz zrobić coś szybko i pożytecznie, zablokuj to i pozwól reszcie.

Dodałbym, że śledzenie połączeń IPtables pozwoli na odpowiednie zwracanie pakietów ICMP dla aktywnych połączeń. Więc jeśli korzystasz z conntrack, powinieneś być w stanie zablokować większość przychodzących ICMP, o ile akceptujesz POWIĄZANE pakiety (zanim zablokujesz ICMP w zestawie reguł).

Dan Pritts
źródło
2
W rzeczywistości wygaszanie źródła jest przestarzałe od 1995 r. I najwyraźniej zostało usunięte z implementacji hosta od (najpóźniej) 2005 r. :). tools.ietf.org/html/rfc6633#section-1 .
sourcejedi 20.04.2013
odpowiedź zaktualizowana, dziękuję. Gdybym myślał nieco trudniej, zapamiętałbym to.
Dan Pritts,
Myślę, że ICMP PING jest wymagany do wykrywania PMTU (z którego korzysta wiele przeglądarek i narzędzi). Nie zezwalanie na to jest jak brak uprzejmości wobec użytkowników. Ping jest również wykorzystywany do wielu celów diagnostycznych i pozwala na to większość dużych graczy. Poza tym niedozwolenie jest niewielkie.
jjmontes
2
Pakiety echa (ping) nie są wymagane do wykrywania PMTU. Wykrywanie PMTU odbywa się przez ustawienie bitu Don't Fragment (DF) na pakietach wychodzących i zależy od miejsca docelowego ICMP Unreachable - fragmentacja potrzebowała komunikatów wracających z routerów z mniejszymi MTU łącza. Ping jest z pewnością przydatny do celów diagnostycznych, ale jest także użyteczny do rozpoznania sieci i potencjalnie do DoS. Wszyscy wiemy, że w stosie ICMP w systemie Linux jest ukryty błąd zdalnego rootowania. Jeśli twoim standardem jest „czy potrzebuję tego”, odpowiedź brzmi „nie”.
Dan Pritts
1
(Zwróć uwagę, że w odpowiedzi napisałem, że blokowanie nieosiągalnych wiadomości o miejscu docelowym spowoduje uszkodzenie. Odkrycie PMTU było właśnie tym, o czym myślałem.)
Dan Pritts,
4

Jest to przydatne narzędzie diagnostyczne do rozwiązywania problemów z łącznością sieciową.

Umożliwia także korzystanie z połączeń w innym miejscu w Internecie, które używają mniejszych MTU niż w Twojej sieci. Jeśli spróbujesz wysłać pakiet w miejsce, które jest zbyt duże i nie można go podzielić na fragmenty, urządzenie upuszcza pakiet i wysyła potrzebny pakiet fragmentacji ICMP z powrotem do nadawcy. Jeśli upuścisz wszystkie pakiety ICMP, stracisz je i wydarzy się coś dziwnego w twojej sieci.

Prawdziwe pytanie brzmi „po co blokować ICMP?” Co zyskujesz Po prostu miej dobre zasady filtrowania na granicy i przed cennymi aktywami.

Chris
źródło
3

ping jest dobrym narzędziem diagnostycznym, naprawdę będziesz chciał, abyś go kiedyś miał. Używam tych:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

możesz też chcieć go zdławić.

neoice
źródło
8
Jest to żałośnie nieodpowiednie z powodów wskazanych przez innych ( ICMP to znacznie więcej niż tylko ping ). Powinieneś selektywnie blokować określone, potencjalnie szkodliwe wiadomości ICMP i zezwalać na inne wiadomości kontrolne poprzez niezrozumiałe.
voretaq7
2

Obecnie nawet ograniczenie pakietów ICMP po stronie serwera może powodować ból głowy podczas ataków DDoS. Ataki najczęściej wykonywane przez wysyłanie ogromnych okien ICMP do jednego serwera, a jeśli serwer próbuje odpowiedzieć na każdy z nich, zgadnij, co się stanie?

Najważniejsze, że mamy serwer teamspeak, który dostaje złe pakiety każdego dnia, było kilka dni w ciągu dwóch miesięcy, że mieliśmy trochę „wolnego czasu”. To, co zrobiliśmy, jest całkowicie wyłączone / zablokowane odpowiedzi ICMP, nie mamy serwerów DNS na serwerze, żadnych serwerów NTP, żadnych serwerów poczty, żadnych serwerów FTP, tylko dwa apache i teamspeak. wszystkie porty, które są niepotrzebne dla usług, są wyłączone. Planujemy zablokować nawet ssh i pozostawić tylko dwa porty otwarte. Obecnie istnieje 21 tys. (!) Stałych zakazów.

Sytuacja polega na tym, że atakujący używają głównie tunelowania ICMP, a kilka naprawdę interesujących linii dziennika zostało omówionych z administratorami serwera i powiedzieli, że mają włączone żądania ICMP serwera, więc atakujący wykorzystali to do tunelowania ataku przez nie i atakowania nas. Brzmi dziwnie, ale to prawda.

Jeśli nie potrzebujesz diagnostyki serwera i jeśli możesz całkowicie zablokować żądania lub je przefiltrować, aby na przykład upuścić ogromne okna, zrób to. Sugeruję również całkowite zablokowanie: Chiny, Korea, Tajlandia, Turcja, ponieważ większość adresów IP pochodzi właśnie z tego kraju. Miałem całe listy inetnum tych krajów, ale prawie każdego dnia pojawiają się nowe.

Mówię, co robię, jeśli się nie zgadzasz - nie rób tego. Proste. Powodzenia

Andrius Lukminas
źródło
0

Jako minimum powinieneś zezwolić na przekazywanie icmp typów 3 (miejsce docelowe nieosiągalne), 4 (tłumienie źródła) i 11 (przekroczenie czasu). Wszystkie te typy służą do rozwiązywania problemów z siecią i nie powinny być filtrowane.

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(Typ gaszenia źródła jest obecnie nieaktualny, ale otwarcie go nie zaszkodzi)

telewizory
źródło
-2

Zezwalam na ruch ICMP z lokalnego intranetu, blokuję go z Internetu. W ten sposób mój serwer jest prawie niewidoczny online (odpowiada tylko na niestandardowy port SSH).

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

Spowoduje to wstawienie go po standardowej pętli zwrotnej, ustanowieniu, białej liście LAN, białej liście dostawców VOIP i AKCEPTACJACH portów SSH. Pozwalam na ruch, który chcę, a następnie staram się, aby serwer był niewidoczny dla reszty świata.

Dan
źródło
1
Myślę, że rozumiem, co próbujesz powiedzieć, ale to nie koreluje z tabelami, które napisałeś. Jeśli upuszczasz określone typy ICMP, to co dzieje się z tymi nieokreślonymi ??? Zakładam, że domyślnie zezwala, w przeciwnym razie po co określać blok, gdy byłby on nieodłączny. Następnie powiesz „Zezwalam na ruch, który chcę”, co wskazywałoby na Default-Deny lub Default-Drop… w zasadzie twoja odpowiedź jest niespójna i co najwyżej myląca.
JM Becker