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

12

Bloquear todas as portas (dentro e fora) é fácil, mas é difícil com a palavra "exceto". Eu não conheço nenhuma regra que satisfaça a condição.

PS: Eu sei que essa pergunta não é nova. Mas, na verdade, não achei nada que ajuda. Então, me ajude pls!

    
por user71169 17.06.2014 / 11:06

3 respostas

22

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

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

Em segundo lugar, as regras que você escreveu podem não ter os resultados esperados. Você solta tudo, incluindo a resposta à conexão na porta 80. Portanto, você não poderá se conectar a ela para os propósitos de um servidor da Web.

Essas regras permitem conexões RELACIONADAS e ESTABELECIDAS para que um servidor da Web funcione, se isso for de fato o 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
    
por 18.06.2014 / 03:46
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

    
por 17.06.2014 / 11:12
3

Você pode definir sua ação padrão como DROP e criar regras de exceção para permitir 80 e 443, assim:

# 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 passará pela lista de 'exceções' até encontrar uma correspondência. Em seguida, executará a ação especificada pelo parâmetro -j (ACCEPT, neste caso). Se não encontrar uma correspondência, ela retornará à política padrão e descartará o pacote.

Observação de que, com essa solução alternativa, todos os subdomínios serão bloqueados. Por exemplo, com este método você terá que trabalhar em www.mydomain.com tudo bem, mas seu subdomínio digamos que www.sub.mydomain.com não será aberto para erros de DNS.

    
por 17.06.2014 / 11:11