Introdução
Iptables é um utilitário de linha de comando firewall . Isso significa que é um software que permite configurar um firewall no seu sistema. Ele normalmente está disponível por padrão em Linux sistemas. Neste guia, nós iremos discutir algumas das regras e comandos comuns que acompanham o firewall iptables. Sempre que uma conexão tentar se estabelecer com o seu sistema, o firewall consultará essas regras para determinar qual deve ser o próximo passo da ação.
Comandos do Iptables
Este guia apresentará alguns dos comandos mais essenciais do iptables. Para seguir o guia, você precisará ter uma compreensão básica do que é o iptables e como ele funciona. Isso ajudará você a entender melhor as regras que está implementando com os seguintes comandos. Lembre-se de que qualquer um dos comandos fornecidos abaixo pode ser usado isoladamente. Por outro lado, você também pode combiná-los para atender às suas necessidades específicas.
Coisas a Ter em Mente
Antes de continuar a leitura, aqui estão algumas coisas que você deve ter em mente:
- A ordem das regras no iptables é importante.
- Para anexar uma nova regra ao final de uma cadeia, seu comando
iptablesterá que usar o-A. - Se você quiser anexar a regra em outra posição, terá que usar a opção
-I. Esta opção permite especificar a localização exata da regra. Se você quiser colocar a regra no início da cadeia, simplesmente não forneça um número de regra. - Para garantir que você tenha acesso consistente ao seu servidor, bloqueie o tráfego SSH na porta 22 por padrão.
- Caso você não faça isso e perca o acesso ao seu servidor, poderá se reconectar usando o console. Permita o tráfego SSH para alterar as configurações do firewall.
- Se você quiser revisar o conjunto de regras atualmente em vigor, use os comandos
sudo iptables -S e sudo iptables -L.
Além disso, temos um guia detalhado sobre como listar e excluir regras de firewall do iptables, o que ajudará ainda mais você a obter o melhor uso do seu firewall iptables.
Agora que já passamos pelos pré-requisitos, vamos mergulhar em alguns de os comandos comuns do iptables:
Como Salvar Suas Regras
Começaremos determinando como você pode salvar suas regras. É importante notar que as regras do iptables são efêmeras. Isso significa que elas serão perdidas após a reinicialização do sistema - a menos que você as salve. Veja como você pode salvar manualmente suas novas regras no servidor Ubuntu e CentOS respectivamente:
-
Ubuntu
A maneira mais fácil de salvar suas novas regras em um servidor Ubuntu é usar o pacote iptables-persistent. Você pode facilmente criar um servidor Ubuntu seguindo este tutorial.
Agora, o primeiro passo para salvar suas novas regras do iptables é instalar o pacote iptables-persistent usando o apt-get. Veja como você pode obtê-lo:
|
1 |
sudo apt-get install iptables-persistent |

Durante o processo de instalação, você precisa decidir se deseja salvar as regras de firewall atualmente em vigor. Para atualizar as regras e salvar as alterações, use este comando:
|
1 |
sudo netfilter-persistent save |

O comando acima normalmente funciona para versões do Ubuntu posteriores à 16.04. Se você estiver usando uma versão anterior, use este comando:*
|
1 |
sudo invoke-rc.d iptables-persistent save |
-
CentOS
Você pode configurar seu firewall com o iptables no CentOS 6 ou versões anteriores. O CentOS 7 usa o FirewallD em vez disso. Siga este tutorial para aprender como configurar o FirewallD no CentOS 7.
Você pode salvar suas novas regras no CentOS usando o script de inicialização do iptables . Veja o seguinte comando:
|
1 |
sudo service iptables save |
Este comando salvará suas novas regras para o firewall iptables. As regras do iptables atualmente ativas podem ser encontradas no /etc/sysconfig/iptables arquivo.
Comandos Úteis do Iptables
Agora, vamos passar para alguns comandos de firewall do iptables muito úteis que você pode precisar usar no seu servidor.
-
Conexões Loopback
Primeiro, vamos explorar como você pode permitir conexões de loopback. Seu sistema usa uma interface de loopback para enviar conexões para si mesmo. Por exemplo, imagine que você executou este comando: ping localhost ou ping 127.0.0.1. Seu servidor usará uma interface de loopback, ou uma lo, para essencialmente fazer ping em si mesmo. Outras vezes, o servidor pode usá-la se o seu servidor de aplicação estiver configurado para se conectar ao endereço ‘localhost’.
Independentemente de qual seja a situação, você precisa garantir que seu firewall iptables não bloqueie essas conexões. Portanto, você terá que permitir conexões de loopback para que essas funções ocorram.
Aqui estão os comandos que você executará para permitir todo o tráfego que entra na interface de loopback:
|
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |

-
Conexões de Entrada Estabelecidas e Relacionadas
Outro tipo de conexão que você pode precisar permitir é a conexão de saída. Para garantir que seu servidor esteja recebendo e enviando tráfego de entrada e saída, respectivamente, você precisa permitir conexões de entrada estabelecidas e relacionadas. Isso permite que o servidor envie tráfego de retorno para conexões de saída. Use este comando para permitir conexões de entrada estabelecidas e relacionadas:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
![]()
-
Conexões de Saída Estabelecidas
O servidor normalmente enviará respostas para conexões de entrada na forma de tráfego de saída de conexões estabelecidas. Para permitir isso, use o seguinte comando:
|
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
![]()
-
Interno para Externo
Às vezes, você pode até precisar configurar seu firewall para dar acesso interno ao externo. Por padrão, sua rede externa deve ser eth0 e eth1 deve ser sua rede interna. Se este for o caso, use este comando para habilitar o acesso:
|
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |

-
Descartando Pacotes Inválidos
Às vezes, alguns pacotes de tráfego de rede serão rotulados como inválidos. Na maioria das vezes, você pode simplesmente descartar esses pacotes inválidos. Para fazer isso, use the seguinte comando:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Regras para Bloquear Endereços IP
A seguir, veremos alguns comandos que você pode usar para bloquear conexões vindas de determinados endereços IP. Para facilitar as coisas, usaremos o endereço IP 15.15.15.51 como exemplo em nossos comandos. Você pode substituir esse valor pelo seu endereço IP específico.
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j DROP |
Em -s 15.15.15.51, o -s significa origem (source). Assim, o comando está especificando o endereço IP de origem ‘15.15.15.51.’ Da mesma forma, você pode especificar o endereço IP de origem em qualquer regra de firewall. Isso inclui as regras de permissão (allow) e rejeição (reject).
Se você quiser rejeitar a conexão, usará REJECT no lugar de DROP no comando, desta forma:
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j REJECT |
Como resultado, seu servidor retornará um erro de ‘conexão recusada’ sempre que aquele endereço IP específico enviar uma solicitação de conexão.
-
Bloqueando Conexões para uma Interface Específica
É possível bloquear todas as solicitações de conexão vindas de um endereço IP específico para uma interface de rede específica. Em nosso exemplo, o endereço IP é 15.15.15.51 e a interface de rede é eth0. Use este comando para bloquear as conexões:
|
1 |
iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP |
O melhor de tudo é que você pode especificar a interface de rede em qualquer regra. Isso significa que qualquer regra pode ser aplicada e limitada apenas a uma rede específica.
Regras para o Serviço: SSH
SSH torna-se relevante se você estiver usando um servidor em nuvem. Neste caso, você precisa permitir conexões SSH de entrada na porta 22. Habilitar essas conexões permite que você se conecte e gerencie seu servidor. Aqui, discutiremos uma série de regras comuns relacionadas ao SSH.
-
Permitindo Todas as Conexões SSH de Entrada
Os seguintes comandos ativam todas as conexões SSH de entrada:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
No conjunto acima, você só precisa usar o segundo comando se a política OUTPUT não estiver definida como ACCEPT. Ela permite o tráfego de saída de conexões SSH estabelecidas.
-
Permitindo SSH de entrada a partir de uma sub-rede
O comando anterior permite todas as conexões de entrada. Você pode usar os seguintes comandos para permitir apenas conexões de entrada de um endereço IP ou sub-rede específica. Digamos que você queira apenas permitir conexões de entrada da 15.15.15.0/24 sub-rede:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Assim como antes, você só precisa usar o segundo comando se a política OUTPUT não estiver definida como ACCEPT. Ela permite o tráfego de saída de conexões SSH estabelecidas.
-
Permitindo SSH de saída
Use estes comandos se a política do firewall OUTPUT não estiver definida como ACCEPT e você quiser ativar conexões SSH. Isso permitirá que seu servidor inicie conexões SSH com outros servidores:
|
1 2 |
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Para utilizar ainda mais o SSH em seus servidores em nuvem, dê uma olhada em nossos tutoriais sobre como usar o SSH para se conectar a um servidor remoto no Ubuntu e como configurar seu servidor Linux para usar autenticação baseada em chave SSH.
-
Permitindo Rsync de entrada a partir de uma sub-rede
Rsync é um recurso que você pode usar para transferir arquivos de um sistema para outro. Ele roda na porta 873. Portanto, se você quiser permitir conexões Rsync de entrada na porta 873 a partir de um endereço IP ou sub-rede específica, use os seguintes comandos:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Como você pode ver, especificamos o endereço IP de origem junto com a porta de destino. Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ela permite o tráfego de saída de conexões Rsync estabelecidas. Além disso, você pode dar uma olhada em nosso tutorial sobre como utilizar o Rsync para sincronizar diretórios locais e remotos em um VPS.
Regras para o Serviço: Servidor Web
As conexões HTTP são normalmente recebidas na porta 80. Da mesma forma, o HTTPS geralmente vem na porta 443. Servidores web como o Apache e o Nginx escutam essas portas para capturar solicitações de conexão. Às vezes, as configurações padrão podem fazer com que seu servidor negue ou descarte essas solicitações de entrada. É por isso que você precisará definir novas regras para permitir o tráfego.
-
Permitindo todas as conexões HTTP de entrada
Você pode permitir todas as conexões HTTP de entrada na porta 80 com estes comandos:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ela permite o tráfego de saída de conexões HTTP estabelecidas.
-
Permitindo todas as conexões HTTPS de entrada
Use estes comandos para permitir todas as solicitações de conexão HTTPS de entrada na porta 443:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política do firewall iptables OUTPUT não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões HTTP estabelecidas.
-
Permitindo todas as conexões de entrada de HTTP e HTTPS
Você pode usar o módulo multiport se quiser permitir o tráfego de ambas as portas HTTP e HTTPS. Use estes comandos se for o caso:
|
1 2 |
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões HTTP e HTTPS estabelecidas.
Regras para o serviço: MySQL
Às vezes, um cliente pode usar um servidor remoto para acessar seu servidor de banco de dados MySQL. Nesse caso, você precisa permitir manualmente o tráfego de entrada da porta relevante. O MySQL escuta solicitações de conexão na porta 3306.
-
Permitindo conexões MySQL de entrada a partir de uma sub-rede
Você terá que especificar a origem se quiser permitir conexões MySQL de uma sub-rede específica. Em nosso exemplo, permitiremos o tráfego de entrada da 15.15.15.0/24 sub-rede usando estes comandos:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões MySQL estabelecidas.
-
Habilitando conexões MySQL para uma interface
Se você também quiser especificar qual interface de rede deve receber as conexões MySQL, você pode usar estes comandos:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Neste caso, estamos permitindo as conexões para uma interface de rede privada chamada eth1.
Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões MySQL estabelecidas.
Você pode seguir nosso tutorial para uma configuração fácil do MySQL no seu servidor.
Regras para o serviço: PostgreSQL
Seu cliente pode usar um servidor remoto para acessar seu servidor de banco de dados PostgreSQL. Nesse caso, você precisa permitir essas conexões de entrada. Essas conexões virão através da porta 5432.
-
Permitindo conexões PostgreSQL de entrada a partir de uma sub-rede
Você pode usar os seguintes comandos para permitir conexões PostgreSQL de entrada de uma sub-rede ou endereço IP específico. Como você pode ver, especificamos a origem que é a 15.15.15.0/24 sub-rede.
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões PostgreSQL estabelecidas.
-
Habilitando conexões PostgreSQL para uma interface específica
Se você deseja permitir apenas conexões PostgreSQL para uma interface de rede específica, use estes comandos:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Neste caso, estamos permitindo as conexões para uma interface de rede privada chamada eth1. Você usará o segundo comando apenas se a política de OUTPUT do firewall não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões PostgreSQL estabelecidas.
Siga este tutorial para instalar o PostgreSQL no seu servidor Ubuntu.
Regras para o serviço: E-mail
Você também pode precisar configurar seu firewall de acordo com qualquer servidor de e-mail que esteja usando. Por exemplo, Sendmail e Postfix podem receber conexões em várias portas diferentes. Isso depende do protocolo que você usa para a entrega de e-mails. Para bloquear e permitir certas conexões de e-mail, você precisa saber qual protocolo está usando.
-
Permitindo conexões SMTP de entrada
As conexões SMTP normalmente entram pela porta 25. Embora o SMTP também use comumente a porta 587 para e-mails de saída. Para permitir que seu servidor responda a essas conexões, use os seguintes comandos:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política de OUTPUT do firewall não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões SMTP estabelecidas.
-
Permitindo todas as conexões IMAP de entrada
Para permitir que seu servidor responda a todas as conexões IMAP de entrada na porta 143, basta digitar e executar isto:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política de OUTPUT do firewall não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões IMAP estabelecidas.
-
Permitindo todas as conexões IMAPS de entrada
Use estes comandos para permitir que seu servidor responda a conexões IMAPS na porta 993:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política de OUTPUT do firewall não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões IMAPS estabelecidas.
-
Permitindo todas as conexões POP3 de entrada
Essas conexões virão na porta 993. Se você deseja que seu servidor responda a solicitações de conexão IMAPS, use os seguintes comandos:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política de OUTPUT do firewall não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões POP3 estabelecidas.
-
Permitindo todas as conexões POP3S de entrada
Use estes comandos para permitir que seu servidor estabeleça conexões com solicitações POP3S recebidas na porta 995:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Você usará o segundo comando apenas se a política do firewall OUTPUT não estiver definida como ACCEPT. Ele permite o tráfego de saída de conexões POP3S estabelecidas.
-
Como bloquear e-mails SMTP de saída
Em vez de permitir conexões de entrada e habilitar a resposta do servidor, você pode querer bloquear totalmente os e-mails de saída. Você pode bloquear todos os e-mails SMTP de saída na porta 25 usando este comando:
|
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
Como resultado, todo o tráfego de saída na porta 25 será rejeitado pelo firewall iptables. Você pode usar a mesma estrutura de comando se quiser rejeitar qualquer outro serviço. Tudo o que você precisa fazer é substituir a porta 25 pelo número da porta correspondente.
Conclusão
Este guia cobre os comandos essenciais do firewall iptables. Ele fornece as ferramentas essenciais que você precisa para configurar seu firewall iptables de forma eficaz. Tenha em mente que não existe uma solução única para todos os problemas. Esses comandos são extremamente flexíveis. Isso significa que você pode usá-los da maneira que melhor se adapte a você e às suas necessidades.
Boa computação!

Comentários
Nenhum comentário ainda. Seja o primeiro.