Server mail: Postfix Amavisd-new Dovecot e MySql: differenze tra le versioni

nessun oggetto della modifica
(Creata pagina con '==Introduzione== Prima di mettere in piedi un server mail, è necessario valutare l'architettura di cui abbiamo bisogno e poi fare la cernita tra i vari pacchetti disponibili, eq...')
 
Nessun oggetto della modifica
Riga 1: Riga 1:
==Introduzione==
==Introduzione==
Prima di mettere in piedi un server mail, è necessario valutare l'architettura di cui abbiamo bisogno e poi fare la cernita tra i vari pacchetti disponibili, equivalenti e non che concorrono all'installazione del servizio globale di mailing.
Questa guida si prefissa di creare un server mail con le seguenti peculiarità:
 
Come potrete immaginare, un server mail non è un software ma è un castello di servizi che noi edifichiamo secondo le nostre esigenze o capacità. Ciò ci dà la massima flessibilità e libertà ma al contempo crea spesso confusione, incertezze, dubbi e difficoltà di installazione. Infine in Rete si trovano infinite e differenti documentazioni che, cercandole di adattare alle nostre varianti, spesso ci portano ad errori.
 
In questa pagina voglio esporre in modo completo (dalla A alla Z) una delle tante possibili configurazioni per creare un server mail. Le peculiarità salienti di questa architettura sono:
  * filtraggio delle email
  * filtraggio delle email
  * servizio IMAP per la lettura delle email
  * servizio IMAP per la lettura delle email
Riga 10: Riga 6:


Se soltanto una di queste peculiarità differisce dalle tue necessità, ti consiglio di valutare e leggere altre documentazioni complete e pensate per altri scopi, in modo da non trovarti servizi e pacchetti inutili e problemi di configurazione nel caso in cui non conoscessi bene i software in uso.
Se soltanto una di queste peculiarità differisce dalle tue necessità, ti consiglio di valutare e leggere altre documentazioni complete e pensate per altri scopi, in modo da non trovarti servizi e pacchetti inutili e problemi di configurazione nel caso in cui non conoscessi bene i software in uso.
==Requisiti iniziali ==
La macchina deve esser stata preparata per funzionare come server mail base secondo questa guida [[http://guide.debianizzati.org/index.php/Server_mail_base:_Postfix_Dovecot_e_MySql]]
E' stato scelto di utilizzare Amavisd-new come mail scanner, ma ci sono molte alternative, tra le quali ho scritto un'alktra guida per utilizzare MailScanner [[http://guide.debianizzati.org/index.php?title=Server_mail:_Postfix_MailScanner_Dovecot_e_MySql]]
== Installazione amavisd-new ==
Installare amavisd-new  con tutti i pacchetti specificati dando il comando:
  aptitude install amavisd-new spamassassin clamav-daemon clamav arj zip p7zip unzip zoo unrar-free cabextract nomarch lzop rpm pax tnef ripole lha
== Configurazione ==
Configuro l'hostname:
  vi /etc/amavis/conf.d/05-node_id
Scrivendo il proprio FQDN, ad esempio:
  # Qualified Domain Name (FQDN) and remove the # at the beginning of the line.
  $myhostname = "mail.miazienda.it";
== Collegare Amavis a Postfix ==
Dopo l'installazione dobbiamo dire a Postfix di far processare le mail dal mail scanner (Amavis).
  vi /etc/postfix/main.cf
aggiungere in fondo il seguente testo:
  #connessione alla porta di amavis
  content_filter=smtp-amavis:[127.0.0.1]:10024
Inoltre è necessario modificare anche il seguente file di configurazione:
  vi /etc/postfix/master.cf
aggiungere in fondo il seguente testo:
  smtp-amavis unix    -      -      n      -      '''2'''    smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
  127.0.0.1:10025 inet n    -      n      -      -    smtpd
    -o content_filter=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o smtpd_restriction_classes=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
    -o local_header_rewrite_clients=
Il numero 2 che ho evidenziato rappresenta il numero dei processi figli che vogliamo avere; alzare il valore se si dovesse avere un alto traffico di email.
Configurare (modificare e/o inserire) i seguenti parametri nel file
  vi /etc/amavis/conf.d/20-debian_defaults
come segue:
  #MMM non specifico una directory per la quarantena
  #in quanto invio il tutto ad uno user preposto
  #$QUARANTINEDIR = "$MYHOME/virusmails";
  $TEMPBASE = "/var/tmp";
 
  #MMM dirotto le email con virus, spam... agli user speciali
  $virus_quarantine_to = 'virus@miodominio.it'; #virtual user (vedi /etc/aliases)
  $spam_quarantine_to = 'spam@miodominio.it'; #virtual user (vedi /etc/aliases)
  $banned_quarantine_to = $spam_quarantine_to;
  $bad_header_quarantine_to = $spam_quarantine_to;
 
  #MMM impostazioni per scaricare tutto sugli user preposti
  $final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
  $final_banned_destiny    = D_DISCARD;  # D_REJECT when front-end MTA
  $final_spam_destiny      = D_DISCARD;
  $final_bad_header_destiny = D_DISCARD;    # False-positive prone (for spam)
 
  #$virus_admin = "postmaster\@$mydomain"; # due to D_DISCARD default
  $virus_admin = undef; #non spedire all'admin le notifiche di ricezione virus
'''Per maggiori informazioni'''
'''''D_PASS''' Mail will pass to recipients, regardless of bad contents. If a quarantine is configured, a copy of the mail will go there, if not, at least the recipient received the mail. Note that including a recipient in a @*_lovers_maps is functionally equivalent to setting $final_*_destiny = D_PASS; for that recipient.
'''D_BOUNCE''' Mail will not be delivered to its recipients. A non-delivery notification (bounce) will be created by amavisd-new and sent to the sender by amavisd-new. Exceptions: bounce (DSN) will not be sent if a virus name matches @viruses_that_fake_sender_maps , or to messages from mailing lists (Precedence: bulk|list|junk), or for spam level that exceeds the $sa_dsn_cutoff_level. If a quarantine is configured, a copy of the mail will go there. If not, we have lost the mail, but if the mail was legitimate, the sender should receive notification of the disposition of the message.
'''D_REJECT''' Mail will not be delivered to its recipients. Amavisd-new will send the typical 550 (or 554) reject response to the upstream MTA and that MTA may create a reject notice (bounce) and return it to the sender. This notice is not as informative as the one amavisd-new would create if you were using D_BOUNCE, so usually D_BOUNCE is preferred over D_REJECT. One case where D_BOUNCE is not preferred over D_REJECT is when amavisd-new is used as a before-queue proxy filter, but this is neither recommended nor supported. Personally, I prefer D_DISCARD for spam or viruses, as creating a DSN is usually (butMYSQL_CRYPT_PWFIELD not always) a bad idea for several reasons, among them the fact that if the mail is malware, the sender's address is probably undeliverable; or worse, it is a real address that has been forged. If a quarantine is configured, a copy of the mail will go there. If not, we have lost the mail, but the sender should be notified their message was rejected.
'''D_DISCARD''' Mail will not be delivered to its recipients and the sender normally will NOT be notified. If a quarantine is configured, a copy of the mail will go there. If not, we have lost the mail. Note that there are additional settings available that can send notifications to persons that normally may not get notified when an undesirable message is found so it is possible to notify the sender even when using D_DISCARD.''
== User speciali di sistema ==
Creare gli utenti preposti allo smistamento delle email D_DISCARD:
Modificare il file /etc/aliases commentare le righe presenti e scrivere:
  #Reindirizzare queste email a postmaster
  root:          postmaster
  amavis:        postmaster
  clamav:        postmaster
 
  #MMM virtuale users for special accounts
  postmaster:    postmaster@miodominio.it
Far ricaricare i nuovi virtual user a Postfix con il comando:
  postalias /etc/aliases
Entrare nella shell di mysql :
  mysql --user=root --password=mettere_password
selezionare il database:
  use mailserver
Inseriamo nella tabella users gli indirizzi email usati dal sistema (facendo attenzione di attivare di specificare il tipo email 'SYSTEM'):
  mysql> INSERT INTO users VALUES('spam@miodominio.it',md5('password'),'ENABLE',NULL,NULL,'SYSTEM'),    ('virus@miodominio.it',md5('password'),'ENABLE',NULL,NULL,'SYSTEM'), ('postmaster@miodominio.it',md5('password'),'ENABLE',NULL,NULL,'SYSTEM');
Riavviare amavis con il seguente comando:
  service amavis restart
== Creare la white/blacklist nel database ==
Adesso procediamo con il collegare Amavis al database mysql creato precedentemente.
Innanzitutto si crea una table adatta a tale compito:
Entrare nella shell di mysql :
  mysql --user=root --password=mettere_password
selezionare il database:
  use mailserver
Creare una tabella per gestire la white and blacklist (wb: “W” white HAM; “B” black SPAM ):
  mysql> CREATE TABLE wblist (
  email      varchar(255) NOT NULL,
  wb        char(1) NOT NULL DEFAULT 'w', -- W/B  (White=HAM, Black=SPAM)
  KEY email (email)
  );
Creare la tabella contenente la policy di amavis:
  mysql> CREATE TABLE policy (
  id              int unsigned NOT NULL auto_increment,
  policy_name      varchar(32),    -- nome.Non usato da amavisd-new
  virus_lover          char(1),    -- Y/N
  spam_lover          char(1),    -- Y/N  (campo opzionale)
  banned_files_lover  char(1),    -- Y/N  (campo opzionale)
  bad_header_lover    char(1),    -- Y/N  (campo opzionale)
  bypass_virus_checks  char(1),    -- Y/N
  bypass_spam_checks  char(1),    -- Y/N
  bypass_banned_checks char(1),    -- Y/N  (campo opzionale)
  bypass_header_checks char(1),    -- Y/N  (campo opzionale)
  spam_modifies_subj  char(1),    -- Y/N  (campo opzionale)
  virus_quarantine_to  varchar(64) DEFAULT NULL, -- (campo opzionale)
  spam_quarantine_to  varchar(64) DEFAULT NULL, -- (campo opzionale)
  banned_quarantine_to  varchar(64) DEFAULT NULL, -- (campo opzionale)
  bad_header_quarantine_to  varchar(64) DEFAULT NULL, -- (campo opzionale)
  spam_tag_level  float,  -- un punteggio alto inserisce le intestazioni spam
  spam_tag2_level float DEFAULT NULL,  -- un punteggio alto inserisce le
              -- intestazioni di 'spam dichiarato'
  spam_kill_level float,  -- un punteggio alto attiva le azioni evasive:
              -- rifiuto/scarto, quarantena, ...
              -- (soggetto all'impostazione di final_spam_destiny)
  PRIMARY KEY (id)
  );
Precaricare la policy da utilizzare:
  INSERT INTO policy
  SET
      id                    =1,
      policy_name            ="Filtro normale",
      virus_lover            ="N",
      spam_lover            ="N",
      banned_files_lover    ="N",
      bad_header_lover      ="N",
      bypass_virus_checks    ="N",
      bypass_spam_checks    ="N",
      bypass_banned_checks  ="N",
      bypass_header_checks  ="N",
      spam_modifies_subj    ="Y",
      spam_quarantine_to    ="spam@miodominio.it",
  virus_quarantine_to    ="virus@miodominio.it",
  banned_quarantine_to    ="spam@miodominio.it",
  bad_header_quarantine_to  ="spam@miodominio.it",
      spam_tag_level        =2,
      spam_tag2_level        =6.31,
      spam_kill_level        =7;
== Impostare amavis per accedere al database ==
Inserire a inizio file i seguenti parametri nel file /etc/amavis/conf.d/20-debian_defaults come segue:
  #connessione al database
  @lookup_sql_dsn =
  ( ['DBI:mysql:mailserver:localhost', 'postfix', 'postfix_password']  );
 
  #carica le impostazioni definite di policy
  $sql_select_policy = 'SELECT * FROM policy';
 
  #Per ottenere white/blacklisting in base al mittente
  $sql_select_white_black_list = 'SELECT wb FROM wblist'.
    ' WHERE (email IN (%k))';
== Configurazione di Clamav ==
Cambiare come segue il parametro nel file /etc/clamav/freshclam.conf per far aggiornare il database dei virus quattro volte al giorno:
  Checks 4
Bisogna dare a clamav i permessi per accedere ai file temporanei di amavis. Per far ciò bisogna attribuire allo user clamav anche il gruppo amavis.
Associare al gruppo amavis l'utente clamav, con il comando:
  gpasswd -a clamav amavis
Verificare che nel file /etc/amavis/conf.d/15-av_scanners sia presente l'istruzione per eseguire clamav (di default dovrebbe esserlo) .
Abilitare il controllo dei virus attraverso amavis verificando nel file
  vi  /etc/amavis/conf.d/15-content_filter_mode
se sono presenti dei commenti sulle righe del comando dell'antivirus; eventualmente rimuoverli come alle righe qui sotto:
  @bypass_virus_checks_maps = (
    \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re)
== Configurazione di Spamassassin ==
Cambiare o aggiungere i seguenti parametri nel file /etc/spamassassin/local.cf come segue:
Aggiungere le seguenti righe all'inizio del file:
  #permette di avere un unico database bayes anziché uno in ogni home degli  user
  bayes_path /etc/spamassassin/bayes/bayes
  bayes_file_mode 0666
Successivamente creare la cartella specificata /etc/spamassassin/bayes con i permessi
  mkdir /etc/spamassassin/bayes
  chmod 777 /etc/spamassassin/bayes
Disabilitare il servizio modificando il file /etc/default/spamassassin
  # Change to one to enable spamd
  ENABLED=0
E abilitare il controllo dello spam attraverso amavis verificando che le istruzioni sono siano commentate nel file
  vi /etc/amavis/conf.d/15-content_filter_mode
come segue:
  #
  # Default SPAM checking mode
  # Uncomment the two lines below to enable it back
  #
 
  @bypass_spam_checks_maps = (
    \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
=== Verificare spamassassin ===
Controllare se ci sono problemi nella configurazione con il comando:
  spamassassin --lint
Successivamente provare se Spamassassin è in gardo di intercettare lo spam con questo comando:
  spamassassin -D < /usr/share/doc/spamassassin/examples/sample-spam.txt
== Test ==
Per sicurezza riavviamo i vari servizi
  service amavis restart
  service postfix restart
=== Ricezione email normale ===
A questo punto verifichiamo tutti i nuovi virtual user, inviando a ciascuno un'email di prova. Si può usare il seguente comando:
  mail -s 'Test di funzionamento' postmaster spam virus
Digitare il testo dell'email. Poi, per terminare l'email  premere il tasto ENTER, poi con CRTL + d indichiamo che l'immissione di testo è terminata.
Se, tramite il nostro client mail configurato correttamente, riceviamo le email allora i tre nuovi account sono operativi.
=== Verifica antispam ===
Per verificare il funzionamento, Spamassassin nei suoi documenti ha un'email di test. Per procedere con il test eseguire il seguente comando:
  sendmail postmaster@miodominio.it < /usr/share/doc/spamassassin/examples/sample-spam.txt
Se tutto funziona correttamente l'email verrà intercettata da amavis e reindirizzata alla destinazione di ''spam'' che abbiamo configurato. Verificare i log di mail
=== Verifica antivirus ===
Per verificare il funzionamento è necessario scaricare il file test dell'EICAR:
  cd /home
  wget https://secure.eicar.org/eicar.com.txt
Inviare per email il test EICAR:
  sendmail postmaster@miodominio.it < /home/eicar.com.txt
Se tutto funziona correttamente l'email verrà intercettata da amavis e reindirizzata alla destinazione di spam. Verificare i log di mail.




63

contributi