Há um exemplo de regras do iptables no wiki do 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
Alguns dias atrás, meu amigo me perguntou por que há REJECT
nas três últimas regras. Ele me disse que deveria haver DROP
, e mencionou algo sobre melhor segurança no caso de DROP
.
Então, eu tenho duas perguntas:
O que as três regras fazem?
Faz alguma diferença quando eu coloco lá
DROP
no lugarREJECT --reject-with
? Se sim, qual a diferença?
Respostas:
Essas três regras parecem bastante auto-explicativas:
Se você está procurando mais detalhes (sobre pacotes UDP / TCP, ICMP), precisa pesquisar em documentos de rede e talvez
man iptables
também.Faz diferença. E, ao contrário da crença popular,
DROP
não oferece melhor segurança do queREJECT
. Incomoda usuários legítimos e, efetivamente, não oferece proteção contra usuários mal-intencionados. Este post explica o raciocínio em detalhes:http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject
fonte