Servidor de E-mail · 6 min read · Oct 13, 2025

O SpamSnake Perfeito - Ubuntu Jeos 12.04 LTS Precise Pangolin

O SpamSnake Perfeito - Ubuntu Jeos 12.04 LTS Precise Pangolin

Autor: Rocky
Versão: 5

Postfix com Filtragem Bayesiana, Postscreen, Chamada de Destinatário do Postfix (Destinatários de Relay via look-ahead Opcional), Nginx/Uwsgi, Mysql, Dnsmasq, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), Baruwa, Verificações SPF, FuzzyOcr, Assinaturas Sanesecurity, Greyfix, KAM, Scamnailer, FireHOL (Firewall Iptables), Script de Destinatários de Relay (Opcional), Webmin (Opcional), Aviso de Saída com alterMIME (Opcional)

Este tutorial mostra como configurar um servidor baseado em Ubuntu Jeos como um filtro de spam em modo Gateway. No final, você terá um Gateway SpamSnake que irá retransmitir e-mails limpos para o seu MTA. Você também poderá visualizar sua fila de entrada, treinar seu SpamSnake e realizar algumas operações mais avançadas via Baruwa.

Não posso oferecer garantias de que isso funcionará para você, da mesma forma que está funcionando para mim.

Usarei o seguinte software:
• Servidor Web: Nginx v1.1.19/Uwsgi v1.0.3
• Servidor de Banco de Dados: MySQL v5.5.28
• Servidor de E-mail: Postfix v2.9.3
• Servidor DNS de Cache: Dnsmasq 2.59
• Filtro: MailScanner v4.84.5-3
• Frontend: Baruwa v1.1.2-4sn

Os créditos vão para o pessoal do HowToForge e os desenvolvedores do MailScanner, Baruwa, Clamav, Nginx/Uwsgi, Mysql, Postfix, Spamassassin, Razor/Pyzor/DCC e Firehol.

INSTALAÇÃO BASE

  1. Instalar opção mínima de vm
    Defina o nome do host como server1
  2. Método de partição guiada padrão
  3. Configurar usuário:
    u: administrador
    p: senha
    Sem criptografia
  4. Sem atualizações automáticas
  5. Instalar OpenSSH

PÓS INSTALAÇÃO

1. Obter Privilégios de root

Ative o login root executando o seguinte e dando uma senha ao root. Você pode então fazer login diretamente como root:

sudo passwd root

2. Configurar a Rede

Como o instalador do Ubuntu configurou nosso sistema para obter suas configurações de rede via DHCP, precisamos mudar isso agora porque um servidor deve ter um endereço IP estático. Edite /etc/network/interfaces e ajuste conforme suas necessidades (neste exemplo, usarei o endereço IP 192.168.0.100):

vi /etc/network/interfaces

e faça com que fique assim:

# Este arquivo descreve as interfaces de rede disponíveis em seu sistema
# e como ativá-las. Para mais informações, veja interfaces(5).
# A interface de rede de loopback
auto lo
iface lo inet loopback
# A interface de rede primária
auto eth0
iface eth0 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1

Então reinicie sua rede:

/etc/init.d/networking restart
vi /etc/hosts

e faça com que fique assim:

127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1
# As linhas a seguir são desejáveis para hosts compatíveis com IPv6
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Agora execute:

echo server1.example.com > /etc/hostname  
reboot now

Depois, execute:

hostname  
hostname -f

Ambos devem mostrar server1.example.com agora.

3. Mudar o Shell Padrão

/bin/sh é um symlink para /bin/dash, no entanto, precisamos de /bin/bash, não /bin/dash. Portanto, fazemos isso:

dpkg-reconfigure dash

Instalar dash como /bin/sh? <– Não

Instale alguns pacotes e requisitos que são necessários mais tarde:

apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-raw-zlib-perl libdb4.8-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential telnet wget gawk -y

4. Cache Dnsmasq

apt-get install dnsmasq -y
vi /etc/dnsmasq.conf

e faça o Dnsmasq escutar no localhost:

listen-address=127.0.0.1

5. Instalar Mysql

apt-get install mysql-client mysql-server libdbd-mysql-perl -y 

Você será solicitado a fornecer uma senha para o usuário root do MySQL - essa senha é válida para o usuário root@localhost, bem como [email protected], então não precisamos especificar uma senha root do MySQL manualmente mais tarde:

Nova senha para o usuário “root” do MySQL: <– suaSenhaRootSql
Repita a senha para o usuário “root” do MySQL: <– suaSenhaRootSql

6. Instalar Postfix:

apt-get install postfix postfix-mysql postfix-doc procmail -y

Você será solicitado a responder a duas perguntas. Responda da seguinte forma:

Tipo geral de configuração de e-mail: –> Internet Site
Nome do sistema de e-mail: –> server1.example.com

Pare o Postfix:

postfix stop
vi /etc/postfix/master.cf

e faça com que fique assim:

pickup    fifo  n       -       -       60      1       pickup
         -o content_filter=
         -o receive_override_options=no_header_body_checks

Edite main.cf:

vi /usr/src/postfix.sh

com o seguinte:

#!/bin/sh
postconf -e "alias_maps = hash:/etc/aliases"
newaliases
postconf -e "myorigin = domain.tld"
postconf -e "myhostname = server1.domain.tld"
postconf -e "mynetworks = 127.0.0.0/8, 192.168.0.0/24"
postconf -e "message_size_limit = 10485760"
postconf -e "local_transport = error:No local mail delivery"
postconf -e "mydestination = "
postconf -e "local_recipient_maps = "
postconf -e "relay_domains = mysql:/etc/postfix/mysql-relay_domains.cf"
postconf -e "relay_recipient_maps = mysql:/etc/postfix/mysql-relay_recipients.cf"
postconf -e "transport_maps = mysql:/etc/postfix/mysql-transports.cf"
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
postconf -e "disable_vrfy_command = yes"
postconf -e "strict_rfc821_envelopes = no"
postconf -e "smtpd_banner = $myhostname ESMTP SpamSnake"
postconf -e "smtpd_delay_reject = yes"
postconf -e "smtpd_recipient_limit = 100"
postconf -e "smtpd_helo_required = yes"
postconf -e "smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain, permit"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_recipient_domain, reject_unauth_destination, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit"
postconf -e "smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining"
postconf -e "smtpd_restriction_classes = spf_policy, grey_policy, whitelist_policy"
postconf -e "spf_policy = check_policy_service unix:private/policy-spf"
postconf –e "policy-spf_time_limit = 3600s"
postconf -e "rbl_policy = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net"
postconf -e "grey_policy = check_policy_service unix:private/greyfix"
postconf -e "whitelist_policy = check_client_access mysql:/etc/postfix/mysql-global_whitelist.cf, check_sender_access mysql:/etc/postfix/mysql-global_whitelist.cf"
postconf -e "header_checks = regexp:/etc/postfix/header_checks"
touch /etc/postfix/virtual
echo "root [email protected]" >> /etc/postfix/virtual && echo "abuse [email protected]" >> /etc/postfix/virtual && echo "postmaster [email protected]" >> /etc/postfix/virtual
postmap /etc/postfix/virtual
touch /etc/postfix/header_checks
echo "/^Received:/ HOLD" >> /etc/postfix/header_checks
postmap /etc/postfix/header_checks
cat > /etc/postfix/mysql-global_whitelist.cf < /etc/postfix/mysql-relay_domains.cf < /etc/postfix/mysql-relay_recipients.cf < /etc/postfix/mysql-transports.cf <

Nota: Para esta etapa, certifique-se de substituir [email protected], example.com e @example.com por valores reais que correspondam à sua configuração.

Torne-o executável e execute:

chmod +x /usr/src/postfix.sh
./usr/src/postfix.sh

*Nota: O usuário/senha para os arquivos cf precisa ser o mesmo que o usuário/senha que você usará com sua configuração do banco de dados Baruwa mais tarde. Certifique-se de alterar tudo em vermelho antes de executar o script.

Chamada de Destinatário do Postfix (Opcional)

Este recurso consulta o servidor do destinatário para ver se o destinatário existe. Se não, ele responde com um erro 550 ao servidor de envio e encerra a conexão. Se o usuário existir, o SpamSnake continuará processando o e-mail. Este é apenas outro método para evitar backscatter, mas vem a um custo. Leia sobre isso em http://www.postfix.org/ADDRESS_VERIFICATION_README.html. Você pode pular este método e usar o método do script (mais adiante neste guia) se decidir que isso sobrecarregará seu servidor.

vi /etc/postfix/main.cf e adicione o seguinte:

verify_recipient = reject_unknown_recipient_domain, reject_unverified_recipient  
look_ahead = check_recipient_access hash:/etc/postfix/access  
unverified_recipient_reject_code = 550  
address_verify_map = btree:/var/lib/postfix/verify

Adicione isso às suas smtpd_restriction_classes:

verify_recipient, look_ahead

Adicione isso às smptd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, look_ahead, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit

Crie o arquivo de acesso:

touch /etc/postfix/access

Adicione seus domínios:

cat > /etc/postfix/access <#mysql-transports
example.com verify_recipient
example2.com verify_recipient
EOF

*Nota: Certifique-se de adicionar domínios válidos que você está filtrando.

Postmap:

postmap /etc/postfix/access

Olhe final na instalação do Postfix:

less /etc/postfix/main.cf

Verifique o conteúdo do arquivo em busca de erros e repare se necessário. Inicie o Postfix:

postfix start

Verifique se o Postfix responde:

telnet 127.0.0.1 25

Você deve ver:

220 [seuFQDNaqui] ESMTP Postfix (Ubuntu)
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.