Crea il Gateway Anti-Spam. Parte 1

e2H Pipo - soluzioni ICT avanzate Jose Luis Gomez Ferrer de Couto - CEC VCP410, ACE, VTSP, VSP

6 jul/10 2

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:

  1. Installazione prerequisiti.
  2. Postfix.
    1. fonti Get.
    2. Creare utenti e gruppi.
    3. Compilare e installare i font.
    4. Impostazioni.
    5. Messa.
  3. 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.

  • Bookmark

Ti è piaciuto questo articolo?

Iscriviti al nostro feed RSS!

A proposito di José Luis Gómez Ferrer de Couto

ICT Manager Soltel Solutions
Archiviato in: Postfix Lascia un commento
Commenti (2) Trackbacks (1)
  1. Che documento eccellente!

    Sono solo l'attuazione di un gateway Debian per Exchange 2003.

    vediamo l'ora di III parte:)

    Saluti!

  2. Gilgamezh Ciao,

    Grazie per il tuo commento, la terza parte mi auguro di averlo oggi o domani e si basa su SPF.

    Un saluto.


Lascia un commento