Spam Filtering · 6 min read · Oct 13, 2025

Il Perfetto SpamSnake - Ubuntu Jeos 12.04 LTS Precise Pangolin

Il Perfetto SpamSnake - Ubuntu Jeos 12.04 LTS Precise Pangolin

Autore: Rocky
Versione: 5

Postfix con Filtro Bayesian, Postscreen, Postfix Recipient Callout (Destinatari di Relay tramite look-ahead Opzionale), Nginx/Uwsgi, Mysql, Dnsmasq, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), Baruwa, Controlli SPF, FuzzyOcr, Firmare Sanesecurity, Greyfix, KAM, Scamnailer, FireHOL (Iptables Firewall), Script per Destinatari di Relay (Opzionale), Webmin (Opzionale), Dichiarazione di Uscita con alterMIME (Opzionale)

Questo tutorial mostra come configurare un server basato su Ubuntu Jeos come filtro antispam in modalità Gateway. Alla fine, avrai un Gateway SpamSnake che inoltrerà email pulite al tuo MTA. Sarai anche in grado di visualizzare la tua coda in arrivo, addestrare il tuo SpamSnake e svolgere alcune operazioni più avanzate tramite Baruwa.

Non posso offrire alcuna garanzia che questo funzionerà per te, nello stesso modo in cui funziona per me.

Utilizzerò il seguente software:
• Server Web: Nginx v1.1.19/Uwsgi v1.0.3
• Server Database: MySQL v5.5.28
• Server di Posta: Postfix v2.9.3
• Server DNS di Cache: Dnsmasq 2.59
• Filtro: MailScanner v4.84.5-3
• Frontend: Baruwa v1.1.2-4sn

Il credito va ai ragazzi di HowToForge e agli sviluppatori di MailScanner, Baruwa, Clamav, Nginx/Uwsgi, Mysql, Postfix, Spamassassin, Razor/Pyzor/DCC e Firehol.

INSTALLAZIONE BASE

  1. Installa l’opzione vm minima
    Imposta il nome host su server1
  2. Metodo di partizione guidata predefinito
  3. Configura utente:
    u: amministratore
    p: password
    Nessuna crittografia
  4. Nessun aggiornamento automatico
  5. Installa OpenSSH

POST INSTALLAZIONE

1. Ottieni privilegi di root

Abilita il login come root eseguendo il seguente comando e dando una password a root. Puoi quindi accedere direttamente come root:

sudo passwd root

2. Configura la rete

Poiché l’installer di Ubuntu ha configurato il nostro sistema per ottenere le impostazioni di rete tramite DHCP, dobbiamo cambiare questo ora perché un server dovrebbe avere un indirizzo IP statico. Modifica /etc/network/interfaces e adattalo alle tue esigenze (in questo esempio utilizzerò l’indirizzo IP 192.168.0.100):

vi /etc/network/interfaces

e fai in modo che assomigli al seguente:

# Questo file descrive le interfacce di rete disponibili sul tuo sistema
# e come attivarle. Per ulteriori informazioni, vedere interfaces(5).
# L'interfaccia di rete di loopback
auto lo
iface lo inet loopback
# L'interfaccia di rete principale
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

Poi riavvia la tua rete:

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

e fai in modo che assomigli a questo:

127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1
# Le seguenti righe sono desiderabili per host compatibili con 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

Ora esegui:

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

Dopo, esegui:

hostname  
hostname -f

Entrambi dovrebbero mostrare server1.example.com ora.

3. Cambia la shell predefinita

/bin/sh è un symlink a /bin/dash, tuttavia abbiamo bisogno di /bin/bash, non di /bin/dash. Pertanto facciamo questo:

dpkg-reconfigure dash

Installa alcuni pacchetti e requisiti che sono necessari in seguito:

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. Caching Dnsmasq

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

e fai in modo che Dnsmasq ascolti su localhost:

listen-address=127.0.0.1

5. Installa Mysql

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

Ti verrà chiesto di fornire una password per l’utente root di MySQL - questa password è valida per l’utente root@localhost così come per [email protected], quindi non dobbiamo specificare manualmente una password per root di MySQL in seguito:

Nuova password per l’utente MySQL “root”: <– yourrootsqlpassword
Ripeti la password per l’utente MySQL “root”: <– yourrootsqlpassword

6. Installa Postfix:

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

Ti verranno poste due domande. Rispondi come segue:

Tipo generale di configurazione della posta: –> Internet Site
Nome della posta di sistema: –> server1.example.com

Ferma Postfix:

postfix stop
vi /etc/postfix/master.cf

e fai in modo che assomigli al seguente:

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

Modifica main.cf:

vi /usr/src/postfix.sh

con il seguente:

#!/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: Per questo passaggio, assicurati di sostituire [email protected], example.com e @example.com con valori reali che corrispondono alla tua configurazione.

Rendilo eseguibile ed eseguilo:

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

*Nota: L’utente/password per i file cf deve essere lo stesso dell’utente/password che utilizzerai con la tua configurazione del DB Baruwa in seguito. Assicurati di cambiare tutto in rosso prima di eseguire lo script.

Postfix Recipient Callout (Opzionale)

Questa funzione interroga il server del destinatario per vedere se il destinatario esiste. Se non esiste, risponde con un errore 550 al server mittente e interrompe la connessione. Se l’utente esiste, lo SpamSnake continuerà a elaborare l’email. Questo è solo un altro metodo per prevenire il backscatter, ma ha un costo. Leggi di più su di esso su http://www.postfix.org/ADDRESS_VERIFICATION_README.html. Puoi saltare questo metodo e utilizzare il metodo dello script (più avanti in questa guida) se decidi che rallenterà il tuo server.

vi /etc/postfix/main.cf e aggiungi quanto segue:

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

Aggiungi questo alle tue smtpd_restriction_classes:

verify_recipient, look_ahead

Aggiungi questo alle restrizioni del destinatario smptd:

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

Crea il file di accesso:

touch /etc/postfix/access

Aggiungi i tuoi domini:

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

*Nota: Assicurati di aggiungere domini validi che stai filtrando.

Postmap:

postmap /etc/postfix/access

Uno sguardo finale all’installazione di Postfix:

less /etc/postfix/main.cf

Controlla il contenuto del file per errori e ripara se necessario. Avvia Postfix:

postfix start

Controlla che Postfix risponda:

telnet 127.0.0.1 25

Dovresti vedere:

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

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.