4 069
contributi
Nessun oggetto della modifica |
|||
(95 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Lenny|Squeeze|Wheezy}} | {{Versioni compatibili|Lenny|Squeeze|Wheezy}} | ||
{{Warningbox|La guida NON è compatibile con Jessie. E' in fase di realizzazione una nuova guida.}} | |||
<br/> | |||
== Introduzione == | == Introduzione == | ||
In questa guida cercheremo di raccogliere tutte le informazioni per arrivare a un'installazione di Debian che fornisca i seguenti servizi, comuni presso qualsiasi Internet Service Provider: | In questa guida cercheremo di raccogliere tutte le informazioni per arrivare a un'installazione di Debian che fornisca i seguenti servizi, comuni presso qualsiasi Internet Service Provider: | ||
Riga 19: | Riga 21: | ||
Può essere utile impostare anche un server NTP esterno per sincronizzare l'ora del nostro server con un'autorità nazionale: [[Impostare e modificare data e ora]]. | Può essere utile impostare anche un server NTP esterno per sincronizzare l'ora del nostro server con un'autorità nazionale: [[Impostare e modificare data e ora]]. | ||
<br/> | <br/> | ||
Poichè il server andrà quasi sicuramente gestito da remoto occorrerà installare e configurare anche l'accesso SSH ([[ | Poichè il server andrà quasi sicuramente gestito da remoto occorrerà installare e configurare anche l'accesso SSH ([[SSH | guida su SSH]]) con autenticazione via chiave. | ||
=== Installazione ambiente LAMP === | === Installazione ambiente LAMP === | ||
Riga 155: | Riga 157: | ||
<br/> | <br/> | ||
<br/> | <br/> | ||
{{Warningbox|DEPRECATO: al posto di | {{Warningbox|DEPRECATO: al posto di Squirrelmail è possibile installare una diversa interfaccia webmail, Roundcube:}} | ||
<pre> | <pre> | ||
# aptitude install squirrelmail | # aptitude install squirrelmail | ||
Riga 185: | Riga 187: | ||
e proteggiamolo: | e proteggiamolo: | ||
<pre> | <pre> | ||
# chmod 600 | # chmod 600 /etc/ssl/private/mailserver.pem | ||
</pre> | </pre> | ||
Riga 316: | Riga 318: | ||
query = SELECT 1 FROM virtual_domains WHERE name='%s' | query = SELECT 1 FROM virtual_domains WHERE name='%s' | ||
</pre> | </pre> | ||
{{Box|NOTA|Potrebbe venirvi la tentazione di scrivere "localhost" al posto di "127.0.0.1" nel file precedente. Non va fatto!! "localhost" farà sì che Postfix cerchi il file socket MySQL, non trovandolo perchè gira in una chroot | {{Box|NOTA|Potrebbe venirvi la tentazione di scrivere "localhost" al posto di "127.0.0.1" nel file precedente. Non va fatto!! "localhost" farà sì che Postfix cerchi il file socket MySQL, non trovandolo perchè gira in una chroot jail. Al contrario "127.0.0.1" utilizzerà una connessione TCP sulla porta 3306, che risponderà anche se Postfix funziona all'interno di una gabbia chroot}} | ||
<br/> | <br/> | ||
Adesso dobbiamo fare in modo che Postfix utilizzi questa mappatura: | Adesso dobbiamo fare in modo che Postfix utilizzi questa mappatura: | ||
Riga 482: | Riga 484: | ||
<pre> | <pre> | ||
dovecot unix - n n - - pipe | dovecot unix - n n - - pipe | ||
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient} | |||
</pre> | </pre> | ||
'''Nota''': la seconda riga deve essere indentata con degli spazi e non con il TAB. | '''Nota''': la seconda riga deve essere indentata con degli spazi e non con il TAB. | ||
Riga 488: | Riga 490: | ||
A questo punto non resta che riavviare Postfix: | A questo punto non resta che riavviare Postfix: | ||
<pre> | <pre> | ||
# postfix | # service postfix restart | ||
</pre> | </pre> | ||
e fare in modo che utilizzi il servizio appena creato per lo smistamento delle email, modificando il file <code>/etc/postfix/main.cf</code> nella maniera vista in precedenza: | e fare in modo che utilizzi il servizio appena creato per lo smistamento delle email, modificando il file <code>/etc/postfix/main.cf</code> nella maniera vista in precedenza: | ||
Riga 516: | Riga 518: | ||
Siamo pronti per iniziare. I files di configurazione di Dovecot si trovano in <code>/etc/dovecot</code>. | Siamo pronti per iniziare. I files di configurazione di Dovecot si trovano in <code>/etc/dovecot</code>. | ||
<br/> | <br/> | ||
Fino a Debian Squeeze la configurazione di Dovecot era tutta contenuta in due file; da Debian Wheezy la configurazione è stata spezzata in una trentina di file, contenuti tutti nella directory < | Fino a Debian Squeeze la configurazione di Dovecot era tutta contenuta in due file; da Debian Wheezy la configurazione è stata spezzata in una trentina di file, contenuti tutti nella directory <code>/etc/dovecot/conf.d</code>. Il file di configurazione principale <code>/etc/dovecot/dovecot.conf</code> non richiede alcuna modifica e attraverso la direttiva | ||
<pre> | <pre> | ||
!include conf.d/*.conf | !include conf.d/*.conf | ||
</pre> | </pre> | ||
carica tutti i file presenti in < | carica tutti i file presenti in <code>/etc/dovecot/conf.d/</code> che terminano in ".conf" in sequenza. Quindi "10-auth.conf" sarà caricato per primo e "90-quota.conf" per ultimo. Il grosso vantaggio di questa situazione è che potremo modificare o rimpiazzare parti della configurazione senza sovrascriverla interamente; lo svantaggio è che la migrazione da una versione precedente di Dovecot può diventare un'operazione difficoltosa. | ||
==== Fino a Debian Squeeze ==== | ==== Fino a Debian Squeeze ==== | ||
Riga 704: | Riga 706: | ||
mail_location = maildir:/var/vmail/%d/%n/Maildir | mail_location = maildir:/var/vmail/%d/%n/Maildir | ||
</pre> | </pre> | ||
Questa sarà la directory dove Dovecot cercherà le email di ogni specifico utente. Ad esempio l'utente < | Questa sarà la directory dove Dovecot cercherà le email di ogni specifico utente. Ad esempio l'utente <code> john@example.org</code> avrà le sue email archiviate in <code>/var/vmail/example.org/john/Maildir</code>. | ||
<br/> | <br/> | ||
Cambiamo la direttiva ''auth_socket_path'' in | |||
<pre> | |||
auth_socket_path = /var/run/dovecot/auth-master | |||
</pre> | |||
Cerchiamo la sezione ''namespace inbox''. Se abbiamo già archiviato email sul server e stiamo aggiornando il nostro sistema da Squeeze a Wheezy, allora dobbiamo modificare la direttiva ''separator'' in: | Cerchiamo la sezione ''namespace inbox''. Se abbiamo già archiviato email sul server e stiamo aggiornando il nostro sistema da Squeeze a Wheezy, allora dobbiamo modificare la direttiva ''separator'' in: | ||
<pre> | <pre> | ||
Riga 741: | Riga 747: | ||
===== /etc/dovecot/dovecot-sql.conf.ext ===== | ===== /etc/dovecot/dovecot-sql.conf.ext ===== | ||
Questo file è richiamato dal file < | Questo file è richiamato dal file <code> /etc/dovecot/conf.d/auth-sql.conf.ext</code> e dice a Dovecot come accedere al database MySQL e dove trovare le informazioni sugli account. Accertiamoci che contenga le linee: | ||
<pre> | <pre> | ||
driver = mysql | driver = mysql | ||
Riga 755: | Riga 761: | ||
# chgrp vmail /etc/dovecot/dovecot.conf | # chgrp vmail /etc/dovecot/dovecot.conf | ||
# chmod g+r /etc/dovecot/dovecot.conf | # chmod g+r /etc/dovecot/dovecot.conf | ||
</pre> | |||
per lo spool di Postfix: | |||
<pre> | |||
# chown postfix:postfix /var/spool/postfix/private/auth | |||
# chmod 666 /var/spool/postfix/private/auth | |||
</pre> | </pre> | ||
e proteggiamo il file di configurazione SQL in modo che nessuno possa scoprire la password del database: | e proteggiamo il file di configurazione SQL in modo che nessuno possa scoprire la password del database: | ||
Riga 772: | Riga 783: | ||
=== Test della configurazione === | === Test della configurazione === | ||
Apriamo un altro terminale e controlliamo i log della posta in tempo reale: | |||
<pre> | |||
# tail -f /var/log/mail.log | |||
</pre> | |||
Dal primo terminale aperto proviamo a inviare una semplice prima mail di prova: | |||
<pre> | |||
# echo test | mail john@example.org | |||
</pre> | |||
Nei log dovremmo trovare qualcosa di simile: | |||
<pre> | |||
Oct 20 17:42:32 sirius postfix/pickup[22273]: A6F8EB55: uid=0 from=<root> | |||
Oct 20 17:42:32 sirius postfix/cleanup[22582]: A6F8EB55: message-id=<20131020154232.A6F8EB55@sirius.localdomain> | |||
Oct 20 17:42:32 sirius postfix/qmgr[22274]: A6F8EB55: from=<root@sirius.workaround.org>, size=287, nrcpt=1 (queue active) | |||
Oct 20 17:42:32 sirius dovecot: auth-worker(22635): mysql(127.0.0.1): Connected to database mailserver | |||
Oct 20 17:42:32 sirius dovecot: lda(john@example.org): msgid=<20131020154232.A6F8EB55@sirius.localdomain>: saved mail to INBOX | |||
Oct 20 17:42:32 sirius postfix/pipe[22586]: A6F8EB55: to=<john@example.org>, relay=dovecot, delay=0.14, delays=0.04/0/0/0.1, dsn=2.0.0, status=sent (delivered via dovecot service) | |||
Oct 20 17:42:32 sirius postfix/qmgr[22274]: A6F8EB55: removed | |||
</pre> | |||
All'interno della directory principale di archiviazione, Dovecot dovrebbe aver creato tutta la struttura di directory per il dominio e per l'utente di test: | |||
<pre> | |||
# find /var/vmail | |||
/var/vmail/ | |||
/var/vmail/example.org | |||
/var/vmail/example.org/john | |||
/var/vmail/example.org/john/Maildir | |||
/var/vmail/example.org/john/Maildir/dovecot.index.log | |||
/var/vmail/example.org/john/Maildir/cur | |||
/var/vmail/example.org/john/Maildir/dovecot-uidvalidity.5263f9e8 | |||
/var/vmail/example.org/john/Maildir/new | |||
/var/vmail/example.org/john/Maildir/new/1382283752.M737526P22632.sirius,S=352,W=362 | |||
/var/vmail/example.org/john/Maildir/dovecot-uidvalidity | |||
/var/vmail/example.org/john/Maildir/tmp | |||
/var/vmail/example.org/john/Maildir/dovecot-uidlist | |||
/var/vmail/example.org/john/Maildir/dovecot.index.cache | |||
</pre> | |||
==== Invio di email tramite telnet ==== | ==== Invio di email tramite telnet ==== | ||
Riga 1 011: | Riga 1 057: | ||
# postconf -e smtpd_sasl_path=private/auth | # postconf -e smtpd_sasl_path=private/auth | ||
# postconf -e smtpd_sasl_auth_enable=yes | # postconf -e smtpd_sasl_auth_enable=yes | ||
# postconf -e smtpd_tls_security_level=may | |||
# postconf -e smtpd_tls_auth_only=yes | |||
# postconf -e smtpd_tls_cert_file=/etc/ssl/certs/mailserver.pem | |||
# postconf -e smtpd_tls_key_file=/etc/ssl/private/mailserver.pem | |||
# postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination | # postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination | ||
</pre> | </pre> | ||
Riga 1 018: | Riga 1 068: | ||
** <code>permit_sasl_authenticated</code>: l'utente si è autenticato, oppure | ** <code>permit_sasl_authenticated</code>: l'utente si è autenticato, oppure | ||
** <code>reject_unauth_destination</code>: la mail è destinata a un utente di un nostro dominio virtuale | ** <code>reject_unauth_destination</code>: la mail è destinata a un utente di un nostro dominio virtuale | ||
NOTA: la direttiva <code>postconf -e smtpd_tls_auth_only=yes</code> è da utilizzarsi '''solo''' se vogliamo che i nostri utenti siano costretti a utilizzare SSL per scaricare e inviare la loro posta. | |||
<br/> | |||
<br/> | |||
Riavviamo infine Postfix: | Riavviamo infine Postfix: | ||
<pre> | <pre> | ||
Riga 1 113: | Riga 1 165: | ||
==== Configurazione di Spamassassin ==== | ==== Configurazione di Spamassassin ==== | ||
Verifichiamo che il demone di SpamAssassin sia attivo, aprendo il file: | |||
<pre> | <pre> | ||
# | # nano /etc/default/spamassassin | ||
</pre> | </pre> | ||
e modificando la riga: | |||
<pre> | <pre> | ||
ENABLED=0 | |||
</pre> | </pre> | ||
in | |||
<pre> | |||
ENABLED=1 | |||
</pre> | |||
Avviamo SpamAssassin e abilitiamo l'aggiornamento automatico delle regole: | |||
<pre> | |||
# sa-update && service spamassassin restart | |||
</pre> | |||
Controlliamo che il servizio di aggiornamento automatico si sia abilitato, verificando che in <code>/etc/default/spamassassin</code> ci sia la riga: | |||
<pre> | |||
CRON=1 | |||
</pre> | |||
Verifichiamo che SpamAssassin sia attivo: | |||
<pre> | |||
# netstat -ntpl | grep spamd | |||
tcp 0 0 127.0.0.1:783 0.0.0.0:* LISTEN 2459/spamd.pid | |||
</pre> | |||
Cambiare o aggiungere i seguenti parametri nel file /etc/spamassassin/local.cf come segue: | |||
<pre> | <pre> | ||
# spamassassin | # permette di avere un unico database bayes anziché uno in ogni home degli user | ||
bayes_path /etc/spamassassin/bayes/bayes | |||
bayes_file_mode 0666 | |||
</pre> | </pre> | ||
Successivamente creare la cartella specificata /etc/spamassassin/bayes con i permessi corretti: | |||
<pre> | <pre> | ||
# | # mkdir /etc/spamassassin/bayes | ||
# chmod 777 /etc/spamassassin/bayes | |||
</pre> | </pre> | ||
Controllare se ci sono problemi nella configurazione con il comando: | |||
<pre> | <pre> | ||
# spamassassin --lint | |||
</pre> | </pre> | ||
che dovrebbe restituire una riga vuota.<br/> | |||
==== Configurazione di AMaViS ==== | |||
AMaViS (A Mail Virus Scanner) è un'interfaccia tra Postfix, SpamAssassin e un virus scanner come ClamAV. | |||
<br/> | |||
Installiamo i file necessari: | |||
<pre> | <pre> | ||
# apt-get install amavisd-new clamav-daemon clamav-testfiles clamav-freshclam | |||
</pre> | </pre> | ||
La configurazione si AMaViS è divisa in alcuni files nella directory <code>/etc/amavis/conf.d</code>. | |||
<br/> | <br/> | ||
Il virus scanner ClamAV è già configurato per default e va solo abilitato modificando il file: | Il virus scanner ClamAV è già configurato per default e va solo abilitato modificando il file: | ||
Riga 1 196: | Riga 1 269: | ||
aggiungendo le linee: | aggiungendo le linee: | ||
<pre> | <pre> | ||
smtp-amavis unix - - n - | smtp-amavis unix - - n - 5 smtp | ||
-o smtp_data_done_timeout=1200 | -o smtp_data_done_timeout=1200 | ||
-o smtp_send_xforward_command=yes | -o smtp_send_xforward_command=yes | ||
-o smtp_tls_note_starttls_offer=no | |||
-o disable_dns_lookups=yes | -o disable_dns_lookups=yes | ||
-o max_use=20 | -o max_use=20 | ||
Riga 1 220: | Riga 1 294: | ||
-o smtpd_client_connection_count_limit=0 | -o smtpd_client_connection_count_limit=0 | ||
-o smtpd_client_connection_rate_limit=0 | -o smtpd_client_connection_rate_limit=0 | ||
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks | -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters | ||
-o local_header_rewrite_clients= | -o local_header_rewrite_clients= | ||
-o smtpd_milters= | |||
</pre> | </pre> | ||
Quindi riavviamo Postfix: | Quindi riavviamo Postfix: | ||
Riga 1 268: | Riga 1 343: | ||
Come ultima cosa modifichiamo i permessi del file in modo che nessun utente non autorizzato possa leggere la password del nostro database: | Come ultima cosa modifichiamo i permessi del file in modo che nessun utente non autorizzato possa leggere la password del nostro database: | ||
<pre> | <pre> | ||
# chmod | # chmod 640 /etc/amavis/conf.d/50-user | ||
</pre> | |||
Testiamo il funzionamento di ClamAV: | |||
<pre> | |||
# clamdscan /usr/share/clamav-testfiles/ | |||
/usr/share/clamav-testfiles/clam.pdf: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.chm: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.sis: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.impl.zip: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-nsis.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.tar.gz: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.bz2.zip: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.7z: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-yc.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.ole.doc: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.newc.cpio: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-aspack.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.ppt: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.ea05.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.ea06.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.html: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-upack.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.bz2: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.bin-be.cpio: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.cab: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.mbox.base64: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.arj: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.binhex: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-fsg.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.mbox.uu: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.odc.cpio: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam_cache_emax.tgz: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.tnef: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-mew.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-upx.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-pespin.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam_ISmsi_ext.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.mail: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-wwpack.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam_IScab_ext.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam_ISmsi_int.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.zip: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam-petite.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.szdd: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.d64.zip: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam_IScab_int.exe: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.bin-le.cpio: ClamAV-Test-File FOUND | |||
/usr/share/clamav-testfiles/clam.exe.rtf: ClamAV-Test-File FOUND | |||
----------- SCAN SUMMARY ----------- | |||
Infected files: 44 | |||
Time: 1.478 sec (0 m 1 s) | |||
</pre> | |||
Ora proviamo a inviare una mail infetta attraverso Postfix, per vedere se AMaViS e ClamAV si comportano come ci aspettiamo: | |||
<pre> | |||
# swaks -t john@example.org --attach - --server localhost --suppress-data < /usr/share/clamav-testfiles/clam.exe | |||
</pre> | |||
Tra le altre righe in <code>/var/log/mail.log</code> dovremmo trovare una cosa del genere: | |||
<pre> | |||
29 23:16:23 sirius amavis[4558]: (04558-02) Blocked INFECTED (ClamAV-Test-File) {DiscardedOutbound,Quarantined}, LOCAL [::1]:44226 [::1] <root@mailserver.example.org> -> <john@example.org>, quarantine: C/virus-ClS0k87Qzm4Q, Queue-ID: 6608ED6B, Message-ID: <20131029221623.6608ED6B@sirius.localdomain>, mail_id: ClS0k87Qzm4Q, Hits: -, size: 1547, 128 ms | |||
</pre> | |||
segno che ClamAV è intervenuto correttamente, bloccando l'email infetta. | |||
<br/> | |||
La mail infetta è stata spostata in <code>/var/lib/amavis/virusmails/C/virus-ClS0k87Qzm4Q</code> per essere eventualmente analizzata. | |||
<br/> | |||
Possiamo impostare uno script per pulire la quarantena attraverso <code>cron</code>: | |||
<pre> | |||
#!/bin/dash | |||
[ -d /var/lib/amavis/virusmails ] && { | |||
find /var/lib/amavis/virusmails/. -type f -name 'virus-*' -ctime +7 -de$ | |||
find /var/lib/amavis/virusmails/. -type f -ctime +30 -delete | |||
} | |||
exit 0 | |||
</pre> | </pre> | ||
Riga 1 277: | Riga 1 427: | ||
=== Amministrare gli utenti virtuali === | === Amministrare gli utenti virtuali === | ||
====ISPwebAdmin (web interface): introduzione ==== | ==== GRSoft Mail Manager ==== | ||
E' disponibile un'interfaccia web per amministrare i domini virtuali, gli utenti virtuali e gli alias. L'interfaccia si chiama ISPWebAdmin ed è disponibile per il download all'indirizzo: [[http://workaround.org/sites/default/files/ispwebadmin-1.0.2.tar_.gz Download]] | A questo indirizzo: http://www.grs-service.ch/pub/grs_mminstallation.html è possibile trovare un'interfaccia per la gestione degli account mail. GRSoft Mail Manager è scritto in PHP e non richiede dipendenze per funzionare. | ||
# Scaricate il file e scompattatelo in una sottodirectory di <code>/var/www/</code>, ad esempio <code>/var/www/mailmanager</code> | |||
# Aprite un browser e navigate verso l'indirizzo: http://ip.del.nostro.server/mailmanager/install.php | |||
# Seguite le istruzioni per l'installazione. Allo Step 3 viene richiesta una coppia di credenziali MySQL con privilegi sufficienti per scrivere una tabella all'interno del database utilizzato in questa guida | |||
# Alla fine dell'installazione seguite le istruzioni per rimuovere i files non più necessari | |||
L'interfaccia permette la definizione di un Super User e di uno o più amministratori per ogni dominio virtuale che verrà creato. | |||
==== Mail Admin Tool ==== | |||
Un'interfaccia alternativa può essere scaricata a questo indirizzo: [http://mat.ssdata.dk/ Mail Admin Tool]. | |||
==== Broatcast Mail Administrator ==== | |||
La peculiarità di questa interfaccia alternativa è che rende possibile impostare il numero massimo di indirizzi email che ogni dominio può avere. In questo modo possiamo ad esempio avere un dominio con caselle email illimitate e un altro dominio con 5 caselle disponibili. L'interfaccia è scaricabile da qui: [http://www.blog.broatcast.de/broatcast-mail-administrator Broatcatst Mail Administrator] | |||
==== ISPwebAdmin (web interface): introduzione ==== | |||
{{Warningbox|Interfaccia obsoleta e non più sviluppata. Si consiglia di utilizzare GRSoft Mail Manager}} | |||
E' disponibile un'ulteriore interfaccia web per amministrare i domini virtuali, gli utenti virtuali e gli alias. L'interfaccia si chiama ISPWebAdmin ed è disponibile per il download all'indirizzo: [[http://workaround.org/sites/default/files/ispwebadmin-1.0.2.tar_.gz Download]] | |||
==== Installazione ==== | ===== Installazione ===== | ||
Per poter utilizzare ISPWebAdmin è necessario aggiungere alcune tabelle SQL al database per poter archiviare gli username e le password degli amministratori abilitati alla gestione degli account. Apriamo quindi la shell di MySQL: | Per poter utilizzare ISPWebAdmin è necessario aggiungere alcune tabelle SQL al database per poter archiviare gli username e le password degli amministratori abilitati alla gestione degli account. Apriamo quindi la shell di MySQL: | ||
Riga 1 369: | Riga 1 534: | ||
Il file di log si troverà in <code>/var/log/runit-ispwebadmin</code>. | Il file di log si troverà in <code>/var/log/runit-ispwebadmin</code>. | ||
==== Configurazione del file <code>run.ini</code> ==== | ===== Configurazione del file <code>run.ini</code> ===== | ||
Il file creato con il comando <code>paster make-config run.ini</code> contiene alcune impostazioni che possono essere personalizzate per adattarle alla configurazione del nostro mail server. Prima di avviare la web interface è consigliato aprire il file e controllare queste impostazioni: | Il file creato con il comando <code>paster make-config run.ini</code> contiene alcune impostazioni che possono essere personalizzate per adattarle alla configurazione del nostro mail server. Prima di avviare la web interface è consigliato aprire il file e controllare queste impostazioni: | ||
Riga 1 380: | Riga 1 545: | ||
mysql://root:seoroct3@mailserver.example.com/mailserver?charset=utf8 | mysql://root:seoroct3@mailserver.example.com/mailserver?charset=utf8 | ||
</pre> | </pre> | ||
=== Impostazione dei record DNS === | === Impostazione dei record DNS === | ||
Riga 1 473: | Riga 1 631: | ||
</pre> | </pre> | ||
In questo caso abbiamo bloccato alcuni domini e autorizzato il dominio ferdy.it a inviarci mail senza nessun ulteriore controllo. | In questo caso abbiamo bloccato alcuni domini e autorizzato il dominio ferdy.it a inviarci mail senza nessun ulteriore controllo. | ||
<br/> | |||
Inseriamo alcuni ulteriori controlli sull'header e sul body della mail, aggiungendo la sezione: | |||
<pre> | <pre> | ||
# postmap /etc/postfix/access | # Verifico correttezza header e body | ||
header_checks = pcre:/etc/postfix/header_checks | |||
body_checks = regexp:/etc/postfix/body_checks | |||
</pre> | |||
e creando i due file relativi: | |||
<pre> | |||
# nano /etc/postfix/header_checks | |||
</pre> | |||
con contenuto (da scrivere in una riga sola): | |||
<pre> | |||
/^Content-(Disposition|Type).*name\s*=\s*"?(.*(\.|=2E)( | |||
ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|hlp|ht[at]|inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws| | |||
\{[[:xdigit:]]{8}(?:-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}\}| | |||
ops|pcd|pif|prf|reg|sc[frt]|sh[bsm]|swf| | |||
vb[esx]?|vxd|ws[cfh]))(\?=)?"?\s*(;|$)/x | |||
REJECT Allegato "$2" con estensione proibita ".$4" | |||
</pre> | |||
<pre> | |||
# nano /etc/postfix/body_checks | |||
</pre> | |||
<pre> | |||
/^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/ | |||
REJECT IFRAME vulnerability exploit | |||
</pre> | |||
Quindi facciamo in modo che Postfix si crei il database relativo: | |||
<pre> | |||
# postmap /etc/postfix/access | |||
</pre> | </pre> | ||
Questo comando andrà ripetuto ad ogni modifica del file. | Questo comando andrà ripetuto ad ogni modifica del file. | ||
=== | ==== Un esempio di main.cf ==== | ||
<pre> | <pre> | ||
############################### | |||
# Configurazioni iniziali | |||
############################### | |||
# Messaggio di benvenuto | |||
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) | |||
biff = no | |||
= | # appending .domain is the MUA's job. | ||
append_dot_mydomain = no | |||
# Uncomment the next line to generate "delayed mail" warnings | |||
#delay_warning_time = 4h | |||
= | readme_directory = no | ||
############################# | |||
# Configurazione SSL | |||
############################# | |||
# TLS parameters | |||
smtpd_tls_cert_file = /etc/ssl/certs/mailserver.pem | |||
smtpd_tls_key_file = /etc/ssl/private/mailserver.pem | |||
smtpd_use_tls = yes | |||
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache | |||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache | |||
smtpd_tls_security_level = may | |||
smtpd_tls_auth_only = no | |||
###################################### | |||
# Configurazione | |||
###################################### | |||
myhostname = mail01.xxxxx.org | |||
alias_maps = hash:/etc/aliases | |||
alias_database = hash:/etc/aliases | |||
myorigin = /etc/mailname | |||
mydestination = mail01.xxxxx.org, localhost.xxxxx.org, , localhost.xxxxxyy.com, localhost | |||
relayhost = | |||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/24 | |||
mailbox_command = procmail -a "$EXTENSION" | |||
mailbox_size_limit = 0 | |||
recipient_delimiter = + | |||
inet_interfaces = all | |||
inet_protocols = ipv4 | |||
queue_directory = /var/spool/postfix | |||
=== | ####################################### | ||
# Configurazione utenti virtuali MySQL | |||
####################################### | |||
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf | |||
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf | |||
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf | |||
################### | |||
# Regole Antispam | |||
################### | |||
== | # Verifico correttezza header e body | ||
header_checks = pcre:/etc/postfix/header_checks | |||
body_checks = regexp:/etc/postfix/body_checks | |||
# Abilito a spedire solo gli utenti presenti in MySQL | |||
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-sender-login-maps.cf | |||
== | # Restrizioni helo | ||
smtpd_helo_required = yes | |||
smtpd_helo_restrictions = | |||
permit_mynetworks | |||
#reject_unknown_client | |||
#reject_invalid_hostname | |||
#reject_unauth_pipelining | |||
#reject_unknown_hostname | |||
#reject_non_fqdn_hostname | |||
# Restrizioni sui mittenti abilitati | |||
smtpd_sender_restrictions = | |||
permit_mynetworks | |||
permit_sasl_authenticated | |||
#reject_unknown_address | |||
#reject_unauth_destination | |||
reject_unauth_pipelining | |||
reject_unknown_sender_domain | |||
# | reject_non_fqdn_sender | ||
# | reject_sender_login_mismatch | ||
# | |||
# Blocco alcuni domini spammer | |||
smtpd_client_restrictions = | |||
permit_mynetworks | |||
#check_client_access hash:/etc/postfix/access | |||
#reject_invalid_hostname | |||
reject_rbl_client zen.spamhaus.org | |||
reject_rbl_client multi.uribl.com | |||
reject_rbl_client dsn.rfc-ignorant.org | |||
reject_rbl_client dul.dnsbl.sorbs.net | |||
reject_rbl_client list.dsbl.org | |||
reject_rbl_client sbl-xbl.spamhaus.org | |||
reject_rbl_client bl.spamcop.net | |||
reject_rbl_client dnsbl.sorbs.net | |||
reject_rbl_client cbl.abuseat.org | |||
reject_rbl_client ix.dnsbl.manitu.net | |||
reject_rbl_client combined.rbl.msrbl.net | |||
reject_rbl_client rabl.nuclearelephant.com | |||
#reject_unknown_client | |||
permit | |||
# Restrizioni sui destinatari | |||
smtpd_recipient_restrictions = | |||
permit_mynetworks | |||
permit_sasl_authenticated | |||
reject_unauth_destination | |||
check_client_access hash:/etc/postfix/access | |||
reject_rbl_client zen.spamhaus.org | |||
reject_rbl_client multi.uribl.com | |||
reject_rbl_client dsn.rfc-ignorant.org | |||
reject_rbl_client dul.dnsbl.sorbs.net | |||
reject_rbl_client list.dsbl.org | |||
reject_rbl_client sbl-xbl.spamhaus.org | |||
reject_rbl_client bl.spamcop.net | |||
reject_rbl_client dnsbl.sorbs.net | |||
reject_rbl_client cbl.abuseat.org | |||
reject_rbl_client ix.dnsbl.manitu.net | |||
reject_rbl_client combined.rbl.msrbl.net | |||
reject_rbl_client rabl.nuclearelephant.com | |||
reject_rbl_client dnsbl-1.uceprotect.net | |||
reject_unknown_sender_domain | |||
reject_unauth_pipelining | |||
check_policy_service unix:private/tumgreyspf | |||
reject_non_fqdn_sender | |||
reject_non_fqdn_recipient | |||
reject_non_fqdn_hostname | |||
reject_invalid_hostname | |||
# Non piu' di 200 destinatari al minuto | |||
smtpd_client_recipient_rate_limit = 200 | |||
# Non piu' di 50 destinatari per ogni messaggio | |||
smtpd_recipient_limit = 50 | |||
# Numero di destinatari in eccesso prima che scatti il blocco | |||
smtpd_recipient_overshoot_limit = 21 | |||
# Numero di errori massimi di un client prima di essere disconnesso | |||
smtpd_hard_error_limit = 20 | |||
# Impedisco invio mail ad alcuni utenti locali | |||
authorized_submit_users = !www-data, static:all | |||
===== | |||
######################### | |||
# Configurazione Dovecot | |||
# | ######################### | ||
virtual_transport = dovecot | |||
dovecot_destination_recipient_limit = 1 | |||
smtpd_sasl_type = dovecot | |||
smtpd_sasl_path = private/auth | |||
smtpd_sasl_auth_enable = yes | |||
############################### | |||
# Integrazione con AMaViS | |||
############################### | |||
content_filter = smtp-amavis:[127.0.0.1]:10024 | |||
receive_override_options = no_address_mappings | |||
</pre> | </pre> | ||
=== SPF per ridurre ancora di più lo spam === | |||
''SPF'', acronimo per ''Sender Policy Framework'', è un sistema attraverso il quale il proprietario di un dominio può definire quali indirizzi IP sono autorizzati a inviare le sue mail. | |||
<pre> | <pre> | ||
$> dig +short workaround.org txt | |||
"v=spf1 ip4:85.214.93.191 ip4:85.214.149.150 -all" | |||
</pre> | </pre> | ||
Questa riga significa che se qualcuno invia una mail con mittente ...@workaround.org noi dovremmo accettarla solo se proviene da uno degli indirizzi IP specificati nel record TXT della zona del dominio in questione. Se la mail proviene da un atro IP significa che non è stata spedita da un server di workaround.org e che con tutta probabilità si tratta di spam. | |||
<br/> | |||
Molte organizzazioni e molti siti hanno già i loro record SPF, che possiamo utilizzare per ridurre la quantità di spam in arrivo sui nostri server. Per utilizzare correttamente i record SPF dovremo quindi: | |||
* impostare un record TXT nella nostra zona per definire quali indirizzi IP sono autorizzati a inviare mail a nome nostro | |||
* controllare le voci SPF dei server mittenti e respingere la mail in arrivo da IP non autorizzati | |||
==== Impostare una voce SPF ==== | |||
Per aggiungere un record TXT come mostrato nel paragrafo precedente dovremo ovviamente avere il pieno controllo della nostra zona DNS, oppure chiedere al nostro ISP che lo faccia per noi. | |||
<br/> | |||
< | Per creare una corretta stringa TXT è consigliabile andare sul sito di OpenSPF e utilizzare il wizard apposito; quindi copincolliamo la stringa risultante e utilizziamola come record TXT per il nostro dominio. | ||
==== Verificare i record SPF degli altri mail server ==== | |||
Fortunatamente esiste un pacchetto Debian che rende il controllo dei record SPF una cosa molto semplice. Iniziamo con l'installazione del pacchetto: | |||
<pre> | <pre> | ||
# apt-get install tumgreyspf | |||
</pre> | </pre> | ||
<code>tumgreyspf</code> è un policy daemon scritto in Python che effettua sia il greylisting sia il controllo SPF delle email in entrata. Per attivarlo basta semplicemente aggiungere una linea alla nostra direttiva <code>smtpd_recipient_restrictions</code>. Ad esempio: | |||
<pre> | <pre> | ||
smtpd_recipient_restrictions = | |||
permit_mynetworks, | |||
permit_sasl_authenticated, | |||
[ ... ] | |||
check_policy_service unix:private/tumgreyspf | |||
reject_unauth_destination | |||
</pre> | </pre> | ||
Per definire il programma chiamato dalle policies occorre anche aggiungere due righe al file <code>/etc/postfix/master.cf</code>: | |||
<pre> | <pre> | ||
tumgreyspf unix - n n - - spawn | |||
user=tumgreyspf argv=/usr/bin/tumgreyspf | |||
</pre> | </pre> | ||
Ora riavviamo Postfix: | |||
<pre> | <pre> | ||
# | # postfix reload | ||
</pre> | |||
==== Verifica del funzionamento di SPF ==== | |||
===== SPF okay ===== | |||
Controlliamo il file <code>/var/log/mail.log</code>. Ogni nuova mail in arrivo dovrebbe adesso avere una nuova riga aggiunta da <code>tumgreyspf</code>. Se il controllo SPF è risultato positivo, dovremmo avere qualcosa come: | |||
<pre> | |||
tumgreyspf[24672]: sender SPF authorized: QUEUE_ID=""; identity=mailfrom; | |||
client-ip=26.21.244.31; helo=squedge2.squ.edu.om; | |||
envelope-from=…@squ.edu.om; | |||
receiver=…@workaround.org; | |||
</pre> | |||
Questo significa che il mittente <code>…@squ.edu.om</code> è stato autorizzato all'invio della mail dopo un controllo dei record SPF. | |||
===== SPF fail ===== | |||
Se il controllo SPF fallisce dovremmo ottenere qualcosa del genere: | |||
<pre> | <pre> | ||
tumgreyspf[24672]: SPF fail - not authorized: QUEUE_ID=""; identity=mailfrom; | |||
client-ip=41.234.18.141; helo=gmx.de; | |||
envelope-from=…gmx.de; | |||
receiver=…christoph-haas.de; | |||
</pre> | </pre> | ||
La mail è stata respinta. | |||
===== SPF softfail ===== | |||
Un altro caso è quando il record SPF del dominio del mittente non contiene la regola FAIL (-all), ma la regola SOFTFAIL (~all). Nei nostri log troveremo qualcosa del genere: | |||
<pre> | |||
tumgreyspf[20408]: domain owner discourages use of this host: QUEUE_ID=""; | |||
< | identity=mailfrom; client-ip=220.245.2.67; helo=220-245-2-67.static.tpgi.com.au; | ||
envelope-from=…@rollouts.com; receiver=…@workaround.org | |||
</pre> | </pre> | ||
Purtroppo una regola SOFTFAIL non respinge la mail in arrivo, ma fa almeno in modo che il destinatario sia avvertito del problema, aggiungendo un'informazione all'header della mail: | |||
<pre> | <pre> | ||
Received-SPF: Softfail (domain owner discourages use of this host) identity=mailfrom; | |||
client-ip=61.146.93.243; helo=mail.163gd.com; | |||
envelope-from=…@cantv.net; receiver=…@christoph-haas.de; | |||
</pre> | </pre> | ||
In questo modo il mail client dell'utente finale può ancora filtrare la mail come spam. | |||
===== No SPF information ===== | |||
Se il dominio remoto non ha record SPF, nei nostri log risulterà qualcosa del genere: | |||
<pre> | <pre> | ||
Received-SPF: Neutral (access neither permitted nor denied) identity=mailfrom; | |||
client-ip=80.65.65.222; helo=mail.unze.ba; | |||
envelope-from=…@gmail.com; receiver=…@christoph-haas.de; | |||
</pre> | </pre> | ||
e | |||
=== Quote === | |||
Il nostro mail server non ha spazio infinito, soprattutto se usiamo il protocollo IMAP e gli utenti apprezzano la comodità di avere le mail sempre a disposizione sul server. Perciò vorremo probabilmente limitare lo spazio che un utente può occupare. Dovecot può impostare la dimensione della mailbox di un utente e il numero di email della sue cartelle virtuali. | |||
<br/> | |||
La configurazione delle quote cambia a seconda che si stia utilizzando Debian Lenny o Debian Squeeze. | |||
==== Debian Lenny ==== | |||
===== Lenny: Attivare il plugin quota di Dovecot ===== | |||
Ci sono tre punti nel file <code>/etc/dovecot/dovecot.conf</code> dove occorre specificare l'abilitazione del plugin: | |||
<pre> | <pre> | ||
protocol imap { | |||
mail_plugins = quota imap_quota | |||
} | |||
protocol pop3 { | |||
mail_plugins = quota | |||
} | |||
protocol lda { | |||
mail_plugins = quota | |||
} | |||
</pre> | </pre> | ||
===== Lenny: Impostare una quota globale ===== | |||
Il caso più semplice è quello in cui si intende impostare una quota limite comune e uguale per tutti gli utenti, ad esempio 1GB di spazio con non più di 1000 email archiviabili. | |||
Nel file <code>/etc/dovecot/dovecot.conf</code> dovremo impostare: | |||
<pre> | <pre> | ||
plugin { | |||
quota = maildir:storage=1000000:messages=1000 | |||
} | |||
</pre> | </pre> | ||
ricordando che i valori per lo storage sono espressi in KB. | |||
===== Lenny: Impostare una quota utente ===== | |||
Se intendiamo impostare per alcuni utenti delle quote diverse da quelle globali, allora dobbiamo impostare la quota all'interno della tabella dei virtual_users. Utilizziamo la seguente query per aggiungere due colonne alla nostra tabella virtual_users: | |||
<pre> | <pre> | ||
mysql> | |||
ALTER TABLE `virtual_users` ADD `quota_kb` INT NOT NULL, | |||
ADD `quota_messages` INT NOT NULL ; | |||
</pre> | </pre> | ||
Inoltre dovremo abilitare la direttiva <code>user sql</code> nel file <code>/etc/dovecot/dovecot.conf</code>, disabilitando la direttiva <code>user static</code> suggerita all'inizio del tutorial: | |||
<pre> | <pre> | ||
#userdb static { | |||
# args = uid=5000 gid=5000 home=/var/vmail/%d/%n allow_all_users=yes | |||
# | |||
userdb sql { | |||
args = /etc/dovecot/dovecot-sql.conf | |||
} | |||
</pre> | </pre> | ||
Infine dovremo aggiungere al file <code>/etc/dovecot/dovecot-sql.conf</code> la linea: | |||
<pre> | <pre> | ||
user_query = SELECT CONCAT('/var/vmail/',CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1))) AS home, 5000 AS uid, 5000 AS gid, CONCAT('maildir:storage=',quota_kb,':messages=',quota_messages) AS quota FROM virtual_users WHERE email='%u'; | |||
</pre> | </pre> | ||
===== Lenny: Cosa succede se un utente supera la quota ===== | |||
La gestione delle quote in Dovecot non è molto user-friendly. Il mittente non riceve un avviso se è vicino a superare la quota limite; in compenso, quando l'ha superata, le sue mail torneranno indietro con oggetto "Automatically rejected mail" e corpo della mail "Your message to <john@example.com> was automatically rejected: Quota exceeded". | |||
==== Debian Squeeze ==== | |||
A partire da Dovecot 1.1, di default su Squeeze, la gestione delle quote è cambiata notevolmente. | |||
===== Squeeze: Impostazione delle Quote root ===== | |||
Dobbiamo innanzitutto aprire il file di configurazione di Dovecot: | |||
<pre> | <pre> | ||
# nano /etc/dovecot/dovecot.conf | |||
</pre> | </pre> | ||
recarci alla sezione <code>plugin { }</code> e definire le quote root. Ad esempio: | |||
<pre> | <pre> | ||
plugin { | |||
quota = maildir:User quota | |||
#quota2 = fs:Disk quota | |||
#quota3 = ... | |||
} | |||
</pre> | </pre> | ||
In questa guida utilizzeremo solamente una gestione delle quote legata alle dimensioni delle maildir. | |||
===== Squeeze: Quote rules ===== | |||
A questo punto, nella stessa sezione del file di configurazione possiamo definire le nostre regole di quota: | |||
<pre> | <pre> | ||
plugin { | |||
</pre> | # Quota root | ||
quota = maildir:User quota | |||
# Quote rules | |||
# 1 - Dimensione massima 2 GB | |||
quota_rule = *:storage=2GB | |||
# 2 - Dimensione Cestino 200 MB | |||
quota_rule2 = Trash:storage=200MB | |||
# 3 - Dimensione cartella Spam 200MB | |||
quota_rule3 = Spam:storage=200MB | |||
} | |||
</pre> | |||
===== Squeeze: Cosa succede se un utente supera la quota ===== | |||
In Squeeze possiamo finalmente configurare Dovecot in modo che invii un messaggio personalizzato agli utenti che hanno superato la loro quota disco. All'interno della solita sezione del file di configurazione di Dovecot aggiungiamo la riga: | |||
<pre> | <pre> | ||
plugin { | |||
quota_exceeded_message = Spazio su disco esaurito. Contattare il webmaster per ricevere istruzioni. | |||
</pre> | </pre> | ||
==== | ===== Squeeze: messaggio di avvertimento ===== | ||
In | In Squeeze possiamo anche configurare Dovecot in modo che avvii un comando esterno quando la quota di un certo utente supera una certa percentuale. Come al solito dobbiamo recarci nella sezione <code>plugin { }</code> del file di configurazione di Dovecot e aggiungere le seguenti linee: | ||
<pre> | <pre> | ||
plugin { | |||
quota_warning = storage=95%% /usr/local/bin/quota-warning.sh 95 | |||
quota_warning2 = storage=80%% /usr/local/bin/quota-warning.sh 80 | |||
} | |||
</pre> | </pre> | ||
Nell'esempio precedente, lo script <code>quota-warning.sh</code> è eseguito una prima volta quando l'utente raggiunge l'80% del suo spazio disco e una seconda volta quando raggiunge il 95%. | |||
< | |||
</ | |||
<br/> | <br/> | ||
Lo script va creato a mano: | |||
<pre> | <pre> | ||
# nano / | # nano /usr/local/bin/quota-warning.sh | ||
</pre> | </pre> | ||
con contenuto: | |||
<pre> | <pre> | ||
$ | #!/bin/sh | ||
PERCENT=$1 | |||
FROM="webmaster@example.com" | |||
qwf="/tmp/quota.warning.$$" | |||
echo "From: $FROM | |||
To: $USER | |||
To: postmaster@domain.org | |||
Subject: Hai raggiunto il $PERCENT% del tuo spazio su disco! | |||
Content-Type: text/plain; charset="UTF-8" | |||
La tua mailbox ha raggiunto il $PERCENT% dello spazio disponibile. Sei pregato di eliminare le mail che non ti occorrono." >> $qwf | |||
cat $qwf | /usr/sbin/sendmail -f $FROM "$USER" | |||
rm -f $qwf | |||
exit 0 | |||
</pre> | </pre> | ||
Rendiamo lo script eseguibile: | |||
<pre> | <pre> | ||
# | # chmod 750 /usr/local/bin/quota-warning.sh | ||
</pre> | </pre> | ||
e siamo a posto. | |||
< | |||
/etc/ | ==== Debian Wheezy ==== | ||
A partire da Debian Wheezy, la configurazione (può essere identica a quella per Squeeze) deve essere inserita nel file <code>/etc/dovecot/conf.d/90-quota.conf</code>. | |||
=== | === Accesso tramite Webmail === | ||
==== Squirrelmail ==== | |||
Questo passaggio è facoltativo, ma ormai praticamente tutti i provider offrono ai loro utenti un mezzo per poter controllare le email da un browser. | |||
<br/> | <br/> | ||
Per questo motivo durante l'iniziale installazione dei pacchetti abbiamo scelto anche il pacchetto <code>squirrelmail</code>: ''SquirrelMail è un pacchetto per posta via web aderente agli standard, scritto in PHP. Include supporto integrato in PHP puro per i protocolli IMAP e SMTP ed è progettato per una massima compatibilità con i vari browser. SquirrelMail non richiede molte cose ed è facile da configurare ed installare. Gira sopra qualsiasi server IMAP''. SquirrelMail ha tutte le funzioni che si possono desiderare in un client di posta elettronica, incluso un forte supporto MIME, gestione di rubriche e cartelle (Fonte: [http://packages.debian.org/search?keywords=squirrelmail Debian package]). | |||
<br/> | <br/> | ||
Per impostarlo dobbiamo inannzitutto aggiungere la sua configurazione a quella di Apache: | |||
<pre> | <pre> | ||
$> ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf | |||
$> apache2ctl restart | |||
</pre> | </pre> | ||
Inoltre dobbiamo variare un parametro; lo facciamo utilizzando il tool di configurazione di Squirrelmail: | |||
<pre> | <pre> | ||
$> squirrelmail-configure | |||
</pre> | </pre> | ||
e | Selezioniamo l'opzione 3 (Folder Defaults) e impostiamo l'opzione 1 (Default Folder Prefix) a 'none'. Già che ci siamo possiamo anche navigare all'interno del menu di configurazione e impostare anche il nome corretto per la nostra organizzazione. | ||
<br/> | |||
A questo punto visitando il sito: http://ip.del.nostro.server/squirrelmail possiamo effettuare il login con le credenziali di uno dei nostri virtual user e iniziare ad usare la webmail. | |||
===== Permettere il cambio password all'utente ===== | |||
Può essere molto comodo dare all'utente la possibilità di cambiarsi la password per conto suo, senza stressare il sistemista di turno. La cosa più semplice è permetterglielo attraverso la webmail. Squirrelmail di default non prevede questa funzione, ma per fortuna esiste un ottimo plugin che fa al caso nostro. Andiamo quindi alla pagina del plugin (http://squirrelmail.org/plugin_view.php?id=25) e scarichiamolo. Quindi copiamolo nella directory: | |||
<pre> | <pre> | ||
/usr/share/squirrelmail/plugins | |||
</pre> | </pre> | ||
e scompattiamolo: | |||
<pre> | <pre> | ||
# | # tar zxvf change_sqlpass-3.3-1.2.tar.gz | ||
</pre> | </pre> | ||
Prima di modificarne la configurazione dobbiamo compiere alcune operazioni propedeutiche: | |||
<pre> | <pre> | ||
# apt-get install php-mdb2 squirrelmail-compatibility | |||
# pear install DB | |||
</pre> | </pre> | ||
Ora siamo pronti per configurare il plugin appena scaricato: | |||
<pre> | <pre> | ||
# / | # cd /usr/share/squirrelmail/plugins/change_sqlpass | ||
# cp config.php.sample config.php | |||
# vi config.php | |||
</pre> | </pre> | ||
* Modifichiamo la riga: | |||
<pre> | <pre> | ||
$csp_dsn = 'mysql://root:password@localhost/mailserver'; | |||
</pre> | </pre> | ||
inserendo le credenziali per l'accesso al database mailserver. | |||
* Modifichiamo la riga: | |||
<pre> | <pre> | ||
$lookup_password_query = 'SELECT count(*) FROM virtual_users WHERE email = "%1" AND password = %4'; | |||
</pre> | </pre> | ||
inserendo la query corretta per la ricerca dell'utente virtuale. | |||
* Modifichiamo la riga: | |||
<pre> | <pre> | ||
'UPDATE virtual_users SET password = %4 WHERE email = "%1"', | |||
</pre> | </pre> | ||
inserendo la query corretta per la modifica della password dell'utente virtuale. | |||
* Inseriamo il corretto metodo di crittazione usato dal nostro database: | |||
<pre> | <pre> | ||
$password_encryption = 'MD5'; | |||
</pre> | </pre> | ||
* Correggiamo la stringa: | |||
<pre> | <pre> | ||
$csp_salt_static = ''; | |||
</pre> | </pre> | ||
e | e salviamo il file. | ||
<br/> | |||
Quindi riconfiguriamo Squirrelmail: | |||
<pre> | <pre> | ||
/ | # cd ../../config/ | ||
/ | # ./conf.pl | ||
/ | </pre> | ||
/ | e attiviamo il plugin: | ||
<pre> | |||
8. Plugins | |||
x. change_sqlpass | |||
Save S and exit Q. | |||
</pre> | </pre> | ||
Effettuando | Effettuando il login nella nostra webmail, sotto la voce "Opzioni" troveremo la funzione "Cambia password". | ||
=== | ==== Roundcube ==== | ||
In alternativa (o affiancato) a Squirrelmail possiamo offrire il più moderno e eye-candy Roundcube, anch'esso presente nei repository di Debian. Per installarlo basta un comando: | |||
* '''Lenny''': | |||
<pre> | <pre> | ||
# apt-get -t lenny-backports install roundcube | |||
</pre> | </pre> | ||
* '''Da Squeeze in poi''': | |||
<pre> | |||
# apt-get install roundcube | |||
</pre> | |||
Rispondiamo di sì alla domanda dell'installer se configurare o meno un database con ''dbconfig-common'' e scegliamo come database il solito MySQL. Ci verrà poi richiesta la password di amministratore di MySQL e l'installazione terminerà. | |||
<br/> | <br/> | ||
Ora modifichiamo il file di configurazione: | |||
<pre> | |||
# nano /etc/roundcube/main.inc.php | |||
</pre> | |||
modificando le linee: | |||
<pre> | |||
$rcmail_config['default_host'] = 'localhost'; | |||
$rcmail_config['force_https'] = true; | |||
</pre> | |||
{{Suggerimento|Se il server su cui è installato Roundcube è diverso da quello su cui girano Postfix e Dovecot, dovrete impostare correttamente Roundcube affinchè possa connettersi al server remoto: <nowiki>$rcmail_config['smtp_server'] = 'tls://12.34.56.78';</nowiki>}} | |||
Quindi modifichiamo il file che definisce il Virtual Host di Roundcube: | |||
<pre> | |||
# nano /etc/roundcube/apache.conf | |||
</pre> | |||
e decommentiamo le linee: | |||
<pre> | <pre> | ||
# /etc/init.d/amavisd-new stop | Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ | ||
Alias /roundcube /var/lib/roundcube | |||
</pre> | |||
Installiamo i driver MDB2: | |||
<pre> | |||
# pear install MDB2_Driver_mysql | |||
</pre> | |||
Riavviamo Apache: | |||
<pre> | |||
/etc/init.d/apache2 restart | |||
</pre> | |||
e facciamo login nella nostra webmail all'indirizzo: <code>http:// your-domain/roundcube</code> | |||
===== Personalizzazione di Roundcube ===== | |||
Per essere più professionali nella nostra offerta, possiamo personalizzare alcune voci di Roundcube. Apriamo il suo file di configurazione: | |||
<pre> | |||
# nano /etc/roundcube/main.inc.php | |||
</pre> | |||
e modifichiamo le righe: | |||
<pre> | |||
#$rcmail_config['product_name'] = ‘RoundCube Webmail’; | |||
$rcmail_config['product_name'] = ‘Il mio nome Webmail’; | |||
</pre> | |||
Quindi andiamo in <code>/var/lib/roundcube/skins/classic <oppure larry>/images</code> e sostituiamo il file <code>roundcube_logo.png</code> con una PNG contenente il nostro logo. | |||
=== Filtri server-side: Sieve per Roundcube === | |||
Arrivati a questo punto siamo in possesso di un mail server completamente funzionale, che tagga addirittura le mail di spam; però il compito di filtrare le mail taggate come spam è lasciato al client di posta dell'utente finale. | |||
<br/> | |||
Utilizzando Sieve, un mail filter simile a procmail (che non utilizziamo perchè non lavora con le mailbox virtuali) possiamo fare in modo che i nostri utenti riescano a impostare dei filtri e delle regole ''server-side''. | |||
<br/> | |||
Roundcube è già pienamente compatibile con Sieve, dobbiamo solo informarlo della sua installazione: | |||
<pre> | |||
# cp /usr/share/roundcube/plugins/managesieve/config.inc.php.dist /etc/roundcube/plugins/managesieve/config.inc.php | |||
</pre> | |||
Ora apriamo il file di configurazione del plugin: | |||
<pre> | |||
# nano /etc/roundcube/plugins/managesieve/config.inc.php | |||
</pre> | |||
e impostiamo la corretta porta TCP dove Dovecot si aspetta le connessioni da Sieve: | |||
<pre> | |||
$rcmail_config['managesieve_port'] = 4190; | |||
</pre> | |||
Quindi abilitiamo il plugin ''managesieve'' in RoundCube: | |||
<pre> | |||
# nano /etc/roundcube/main.inc.php | |||
</pre> | |||
<pre> | |||
$rcmail_config['plugins'] = array('managesieve'); | |||
</pre> | |||
A questo punto, dalla schermata ''Impostazioni'' di ''Roundcube'' ogni utente troverà una nuova scheda chiamata ''Filtri'', dove potrà impostare tutti i filtri che gli interessano. | |||
<br/> | |||
Creiamo un file di configurazione per Sieve: | |||
<pre> | |||
# nano /var/vmail/globalsieverc | |||
</pre> | |||
contenente: | |||
<pre> | |||
require ["fileinto"]; | |||
# Sposto lo spam in un folder apposito | |||
if header :contains "X-Spam-Flag" ["YES"] { | |||
fileinto "Junk"; | |||
stop; | |||
} | |||
</pre> | |||
e verifichiamo che sia leggibile dall'utente <code>vmail</code>: | |||
<pre> | |||
# chown vmail /var/vmail/globalsieverc | |||
</pre> | |||
Quindi modifichiamo la configurazione di Dovecot e inseriamo un plugin per il global filtering delle mail: | |||
<pre> | |||
# nano /etc/dovecot/conf.d/15-lda.conf | |||
</pre> | |||
e decommentando la voce: | |||
<pre> | |||
mail_plugins = $mail_plugins sieve | |||
</pre> | |||
<pre> | |||
# nano /etc/dovecot/conf.d/90-sieve.conf | |||
</pre> | |||
<pre> | |||
plugin { | |||
sieve = ~/.dovecot.sieve | |||
sieve_dir = ~/sieve | |||
sieve_before = /var/vmail/globalsieverc | |||
} | |||
</pre> | |||
Riavviamo Dovecot: | |||
<pre> | |||
# /etc/init.d/dovecot restart | |||
</pre> | |||
=== Filtri server-side: Sieve per Squirrelmail === | |||
Managesieve è un'interfaccia low-level per amministrare gli script di Sieve. Per abilitarla è necessario aggiungere <code>managesieve</code> alla linea <code>protocols</code> del nostro file <code>/etc/dovecot/dovecot.conf</code>; nella sezione <code>protocol managesieve</code> dovremmo trovare la linea <code>sieve=~/.dovecot.sieve</code> già impostata. Con questa impostazione il filtro Sieve per il nostro utente sarà posizionato in <code>/var/mail/example.com/john/.dovecot.sieve</code>. | |||
<br/> | |||
Sicuramente i nostri utenti non avranno voglia di impararsi il linguaggio di filtering di Sieve e avranno quindi bisogno di una maniera comoda di amministrare i loro filtri. Questo può essere fatto attraverso il plugin ''avelsieve'' di Squirrelmail: | |||
<pre> | |||
# aptitude install avelsieve | |||
</pre> | |||
Il pacchetto di Debian ha in alcune versioni un errore sulla porta di ascolto del demone Sieve; se la vostra versione è affetta da questo bug, al primo tentativo di login su Squirrelmail vi troverete davanti al messaggio: | |||
<pre> | |||
Could not log on to timsieved daemon on your IMAP server localhost:4190 | |||
</pre> | |||
Il plugin avelsieve si è messo in ascolto sulla porta sbagliata... Apriamo il suo file di configurazione: | |||
<pre> | |||
# nano /usr/share/squirrelmail/plugins/avelsieve/config/config.php | |||
</pre> | |||
e modifichiamo come segue la sezione incriminata: | |||
<pre> | |||
/* ======================================================================== */ | |||
/* =================== ManageSieve Backend Options ======================== */ | |||
/* ======================================================================== */ | |||
/* Port where timsieved listens on the Cyrus IMAP server. Default is 2000. */ | |||
/** DEBIAN CHANGE: Despite upstream's intention Debian changed this default | |||
* distribution wide to 4190 which is thus default here. | |||
*/ | |||
global $sieveport; | |||
$sieveport = 4190; | |||
</pre> | |||
Effettuando ora il login su Squirrelmail noteremo una nuova voce di menu chiamata "Filters" da cui potremo impostare tutte le regole che vogliamo. | |||
=== Eliminare le email vecchie === | |||
Con il protocollo IMAP è possibile che alcuni client marchino le email come "cancellate" senza però eliminarle fisicamente dal server. L'utente non le vede più, ma queste continuano a occupare spazio sul nostro server. E' conveniente perciò impostare uno script che elimini queste mail in maniera automatica: | |||
<pre> | |||
find /var/vmail -type f -ctime +7 -name '*,ST' -delete | |||
</pre> | |||
Con questo comando, che possiamo inserire nel crontab del server, vengono eliminate tutte le email cancellate e più vecchie di 7 giorni. | |||
=== Ulteriori armi contro lo Spam === | |||
Possiamo aggiungere altri due filtri collaborativi contro lo spam seguendo queste due guide: | |||
<br/> | |||
* [[Pyzor]] | |||
* [[Razor]] | |||
== Il mio server è stato blacklistato! == | |||
Ci siamo prodigati per proteggere il nostro mailserver, ma è accaduto lo stesso: il nostro indirizzo IP è stato inserito in una o più blacklist. | |||
<br/> | |||
Che cosa possiamo fare? | |||
# Verificare in quali blacklist siamo stati inseriti; possiamo utilizzare alcuni tool online che in pochi attimi ci daranno il responso: | |||
* [http://mxtoolbox.com/blacklists.aspx MxToolbox] | |||
* [http://whatismyipaddress.com/blacklist-check What Is my IP address] | |||
# Scrivere ai gestori della blacklist chiedendo la rimozione del nostro IP: non funzionerà, ma almeno potremo dire di averci provato! | |||
# Verificare come è successo, analizzando tutta la configurazione e scandagliando i log | |||
# Avvertire i clienti dell'inconveniente, invitandoli a controllare a loro volta le loro configurazioni e le loro postazioni | |||
# In attesa che il nostro IP venga sbloccato, se possediamo più indirizzi IP possiamo configurare un secondo IP virtuale sulla nostra scheda di rete e inoltrare tutto il traffico di posta verso questo nuovo indirizzo, con il comando: | |||
<pre> | |||
# iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source NUOVO.INDIRIZZO.IP.ALIAS | |||
</pre> | |||
{{Warningbox|Se non abbiamo risolto il problema alla radice, in breve tempo anche il nuovo indirizzo IP finirà blacklistato}} | |||
<br/> | |||
Se abbiamo localizzato il dominio che sta inviando spam dal nostro mailserver, possiamo temporaneamente disabilitarlo dall'invio di nuove mail, dopo averlo comunicato agli intestatari. | |||
<br/> | |||
Per farlo dobbiamo modificare il file di configurazione di Postfix: | |||
<pre> | |||
# nano /etc/postfix/main.cf | |||
</pre> | |||
aggiungendo la sezione: | |||
<pre> | |||
smtpd_sender_restrictions = | |||
check_sender_access hash:/etc/postfix/sender_access | |||
</pre> | |||
Quindi creiamo il file: | |||
<pre> | |||
# nano /etc/postfix/sender_access | |||
</pre> | |||
di contenuto simile a questo: | |||
<pre> | |||
janedoe@acme.local REJECT | |||
acme.com REJECT | |||
bugsbunny@acme.com OK | |||
</pre> | |||
Infine informiamo Postfix: | |||
<pre> | |||
# postmap /etc/postfix/sender_access | |||
</pre> | |||
e riavviamo il demone: | |||
<pre> | |||
# /etc/init.d/postfix restart | |||
</pre> | |||
== Troubleshooting == | |||
Se abbiamo problemi nell'inviare o ricevere mail possiamo: | |||
* controllare il file di log <code>/var/log/mail.log</code>; quasi tutti i problemi sono elencati in questo file, con messaggi di errore più o meno chiari | |||
* eseguire il comando <code>postfix check</code>: se l'output è vuoto significa che Postfix è configurato bene | |||
* verificare la coda delle mail con il comando <code>postqueue -p -v</code> | |||
* impostare l'immediata spedizione di tutte le mail in coda: <code>mailq -q</code> | |||
* verificare il funzionamento di Amavis: | |||
<pre> | |||
# /etc/init.d/amavisd-new stop | |||
# /etc/init.d/amavisd-new debug | # /etc/init.d/amavisd-new debug | ||
</pre> | </pre> | ||
=== Credits | == Statistiche e report == | ||
Questa guida è basata sull'originale di Christoph Haas pubblicata sul sito [ | Il pacchetto <code>pflogsumm</code> (Postfix Log Summary) è comodo per avere un sommario di ciò che succede sul nostro mailserver: | ||
<pre> | |||
# apt-get install pflogsumm | |||
</pre> | |||
Per utilizzarlo basta indicargli il percorso del file di log di Postfix: | |||
<pre> | |||
# pflogsumm /var/log/mail.log | |||
messages | |||
129 received | |||
331 delivered | |||
1 forwarded | |||
8 deferred (59 deferrals) | |||
3 bounced | |||
586 rejected (63%) | |||
0 reject warnings | |||
0 held | |||
0 discarded (0%) | |||
3108k bytes received | |||
3967k bytes delivered | |||
36 senders | |||
28 sending hosts/domains | |||
229 recipients | |||
147 recipient hosts/domains | |||
</pre> | |||
== Gestire una Mailing List == | |||
Nel caso volessimo installare anche un servizio per la gestione di mailing list, possiamo appoggiarci a <code>Mailman</code>, probabilmente il più diffuso mailing list manager open-source. | |||
<br/> | |||
Configureremo un virtual host con hostname <code>lists.example.com</code> in cui installeremo Mailman. <code>lists.example.com</code> sarà anche la parte destra dell'indirizzo delle mailing list che creeremo in Mailman, quindi ogni mailing list avrà un indirizzo del tipo <code><nome_lista>@lists.example.com</code>. | |||
=== Installazione di Mailman === | |||
Mailman si appoggerà a Apache per il suo frontend. | |||
<br> | |||
Installiamo il software: | |||
<pre> | |||
# apt-get install mailman | |||
</pre> | |||
Durante l'installazione ci verranno poste le seguenti domande: | |||
<pre> | |||
Languages to support: <-- it (Italian) | |||
</pre> | |||
<pre> | |||
Missing site list | |||
Mailman needs a so-called "site list", which is the list from which password reminders and such are sent out from. | |||
This list needs to be created before mailman will start. | |||
To create the list, run "newlist mailman" and follow the instructions on-screen. | |||
Note that you also need to start mailman after that, using /etc/init.d/mailman start. <-- Ok | |||
</pre> | |||
=== Configurazione di Mailman === | |||
Mailman ha già un suo file di configurazione per Apache quasi pronto. Dobbiamo solo copiarlo nella directory corretta: | |||
<pre> | |||
# cp /etc/mailman/apache.conf /etc/apache2/sites-available/mailman.conf | |||
</pre> | |||
e modificare alcune cose: | |||
<pre> | |||
# nano /etc/apache2/sites-available/mailman.conf | |||
</pre> | |||
Alla fine del file, dopo la sezione commentata del virtual host già presente (da lasciare commentata!), aggiungiamo la configurazione del nostro virtual host: | |||
<pre> | |||
[...] | |||
<VirtualHost *:80> | |||
ServerName lists.example.com | |||
DocumentRoot /var/www/lists | |||
ErrorLog /var/log/apache2/lists-error.log | |||
CustomLog /var/log/apache2/lists-access.log combined | |||
<Directory /var/lib/mailman/archives/> | |||
Options FollowSymLinks | |||
AllowOverride None | |||
</Directory> | |||
Alias /pipermail/ /var/lib/mailman/archives/public/ | |||
Alias /images/mailman/ /usr/share/images/mailman/ | |||
ScriptAlias /admin /usr/lib/cgi-bin/mailman/admin | |||
ScriptAlias /admindb /usr/lib/cgi-bin/mailman/admindb | |||
ScriptAlias /confirm /usr/lib/cgi-bin/mailman/confirm | |||
ScriptAlias /create /usr/lib/cgi-bin/mailman/create | |||
ScriptAlias /edithtml /usr/lib/cgi-bin/mailman/edithtml | |||
ScriptAlias /listinfo /usr/lib/cgi-bin/mailman/listinfo | |||
ScriptAlias /options /usr/lib/cgi-bin/mailman/options | |||
ScriptAlias /private /usr/lib/cgi-bin/mailman/private | |||
ScriptAlias /rmlist /usr/lib/cgi-bin/mailman/rmlist | |||
ScriptAlias /roster /usr/lib/cgi-bin/mailman/roster | |||
ScriptAlias /subscribe /usr/lib/cgi-bin/mailman/subscribe | |||
ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/ | |||
ScriptAlias / /usr/lib/cgi-bin/mailman/listinfo | |||
</VirtualHost> | |||
</pre> | |||
L'ultima direttiva <code>ScriptAlias / /usr/lib/cgi-bin/mailman/listinfo</code> è opzionale; ha senso se non abbiamo nessun file index nella root del virtual host e vogliamo che digitando <code>http://lists.example.com/</code> si venga diretti automaticamente verso <code>http://lists.example.com/listinfo</code>. | |||
<br/> | |||
Quindi creiamo la document root <code>/var/www/lists</code>, abilitiamo il nuovo Virtual Host e riavviamo Apache: | |||
<pre> | |||
# mkdir /var/www/lists | |||
# a2ensite mailman.conf | |||
# /etc/init.d/apache2 restart | |||
</pre> | |||
Dato che stiamo usando un Virtual Host, dobbiamo sistemare alcune variabili nella configurazione di Mailman in <code>/etc/mailman/mm_cfg.py</code>: | |||
<pre> | |||
# nano /etc/mailman/mm_cfg.py | |||
</pre> | |||
<pre> | |||
[...] | |||
DEFAULT_URL_PATTERN = 'http://%s/' | |||
[...] | |||
DEFAULT_EMAIL_HOST = 'lists.example.com' | |||
[...] | |||
DEFAULT_URL_HOST = 'lists.example.com' | |||
[...] | |||
</pre> | |||
=== Configurazione di Postfix === | |||
Ora dobbiamo configurare Postfix. Impostiamo alcune direttive per Mailman: | |||
<pre> | |||
# postconf -e 'relay_domains = lists.example.com' | |||
# postconf -e 'mailman_destination_recipient_limit = 1' | |||
</pre> | |||
Quindi apriamo il file: | |||
<pre> | |||
# nano /etc/postfix/master.cf | |||
</pre> | |||
e controlliamo che siano presenti le seguenti linee (di default dovrebbero esserci): | |||
<pre> | |||
[...] | |||
mailman unix - n n - - pipe | |||
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py | |||
${nexthop} ${user} | |||
[...] | |||
</pre> | |||
Ora dobbiamo associare il dominio <code>lists.example.com</code> al corretto ''transport'' <code>mailman:</code>. Questa operazione è possibile in diversi modi: nel nostro setup non abbiamo configurato i transport di Postfix all'interno del database MySQL degli utenti virtuali, quindi procederemo con la configurazione attraverso un file di testo. | |||
<br/> | |||
Iniziamo con introdurre la direttiva seguente nella configurazione di Postfix: | |||
<pre> | |||
# postconf -e 'transport_maps = hash:/etc/postfix/transport' | |||
</pre> | |||
Quindi creiamo il file | |||
<pre> | |||
# nano /etc/postfix/transport | |||
</pre> | |||
e diamogli il contenuto: | |||
<pre> | |||
lists.example.com mailman: | |||
</pre> | |||
Creiamo l'hash del file: | |||
<pre> | |||
# postmap -v /etc/postfix/transport | |||
</pre> | |||
e riavviamo Postfix: | |||
<pre> | |||
# /etc/init.d/postfix restart | |||
</pre> | |||
=== Creazione della prima lista === | |||
Prima di avviare Mailman, è necessario creare una lista chiamata <code>mailman</code>; è obbligatoria, senza di questa Mailman non partirà: | |||
<pre> | |||
# newlist --urlhost=lists.example.com --emailhost=lists.example.com mailman | |||
</pre> | |||
Solitamente gli switch <code>--urlhost</code> e <code>--emailhost</code> non sono necessari, dal momento che abbiamo già configurato il file <code>/etc/mailman/mm_cfg.py</code>, ma per sicurezza sono solito indicarli esplicitamente. | |||
<br/> | |||
Dovremo rispondere ad alcune domande: | |||
<pre> | |||
Enter the email of the person running the list: <-- Indicare l'amministratore della lista, ad esempio amministratore@example.com | |||
Initial mailman password: <-- La password per amministrare la lista | |||
</pre> | |||
Prima di poter utilizzare la lista dovremo modificare il file <code>/etc/aliases</code> come indicato da Mailman, cioè aggiungendo le seguenti linee: | |||
<pre> | |||
## mailman mailing list | |||
mailman: "|/var/lib/mailman/mail/mailman post mailman" | |||
mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman" | |||
mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman" | |||
mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman" | |||
mailman-join: "|/var/lib/mailman/mail/mailman join mailman" | |||
mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman" | |||
mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman" | |||
mailman-request: "|/var/lib/mailman/mail/mailman request mailman" | |||
mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman" | |||
mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman" | |||
</pre> | |||
Infine premiamo Enter e chiudiamo la procedura di creazione della lista: | |||
<pre> | |||
Hit enter to notify mailman owner... <-- ENTER | |||
</pre> | |||
Apriamo quindi <code>/etc/aliases</code> e modifichiamolo come suggerito: | |||
<pre> | |||
# nano /etc/aliases | |||
</pre> | |||
<pre> | |||
[...] | |||
## mailman mailing list | |||
mailman: "|/var/lib/mailman/mail/mailman post mailman" | |||
mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman" | |||
mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman" | |||
mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman" | |||
mailman-join: "|/var/lib/mailman/mail/mailman join mailman" | |||
mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman" | |||
mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman" | |||
mailman-request: "|/var/lib/mailman/mail/mailman request mailman" | |||
mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman" | |||
mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman" | |||
</pre> | |||
Quindi aggiorniamo la configurazione degli alias e riavviamo Postfix: | |||
<pre> | |||
# newaliases | |||
# /etc/init.d/postfix restart | |||
</pre> | |||
Ora siamo pronti per avviare Mailman: | |||
<pre> | |||
# /etc/init.d/mailman start | |||
</pre> | |||
=== Amministrazione di Mailman === | |||
Da questo momento possiamo amministrare le liste attraverso l'interfaccia web di Mailman, raggiungibile all'indirizzo: | |||
<pre> | |||
http://lists.example.com/admin | |||
</pre> | |||
=== Creazione di nuove liste === | |||
Possiamo creare nuove mailing list con questa procedura: | |||
<pre> | |||
# newlist --urlhost=lists.example.com --emailhost=lists.example.com testlist2 | |||
</pre> | |||
<pre> | |||
Enter the email of the person running the list: <-- amministratore2@example.com | |||
Initial testlist2 password: <-- Password dell'amministratore | |||
To finish creating your mailing list, you must edit your /etc/aliases (or | |||
equivalent) file by adding the following lines, and possibly running the | |||
`newaliases' program: | |||
## testlist2 mailing list | |||
testlist2: "|/var/lib/mailman/mail/mailman post testlist2" | |||
testlist2-admin: "|/var/lib/mailman/mail/mailman admin testlist2" | |||
testlist2-bounces: "|/var/lib/mailman/mail/mailman bounces testlist2" | |||
testlist2-confirm: "|/var/lib/mailman/mail/mailman confirm testlist2" | |||
testlist2-join: "|/var/lib/mailman/mail/mailman join testlist2" | |||
testlist2-leave: "|/var/lib/mailman/mail/mailman leave testlist2" | |||
testlist2-owner: "|/var/lib/mailman/mail/mailman owner testlist2" | |||
testlist2-request: "|/var/lib/mailman/mail/mailman request testlist2" | |||
testlist2-subscribe: "|/var/lib/mailman/mail/mailman subscribe testlist2" | |||
testlist2-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe testlist2" | |||
Hit enter to notify testlist2 owner... <-- ENTER | |||
</pre> | |||
Quindi modifichiamo: | |||
<pre> | |||
# nano /etc/aliases | |||
</pre> | |||
aggiungendo | |||
<pre> | |||
[...] | |||
## testlist2 mailing list | |||
testlist2: "|/var/lib/mailman/mail/mailman post testlist2" | |||
testlist2-admin: "|/var/lib/mailman/mail/mailman admin testlist2" | |||
testlist2-bounces: "|/var/lib/mailman/mail/mailman bounces testlist2" | |||
testlist2-confirm: "|/var/lib/mailman/mail/mailman confirm testlist2" | |||
testlist2-join: "|/var/lib/mailman/mail/mailman join testlist2" | |||
testlist2-leave: "|/var/lib/mailman/mail/mailman leave testlist2" | |||
testlist2-owner: "|/var/lib/mailman/mail/mailman owner testlist2" | |||
testlist2-request: "|/var/lib/mailman/mail/mailman request testlist2" | |||
testlist2-subscribe: "|/var/lib/mailman/mail/mailman subscribe testlist2" | |||
testlist2-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe testlist2" | |||
</pre> | |||
Infine: | |||
<pre> | |||
# newaliases | |||
# /etc/init.d/postfix restart | |||
</pre> | |||
== Credits == | |||
Questa guida è basata sull'originale di Christoph Haas pubblicata sul sito [http://workaround.org/ Workaround.org]. | |||
<br/> | <br/> | ||
<br/> | <br/> | ||
Riga 1 942: | Riga 2 660: | ||
{{Autori | {{Autori | ||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 22:22, 2 apr 2011 (CEST) | |Autore = [[Utente:Ferdybassi|Ferdybassi]] 22:22, 2 apr 2011 (CEST) | ||
|Verificata_da = | |||
: risca 10:52, 6 apr 2014 (CEST) | |||
|Numero_revisori = 1 | |||
}} | }} | ||