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

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

# 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? Если да, в чем разница?

28 голосов | спросил Mikhail Morfikov 15 Jpm1000000pmWed, 15 Jan 2014 19:06:59 +040014 2014, 19:06:59

1 ответ


31
  

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

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

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

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

  

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

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

http://www.chiark.greenend.org.uk/~peterb /сеть /дроп-против-отклонять

  

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

     

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

     

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

     

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

     

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

     

Заключение

     

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

ответил janos 15 Jpm1000000pmWed, 15 Jan 2014 19:25:02 +040014 2014, 19:25:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132