Лучше ли установить -j REJECT или -j DROP в iptables?


33

Вот пример правил iptables в archlinux wiki:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

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

Итак, у меня есть два вопроса:

  1. Что делают три правила?

  2. Имеет ли какое-то значение, когда я положил туда DROPна место REJECT --reject-with? Если да, в чем разница?


Ответы:


33

Что делают три правила?

Эти 3 правила кажутся довольно очевидными:

  1. Отклонить входящие пакеты UDP с сообщением ICMP «Порт недоступен»
  2. Отклонить входящие TCP-пакеты с помощью «сброса tcp»
  3. Отклонить входящие пакеты (любого другого протокола) с сообщением ICMP «Протокол недоступен»

Если вам нужна более подробная информация (о пакетах UDP / TCP, ICMP), вам нужно изучить сетевые документы и, возможно, man iptablesтоже.

Есть ли какая-то разница, когда я ставлю туда DROP вместо REJECT --reject-with? Если да, может кто-нибудь объяснить мне разницу, я буду очень признателен.

Это имеет значение. И вопреки распространенному мнению, DROPне дает лучшую безопасность, чем REJECT. Это доставляет неудобства законным пользователям и фактически не защищает от злонамеренных. Этот пост подробно объясняет причины:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

Обычная причина использования DROP, а не REJECT, состоит в том, чтобы не выдавать информацию о том, какие порты открыты, однако отбрасывание пакетов дает столько же информации, сколько и отклонение.

С помощью REJECT вы выполняете сканирование и классифицируете результаты на «соединение установлено» и «соединение отклонено».

С помощью DROP вы классифицируете результаты на «соединение установлено» и «время ожидания истекло».

Самый простой сканер будет использовать вызов "connect" операционной системы и будет ждать, пока одна попытка подключения не будет завершена, прежде чем начинать следующую. Этот тип сканера будет значительно замедлен, отбрасывая пакеты. Однако, если атака устанавливает время ожидания 5 секунд для каждой попытки подключения, можно сканировать каждый зарезервированный порт (1..1023) на машине всего за 1,5 часа. Сканирование всегда автоматизировано, и злоумышленнику все равно, что результат не мгновенный.

Более сложный сканер будет отправлять пакеты сам, а не полагаться на реализацию TCP операционной системы. Такие сканеры быстры, эффективны и безразличны к выбору REJECT или DROP.

ВЫВОД

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


@janos - не могли бы вы написать немного больше о том, что на самом деле происходит, когда пакет достигает каждого из трех правил?
Михаил Морфиков

3
@Kiwy - прочитай ссылку и попробуй сам. DROP не дает лучшей безопасности, чем REJECT. Это доставляет неудобства законным пользователям и фактически не защищает от злонамеренных. Это связано с тем, что законные пользователи страдают от медленного соединения в ожидании истечения времени ожидания соединения, а взломщики просто настраивают свои инструменты, чтобы не ожидать истечения времени ожидания. тот факт, что соединение медленное (из-за ожидания ожидания), показывает, что ваш сервер находится там и защищен брандмауэром.
Пантера

2
Я не согласен с таким выводом. Отклонение генерирует ICMP-ответ, который может быть проанализирован. На основании этого анализа хорошие механизмы атаки могут определить используемую ОС. Так что в системе, где все порты известны, сброс может быть лучше. Это относится к серверам в производственной среде.
Нильс

1
Брандмауэр, который только перенаправляет определенные порты, еще лучше. DROP a REJECT - это не то же самое, что абсолютно никакой сервис, работающий на первом месте. Многие сканеры портов помечают ваш хост как потенциальную цель для будущих сканирований в надежде поймать ваш брандмауэр, если они обнаружат там REJECTS или DROPS, так как оба могут быть обнаружены извне. chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf

1
Обратите внимание, что в цитируемом тексте есть еще один абзац, обновление, в котором говорится, что DROP лучше, если у вас DDoS-атака, которая встречается относительно редко, но когда это случается, вероятно, хорошо иметь ее ... что вы думаете?
Алексис Уилке
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.