Creare un relay antispam

Con oggi voglio partire con una serie di tutorial che spieghino come creare un relay antispam.

Più semplicemente creeremo un server da interporre tra il nostro Mail server ed Internet, in modo che le mail passimo prima per questo relay, vengano scannerizzate, e se ritenute buone mandate al nostro mail server.

I vantaggi sono evidenti, un relay antispam dedicato a fare solo quello è meglio di un mail server tuttofare, soprattutto per chi ha a che fare con volumi di traffico molto grossi, e quindi con volumi di spam altrettanto grossi.

Secondariamente il nostro mail server dovrà solo fare il recapito in locale, ne risulta quindi una macchina molto più agile e scattante.

I tutorial saranno di livello medio-alto, si presuppone quindi che conosciate già una determinata terminologia ed abbiate idea di come funziona un sistema di posta.

Giusto per avere idea di cosa andremo a fare: Il nostro sarà un relay antispam di tipo Bayesiano, con controlli aggiuntivi di tipo Backscatter (contro i cosiddetti open-relay, pozzi pieni di spam), controlli SPF del mittente, anti-phishing nelle firme xsl/pdf, greylisting, ed altro ancora.

Disabilitare app-armor

App armor è una estensione di sicurezza simile ad SELinux, solo che purtroppo sembra dare problemi con alcuni dei software che andremo ad installare, è consigliabile quindi disabilitarlo:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
aptitude remove apparmor apparmor-utils

Installazione del software

aptitude install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev \
libcompress-zlib-perl libdb4.6-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 unrar

N.B. E’ consigliabile tenere l’orario del server sincronizzato con ntpdate, consiglio tempo.ien.it

DNS Caching

apt-get install dnsmasq

Editiamo la configurazione in /etc/dnsmasq.conf e facciamolo ascoltare in localhost

listen-address=127.0.0.1

aggiustiamo /etc/resolv.conf di conseguenza

nameserver 127.0.0.1

Apache2 + PHP5

apt-get install apache2 apache2-suexec apache2-doc apache2-mpm-prefork apache2-utils \
libexpat1

aptitude install libapache2-mod-php5 php5 php5-common php5-curl php5-dev \
php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache \
php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite \
php5-tidy php5-xmlrpc php5-xsl

Adesso modifichiamo /etc/apache2/mods-available/dir.conf

<IfModule mod_dir.c>

#DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3
index.pl index.xhtml

</IfModule>

Prima del riavvio dobbiamo abilitare alcuni moduli di apache…

a2enmod rewrite
a2enmod suexec
a2enmod include

e quindi…

/etc/init.d/apache2 restart

Postfix e MySQL

apt-get install postfix postfix-mysql postfix-doc mysql-server mysql-client procmail

Durante la configurazione di mysql verremo interrogati su quale password di root assegnare. Mentre per postfix ci verranno fatte due domande:

General type of mail configuration: <– Internet Site
System mail name: <– nome.dominio.tld

cambiate ovviamente il dominio con quello che utilizzate voi.

Finita l’installazione dobbiamo togliere il listening in localhost di mysql commentando in /etc/mysql/my.cnf

#bind-address = 127.0.0.1

Restartiamo MySQL e stoppiamo postfix, questo perchè dobbiamo fare alcune configurazioni, prima di tutto aggiungiamo al file /etc/postfix/main.cf:

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

e poi lanciamo in sequenza i comandi:

postconf -e "alias_maps = hash:/etc/aliases"
newaliases
postconf -e "myorigin = dominio.tld"
postconf -e "myhostname = nome.dominio.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 "virtual_alias_maps = hash:/etc/postfix/virtual"

Ricordatevi di settare correttamente il parametro mynetworks ed eventualmente cambiate il size limit delle email in entrata, qui è settato a 10Megabyte.

Creiamo il file /etc/postfix/virtual ed incolliamoci dentro:

postmaster postmaster@dominio.tld
abuse abuse@dominio.tld
root root@dominio.tld

e diciamo a postfix di prendere in considerazione anche questo file:

postmap /etc/postfix/virtual
postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"

Creiamo il file /etc/postfix/relay_recipients e mettiamoci dentro:

@dominio.tld OK
@dominio2.tld OK

e come sopra:

postmap /etc/postfix/relay_recipients
postconf -e "transport_maps = hash:/etc/postfix/transport"

questo file serve per dire a postfix che deve rigettare tutte le mail destinate a caselle non appartenenti ai domini elencati.

Creiamo il file /etc/postfix/transport e mettiamoci dentro:

dominio.tld smtp:[192.168.0.x]

questo file indica l’ip da risolvere per il dominio relativo, in questo caso il nostro relay deve consegnare la posta filtrata al server che c’è sotto quindi è inutile che esca di nuovo su internet, glielo facciamo risolvere internamente con questo file.

postmap /etc/postfix/transport
postconf -e "relay_domains = hash:/etc/postfix/relay_domains"

creiamo il file /etc/postfix/relay_domains e mettiamoci dentro:

dominio.tld OK

è importante settare bene questi due file (relay_domains e relay_recipient) per evitare che il nostro antispam si trasformi in un open relay (il parco giochi per gli spammer).

postmap /etc/postfix/relay_domains
postconf -e "smtpd_helo_required = yes"
postconf -e "smtpd_sender_restrictions = reject_non_fqdn_sender, \
reject_unknown_sender_domain, permit"
postconf -e "smtpd_recipient_restrictions = reject_non_fqdn_sender, \
reject_non_fqdn_recipient, reject_unknown_recipient_domain, \
permit_mynetworks, reject_unauth_destination, reject_unauth_pipelining, \
reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, \
permit"
postconf -e "smtpd_data_restrictions = reject_unauth_pipelining"

dopo aver controllato di non aver scritto str**** nella configurazione di postfix possiamo avviarlo:

/etc/init.d/postfix start

Per oggi direi che è abbastanza, domani iniziamo ad installare i vari sistemi di controllo della posta.


Altri articoli che potrebbero interessarti

Configuriamo un server di posta completo su Etch (Postfix) – Parte 6° Questa parte funge da approfondimento, propongo un tweak per aumentare la sicurezza e le prestazioni...
Creare un relay antispam – parte 2° Rieccoci tornare alle nostre guide server-based. Avevamo terminato la prima parte ultimando la configurazione...
Servizio SMTP Chiunque possiede una connessione ad internet, possiede una casella di posta, ed il 90% dei cyber-utenti...
Mysql master replica how-to Chi segue già da un pò i miei how-to sa come la penso, sono abbastanza fissato con la sicurezza...
Rieccomi Eccomi qui, sono 5 giorni che non scrivo sul blog, gli impegni premono in questo periodo :-|, ma soprattutto...

About the Author

M0rF3uS al secolo Alex è un ggiovine 25enne appassionato di informatica e linux. Lavora come Network and System Administrator e nel tempo libero gioca un pò con la sua fotocamera (Canon EOS 1000D) riuscendo a volte, per sbaglio, a fare qualche scatto decente. Completano il corredo, degli hobbies "vorrei ma non posso" ossia l'astronomia e l'astronautica....si è uno di quelli che da grande vorrebbe fare l'astronauta (povero coglione vero?).