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 ...