2014-06-17 09:06:40 +0000 2014-06-17 09:06:40 +0000
15
15

Como bloquear todas as portas excepto 80.443 com iptables?

Bloquear todas as portas (dentro e fora) é fácil, mas é difícil com a palavra “excepto”. Não conheço nenhuma regra que satisfaça a condição.

PS: Sei que esta pergunta não é novidade. Mas, na verdade, não encontrei nada que ajude. Por isso, ajudem-me!

Respostas (3)

25
25
25
2014-06-18 01:46:30 +0000

Primeiro o ! é o símbolo do NOT.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Segundo, as regras que escreveu podem não ter os resultados esperados. Deixa-se cair tudo, incluindo a resposta à ligação na porta 80. Por conseguinte, não poderá ligar-se a ela diz para efeitos de um servidor web.

Estas regras permitem conexões RELACIONADAS e ESTABELECIDAS, pelo que um servidor web deve funcionar, se é isso que está de facto a tentar fazer.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
5
5
5
2014-06-17 09:12:54 +0000
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Isto deve dar-lhe o que precisa

3
3
3
2014-06-17 09:11:51 +0000

Pode definir a sua acção padrão para DROP, e depois criar regras de excepção para permitir 80 e 443, como tal:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS

iptables irá percorrer a lista de ‘excepções’ até encontrar uma correspondência. Depois executará a acção especificada pelo parâmetro -j (ACEITO, neste caso). Se não encontrar uma correspondência, voltará à política padrão e largará o pacote.

Nota que, com este trabalho, qualquer sub-domínio será bloqueado. Por exemplo, com este método, tê-lo-á a funcionar em www.mydomain.com tudo bem, mas digamos que o seu subdomínio www.sub.mydomain.com não será aberto para erros DNS.