Como posso bloquear todas as portas, exceto três, no Ubuntu?

22

Como posso bloquear todas as portas, exceto 1962, 999, 12020?

Uma porta para SSH e duas outras para um tipo de script. Então, é necessário permitir a saída nessas portas, certo?

Meus iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Desculpe, mas sou um novato de verdade quando se trata dessas coisas e só quero tornar meu servidor mais seguro.

okapa
fonte
Por que não usar UFW?
Soviero 27/02/12

Respostas:

25

No começo, você deve sempre lavar para ter certeza do que já está definido ... nada

iptables -F

Em seguida, defina a política padrão da cadeia INPUT como DROP se o final for alcançado e nenhuma regra corresponder:

iptables -P INPUT DROP

Para garantir que o loopback não seja afetado, você deve adicionar

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

para permitir todo o tráfego no lo-if e todo tráfego de entrada para as conexões que você estabeleceu. Depois disso, adicione todas as regras necessárias para seus serviços (não esqueça de abrir o ssh se precisar! Caso contrário, você estará fora) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Um pequeno truque que faço para impedir a mim e a outros de perfurar acidentalmente a segurança, finalmente adiciono:

iptables -A INPUT -j DROP

Essa linha corresponde a tudo para a cadeia INPUT e a política não deve receber nada. A vantagem disso é que, mesmo se você adicionar uma regra ACEITAR algum tempo depois de inicializar seu conjunto de regras, ela nunca será verificada porque tudo foi descartado antes. portanto, você precisa manter tudo em um só lugar.

Para sua pergunta, a coisa toda se parece com isso em resumo:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP
Mose
fonte
1
Apenas para esclarecer: -Pdefine a política na cadeia. Na verdade, não está adicionando uma regra. A política da cadeia indica a ação a ser executada no pacote se o fim da cadeia for atingido. Por isso, é inteligente adicionar suas regras antes de definir uma DROPpolítica.
Belmin Fernandez
Se bem me lembro, normalmente não importa onde definir a política ... talvez eu deva dar uma pequena edição à minha resposta.
27412 Mose
3
uma observação: tenha muito cuidado ao definir a política padrão negar e liberar ao configurar um firewall via ssh. Você vai se trancar. Sim, eu fiz isso. :-) Agora eu normalmente faço a última regra iptables -A INPUT -j DROP, por esse mesmo motivo.
Sirex
Eu destaquei minha ssh aviso um pouco ;-)
Mose
@Mose: Corrija isso não importando em geral. Eu estava tentando destacar isso. Mas isso pode causar o bloqueio, como já foi mencionado heh.
Belmin Fernandez
20

Uma resposta de um novato como você :-) Eu também precisava proteger meu servidor Ubuntu, aprender o iptables foi uma dor que não consegui superar. O UFW (Uncomplicated Firewall) é um programa que facilita a configuração do firewall.

  • instale o ufw:

    sudo apt-get install ufw
    
  • desative-o imediatamente (eu tive que resgatar a inicialização porque estava bloqueado em meu próprio login SSH):

    sudo ufw disable
    
  • defina "negar" como regra padrão (isso bloqueia todas as portas):

    sudo ufw default deny
    
  • permitir portas necessárias:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • se você tiver certeza de que as regras acima não interrompem sua conexão ssh, ative o ufw:

    sudo ufw enable
    

Os documentos são bem escritos e fornecem mais exemplos: https://help.ubuntu.com/community/UFW

Vlad Gerasimov
fonte
1
Ao trabalhar com configurações de firewall, pode ser uma boa ideia criar uma tarefa cron que desative o firewall novamente. Apenas no caso de você ficar trancado.
Pymkin 19/04
Note que isto não funciona com o ufw 0.35, lançando erros como ERROR: Bad destination addresseERROR: Bad source address
Dave
E como permitir todas as portas, exceto uma porta para uma interface específica? Estou usando a regra de negação padrão e quero bloquear a porta 53 da DNS na interface Ethernet para evitar vazamentos de DNS ao usar uma VPN. Atualmente, tenho que permitir todas as portas que desejo usar para intervalos de IP privados, o que não é muito conveniente.
baptx