Guia essencial de iptables: comandos básicos para firewall no Ubuntu 24.04

Guia essencial de iptables: comandos básicos para firewall no Ubuntu 24.04
Guia essencial de iptables: comandos básicos para firewall no Ubuntu 24.04

é uma ferramenta essencial no Ubuntu 24.04 para controlar e proteger o tráfego de rede, permitindo criar regras de eficientes que garantem a segurança e o funcionamento correto do servidor.

Quer dominar o iptables no Ubuntu 24.04 para proteger seu servidor? Este guia acessível traz comandos essenciais para montar e gerenciar regras eficazes de firewall sem complicação. Vamos juntos explorar o básico e garantir sua segurança online!

Introdução ao iptables no Ubuntu 24.04

iptables é uma ferramenta essencial para controlar o tráfego de rede no Ubuntu 24.04. Ele funciona como um filtro, permitindo ou bloqueando pacotes de dados. Com ele, você pode proteger seu servidor de acessos indesejados e garantir que apenas conexões confiáveis sejam aceitas. Configurar regras no iptables ajuda a manter a segurança e o desempenho da rede. Não precisa ser um expert para entender seus ; com prática, é possível criar regras simples e eficientes que atendem às suas necessidades.

Como funcionam as tabelas e cadeias do iptables

No iptables, as tabelas são como categorias que organizam diferentes tipos de regras para o tráfego de rede. Cada tabela contém várias cadeias, que funcionam como listas onde as regras são aplicadas. As cadeias mais comuns são INPUT, OUTPUT e FORWARD. A cadeia INPUT controla os pacotes que entram no sistema, OUTPUT cuida dos que saem, e FORWARD gerencia o tráfego que passa pelo sistema para outras redes. Quando um pacote chega, ele é analisado pelas regras em cada cadeia para decidir se será aceito, rejeitado ou descartado. Essa estrutura ajuda a manter o controle e a organização das regras do firewall, garantindo que o tráfego seja tratado corretamente.

Regras comuns para conexões loopback

Conexões loopback são essenciais para o funcionamento do sistema. Elas permitem que o computador se comunique consigo mesmo, usando o endereço IP 127.0.0.1. No iptables, é comum criar regras que aceitam esse tráfego sem restrições. Isso evita problemas em aplicações que dependem dessa comunicação interna. Para garantir segurança, bloqueie outros tipos de tráfego que tentem usar esse canal indevidamente. Sempre permita o tráfego na interface lo, pois é a responsável pelo loopback. Com essa prática, seu servidor mantém o funcionamento correto sem abrir brechas para ataques.

Para aceitar todo o tráfego na sua interface de loopback, execute os seguintes comandos:sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Permitir conexões estabelecidas e relacionadas

Permitir conexões estabelecidas e relacionadas é fundamental para o funcionamento correto do firewall. Conexões estabelecidas são aquelas que já foram aceitas antes, como uma comunicação que já começou. Já as relacionadas são conexões novas que dependem de outras já abertas, como dados para uma conexão FTP. No iptables, geralmente usamos regras para aceitar esses pacotes automaticamente, sem precisar liberar tudo manualmente. Isso ajuda a manter a segurança e o tráfego fluindo normalmente. Assim, seu servidor responde rápido e evita bloqueios desnecessários.

Como o tráfego de rede geralmente precisa ser bidirecional (entrada e saída) para funcionar corretamente, é comum criar uma regra de firewall que permita o tráfego de entrada estabelecido e relacionado. Isso garante que o servidor permita o tráfego de retorno para conexões de saída iniciadas pelo próprio servidor. Este comando permitirá isso:sudo iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

Você pode querer permitir o tráfego de saída de todas as conexões estabelecidas, que normalmente são a resposta a conexões de entrada legítimas. Este comando permitirá isso:sudo iptables -A OUTPUT -m conntrack –ctstate ESTABLISHED -j ACCEPT

Regras para permitir SSH com segurança

Para permitir conexões SSH com segurança usando iptables, é importante liberar a porta padrão 22, que é usada pelo SSH. Use regras que aceitem pacotes apenas de endereços IP confiáveis, quando possível. Evite liberar o acesso para a internet inteira para prevenir ataques. Configurar limites para conexões também ajuda a proteger o servidor contra tentativas de invasão. Além disso, você pode usar rate limiting para controlar a frequência das conexões SSH, evitando ataques de força bruta. Essas medidas mantêm seu acesso remoto seguro e o servidor protegido.

Para permitir todas as conexões SSH de entrada, execute os seguintes comandos: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

Para permitir conexões SSH de entrada a partir de um endereço IP ou sub-rede específica, especifique a origem. Por exemplo, se você quiser permitir toda a 203.0.113.0/24sub-rede, execute os seguintes comandos:sudo iptables -A INPUT -p tcp -s 203.0.113.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

Se a sua OUTPUTpolítica de firewall não estiver configurada ACCEPTpara permitir conexões SSH de saída — ou seja, se o seu servidor iniciar uma conexão SSH com outro servidor — você pode executar os seguintes comandos: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

Liberar tráfego HTTP e HTTPS

Para liberar o tráfego HTTP e HTTPS, é preciso permitir as portas 80 e 443 no iptables. O HTTP usa a porta 80 para sites não seguros. Já o HTTPS usa a porta 443 e garante criptografia, protegendo os dados dos usuários. Para liberar o acesso, crie regras que aceitem pacotes nessas portas, tanto para entrada quanto para saída. Dessa forma, seu servidor pode receber e responder às conexões de navegação web normalmente. Liberar essas portas é essencial para servidores web, garantindo acessibilidade e segurança das informações.

Para permitir todas as conexões HTTP de entrada (porta 80), execute os seguintes comandos: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

O segundo comando, que permite o tráfego de saída de conexões HTTP estabelecidas , só é necessário se a OUTPUTpolítica não estiver definida como ACCEPT.

Para permitir todas as conexões HTTPS de entrada (porta 443), execute os seguintes comandos: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

O segundo comando, que permite o tráfego de saída de conexões HTTPS estabelecidas , só é necessário se a OUTPUTpolítica não estiver definida como ACCEPT.

Se você deseja permitir tráfego HTTP e HTTPS, pode usar o módulo multiport para criar uma regra que permita ambas as portas. Para permitir todas as conexões HTTP e HTTPS de entrada (portas 80 e 443), execute os seguintes comandos: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 –sports 80,443 -m conntrack –ctstate ESTABLISHED -j ACCEPT

O segundo comando, que permite o tráfego de saída de conexões HTTP e HTTPS estabelecidas, só é necessário se a OUTPUTpolítica não estiver definida como ACCEPT.

Configuração de firewall para MySQL

Para configurar o firewall para o MySQL, é importante liberar a porta padrão 3306 no iptables. Essa porta permite que clientes acessem o banco de dados remotamente. Contudo, liberar o acesso para todos não é seguro. O ideal é permitir conexões apenas de IPs confiáveis. Você pode criar regras específicas que aceitam tráfego da porta 3306 somente para endereços autorizados. Assim, evita ataques e mantém o banco protegido. Também é recomendável bloquear o acesso de IPs que não estejam na lista confiável.

Por exemplo, se você quiser permitir toda a 203.0.113.0/24sub-rede, execute os seguintes comandos:sudo iptables -A INPUT -p tcp -s 203.0.113.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

O segundo comando, que permite o tráfego de saída de conexões MySQL estabelecidas , só é necessário se a política OUTPUT não estiver definida como ACCEPT.

Para permitir conexões MySQL a uma interface de rede específica (por exemplo, uma interface privada em um servidor na nuvem), use estes comandos. Substitua o nome da interface pelo seu próprio (você pode verificar com `mysql ip link-i`):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

O segundo comando, que permite o tráfego de saída de conexões MySQL estabelecidas , só é necessário se a política OUTPUT não estiver definida como ACCEPT.

Configuração para PostgreSQL remoto

Para liberar o acesso remoto ao PostgreSQL, é preciso permitir o tráfego na porta padrão 5432 usando iptables. Essa porta é usada para comunicação entre clientes e o banco de dados. O ideal é criar regras que liberem essa porta somente para IPs confiáveis, evitando acessos indesejados. Assim, o banco fica protegido contra invasões externas. Além disso, é importante verificar o arquivo de configuração do PostgreSQL para aceitar conexões remotas e garantir que as senhas sejam fortes. Essas práticas mantêm seu banco seguro e acessível quando necessário.

Por exemplo, se você quiser permitir toda a 203.0.113.0/24sub-rede, execute os seguintes comandos:sudo iptables -A INPUT -p tcp -s 203.0.113.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

O segundo comando, que permite o tráfego de saída de conexões PostgreSQL estabelecidas , só é necessário se a política OUTPUTnão estiver definida como ACCEPT.

Para permitir conexões PostgreSQL a uma interface de rede específica, use estes comandos. Substitua o nome da interface pelo seu próprio (você pode verificar com ip link):

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

O segundo comando, que permite o tráfego de saída de conexões PostgreSQL estabelecidas , só é necessário se a política OUTPUT não estiver definida como ACCEPT.

Regras para servidores de e-mail (SMTP, IMAP, POP3)

Para configurar o firewall para servidores de e-mail, é importante liberar as portas usadas pelos protocolos SMTP, IMAP e POP3. O SMTP usa a porta 25 para envio de e-mails, enquanto o IMAP e o POP3 usam as portas 143 e 110, respectivamente, para receber mensagens. No iptables, crie regras que permitam o tráfego nessas portas, garantindo que seu servidor envie e receba e-mails corretamente. Além disso, permita também as versões seguras desses protocolos, que usam as portas 465 (SMTP SSL), 993 (IMAP SSL) e 995 (POP3 SSL), para proteger a comunicação. Essas regras ajudam a manter o servidor de e-mail funcionando com segurança e eficiência.

Para bloquear o envio de e-mails SMTP, que utiliza a porta 25, execute o seguinte comando:sudo iptables -A OUTPUT -p tcp –dport 25 -j REJECT

Para permitir que seu servidor responda a conexões SMTP na porta 25, execute os seguintes comandos:

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

Para permitir que seu servidor responda a conexões IMAP na porta 143, execute os seguintes comandos:

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

Para permitir que seu servidor responda a conexões IMAPS na porta 993, execute os seguintes comandos:

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

Para permitir que seu servidor responda a conexões POP3 na porta 110, execute os seguintes comandos:

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

Para permitir que seu servidor responda a conexões POP3S na porta 995, execute os seguintes comandos:

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

Bloqueio e rejeição de IPs específicos

No iptables, bloquear ou rejeitar IPs específicos ajuda a proteger seu servidor contra acessos indesejados. Para isso, você pode criar regras que neguem pacotes vindos de endereços IP maliciosos ou suspeitos. A diferença é que bloquear descarta o pacote silenciosamente, enquanto rejeitar envia uma resposta informando o bloqueio. Escolha a opção mais adequada para sua situação. Essas regras aumentam a segurança e evitam ataques de rede. Além disso, é possível combinar essas regras com outras para criar um firewall mais robusto e personalizado.

Para bloquear conexões de rede originadas de um endereço IP específico, 203.0.113.51por exemplo, execute este comando:

sudo iptables -A INPUT -s 203.0.113.51 -j DROP

Se, em vez disso, você quiser rejeitar a conexão, o que fará com que a solicitação de conexão retorne um erro de “conexão recusada”, substitua “DROP” por “REJECT”, assim:

sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

Para bloquear conexões de um endereço IP específico, por exemplo 203.0.113.51, para uma interface de rede específica, por exemplo eth0, use este comando:

sudo iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

Bloqueio de pacotes inválidos

Pacotes inválidos são dados de rede que não seguem as regras normais de comunicação. Eles podem ser sinais de ataques ou erros na conexão. No iptables, bloquear esses pacotes ajuda a proteger seu servidor contra problemas e invasões. Para fazer isso, você pode usar regras que identifiquem pacotes com sinais estranhos ou mal-formados e descartá-los automaticamente. Essa prática evita que pacotes suspeitos cheguem até o sistema, aumentando a segurança e a estabilidade da rede. Manter essas regras ativas é fundamental para um firewall eficiente.

Faça isso com este comando:

sudo iptables -A INPUT -m conntrack –ctstate INVALID -j DROP

Ativando IP forwarding para NAT

O IP forwarding permite que seu sistema encaminhe pacotes entre redes diferentes. Isso é essencial para o NAT (Network Address Translation), que esconde IPs internos na internet. Para ativar o IP forwarding no Linux, você pode usar o comando sysctl para alterar a configuração temporariamente. Também é possível editar arquivos de configuração para manter essa alteração após o reinício. Com o IP forwarding ativo, o servidor pode funcionar como um roteador, direcionando o tráfego corretamente entre as redes internas e externas. Essa configuração é vital para redes seguras e eficientes.

Antes de configurar o NAT ou o encaminhamento de portas, você deve habilitar o encaminhamento IPv4 para que o kernel possa rotear pacotes entre as interfaces:

sudo sysctl -w net.ipv4.ip_forward=1

Para que essa alteração seja permanente após reinicializações, edite o editor /etc/sysctl.confe certifique-se de que a seguinte linha esteja presente:

net.ipv4.ip_forward=1

Em seguida, aplique as configurações:

sudo sysctl -p

Configuração básica de NAT (Masquerade)

A configuração básica de NAT com Masquerade é usada para esconder os IPs internos da rede local. Isso acontece quando o seu servidor atua como um roteador, permitindo que vários dispositivos usem um único IP público. No iptables, você ativa o Masquerade na tabela nat para a interface que conecta à internet. Essa regra troca os endereços de origem dos pacotes, permitindo que os dispositivos internos acessem a rede externa sem expor seus IPs reais. Essa técnica é muito útil para proteger a rede e facilitar a conexão com a internet.

Você pode habilitar o NAT de origem (mascaramento) com:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Normalmente, você também precisará de uma regra de encaminhamento:

sudo iptables -A FORWARD -i eth1 -o eth0 -m conntrack –ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT

Regras de encaminhamento e port forwarding

O encaminhamento (forwarding) permite que pacotes de dados passem de uma rede para outra. No iptables, você cria regras que indicam para onde esses pacotes devem ir. O port forwarding redireciona o tráfego de uma porta externa para outra porta interna, muito usado para acessar serviços dentro da rede. Por exemplo, você pode enviar tráfego da porta 80 do servidor para a porta 8080 de um serviço interno. Essas regras ajudam a controlar o fluxo de dados e a garantir que as conexões cheguem ao destino correto com segurança.

Para encaminhar o tráfego HTTP recebido eth0para um servidor interno em 10.0.0.5:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 10.0.0.5:80

Você também deve permitir o encaminhamento do tráfego:

# Permitir tráfego de retorno para conexões estabelecidas/relacionadas
sudo iptables -A FORWARD -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

# Permitir novas conexões de entrada ao servidor web interno.
sudo iptables -A FORWARD -p tcp -d 10.0.0.5 –dport 80 -m conntrack –ctstate NEW -j ACCEPT

Para revisar as regras da tabela NAT, execute:

sudo iptables -t nat -L -n -v

Persistência e salvamento das regras iptables

As regras do iptables são temporárias e voltam ao padrão após o reinício do sistema. Para manter suas regras ativas, você precisa salvar e restaurar elas automaticamente.

iptablesAs regras são efêmeras, o que significa que precisam ser salvas manualmente para que persistam após a reinicialização do sistema. Como iptablesas regras não são persistentes por padrão, lembre-se de salvá-las após fazer alterações.

No Ubuntu 24.04, uma maneira comum de salvar iptablesregras é usar o iptables-persistentpacote `iptables`, que instala o netfilter-persistentserviço. Isso funciona com a camada de compatibilidade `iptables-nft` usada pelos sistemas Ubuntu modernos.

Instale-o via aptda seguinte forma:

sudo apt install iptables-persistent

Durante a instalação, você será questionado se deseja salvar suas regras de firewall atuais.

Se você atualizar as regras do firewall e quiser salvar as alterações, execute este comando:

sudo netfilter-persistent save

Após salvar, é uma boa prática verificar se as suas regras foram carregadas corretamente:

sudo iptables -L -n -v

Outras distribuições Linux podem ter maneiras alternativas de tornar suas alterações iptables permanentes. Consulte a documentação relevante para obter mais informações.

Considerações finais sobre o uso do iptables no Ubuntu 24.04

O iptables é uma ferramenta poderosa para gerenciar a segurança da rede no Ubuntu 24.04. Com regras bem configuradas, é possível proteger seu servidor contra ameaças e controlar o tráfego de forma eficiente.

Entender como criar, salvar e manter as regras é fundamental para garantir um ambiente seguro e estável. Aplicar as práticas explicadas aqui ajuda tanto iniciantes quanto profissionais a construir uma configuração sólida de firewall.

Por isso, dedique um tempo para experimentar e ajustar suas regras no iptables. Com cuidado e atenção, você poderá manter seu servidor mais protegido e preparado para os desafios da internet.

FAQ – Perguntas frequentes sobre iptables e segurança no Ubuntu

O que é o iptables e para que ele serve?

O iptables é uma ferramenta usada para configurar regras de firewall no Linux, controlando o tráfego de rede para proteger o sistema.

Como posso salvar as regras do iptables para não perder ao reiniciar?

Você pode usar os comandos iptables-save para salvar e iptables-restore para carregar as regras automaticamente no boot.

Qual a diferença entre bloquear e rejeitar um IP no iptables?

Bloquear descarta o pacote silenciosamente, enquanto rejeitar envia uma resposta informando que o pacote foi negado.

Por que é importante permitir conexões estabelecidas e relacionadas?

Permitir essas conexões garante que comunicações já iniciadas ou dependentes sigam funcionando sem bloqueios no firewall.

O que é NAT e como o Masquerade ajuda na configuração?

NAT traduz endereços IP internos para um IP externo. O Masquerade permite que múltiplos dispositivos usem um único IP público na saída.

Como posso liberar o acesso seguro via SSH no iptables?

Deve-se liberar a porta 22 apenas para IPs confiáveis, usando regras específicas e limitando tentativas para evitar ataques de força bruta.