IPTABLES fica lento após adicionar '-A INPUT -j DROP' à lista de regras

8

Estou apenas começando com o iptables e me deparei com algo que eu realmente não entendo.

Para sua informação, segui as instruções do IptablesHowTo do wiki do Ubuntu .

As tabelas nat e mangle estão vazias, estou trabalhando apenas com a tabela de filtros no momento.

O problema

Se eu adicionar as seguintes regras do iptables:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

... então ainda tenho acesso à minha máquina via ssh, no entanto, todos os comandos do iptables levam cerca de um minuto ou dois para serem executados. Não é um problema de DNS, -nnão o altera.

A solução

Se eu liberar a tabela e adicionar essas três regras, tudo estará funcionando bem:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Alguém pode me explicar por que a primeira regra tem um impacto tão grande no iptables? Entendo que ele permite que sessões estabelecidas recebam tráfego, mas por que eu preciso se o ssh estiver aberto?

mohrphium
fonte
Em alguns casos, sudofaz pesquisas de DNS e, se estiverem bloqueadas, o comando será lento. Todos os seus outros iptablescomandos são prefixados sudo?
Ladadadada
Execute sudo strace …(a partir de um shell raiz) para ver o que está bloqueando.
Gilles 'SO- stop be evil'

Respostas:

3

Ele está realizando uma pesquisa de DNS e, como a resposta está bloqueada, leva um tempo para expirar.

Tente fazer o iptables -n ... para impedir a pesquisa de DNS.

O conntrack permite que as conexões sejam recebidas na porta efêmera criada para respostas a solicitações iniciadas por sua máquina (nesse caso, a solicitação de DNS). Sem permitir conexões ESTABELECIDAS ou RELACIONADAS, mesmo as respostas às suas solicitações são bloqueadas.

EG: Se você tentar acessar um site, mesmo que possa enviar a solicitação, a resposta do site será bloqueada.

user2371745
fonte
4

Com

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

sua máquina descartará cada pacote recebido, a menos que venha da porta SSH. É uma boa ideia se você deseja que essa máquina se comunique apenas via SSH. Caso contrário, você precisará adicionar

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

isso garantirá que você se conecte a algum servidor da Web em vez de se conectar de alguém.

edmz
fonte
Embora bons conselhos em geral, isso não responda à pergunta que realmente estava sendo feita.
Shadur
O @Shadur conntrack faz a diferença. Isso se opõe a soltar tudo.
Nils
Se você enviar uma solicitação genérica para um servidor Web através de uma máquina como neste caso, esta última não mostrará nada, pois o firewall não permite o envio de pacotes para uma máquina com uma conexão estabelecida.
Edmz
Mas mesmo se eu permitir apenas o ssh usando apenas os dois primeiros comandos, por que os comandos iptables demoram muito mais do que com a regra conntrack ... E a regra conntrack significa que eu poderia me conectar a um servidor da web? Isso não tornaria a regra da gota inútil?
mohrphium
Não, não seria. Com -m conntrackvocê, poderá ter outra "chance" de os pacotes serem aceitos antes de serem descartados, com certeza. Na máquina do cliente, você precisa ter iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT se quiser ver alguma resposta. No lado do servidor, apenas permita a conexão de entrada SSH e elimine todo o resto (se o servidor atuar apenas como um SSH). Espero que tudo esteja claro.
Edmz