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
- Installa l’opzione vm minima
Imposta il nome host su server1 - Metodo di partizione guidata predefinito
- Configura utente:
u: amministratore
p: password
Nessuna crittografia - Nessun aggiornamento automatico
- 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 root2. 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/interfacese 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.1Poi riavvia la tua rete:
/etc/init.d/networking restartvi /etc/hostse 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-allhostsOra esegui:
echo server1.example.com > /etc/hostname
reboot nowDopo, esegui:
hostname
hostname -fEntrambi 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 dashInstalla 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 -y4. Caching Dnsmasq
apt-get install dnsmasq -yvi /etc/dnsmasq.confe fai in modo che Dnsmasq ascolti su localhost:
listen-address=127.0.0.15. 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 -yTi 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 stopvi /etc/postfix/master.cfe fai in modo che assomigli al seguente:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checksModifica main.cf:
vi /usr/src/postfix.shcon 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/verifyAggiungi questo alle tue smtpd_restriction_classes:
verify_recipient, look_aheadAggiungi 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, permitCrea il file di accesso:
touch /etc/postfix/accessAggiungi i tuoi domini:
cat > /etc/postfix/access <
example.com verify_recipient
example2.com verify_recipient
EOF
*Nota: Assicurati di aggiungere domini validi che stai filtrando.
Postmap:
postmap /etc/postfix/accessUno sguardo finale all’installazione di Postfix:
less /etc/postfix/main.cfControlla il contenuto del file per errori e ripara se necessario. Avvia Postfix:
postfix startControlla che Postfix risponda:
telnet 127.0.0.1 25Dovresti vedere:
220 [yourFQDNhere] ESMTP Postfix (Ubuntu)Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.