Вот пример правил 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
.
Итак, у меня есть два вопроса:
Что делают три правила?
Имеет ли какое-то значение, когда я положил туда
DROP
на местоREJECT --reject-with
? Если да, в чем разница?
Ответы:
Эти 3 правила кажутся довольно очевидными:
Если вам нужна более подробная информация (о пакетах UDP / TCP, ICMP), вам нужно изучить сетевые документы и, возможно,
man iptables
тоже.Это имеет значение. И вопреки распространенному мнению,
DROP
не дает лучшую безопасность, чемREJECT
. Это доставляет неудобства законным пользователям и фактически не защищает от злонамеренных. Этот пост подробно объясняет причины:http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject
источник