Iptables: ctstate de saída redundante ESTABLISHED, regra RELACIONADA antes de regras de porta individuais

0

Meu Iptables para se conectar ao VPS usando o ip estático X.X.X.X e permitir que o VPS atualize e instale pacotes

*filter

#Allow all loopback (lo0) traffic and reject traffic
#to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A OUTPUT -o lo -j ACCEPT

#Allow traffic from address X.X.X.X
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Allow DNS
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Allow HTTP
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Allow HTTPS
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Reject everything else
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP

COMMIT

Pergunta: por que a regra é

-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

desnecessário?

As outras 3 regras de saída,

-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT

-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT

são para --ctstate ESTABLISHED e apenas para as portas 53,80,443

Existe uma diferença ao adicionar RELATED ao ctstate ?

Se as atualizações forem apenas de mirrors.linode.com , posso melhorar ainda mais as regras usando -s mirrors.linode.com ? E se o hostname ip mudar muitos meses depois?

    
por Joey 02.10.2017 / 13:10

1 resposta

1

Você não precisa dessas regras :

-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Eles devem ser substituídos por um único:

-A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Explicação: essa regra é necessária para receber tráfego de conexões que o host é iniciado . Esta regra não se aplica à conexão iniciada por hosts remotos .

As regras do Iptables estão sendo aplicadas aos pacotes em determinada ordem que você define .

Se pacotes estão chegando ao host, eles são colocados na cadeia INPUT e o iptables aplica as regras INPUT. Vamos converter suas regras por correntes:

*filter

-A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT

-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT

-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP

COMMIT

Eu deletei todos os comentários para reduzir a resposta.

Responda às suas perguntas.

Esta regra :

-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

permite todo o tráfego do sistema local para o host remoto quando a conexão é iniciada pelo host remoto. Em outras palavras: essa regra permite que seu host responda por conexões remotas. Esta regra é necessária para o trabalho normal.

RELATED são necessários para novas conexões que iniciaram dentro de outra sessão permitida . (por exemplo, conexões ftp passivas com intervalos de portas dinâmicas).

A má idéia de digitar o nome DNS nas regras do iptables - a resolução do nome ocorre uma vez quando as regras do iptables são carregadas. E outras razões ...

    
por 02.10.2017 / 14:32

Tags