Costruire un Gateway Anti-Spam. Parte 1 (Postfix)
Ha da tempo progettato di iniziare un articolo che tratta della protezione contro lo spam, che noi soffriamo ogni giorno. Dopo aver deciso come è strutturato, ho deciso di iniziare a scrivere e distribuire in varie parti per renderlo il più chiaro possibile ognuno dei moduli che verranno aggiunte al nostro Gateway Anti-SPAM e cercare di ottenere questi moduli stessi essere applicato a altri MTA senza ulteriori complicazioni.
Queste le consegne saranno basate sul MTA Postfix open source, con cui lavoro per più di cinque anni con buoni risultati e ha trovato abbastanza diffuso su Internet.

L'installazione del l'anti-spam che stiamo per eseguire in una macchina virtuale in esecuzione su Linux Debian Lenny 5, che abbiamo dimensionato come segue:
- 1 vCPU almeno.
- 512 MB di RAM per supportare le altre funzioni saranno aggiunte.
- Dimensionamento sufficiente spazio su disco / partizione var, perché contiene i registri e la coda di posta.
L'installazione dei principali programmi faremo dalle loro fonti, cercando di ottenere un po 'meglio le sue prestazioni e la possibilità di installare sulle distribuzioni di altri.
Questo articolo ha lo scopo di creare un gateway, cioè le email non conservare in deposito e non avrà gli utenti. Pertanto, se vogliamo avere cassette postali devono avere un server di posta concentrati su questo compito. I passi che continueremo ad ottenere cavalcare questa gateway di posta sono:
- Installazione prerequisiti.
- Postfix.
- fonti Get.
- Creare utenti e gruppi.
- Compilare e installare i font.
- Impostazioni.
- Messa.
- Prove.
Prerequisiti di installazione
Per compilare con successo Postfix è necessario avere alcune librerie installate sul vostro sistema e un compilatore. Pertanto, per preparare il sistema corriamo il seguente comando come root:
apt-get install dev build-essential ntp ntpdate-libdb
Abbiamo già i requisiti necessari per compilare correttamente Postfix dopo. Ma c'è ancora disinstallare il MTA che viene fornito di default di Debian, in questo caso stiamo parlando di Exim 4, perché altrimenti non potrebbe iniziare a Postfix di essere occupato e il servizio SMTP sulla porta 25. Per disinstallare Exim 4 che eseguirà i seguenti comandi come root:
aptitude remove - purge exim4-base exim4-config exim4-daemon-light exim4 bsd-mailx AT
update-rc.d-f rimuovere exim4
Postfix
Una volta completato i prerequisiti, è il momento di iniziare l'installazione sul MTA. L'installazione verrà indicato da una sorgente da, ottenendo migliori prestazioni da produrre per un hardware particolare. Una volta che abbiamo compilato e installato le nostre fonti siamo in grado di configurare il proprio MTA di agire come un gateway di posta affidabile, scalabile e ad alta performance.
Come fonti
La prima cosa da fare è ottenere gli ultimi sorgenti disponibili nella sua stalla. Per fare questo dovremo affrontare alla pagina di download Postfix e scegli quello che hai detto l'ultima fonti stabili. Copia il link di download perché dobbiamo scaricare dal nostro futuro anti-spam. Questo copiato il link dopo aver eseguito i seguenti comandi come root:
cd / usr / local / src
wget ftp://ftp.inescn.pt/pub/net/mail/postfix/official/postfix-2.7.1.tar.gz
Una volta che noi e le nostre fonti, al momento, la versione 2.7.1, ci decomprimere il file per ottenere il contenuto e l'accesso alla directory da creare. Per questo eseguire i seguenti comandi come root:
tar xzf postfix-2.7.1.tar.gz
cd postfix-2.7.1
Creare utenti e gruppi
Il nostro MTA deve a un utente che gestirà the intero servizio di e-mail, inoltre, se l'utente and i gruppi interessati, non do esiste, non la compilazione subsequent. Per evitare che ciò accada dovremo eseguire i seguenti comandi come root:
postfix groupadd-g 12 345
groupadd-g 54 321 postdrop
useradd-u 12345-g 12345-s / bin / false postfix
Compilare e installare i font
Dal momento che soddisfano tutti i requisiti, è il momento di fare la compilazione e l'installazione. Per eseguire questa operazione eseguire il seguente comando come root:
make & & make install
Prima di completare l'installazione deve configurare i vari parametri che noi chiederemo tutti questi di default lascia con il tasto INVIO in ciascuna delle opzioni.
install_root: /
tempdir: / usr/local/src/postfix-2.7.1
config_directory: / etc / postfix
command_directory: / usr / sbin
daemon_directory: / usr / libexec / postfix
data_directory: / var / lib / postfix
html_directory: no
mail_owner: postfix
mailq_path: / usr / bin / mailq
manpage_directory: / usr / local / man
newaliases_path: / usr / bin / newaliases
queue_directory: / var / spool / postfix
readme_directory: no
sendmail_path: / usr / sbin / sendmail
setgid_group: postdrop
Configurazione
Una volta installato il nostro Postfix, è il momento di completare la configurazione di funzionare come gateway e gateway di posta. Questo ci permetterà di aggiungere in seguito nuovi accessori che porterà benefici al nostro Gateway.
Postfix ha due file di configurazione principale, come il main.cf e master.cf. Il file main.cf è responsabile del controllo Postfix con un gran numero di opzioni di configurazione. Al contrario, il file master.cf è responsabile del controllo dei servizi o processi in esecuzione in background fornendo funzionalità al nostro Postfix.
Inizieremo con la configurazione dei file main.cf. Ci concentreremo solo su i parametri necessari per raggiungere l'obiettivo che cerchiamo. E vogliamo sapere tutti i possibili parametri per configurare il file file può visitare il loro sito aiuto .
La prima cosa è fare un backup del file main.cf che è stato generato durante l'installazione e configurare i parametri di base per qualsiasi installazione di Postfix, ha anche colto l'opportunità di fare un backup del file master.cf. Per fare ciò eseguire i seguenti comandi come root:
cd / etc / postfix
cp main.cf main.cf.orig
cp master.cf master.cf.orig
Una volta che il backup, eliminare l'intero contenuto del file main.cf commentato, vale a dire tutti i contenuti preceduto da #. Modificare il file con il comando vi o nano e dovremo stare con il contenuto indicato di seguito.
Una volta che abbiamo preparato il file main.cf con i parametri di base, inizieremo a inserire i parametri che renderanno il nostro Postfix su un Gateway. In questa prima parte verranno rimossi consegna locale della posta sul server, sempre più difficile per compromettere la sicurezza del server. Per fare questo come root e modificare il file di introdurre i seguenti parametri:
myorigin = example.com # Invia mail da questa macchina come "user@example.com"
mydestination =
local_recipient_maps =
local_transport = errore: la consegna della posta locale è disattivato
Nella seconda parte, per correggere problemi tecnici, si deve ricevere le vostre mail postmaster @ [IP Gateway]. Come avremo modo di aggiungere anche l'abuso extra @ [IP Gateway]. Tutte le e-mail a questi due conti viene reindirizzato a un indirizzo o interno. Quindi aggiungere il seguente file main.cf:
virtual_alias_maps = hash: / etc / postfix / virtual_alias_maps # Ottenere dati da un file
Il parametro precedente raccoglie i dati da un file chiamato virtual_alias_maps trova in / etc / postfix. Quindi dobbiamo creare questo file e introdurre le pertinenti redirect di lanciarlo come root i seguenti comandi:
vi / etc / postfix / virtual_alias_maps # Creare il file
postmaster@example.com postmaster
abuse@example.com abuso
postmap / etc / postfix / virtual_alias_maps # Compilare il file
Nell'ultima parte abbiamo nel file main.cf consentire l'inoltro della corrispondenza, per questo abbiamo introdotto i seguenti parametri al file:
mynetworks = 127.0.0.0 / 8 # RANGO_IP_RED_LOCAL Aggiungi reti locali per l'invio di
relay_domains = hash: / etc / postfix / relay_domains # File con domini accettati per ricevere
parent_domain_matches_subdomains = # Non accettare sottodomini
smtpd_access_maps debug_peer_list # Non accettare sottodomini
smtpd_recipient_restrictions =
permit_mynetworks # permettere la spedizione dalle reti dichiarato
reject_unauth_destination # Nega di destinazione non autorizzato (dichiarato relay_domains)
relay_recipient_maps = hash: / etc / postfix / relay_recipients # file con gli utenti che ricevono
transport_maps = hash: / etc / postfix / transport_maps # file con il trasferimento di dominio
Ora creiamo i file rimanenti che abbiamo dichiarato i nostri parametri main.cf, come relay_domains (domini per i quali si accetta la reception), relay_recipients (accettiamo gli utenti per la ricezione) e transport_maps (domini server reindirizzare finale) . Per questo eseguire i seguenti comandi come root:
vi / etc / postfix / relay_domains
example.com OK
example2.com OK
vi / etc / postfix / relay_recipients
user@example.com OK
user2@example.com OK
blog@example2.com OK
vi / etc / postfix / transport_maps
example.com smtp: remoto.example.com
example2.com smtp: remoto.example2.com
Una volta creato il file, dobbiamo compilarlo per generare il file di database per ogni uno di loro. Per fare questo come root eseguire i seguenti comandi:
postmap / etc / postfix / relay_domains
postmap / etc / postfix / relay_recipients
postmap / etc / postfix / transport_maps
Abbiamo completato il file di configurazione main.cf, adesso master.cf impostare il file in modo da non consegnare la posta server locale garantendo contro possibili intrusioni. Per fare ciò eseguire i seguenti comandi come root tassi correnti:
vi / etc / postfix / master.cf
# Unix locali - NN - - locali (commento questa linea)
Attuazione
Prima di impostare la tua casa come un servizio, si dimostrerà che Postfix inizia e non presenta alcun errore. Per fare questo si partirà il servizio e successivamente monitorare il file mail.log. Eseguire i seguenti comandi come root:
postfix start
tail-F / var / log / mail.log
Adesso creiamo lo script di avvio per il nostro Postfix, quindi si arriva a iniziare come un servizio durante l'avvio del sistema. Eseguire i seguenti comandi come root:
vi / etc / init.d / postfix
#! / Bin / sh-e
# Avviare o arrestare Postfix
#
# Jones Lamont <lamont@debian.org>
# Basato su init.d script sendmail
# Modificato byPiPo-e2H <pipo@e2h.net>
# # # BEGIN INIT INFO
# Fornisce: postfix mail-transport-agent
# REQUIRED-Start: local_fs $ $ $ remote_fs syslog $ $ $ nome rete tempo
-Stop: $ $ local_fs obbligatori remote_fs syslog # $ $ $ nome di rete
# Se-Start: mysql postgresql-daemon clamav postgrey SpamAssassin
# Se-Stop: mysql postgresql-daemon clamav postgrey SpamAssassin
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Descrizione breve: avviare e fermare il Postfix Mail Transport Agent
Description #: Postfix è un mail transport agent
# # # END INIT INFO
PATH = / bin: / usr / bin: / sbin: / usr / sbin
DAEMON = / usr / sbin / postfix
NAME = Postfix
test-x $ DAEMON & & test-f / etc / postfix / main.cf | uscita | 0
. / Lib / lsb / init-functions
esecuzione () (
code = $ (-h queue_directory postconf 2> / dev / | | null echo / var / spool / postfix)
if [-f $ (coda) / PID /] Poi master.pid
pid = $ (sed 's / / / g' $ (coda) / PID / master.pid)
# Cosa directory abita nella eseguibile. prelink sistemi stupido.
dir = $ (ls-l / proc / $ pid / exe 2> / dev / | null sed 's / .* -> / /, s / \ / [^ \ /]*$//')
if ["$ dir X" = "X / usr / libexec / postfix"]; Poi
eco e
fi
fi
)
case "$ 1" in
start)
log_daemon_msg "Avvio di Postfix Mail Transport Agent" postfix
RUNNING = $ (in esecuzione)
if [-n "$ RUNNING"]; Poi
log_end_msg 0
altro
se start-stop-daemon - start - exec $ (demone) - avviare, Poi
log_end_msg 0
altro
log_end_msg 1
fi
fi
;;
stop)
RUNNING = $ (in esecuzione)
log_daemon_msg "Fermare Postfix Mail Transport Agent" postfix
if [-n "$ RUNNING"]; Poi
se $ (demone) stop; Poi
log_end_msg 0
altro
log_end_msg 1
fi
altro
log_end_msg 0
fi
;;
riavviare)
$ 0 stop
Start 0 $
;;
-Reload vigore | reload)
log_action_begin_msg "Ricaricamento configurazione di Postfix"
se $ (demone) reload; Poi
log_action_end_msg 0
altro
log_action_end_msg 1
fi
;;
status)
RUNNING = $ (in esecuzione),
if [-n "$ RUNNING"]; Poi
log_success_msg "postfix è in esecuzione"
exit 0
altro
log_success_msg "postfix non è in esecuzione"
3 uscite
fi
;;
| Filo controllare abortire |)
$ (Demone) 1 $
;;
*)
log_action_msg "Utilizzo: / etc / init.d / postfix (start | stop | restart | Ricarica | | filo di controllo | abortire | force-reload)"
uscita 1
;;
esac
exit 0
Dal momento che cominciamo il nostro script, diamo i permessi di esecuzione e ci creerà diversi livelli di partenza. Per fare ciò eseguire i seguenti comandi come root:
Chmod + x / etc / init.d / postfix
rc.d postfix default-update
Per verificare che i nostri stivali possibile eseguire Postfix / etc / init.d / postfix start oppure riavviare la macchina per vedere che il servizio si avvia senza problemi.
Analisi
Il primo test sta per fare in modo che si può accedere al servizio SMTP da un client locale. Per fare questo da un computer diverso dal server eseguire il seguente comando:
telnet IP_ANTISPAM 25
Si dovrebbe vedere un messaggio come HOST.DOMINIO 220 ESMTP Postfix, se questo è vero dire che il nostro Postfix viene eseguito correttamente.
La seconda prova è vedere che da un computer al di fuori della LAN, questo è importante perché tutti i computer della LAN possono inviare una mail a qualsiasi dominio attraverso il parametro permit_mynetworks. Se non possiamo fare la prova da fuori, possiamo eliminare la rete locale per main.cf parametro mynetworks file e consentire solo 127.0.0.0 / 8. Sappiamo che una volta che l'accesso via telnet al nostro server e ti invieremo una e-mail a un dominio non dichiarato relay_domains file e ha scoperto che non riescono, per tutti questo eseguire i seguenti comandi:
telnet IP_ANTISPAM 25
EHLO test.com # dominio del mittente
posta da: test@test.com # utente che invia la posta
RCPT TO: test@test2.com # recettore di dominio non valido
Ora si prova ad inviare un dominio accettato nel relay_domains file ma un utente non esiste in quel dominio, che non è dichiarata nel relay_recipients file. Per fare ciò eseguire i seguenti comandi su un computer remoto:
telnet IP_ANTISPAM 25
EHLO test.com # dominio del mittente
posta da: test@test.com # utente che invia la posta
RCPT TO: # usuario@example.com dominio recettore valido, ma utente non valido
Infine si invia un'e-mail a tutte le opzioni corrette, o di dominio valido e ha dichiarato file utente valido e conoscenti. Per fare ciò eseguire i seguenti comandi su un computer remoto:
telnet IP_ANTISPAM 25
EHLO test.com # dominio del mittente
posta da: test@test.com # utente che invia la posta
RCPT TO: user@example.com # Username valido recettore dominio valido
Data # Iniziare a scrivere il messaggio
# Questo è un messaggio di testo di prova
. # Fine del messaggio
# Chiudere la connessione chiudere
Se guardiamo il file / var / log / mail.log possibile controllare il processo di essere trattati come si introducono i vari comandi per la linea di terminale. Per visualizzare questo file è possibile eseguire il seguente comando:
tail-f / var / log / mail.log
Nel prossimo articolo ci sarà l'aggiunta di nuove funzionalità per il nostro anti-spam, fornendo forti meccanismi di individuazione dello spam.
























19 luglio 2010 - 18:43
Che documento eccellente!
Sono solo l'attuazione di un gateway Debian per Exchange 2003.
vediamo l'ora di III parte:)
Saluti!
19 luglio 2010 - 18:46
Gilgamezh Ciao,
Grazie per il tuo commento, la terza parte mi auguro di averlo oggi o domani e si basa su SPF.
Un saluto.