Odpowiedzi:
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.
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
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.
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.
Jeśli próbujesz całkowicie ukryć istnienie swojego komputera, -j DROP
jest 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:
-p tcp -j REJECT --reject-with tcp-reset
-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.
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 portDROP
i 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)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.
DROP
który wyda SYN/ACK
? Nigdy nie widziałem tego na moich maszynach.
DROP
zwraca 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.