Вопрос: REJECT vs DROP при использовании iptables


Есть ли причина, по которой я хотел бы иметь

iptables -A INPUT -j REJECT

вместо

iptables -A INPUT -j DROP

78
2017-07-04 09:49


Источник




Ответы:


Как правило, используйте REJECT, когда вы хотите, чтобы другой конец знал, что порт недоступен, используйте DROP для подключения к хостам, которые вы не хотите видеть.

Обычно все правила для соединений внутри вашей локальной сети должны использовать REJECT. Для Интернета, за исключением идентификатора на определенных серверах, соединения из Интернета обычно удаляются.

Использование DROP делает соединение видимым для незанятого IP-адреса. Сканеры могут не продолжать сканирование адресов, которые выглядят незанятыми. Учитывая, что NAT можно использовать для перенаправления соединения на брандмауэре, наличие хорошо известной службы необязательно указывает на существование сервера по адресу.

Идентификатор должен быть передан или отклонен по любому адресу, предоставляющему службу SMTP. Тем не менее, использование запросов Ident для SMTP-сервисов не используется. Существуют протоколы чата, которые также полагаются на службу рабочего идентификатора.

EDIT: При использовании правил DROP:  - UDP-пакеты будут отброшены, и поведение будет таким же, как подключение к порту без дополнительной защиты без обслуживания.  - TCP-пакеты возвращают ACK / RST, что является тем же самым ответом, что открытый порт без обслуживания на нем будет отвечать. Некоторые маршрутизаторы будут отвечать и ACK / RST от имени серверов, которые не работают.

При использовании правил REJECT отправляется ICMP-пакет, указывающий, что порт недоступен.


70
2017-07-04 16:40



Это неправда. Даже когда правило говорит «DROP», система все равно ответит на входящий пакет с TCP SYN / ACK, как будто он был открыт. Чтобы действительно отказаться от пакета, системе необходимо ответить с помощью протокола TCP RST / ACK, для которого нет правила брандмауэра. Таким образом, лучшая настройка брандмауэра - это та, где перенаправляются только выбранные порты. Правило DROP будет рекламировать ваш брандмауэр, а портовые сканеры будут знать, что вы что-то брандмауэры и продолжаете ударять вас в надежде поймать ваш брандмауэр. - Dagelf
@Dagelf Смотрите мое редактирование. RST / ACK не указывает сканерам, что вы брандмауэром ничего. Хотя некоторые хакеры могут продолжать исследовать после этого ответа, это должно основываться на знании ваших служб, а не ответах брандмауэра. Это определенно снизило количество и продолжительность сканирования, которые я испытываю. - BillThor
Я считаю, что снаружи обнаруживается, что вы что-то брандмауэры или нет, потому что только тот факт, что ваш стек TCP ведет себя по-разному, когда вы DROP, чем когда у вас нет службы, работающей в первую очередь! - Dagelf
Не меняет того факта, что есть ботнеты, использующие разницу и отслеживающие ваши порты. - Dagelf
@Dagelf, где вы получаете информацию, которую DROP отправляет? Это большая новость и противоречит всему, что я наблюдал, и мне сказали. У вас есть ссылка на документацию, описывающую это поведение? - Score_Under


Разница в том, что цель REJECT отправляет ответ отклонения источнику, в то время как цель DROP ничего не посылает.

Это может быть полезно, например, для службы идентификации. Если вы используете REJECT, тогда клиентам не нужно ждать тайм-аута.

Подробнее об этом: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


24
2017-07-04 09:59



Цель DROP ничего не посылает. Проверьте мой комментарий к принятому ответу и идите сами исследовать тему, если вы заинтересованы в деталях! - Dagelf


Обычно вы хотите игнорировать зонды от злоумышленников к определенным портам, под которыми я имею в виду, что вы не хотите отправлять обратно «отказ в соединении». «Соединение отказано» означает: «здесь есть сервер» и, возможно, отдает дополнительную информацию, в то время как удаление пакета не дает подсказки о версиях программного обеспечения, возможных уязвимостях или даже о том, что сервер прослушивает ваш IP-адрес.

Вышесказанное является одной из основных причин использования DROP вместо REJECT.


8
2017-07-04 13:09



Без правил iptables закрытому порту по умолчанию соответствует REJECT. Если вы DROP каждый порт, это прекрасная альтернатива (ваш хост появляется вниз), но если вы DROP только определенные порты, вы на самом деле даете им больше информации, чем REJECT. Если кто-то использует пробник, например nmap, определенные порты, которые отбрасывают пакеты, будут отображаться как «отфильтрованные», что означает, что они знают, что у вас есть служба, которую вы скрываете. - Raptor007


Здесь я вижу много противоречивых ответов, и это первая статья в Google с правильными ключевыми словами; вот правильное объяснение.
Это просто:

DROP ничего не делает с пакетом. Он не перенаправляется на хост, на него нет ответа. В manpage из IPtables говорится, что он упаковывает пакет на пол, т. Е. Ничего не делает с пакетом.

REJECT отличается от DROP тем, что он отправляет пакет обратно, но ответ такой, как если бы сервер находился на IP-адресе, но не имеет порт в состоянии прослушивания. IPtables отправит RST / ACK в случае TCP или с UDP, порт назначения ICMP недоступен.


6
2018-01-11 12:29



+1 от меня, но ответы действительно не соглашаются. Все они согласны, насколько я вижу, кроме Даггеля - кто не прав. - MadHatter
Хорошо, вот вам небольшой трюк: сделайте «nmap localhost». Теперь выберите любой порт, который не «открыт» ... и добавьте правило, которое «ничего не делает», например: «iptables -I INPUT -p tcp -dport 888 -j DROP». Теперь «nmap localhost» снова. Что ты видишь? ... - Dagelf


Если вы пытаетесь полностью скрыть существование вашей машины, -j DROPУместно. Например, вы можете использовать это для реализации черного списка.

Если вы пытаетесь скрыть тот факт, что порт открыт, вы должны имитировать поведение, которое произойдет, если порт не был открыт:

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

Если сканер портов видит, что несколько портов отбрасывают пакеты, а большинство отклоняет их, он может предположить, что упавшие пакеты находятся в открытых портах, но скрыты.


3
2017-08-13 01:29



Что делать, если вы открываете несколько портов (т. Е. 22, 25, 53, 80, 443), а затем DROP все остальное? Теперь, есть ли у меня MySQL, PostgreSQL, SQLite или Cassandra ... сканер не может сказать, не так ли? - Alexis Wilke
@AlexisWilke В этом случае единственной дополнительной информацией, которую вы предоставляете сканеру портов, является то, что у вас есть какой-то брандмауэр с политикой DROP по умолчанию. - Raptor007


Да, использование DROP бессмысленно. Используйте REJECT.

Даже когда правило говорит «DROP», система все еще отвечает на входящий SYN с помощью TCP RST / ACK - это поведение по умолчанию для портов без запущенных служб. (tcpdump и др. не регистрируют это.)

Если служба запущена, SYN встречается с TCP SYN / ACK.

Поскольку DROP не отвечает в обычном режиме с помощью TCP SYN / ACK, но вместо этого RST / ACK, ваше правило DROP будет рекламировать ваш брандмауэр, а портовые сканеры будут знать, что вы брандмауэры что-то и могли бы забивать вас в надежде улавливать ваш брандмауэр.

Теперь nmap может сообщать «фильтру» вместо «закрытого», например:

$ 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

Таким образом, единственная «невидимая» настройка брандмауэра - это та, где выделенное устройство находится между вашими устройствами и только выборочно пересылает порты.

Если вы действительно хотите общаться с базовыми сканерами, вы можете подключаться к TARP-соединениям TARPIT, которые устанавливают TCP-окно в 0, чтобы никакие данные не могли быть переданы после открытия соединения, игнорируя запросы на закрытие соединения, то есть сканер должен ждать для того, чтобы время ожидания соединения происходило, если оно хочет быть уверенным. Но для злоумышленника тривиально обнаружить это и сделать его тайм-аут очень коротким.

Все, что вам нужно подумать, вам, вероятно, лучше всего использовать REJECT - или разместить специализированное устройство переадресации портов между вашим сервером и Интернетом.

Или просто запускайте службы на ваших интернет-компьютерах, которые не требуют брандмауэра.

Как правило, REJECT лучше всего подходит для веб-серверов, поскольку любой сервис пытается получить к нему доступ (возможно, чаще всего вы) быстро получит ответ, а пользователи или другие службы не будут ждать ожидания, если произойдет отключение сети.


-3



Этот ответ неверен. С tcpdump можно легко показать, что правило DROP приведет к тому, что система не отправит ЛЮБОЙ ответ - как и следовало ожидать. И ваше утверждение «Чтобы действительно отказаться от пакета, система должна ответить с помощью TCP RST / ACK», не имеет смысла, поскольку ответ на что-либо явно не «действительно отбрасывает пакет». Если вы «действительно отказываетесь» от пакета, вы просто не отвечаете, и это явно влияет на правило DROP. - Juliane Holzt
Не могли бы вы предоставить источник утверждения о том, что DROP выдает SYN/ACK? Я никогда не видел этого на своих машинах. - motobói
@Dagelf В вашей статье говорится: «DROP (иначе DENY, BLACKHOLE) Запретить передачу пакета. Не отправлять ответ». - JeanT
Он не отправляет нормальный ответ, но отправляет его, как объяснено, независимо. - Dagelf
В документе, на который вы ссылаетесь, говорится:DROP ... Отправить ответ», и, насколько я вижу, не поддерживает ваше утверждение о том, что DROP возвращает SYN/ACK, Я тоже никогда не видел такого поведения в любой версии iptables, Если у вас есть источник, который поддерживает ваше требование, было бы очень полезно его увидеть; конечно, пакеты, которые я только что сделал, не поддерживают ваше требование. - MadHatter