ODRZUĆ vs DROP, gdy używasz iptables

89

Czy jest jakiś powód, dla którego chciałbym mieć

iptables -A INPUT -j REJECT

zamiast

iptables -A INPUT -j DROP
Mike B.
źródło

Odpowiedzi:

79

Zasadniczo używaj REJECT, jeśli chcesz, aby drugi koniec wiedział, że port jest nieosiągalny - używaj DROP do połączeń z hostami, których ludzie nie chcą widzieć.

Zwykle wszystkie reguły połączeń w sieci LAN powinny używać ODRZUCENIA. W przypadku Internetu, z wyjątkiem identyfikatora na niektórych serwerach, połączenia z Internetu są zwykle ZATRZYMANE.

Użycie DROP sprawia, że ​​połączenie wydaje się być z niezajętym adresem IP. Skanery mogą nie kontynuować skanowania adresów, które wydają się niezajęte. Biorąc pod uwagę, że NAT może być wykorzystywany do przekierowania połączenia na zaporze, istnienie dobrze znanej usługi niekoniecznie wskazuje na istnienie serwera pod adresem.

Identyfikator należy przekazać lub odrzucić na dowolny adres świadczący usługę SMTP. Jednak użycie wyszukiwań Ident przez serwery SMTP przestało być używane. Istnieją protokoły czatu, które również opierają się na działającej usłudze tożsamości.

EDYCJA: Podczas korzystania z reguł DROP: - Pakiety UDP zostaną upuszczone, a zachowanie będzie takie samo, jak połączenie z niechronionym portem bez usługi. - Pakiety TCP zwrócą ACK / RST, który jest taką samą odpowiedzią, jak odpowiedź otwartego portu bez usługi. Niektóre routery będą odpowiadać za pomocą i ACK / RST w imieniu serwerów, które są wyłączone.

Podczas korzystania z reguł REJECT wysyłany jest pakiet ICMP wskazujący, że port jest niedostępny.

BillThor
źródło
5
To nie jest prawda. Nawet jeśli reguła mówi „DROP”, system nadal odpowie na przychodzący pakiet za pomocą TCP SYN / ACK, jakby był otwarty. Aby naprawdę upuścić pakiet, system musi odpowiedzieć za pomocą protokołu TCP RST / ACK - dla którego nie ma reguły zapory. W związku z tym najlepszą konfiguracją zapory ogniowej jest ta, w której przekazywane są tylko wybrane porty. Twoja reguła DROP zareklamuje Twoją zaporę ogniową, a skanery portów będą wiedzieć, że coś zapora ogniowa i wciąż wbija Cię w nadzieje na złapanie zapory.
Dagelf
2
Chodzi mi o to, że można wykryć z zewnątrz, czy coś zapory firewall, czy nie z powodu samego faktu, że twój stos TCP zachowuje się inaczej, gdy DROP, niż gdy nie masz usługi działającej w pierwszej kolejności!
Dagelf
2
Nie zmienia to faktu, że istnieją botnety wykorzystujące różnicę i w konsekwencji monitorujące twoje porty.
Dagelf
1
cokolwiek robisz, bądź konsekwentny. jeśli atakujący wybierze nieużywany numer portu i spróbuje się połączyć, powinien otrzymać taką samą odpowiedź, jak gdyby wybrał numer, który celowo blokujesz. udzielenie innej odpowiedzi mówi mu, że coś tam jest. np. może użyć purtnumber, który daje inną odpowiedź, aby określić, którego serwera bazy danych używasz, może dostosować wstrzyknięcie SQL do tego serwera ...
user313114
5
@Dagelf, skąd otrzymujesz informację, że DROP wysyła odpowiedź? To wielka wiadomość i jest sprzeczna ze wszystkim, co zaobserwowałem i powiedziano mi. Czy masz link do dokumentacji opisującej to zachowanie?
Score_Under
27

Różnica polega na tym, że cel REJECT wysyła odpowiedź odrzucającą do źródła, podczas gdy cel DROP nic nie wysyła.

Może to być przydatne np. Dla usługi ident. Jeśli użyjesz REJECT, klienci nie będą musieli czekać na przekroczenie limitu czasu.

Więcej o tym: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html

Zizzencs
źródło
2
Cel DROP nic nie wysyła. Sprawdź mój komentarz do zaakceptowanej odpowiedzi i przejdź do tematu, jeśli jesteś zainteresowany szczegółami!
Dagelf
8

Zwykle chcesz zignorować sondy atakujących do niektórych portów, co oznacza, że ​​nie chcesz odsyłać odpowiedzi „odmowa połączenia”. „Odmowa połączenia” oznacza: „jest tutaj serwer” i prawdopodobnie przekazuje więcej informacji, podczas gdy upuszczenie pakietu nie daje wskazówek na temat wersji oprogramowania, możliwych luk w zabezpieczeniach, a nawet faktu, że serwer nasłuchuje na twoim adresie IP.

Powyższe jest jednym z głównych powodów, dla których warto użyć DROP zamiast REJECT.

wzzrd
źródło
6
Bez reguł iptables, domyślnie zamknięty port to REJECT. Jeśli DROP usuwasz z każdego portu, jest to dobra alternatywa (twój host wydaje się nieczynny), ale jeśli DROP tylko określone porty, w rzeczywistości dajesz im więcej informacji niż REJECT. Jeśli ktoś użyje ogólnej sondy, takiej jak nmap, określone porty, które upuszczają pakiety, pojawią się jako „przefiltrowane”, co oznacza, że ​​wiedzą, że masz tam usługę, którą ukrywasz.
Raptor007,
7

Widzę tu wiele sprzecznych odpowiedzi i biorąc pod uwagę, że jest to pierwszy artykuł w Google z odpowiednimi słowami kluczowymi; oto prawidłowe wyjaśnienie.
To proste:

DROP w ogóle nic nie robi z pakietem. Nie jest przekazywane do hosta, nie otrzymuje odpowiedzi. Strona podręcznika IPtables mówi, że upuszcza pakiet na podłogę, tzn. Nie robi nic z pakietem.

REJECT różni się od DROP tym, że wysyła pakiet z powrotem, ale odpowiedź jest tak, jakby serwer znajdował się w adresie IP, ale nie ma portu w stanie nasłuchiwania. IPtables wyśle ​​RST / ACK w przypadku TCP lub UDP nieosiągalny port docelowy ICMP.

Ecko
źródło
2
+1 ode mnie, ale odpowiedzi tak naprawdę się nie zgadzają. Wszyscy się zgadzają, o ile widzę, z wyjątkiem Dagelfa - który się myli.
MadHatter
Dobra, oto mała sztuczka dla ciebie: zrób „nmap localhost”. Teraz wybierz dowolny port, który nie jest „otwarty” ... i dodaj regułę, która „nic nie robi”, np .: „iptables -I INPUT -p tcp --dport 888 -j DROP”. Teraz ponownie „nmap localhost”. Co widzisz? ...
Dagelf,
4

Jeśli próbujesz całkowicie ukryć istnienie swojego komputera, -j DROPjest odpowiednie. Na przykład możesz użyć tego do zaimplementowania czarnej listy.

Jeśli próbujesz ukryć fakt, że port jest otwarty, powinieneś naśladować zachowanie, które miałoby miejsce, gdyby port nie był otwarty:

  • TCP: -p tcp -j REJECT --reject-with tcp-reset
  • UDP: -p udp -j REJECT --reject-with icmp-port-unreachable

Jeśli skaner portów wykryje, że kilka portów upuszcza pakiety, podczas gdy większość je odrzuca, może założyć, że upuszczone pakiety znajdują się na portach, które są otwarte, ale ukryte.

Raptor007
źródło
Co się stanie, jeśli otworzysz kilka portów (tj. 22, 25, 53, 80, 443), a następnie ZROBIĆ wszystko inne? Teraz, czy mam uruchomione MySQL, PostgreSQL, SQLite lub Cassandra ... skaner nie może powiedzieć, prawda?
Alexis Wilke,
@AlexisWilke W takim przypadku jedyną dodatkową informacją, którą podajesz skanerowi portów, jest to, że masz jakąś zaporę ogniową z domyślnymi zasadami DROP.
Raptor007
0

Pomimo wielu poprawnych odpowiedzi, tylko dwa centy:

Oto krótki PoC FW.IDS-DROP-vs-REJECT na ten temat w odniesieniu do zasad dotyczących systemu banów (firewall, IDS itp.).

Wkrótce:

  • DROP może być użyty do reaktywnych intruzów, jeśli banuje wszystkie porty (wygląda na to, że serwer jest wyłączony po stronie intruza)
  • REJECT --reject-with tcp-reset jest najlepszym wyborem do blokowania wielu portów, ponieważ wydaje się zachowywać jak prawdziwy zamknięty port
  • jeśli niektóre porty odpowiadają (intruz wie, że host żyje) DROPi REJECT(bez tcp-reset) da intruzowi „sygnał”, że coś tam blokuje (co może zachęcić go do kontynuowania „ataku” w nadziei na dostarczenie wymaganych danych w pewnym momencie)
sebres
źródło
-5

Tak, użycie DROP jest bezcelowe. Użyj REJECT.

Nawet jeśli reguła mówi „DROP”, system nadal odpowiada na przychodzącą SYN za pomocą TCP RST / ACK - co jest domyślnym zachowaniem dla portów bez uruchomionych usług. (tcpdump i in. nie rejestrują tego.)

Jeśli usługa jest uruchomiona, SYN jest spotykany z TCP SYN / ACK.

Ponieważ DROP nie reaguje normalnie za pomocą TCP SYN / ACK, ale zamiast niego za pomocą RST / ACK, twoja reguła DROP zareklamuje twoją zaporę ogniową, a skanery portów będą wiedzieć, że coś zapora ogniowa i może wciąż wkuwać cię w nadziei łapania zapory.

To jest teraz nmap może zgłaszać „przefiltrowane” zamiast „zamknięte” na przykład:

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http
1111/tcp filtered lmsocialserver

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -D INPUT 1

W związku z tym jedyną „niewidzialną” konfiguracją zapory ogniowej jest taka, w której dedykowane urządzenie znajduje się między urządzeniami i tylko selektywnie przesyła porty.

Jeśli naprawdę chcesz zadzierać z podstawowymi skanerami, możesz TARPIT połączenia tcp, które ustawiają okno TCP na 0, aby żadne dane nie mogły zostać przesłane po otwarciu połączenia, ignorując żądania zamknięcia połączenia, co oznacza, że ​​skaner musi czekać do przekroczenia limitu czasu połączenia, jeśli chce się upewnić. Ale atakujący może wykryć to bardzo łatwo i skrócić swój limit czasu.

Biorąc wszystko pod uwagę, prawdopodobnie najlepiej jest po prostu użyć REJECT - lub umieścić dedykowane urządzenie przekierowujące porty między serwerem a Internetem.

Lub po prostu uruchamianie usług na komputerach internetowych, które nie wymagają zapory ogniowej.

Zasadniczo REJECT jest najlepszy dla serwerów internetowych, ponieważ każda usługa próbuje uzyskać do niego dostęp (prawdopodobnie częściej niż ty) szybko otrzyma odpowiedź, a użytkownicy lub inne usługi nie będą czekać, zastanawiając się, czy nie ma awarii sieci.

Dagelf
źródło
5
Ta odpowiedź jest niepoprawna. Za pomocą tcpdump można łatwo pokazać, że reguła DROP spowoduje, że system nie wyśle ​​ŻADNEJ odpowiedzi - jak można by się spodziewać. A stwierdzenie „Aby naprawdę upuścić pakiet, system musi odpowiedzieć za pomocą protokołu TCP RST / ACK”, nie ma sensu, ponieważ udzielenie odpowiedzi na cokolwiek oczywiście nie oznacza „prawdziwego upuszczenia pakietu”. Jeśli „naprawdę upuścisz” pakiet, po prostu nie odpowiadasz i jest to wyraźnie efekt reguły DROP.
Juliane Holzt,
3
Czy możesz podać źródło zarzutu, DROPktóry wyda SYN/ACK? Nigdy nie widziałem tego na moich maszynach.
motobói
2
@Dagelf W Twoim artykule jest napisane: „DROP (alias DENY, BLACKHOLE). Zabraniam przekazywania pakietów. Nie wysyłaj odpowiedzi”.
JeanT
Nie wysyła normalnej odpowiedzi, ale wysyła taką, jak wyjaśniono, niezależnie od tego.
Dagelf
3
Dokument, do którego prowadzi link, mówi: „ DROP ... nie wysyłaj odpowiedzi ” i, o ile widzę, nie wspiera twojego roszczenia, które DROPzwraca SYN/ACK. Ja też nigdy nie widziałem tego zachowania w żadnej wersji iptables. Jeśli masz źródło, które obsługuje twoje roszczenie, najlepiej byłoby je zobaczyć; z pewnością zrzuty pakietów, które właśnie wykonałem, nie wspierają twojego roszczenia.
MadHatter