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
- Instalar opção mínima de vm
Defina o nome do host como server1 - Método de partição guiada padrão
- Configurar usuário:
u: administrador
p: senha
Sem criptografia - Sem atualizações automáticas
- 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 root2. 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/interfacese 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.1Então reinicie sua rede:
/etc/init.d/networking restartvi /etc/hostse 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-allhostsAgora execute:
echo server1.example.com > /etc/hostname
reboot nowDepois, execute:
hostname
hostname -fAmbos 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 dashInstalar 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 -y4. Cache Dnsmasq
apt-get install dnsmasq -yvi /etc/dnsmasq.confe faça o Dnsmasq escutar no localhost:
listen-address=127.0.0.15. 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 -yVocê 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 stopvi /etc/postfix/master.cfe faça com que fique assim:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checksEdite main.cf:
vi /usr/src/postfix.shcom 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/verifyAdicione isso às suas smtpd_restriction_classes:
verify_recipient, look_aheadAdicione 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, permitCrie o arquivo de acesso:
touch /etc/postfix/accessAdicione seus domínios:
cat > /etc/postfix/access <
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/accessOlhe final na instalação do Postfix:
less /etc/postfix/main.cfVerifique o conteúdo do arquivo em busca de erros e repare se necessário. Inicie o Postfix:
postfix startVerifique se o Postfix responde:
telnet 127.0.0.1 25Você deve ver:
220 [seuFQDNaqui] ESMTP Postfix (Ubuntu)Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.