Servidor de Email · 8 min read · Oct 23, 2025
Configurando um Servidor de Email em Casa à Prova de Spam (O Método Alternativo) (Debian Squeeze)
Configurando um Servidor de Email em Casa à Prova de Spam (O Método Alternativo) (Debian Squeeze)
Introdução
Spam de email é um grande problema. Eu encontrei uma solução bastante simples para mim, no entanto, levará algum tempo para “migrar” completamente para ela.
A solução é criar um endereço de email único toda vez que eu tiver que dar um endereço de email a alguém ou a algum site para me inscrever. Se eu quiser uma conta no twitter, eu usaria “[email protected]”. Para serviços baseados na web, eu uso o nome de domínio completo, incluindo subdomínio (www) à esquerda do @ (alguns sites mal projetados não reconhecem o www. como um endereço de email válido, para esses eu simplesmente deixo de fora).
Para pessoas, eu uso um formato assim: “[email protected]”. Você também poderia usar como “[email protected]”. A boa notícia é que o lado esquerdo do @ para endereços de email é quase “ilimitado”.
Como eu gero endereços de email únicos para cada contato, posso facilmente descobrir onde meu endereço de email foi vazado e então posso facilmente removê-lo.
Este guia irá configurar um servidor de email totalmente funcional com scripts correspondentes para facilitar a gestão de emails. Inclui também a parte de configuração de DNS - mesmo se você estiver em um endereço dinâmico - por exemplo, se você quiser rodar seu próprio pequeno servidor de email em casa.
Resumo
Neste guia, eu uso o Debian Squeeze como servidor. Para outras distribuições Linux, você terá que fazer as alterações correspondentes por conta própria.
Um breve resumo do que está sendo feito neste guia é assim:
- Obtendo um nome de domínio
- Cuidando de um IP dinâmico - se necessário
- Cuidando do DNS e roteamento
- Configurando o postfix
- Configurando o procmail
- Configurando o dovecot
- Configurando o servidor web para gestão de endereços de email
- Configurando o Thunderbird com addon
Créditos
Neste guia, eu também me baseio em alguns outros guias aqui - especialmente em relação à configuração do bind e do servidor de email. Para isso, eu copiei mais ou menos dos guias de Servidor Debian Perfeito do Falko. Também a seção de relé de email foi emprestada de um guia aqui do sjau. Sem esses, eu provavelmente não teria conseguido configurar isso.
Obtendo um Nome de Domínio
Antes de você poder começar a rodar seu próprio servidor de email, você precisa de um nome de domínio para o qual você também pode configurar registros MX. Eu não quero fazer nenhuma sugestão, pois há toneladas e toneladas de registradores de domínio por aí. Um dos mais baratos que conheço é o GoDaddy.
Eu não uso o GoDaddy, mas pelo que ouvi, eles oferecem um serviço sólido.
Lidar com IPs Dinâmicos
Outro desafio a ser enfrentado é como lidar com coisas em um endereço IP dinâmico. Se você não tem uma máquina dedicada alugada em algum lugar, mas usa sua conexão de internet em casa, então muito provavelmente você não tem um IP estático.
Na web, é essencial ter um IP estático para que outros sempre saibam onde te encontrar. No entanto, existem serviços que ajudam você com isso.
Um dos serviços que eu uso é o EveryDNS. Eles me permitem hospedar o DNS para o nome de domínio.
Até agora, eles ainda oferecem o serviço gratuitamente. Embora tenham sido comprados em 2010, a promessa foi que então-clientes que doaram dinheiro, também poderão usar o sistema gratuitamente no futuro. Em sua página, eles ainda não mencionam nada que novos clientes precisem pagar - mas eu não sei com certeza.
A razão para usar o EveryDNS é que eles também oferecem um pequeno script em perl que pode ser usado para atualizar o DNS. Isso é essencial, pois seu IP muda ao longo do tempo se você não tiver um endereço IP estático. Você pode obter o script em perl daqui.
Quando você tiver um nome de domínio, primeiro vá para What Is My IP. Ele mostrará seu endereço IP público atual. Então crie uma conta no EveryDNS e faça pelo menos as seguintes entradas onde MYDOMAIN.COM seria seu nome de domínio:
(1) Faça um registro do tipo “A”, definido como nome de domínio totalmente qualificado “MYDOMAIN.COM” e defina como valor seu endereço IP público
(2) Faça um registro do tipo “CNAME”, definido como nome de domínio totalmente qualificado “*.MYDOMAIN.COM” e defina como “MYDOMAIN.COM”
(3) Faça um registro do tipo “MX”, definido como nome de domínio totalmente qualificado “MYDOMAIN.COM”, defina como valor “MYDOMAIN.COM” e defina como “MX Value” “10”
O que acabamos de fazer é configurar o DNS para o domínio. O domínio principal é encontrado em seu endereço IP (registro A), todos os outros domínios também são encontrados lá (o * no registro CNAME apontando para o domínio principal) e também operamos um servidor de email lá (registro MX).
usuário root
As seguintes coisas estão sendo feitas como usuário root - a menos que indicado de outra forma.
Atualização de IP Dinâmico
Como mencionado antes, se você não tiver um endereço IP estático, precisará atualizar regularmente as informações de DNS.
(1) Obtenha o script em perl e torne-o executável
cd /root
wget http://www.everydns.net/eDNS.pl
chmod 0755 eDNS.pl(2) Crie um script bash que chama o script em perl (existem outras maneiras, mas eu achei que essa é a mais simples):
touch eDNS.sh
echo "#!/bin/bash" > eDNS.sh
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.shSubstitua USERNAME e PASSWORD pelas suas credenciais de login do everydns.
(3) Configure um cron para executá-lo regularmente
Eu gosto de trabalhar com um arquivo cron.txt que contém todos os crons. Eu acho que é muito mais simples mantê-lo assim.
Primeiro você tem que verificar se já existe uma entrada cron:
crontab -lSe não houver entrada cron ainda, então basta executar os seguintes comandos
touch cron.txt
chmod 0700 cron.txt
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txtSe já houver entradas cron, copie-as, crie um arquivo cron.txt e insira-as e adicione também o seguinte comando:
*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 Agora carregamos o cron.txt como cron:
crontab cron.txtE verificamos se foi adicionado corretamente:
crontab -lLAN/Roteamento/Bind
O próximo problema que enfrentamos é como resolver o domínio na sua LAN. Se seu servidor de email estiver atrás de um roteador, então provavelmente terei um IP local como 192.168.0.x ou 10.0.0.x.
Se você estiver atrás de um roteador, precisará encaminhar as seguintes portas para seu servidor: 25, 80, 143, 443, 991. Poderia haver mais portas necessárias, como 587.
Além disso, enfrentamos o problema de como resolver o nome de domínio de dentro da LAN. De fora da LAN, você tem a entrada DNS que deve apontar para seu endereço IP atual. No entanto, quando você está dentro da LAN e faz uma consulta DNS, ela retornará apenas seu IP público e geralmente falhará então.
Existem várias soluções para esse problema - se o problema existir de fato.
Uma maneira seria o uso do dnsmasq em roteadores (por exemplo, dd-wrt ou tomato-wrt). No entanto, como não posso garantir que funcione, a única outra opção que vejo é configurar um servidor DNS completo em seu servidor de email.
Neste tutorial, eu usarei um Bind9 chrooted, pois sou mais familiarizado com ele. Para outros servidores DNS, você encontrará muita documentação online.
(1) Instale o software e pare-o
apt-get install bind9
/etc/init.d/bind9 stop(2) Altere a configuração /etc/default/bind9 para que a linha de opções fique assim:
OPTIONS="-u bind -t /var/lib/named" (3) Crie os diretórios necessários em /var/lib:
mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run(4) Então mova o diretório de configuração de /etc para /var/lib/named/etc:
mv /etc/bind /var/lib/named/etc(5) Crie um symlink para o novo diretório de configuração a partir da antiga localização (para evitar problemas quando o BIND for atualizado no futuro):
ln -s /var/lib/named/etc/bind /etc/bind(6) Crie dispositivos nulos e aleatórios, e conserte as permissões dos diretórios:
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind(7) Edite o arquivo /etc/rsyslog.d/bind-chroot.conf e adicione
$AddUnixListenSocket /var/lib/named/dev/log (8) Reinicie os serviços
/etc/init.d/rsyslog restart
/etc/init.d/bind9 starte verifique /var/log/syslog para erros.
Agora configuramos o Bind9 em um ambiente chrooted. A próxima coisa a fazer é realmente adicionar um arquivo de zona para seu domínio.
(9) Edite /etc/bind/named.conf.local e adicione
zone "MYDOMAIN.COM" IN {
type master;
file "/etc/bind/zones/MYDOMAIN.COM.db";
allow-update { none; };
};(10) Crie a pasta de zona e o arquivo de zona
mkdir /etc/bind/zones
touch /etc/bind/zones/MYDOMAIN.COM.db
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db(11) Adicione suas informações de arquivo de zona a MYDOMAIN.COM.db
$TTL 86400
@ IN SOA @ MYDOMAIN.COM. (
1 ; serial
2600 ; refresh
15M ; retry
3600 ; expiry
360 ) ; minimum
@ IN NS ns.MYDOMAIN.COM.
ns IN A LOCALIP
www IN A LOCALIP
MYDOMAIN.COM. IN A LOCALIP
MYDOMAIN.COM. IN MX 10 LOCALIPClaro, substitua MYDOMAIN.COM pelo seu nome de domínio real e LOCALIP pelo seu endereço IP LAN estático. Basicamente, estamos dizendo aqui que o servidor de nomes para esse domínio está hospedado em “ns.MYDOMAIN.COM” e “ns.MYDOMAIN.COM” pode ser encontrado no endereço IP local estático.
(12) Reinicie o Bind9
/etc/init.d/bind9 restart(13) Altere a resolução NS do roteador
Enquanto o Bind9 está configurado agora, há uma última coisa a fazer. No seu roteador, você deve alterar a ordem de resolução do servidor de nomes. O primeiro servidor de nomes deve agora ser seu “servidor de email” com o respectivo IP local estático. Caso contrário, toda a configuração do bind9 foi em vão. Como segundo servidor de nomes, insira o valor do que já estava lá como primeiro. Dependendo do seu roteador, pode ser um pouco mais complicado.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.