Voltar ao blog

Configurando um Firewall Iptables: Regras e Comandos Básicos

Configurando um Firewall Iptables: Regras e Comandos Básicos

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 ​iptables terá 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:

Iptables Firewall 1

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:

Iptables Firewall 2

O comando acima normalmente funciona para versões do Ubuntu posteriores à 16.04. Se você estiver usando uma versão anterior, use este comando:*

  • 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:

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:

Iptables Firewall 3

  • 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:

Established and Related Incoming Connections

  • 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:

Established Outgoing Connections

  • 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:

Internal to External

  • 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:

Dropping Invalid Packets

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.

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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.

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:

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:

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:​

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:

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:

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:

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:

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!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.