Como bloquear todas as portas, exceto 80.443, com o iptables? [duplicado]


14

Bloquear todas as portas (entrada e saída) é fácil, mas é difícil com a palavra "exceto". Não conheço nenhuma regra que satisfaça a condição.

PS: Eu sei que esta pergunta não é novidade. Mas, na verdade, não encontrei nada que ajude. Então, me ajude pls!


Você não pode fechar TODAS as portas e ABRIR uma única porta na próxima linha?
sinni800

Eu faço isso: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACEITAR ------ Não está funcionando!
user71169

Respostas:


24

Primeiro o! é o símbolo NÃO.

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

Segundo, as regras que você escreveu podem não ter os resultados esperados. Você elimina tudo, incluindo a resposta à conexão na porta 80. Portanto, não será possível conectar-se a ela para fins de um servidor da web.

Essas regras permitem conexões RELACIONADAS e ESTABELECIDAS, para que um servidor web funcione, se é isso que você está tentando 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

2
Não deve !ser evitado assim \!, se o shell Bash for usado?
Cristian Ciupitu

@CristianCiupitu Não, não deve ser necessário escapar. Você pode ter algo estranho acontecendo, mas na minha festa não preciso escapar disso.
22614 cybernard

Eu verifiquei a saída do "iptables -nvL" para ver os pacotes em conexão. Parece funcionar, suas regras. Mas não consigo verificar se realmente funciona ou não, exceto usando alguns aplicativos que usam essas portas. Um aplicativo usa uma porta não significa que ele usa apenas essa porta. Então, alguma sugestão para verificar?
user71169

1
@cybernard, sim, você está certo. Uma planície !não precisa ser escapada. Desculpe pelo alarme falso.
Cristian Ciupitu

3
As regras do @MohammadShahid não são permanentes automaticamente, reinicializam e desaparecem e você pode fazer o login. Você precisa adicionar 22 à lista de portas se quiser manter uma conexão ssh.
cybernard

5
# 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

Isso deve lhe dar o que você precisa


3
Lembre-se você estiver conectado através de SSH você deve abrir a porta TCP 22
Maximilian Ast

Sim, não se esqueça da sua porta SSH, provavelmente você deve adicionar sua porta SSH antes de definir a política padrão para cair. ;)
James Little

3

Você pode definir sua ação padrão como DROP e, em seguida, criar regras de exceção para permitir 80 e 443, da seguinte maneira:

# 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

O iptables percorrerá a lista de 'exceções' até encontrar uma correspondência. Ele executará a ação especificada pelo -jparâmetro (ACEITAR neste caso). Se não encontrar uma correspondência, retornará à política padrão e descartará o pacote.

Observe que, com esta solução alternativa, todos os subdomínios serão bloqueados. Por exemplo, com esse método, ele funcionará em www.mydomain.com, mas seu subdomínio, digamos www.sub.mydomain.com, não será aberto por erros de DNS.


Deveria ser trabalho, mas não é. Estou tão confusa.
user71169

O que não funciona? Permite todos os pacotes recebidos, ou nenhum? Você pode atualizar sua pergunta com a saída de iptables -nvL?
mtak

Por que o voto negativo? Eu tenho isso rodando em produção, então tenho 100% de certeza de que funciona.
mtak

Desculpe! Não sou eu, alguém fez isso :)) Sim, com certeza eu sou, mas não é trabalho. É por isso que tenho que fazer a pergunta.
user71169

2
Não faça isso de novo ssh.
Ashesh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.