GUIA DEFINITIVO: Configurando seu servidor para entrega de e-mail confiável. PARTE I: Firewall

Firewall é um software (ou um dispositivo hardware-software) que controla quais conexões ao servidor são permitidas e quais são bloqueadas. Na grande maioria das distribuições modernas de servidores Linux, alguma forma de firewall está disponível diretamente.
A entrega confiável de e-mail ao destinatário depende não apenas do próprio servidor de e-mail, mas também de registros DNS corretos e da configuração do firewall. Se algo estiver errado com eles, é muito provável que suas mensagens caiam na pasta Spam – ou nem sejam entregues.
Este artigo descreve os passos essenciais que permitirão que você alcance quase 100% de confiabilidade na entrega de mensagens enviadas do seu servidor. Na Parte 1, abordaremos em detalhes os possíveis problemas relacionados ao firewall; na Parte 2, você encontrará instruções para configurar os registros DNS.
As informações neste artigo aplicam-se apenas a servidores de e-mail rodando em distribuições Linux. Debian 12 e Rocky Linux 8.10 com o painel de controle FASTPANEL são usados como exemplos.
Pré-requisitos
Passo 1. Instalar ferramentas de diagnóstico
Para verificar registros e portas, você precisará de:
-
dig - para analisar registros DNS
-
lsof - para verificar o estado do servidor de e-mail
-
netcat - para verificar a disponibilidade de portas
-
whois - para verificar o provedor de DNS atual
Instalação no Debian/Ubuntu:
sudo apt update && sudo apt install -y bind9-dnsutils netcat-openbsd lsof whois
CentOS/AlmaLinux/Rocky Linux:
sudo yum install -y bind-utils nmap-ncat lsof whois
Disponibilidade de portas de e-mail
Uma porta é um identificador numérico usado para endereçar diferentes serviços em um servidor. Cada serviço ou aplicativo escuta em sua própria porta para trocar dados pela rede (por exemplo, HTTP usa a porta 80 e SMTP usa a porta 25).
Para executar todos os passos a seguir, conecte-se ao seu servidor via SSH usando as credenciais do usuário root ou use sudo ao executar comandos, como mostrado nos exemplos. Você pode aprender como se conectar a um servidor via SSH em nosso artigo sobre SSH.
Passo 2. Verificar o status do servidor de e-mail
Antes de verificar se as portas estão alcançáveis pela rede, certifique-se primeiro de que os servidores de e-mail estão em execução e funcionando corretamente. O e-mail de saída é geralmente tratado pelo Exim ou Postfix, e o e-mail de entrada pelo Dovecot.
Para verificar se eles estão em execução, use os comandos:
sudo lsof -i:25
sudo lsof -i:143
Se os serviços estiverem em execução, você obterá uma saída semelhante à seguinte:
Porta 25:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
exim 839 exim 4u IPv6 778199358 0t0 TCP *:smtp (LISTEN)
exim 839 exim 5u IPv4 778199359 0t0 TCP *:smtp (LISTEN)
Se o seu servidor usar um servidor SMTP diferente, por exemplo, Postfix, você verá o nome exato dele em vez de exim na primeira coluna. Se necessário, use esse nome nos comandos subsequentes.
Porta 143:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dovecot 859 root 39u IPv4 778204692 0t0 TCP *:imap (LISTEN)
dovecot 859 root 40u IPv6 778204693 0t0 TCP *:imap (LISTEN)
Isso significa que tudo está bem e você pode prosseguir para o próximo passo.
Se os serviços de e-mail não estiverem em execução, você obterá uma saída vazia:
~ sudo lsof -i:25
~
~ sudo lsof -i:143
~
Neste caso, algo está errado e os serviços de e-mail não estão disponíveis. Você pode tentar iniciá-los manualmente e depois verificar o status deles:
Debian/Ubuntu:
systemctl restart exim4 dovecot
systemctl status exim4
systemctl status dovecot
CentOS/AlmaLinux/Rocky Linux:
systemctl restart exim dovecot
systemctl status exim
systemctl status dovecot
No estado em execução, o status do serviço será semelhante a:
Exim:
● exim.service - Exim Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/exim.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-11-02 16:38:57 UTC; 57min ago
Main PID: 839 (exim)
Tasks: 1
Memory: 11.0M
CGroup: /system.slice/exim.service
└─839 /usr/sbin/exim -bd -q1h
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
Dovecot:
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-11-02 16:38:58 UTC; 58min ago
Docs: man:dovecot(1)
https://doc.dovecot.org/
Main PID: 859 (dovecot)
Tasks: 5
Memory: 9.5M
CGroup: /system.slice/dovecot.service
├─ 859 /usr/sbin/dovecot -F
├─ 880 dovecot/anvil
├─ 881 dovecot/log
├─ 882 dovecot/config
└─1729 dovecot/stats
Neste caso, tudo está bem e você pode passar para o próximo passo.
Se algo estiver errado com os serviços, você verá uma saída semelhante a esta:
Exim:
● exim.service - Exim Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/exim.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2025-11-02 17:38:44 UTC; 3s ago
Process: 839 ExecStart=/usr/sbin/exim -bd -q${QUEUE} (code=exited, status=0/SUCCESS)
Main PID: 839 (code=exited, status=0/SUCCESS)
Dovecot:
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2025-11-02 17:39:32 UTC; 3s ago
Docs: man:dovecot(1)
https://doc.dovecot.org/
Process: 2278 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
Process: 859 ExecStart=/usr/sbin/dovecot -F (code=exited, status=0/SUCCESS)
Main PID: 859 (code=exited, status=0/SUCCESS)
Existem muitas razões possíveis pelas quais os serviços podem estar indisponíveis (erros em arquivos de configuração, arquivos de log excluídos acidentalmente, falta de espaço em disco no servidor, e muito mais). Esses aspectos estão fora do escopo deste artigo.
Se você encontrar este problema e quiser investigá-lo por conta própria, recomendamos nosso artigo sobre como trabalhar com o journal do sistema. Ou entre em contato com a equipe de suporte do seu provedor de hospedagem para obter assistência. Na kodu.cloud trabalhamos 24/7 e respondemos às solicitações em poucos minutos.
Passo 3. Verificando a disponibilidade das portas de e-mail da rede global
Para que o e-mail funcione corretamente, as seguintes portas TCP devem ser acessíveis pela rede:
-
25, 465, 587 - para envio de e-mail (SMTP)
-
143, 993 - para recebimento de e-mail (IMAP)
Você pode verificar a disponibilidade delas usando netcat:
nc -vz 1.2.3.4 25
Substitua 1.2.3.4 pelo endereço IP real do seu servidor.
Se a porta estiver aberta, você obterá a seguinte resposta:
Debian/Ubuntu:
Connection to 1.2.3.4 25 port [tcp/smtp] succeeded!
CentOS/AlmaLinux/Rocky Linux:
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 1.2.3.4:25.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Se a porta estiver fechada, a resposta será a seguinte:
Debian/Ubuntu:
nc: connect to 1.2.3.4 port 25 (tcp) failed: Connection refused
CentOS/AlmaLinux/Rocky Linux:
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.
Execute este comando para todas as portas listadas no início desta seção. Se todas estiverem disponíveis, prossiga para a segunda parte deste artigo. Se não, vá para o Passo 4 para corrigir o problema.
Passo 4. Abrir acesso (opcional)
Na maioria das vezes, os servidores usam iptables ou UFW como firewall para proteger contra conexões indesejadas. Execute o comando:
sudo ufw status
Se você receber a seguinte resposta:
-bash: ufw: command not found
isso significa que o iptables está sendo usado. Se, no entanto, a saída começar com:
Status: active
Isso significa que o UFW está sendo usado.
Vá para a subseção relevante deste passo de acordo com o firewall em uso.
Existem outros softwares para gerenciar o firewall do sistema em Linux (nftables, firewalld, e outros). Estes não serão abordados neste artigo para não aumentar seu tamanho.
Iptables
Nesta seção, todos os exemplos se aplicam apenas ao IPv4. Se o seu servidor tiver um endereço IPv6 e você também precisar que as portas de e-mail estejam disponíveis via IPv6, repita adicionalmente todos os comandos usando ip6tables em vez de iptables.
Para exibir todas as regras atuais, execute:
sudo iptables -L -v -n --line-numbers
A saída pode variar dependendo do conjunto de regras adicionadas no servidor. Por padrão, não há regras, mas dependendo da configuração de hospedagem ou do sistema operacional, alguma configuração pode já ter sido realizada. Vamos analisar dois casos principais que são frequentemente encontrados ao configurar um servidor de e-mail.
- Política "Tudo o que não é proibido é permitido" (política ACCEPT)
Neste caso, o firewall, por padrão, permite todo o tráfego até que uma regra explicitamente bloqueando-o seja criada. Esta política é geralmente usada por padrão.
Abaixo está um exemplo de um conjunto de regras onde as portas SSH e de e-mail são bloqueadas:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 51 5637 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 22
2 0 0 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 25,143,993,587,465
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 25,143,993,587,465
Neste exemplo:
-
Política ACCEPT define o comportamento padrão: todas as conexões são permitidas, a menos que especificado o contrário.
-
Chain INPUT (conexões de entrada): novas conexões para a porta 22 (SSH) e para todas as portas de e-mail padrão (SMTP: 25, 465, 587; IMAP: 143; IMAPS: 993) são bloqueadas.
-
Chain OUTPUT (conexões de saída): pacotes de saída para as mesmas portas são bloqueados.
O número da regra é mostrado no início da linha (num). Se você precisar excluir, por exemplo, a regra que bloqueia as portas de e-mail na cadeia INPUT (regra número 2), o comando será:
sudo iptables -D INPUT 2
Aqui:
-
-D - é o comando para excluir uma regra.
-
INPUT é a cadeia da qual a regra está sendo excluída (neste caso, tráfego de entrada).
-
2 é o número da linha onde a regra que você deseja excluir está localizada.
Da mesma forma, para remover o bloqueio de portas de saída deste exemplo, você precisa executar:
sudo iptables -D OUTPUT 1
Os números das linhas na saída de iptables -L -v -n --line-numbers podem mudar se você adicionar ou excluir outras regras. Portanto, se você adicionar novas regras, os números das linhas podem mudar. Para evitar erros, sempre verifique os números de linha atuais antes de excluir uma regra.
Após isso, para ter certeza de que tudo está correto, execute o comando novamente:
iptables -L -v -n --line-numbers
A saída não deve conter regras que bloqueiem a operação das portas de e-mail:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 51 5637 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Se as regras ainda estiverem presentes, verifique a correção dos comandos que você inseriu e os números das linhas.
Após alterar as regras do firewall, certifique-se de salvar as alterações; caso contrário, elas serão perdidas após uma reinicialização. Para salvar as regras atuais do iptables, execute:
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
CentOS/AlmaLinux/Rocky Linux:
iptables-save > /etc/sysconfig/iptables
Após isso, teste novamente a disponibilidade das portas de e-mail, conforme descrito no Passo 3. Se ainda estiverem indisponíveis, prossiga para o Passo 5. Se tudo estiver em ordem, prossiga para a segunda parte deste artigo.
2. Política "Bloquear tudo que não é explicitamente permitido" (política DROP)**
Este tipo de configuração é muito mais rigoroso. Todas as portas e protocolos são bloqueados por padrão, e apenas regras explícitas de permissão para portas específicas deixam o tráfego passar. Esta é uma abordagem mais segura e recomendada para servidores, especialmente se você deseja minimizar riscos.
Um exemplo de regras para tal configuração:
Chain INPUT (policy DROP 306 packets, 17962 bytes)
num pkts bytes target prot opt in out source destination
1 92 12474 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 466 32947 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 197 packets, 29192 bytes)
num pkts bytes target prot opt in out source destination
1 44 10332 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Neste exemplo:
- Chain INPUT (conexões de entrada): a política é DROP, ou seja, todos os pacotes são bloqueados por padrão, exceto aqueles para os quais existem regras de permissão.
Regra 1: ACCEPT state RELATED,ESTABLISHED - permite pacotes de entrada que se relacionam com conexões existentes ou estão associados a elas. Isso é importante para que o servidor receba corretamente as respostas às conexões de saída (por exemplo, SSH, e-mail, consultas DNS) e mantenha uma conexão estável.
Regra 2: ACCEPT tcp dpt:22 - permite novas conexões de entrada na porta 22 (SSH).
- Chain OUTPUT (conexões de saída): a política é DROP, ou seja, todos os pacotes de saída são bloqueados por padrão.
Regra 1: ACCEPT state RELATED,ESTABLISHED - permite pacotes de saída que se relacionam com conexões existentes. Isso permite que o servidor responda às solicitações do cliente (por exemplo, conexões SSH, e-mail) e mantenha uma conexão estável.
Assim, vemos que não há regras de permissão para as portas de e-mail. Para adicioná-las, execute os seguintes comandos:
sudo iptables -A INPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT
Após isso, salve as regras:
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
CentOS/AlmaLinux/Rocky Linux:
iptables-save > /etc/sysconfig/iptables
Em seguida, teste novamente a disponibilidade das portas de e-mail, conforme descrito no Passo 3. Se ainda estiverem indisponíveis, prossiga para o Passo 5. Se tudo estiver em ordem, prossiga para a segunda parte deste artigo.
UFW (Uncomplicated Firewall)
Em alguns servidores, o UFW é usado em vez do iptables - uma interface simplificada para configurar o firewall. É adequado para configuração básica de servidor de e-mail e é frequentemente encontrado no Ubuntu e Debian.
Para ver se o UFW está habilitado e quais regras estão ativas, execute:
sudo ufw status verbose
Exemplo de saída:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
Aqui:
-
Default: deny (incoming) - por padrão, todas as conexões de entrada são bloqueadas.
-
Default: allow (outgoing) - por padrão, todas as conexões de saída são permitidas.
Para que o servidor de e-mail funcione corretamente, você precisa abrir as portas padrão. Execute os seguintes comandos em sequência:
sudo ufw allow 25/tcp
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
Se você também tiver restrições de saída, precisará permitir as portas SMTP para e-mail de saída:
sudo ufw allow out 25/tcp
sudo ufw allow out 465/tcp
sudo ufw allow out 587/tcp
Após adicionar as regras, você pode verificá-las novamente:
sudo ufw status numbered
Você verá uma lista de regras com números. Se você precisar excluir uma regra, use o número da saída:
sudo ufw delete 3
No UFW, as regras são salvas automaticamente e permanecerão em vigor após uma reinicialização.
Em seguida, teste novamente a disponibilidade das portas de e-mail, conforme descrito no Passo 3. Se ainda estiverem indisponíveis, prossiga para o Passo 5. Se tudo estiver em ordem, prossiga para a segunda parte deste artigo.
Passo 5. O firewall está configurado corretamente, mas as portas de e-mail ainda estão indisponíveis (opcional)
Tal comportamento indica que as portas de e-mail estão bloqueadas não no nível do seu servidor, mas no equipamento do seu provedor de hospedagem. Neste caso, crie um ticket de suporte e solicite que eles desbloqueiem essas portas para o seu servidor. Se isso não for possível, a única solução será mudar de provedor de hospedagem.
Na kodu.cloud não restringimos a operação de portas de e-mail de forma alguma. Nossas regras proíbem envios em massa, mas para clientes de boa-fé o e-mail está disponível na íntegra. Você nem precisa configurar um servidor de e-mail, pois todos os nossos clientes têm acesso gratuito ao painel de controle FASTPANEL com licença estendida. Peça um servidor com o painel de controle e comece a usar e-mail em seu próprio domínio em apenas alguns minutos.
Os próximos passos para a configuração correta dos registros DNS serão abordados na segunda parte deste artigo.