Postfix e SquirrelMail · 13 min read · Dec 30, 2025

Utenti e domini virtuali con Postfix, Courier, MySQL e SquirrelMail (Fedora 14 x86_64) - Pagina 6

18 Installazione di SquirrelMail

SquirrelMail è un’interfaccia webmail che consente ai tuoi utenti di inviare e ricevere email in un browser. Questo capitolo mostra come installarlo e adattarlo alla nostra configurazione in modo che gli utenti possano persino cambiare la password del proprio account email dall’interfaccia di SquirrelMail.

Per installare SquirrelMail, eseguiamo:

yum install squirrelmail php-pear-DB

Successivamente riavviamo Apache:

/etc/init.d/httpd restart

SquirrelMail viene fornito con alcuni plugin preinstallati, sfortunatamente nessuno di essi è in grado di consentirci di cambiare la nostra password email nel nostro database MySQL. Ma c’è il plugin Change SQL Password che possiamo installare manualmente:

cd /usr/share/squirrelmail/plugins  
wget http://www.squirrelmail.org/plugins/change_sqlpass-3.3-1.2.tar.gz  
tar xvfz change_sqlpass-3.3-1.2.tar.gz  
cd change_sqlpass  
cp config.php.sample config.php

Ora dobbiamo modificare config.php e adattarlo alla nostra configurazione. Si prega di modificare le variabili $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static e $csp_delimiter come segue e commentare $csp_salt_query:

vi config.php

| [...] $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; [...] $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; [...] $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); [...] $password_encryption = 'MYSQLENCRYPT'; [...] csp_salt_static = 'LEFT(password, 2)'; [...] //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; [...] csp_delimiter = '@'; [...] |

Il file completo appare come segue:

| * 2002-2005 Paul Lesneiwski <[email protected]> * Questo programma è concesso in licenza sotto GPL. Vedi COPYING per i dettagli * * @package plugins * @subpackage Change SQL Password * */ // Variabili globali, non toccare queste a meno che tu non voglia rompere il plugin // global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; // csp_dsn // // Teoricamente, qualsiasi database SQL supportato da Pear dovrebbe essere supportato // qui. Il DSN (data source name) deve contenere le informazioni necessarie // per connettersi al tuo backend di database. Un esempio MySQL è incluso qui sotto. // Per ulteriori dettagli sulla sintassi DSN e l'elenco dei tipi di database supportati, // si prega di vedere: // http://pear.php.net/manual/en/package.database.db.intro-dsn.php // //$csp_dsn = 'mysql://user:password@localhost/email_users'; $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; // lookup_password_query // // Questo plugin verificherà sempre la vecchia password dell'utente // rispetto alla loro password di accesso, ma può anche // essere effettuato un controllo extra contro il database per maggiore sicurezza se lo // desideri. Se non hai bisogno del controllo extra della password, // assicurati che questa impostazione sia vuota. // // Questa è una query che restituisce un valore positivo se un utente // e una coppia di password vengono trovati nel database. // // Questa query dovrebbe restituire un valore (una riga, una colonna), il // valore è idealmente uno o zero, semplicemente indicando che // la coppia utente/password esiste effettivamente nel database. // // %1 in questa query sarà sostituito con il nome utente completo // (incluso il dominio), come "[email protected]" // %2 in questa query sarà sostituito con il nome utente (senza // alcuna parte di dominio), come "jose" // %3 in questa query sarà sostituito con il nome di dominio, // come "example.com" // %4 in questa query sarà sostituito con la password attuale (vecchia) // in qualsiasi formato di crittografia necessario secondo le altre // impostazioni di configurazione del plugin (Nota che la sintassi della // password sarà fornita a seconda delle tue scelte di crittografia, // quindi NON è mai necessario fornire virgolette attorno a questo // valore nella query qui.) // %5 in questa query sarà sostituito con la password attuale (vecchia) // in testo semplice non crittografato. Se non utilizzi alcuna // crittografia della password, %4 e %5 saranno gli stessi valori, // tranne che %4 avrà virgolette attorno e %5 no. // //$lookup_password_query = ''; // SICUREZZA TERRIBILE: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"'; //$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4'; $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; // password_update_queries // // Un array di query SQL che verranno tutte eseguite // ogni volta che viene effettuato un tentativo di cambio password. // // Qualsiasi numero di query può essere incluso qui. // Le query verranno eseguite nell'ordine dato qui. // // %1 in tutte le query sarà sostituito con il nome utente completo // (incluso il dominio), come "[email protected]" // %2 in tutte le query sarà sostituito con il nome utente (senza // alcuna parte di dominio), come "jose" // %3 in tutte le query sarà sostituito con il nome di dominio, // come "example.com" // %4 in tutte le query sarà sostituito con la nuova password // in qualsiasi formato di crittografia necessario secondo le altre // impostazioni di configurazione del plugin (Nota che la sintassi della // password sarà fornita a seconda delle tue // scelte di crittografia, quindi NON è mai necessario fornire virgolette // attorno a questo valore nelle query qui.) // %5 in tutte le query sarà sostituito con la nuova password // in testo semplice non crittografato - ATTENZIONE! Se non utilizzi // alcuna crittografia della password, %4 e %5 saranno gli stessi // valori, tranne che %4 avrà virgolette attorno e // %5 no. // // $password_update_queries = array( // 'UPDATE users SET crypt_password = %4 WHERE username = "%1"', // 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"', // 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1"', // ); $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); // force_change_password_check_query // // Una query che controlla un flag che indica se un utente // dovrebbe essere costretto a cambiare la propria password. Questa query // dovrebbe restituire un valore (una riga, una colonna) che è // zero se l'utente NON deve cambiare la propria password, // o uno se l'utente deve essere costretto a cambiarla ora. // // Questa impostazione dovrebbe essere una stringa vuota se non desideri // abilitare questa funzionalità. // // %1 in questa query sarà sostituito con il nome utente completo // (incluso il dominio), come "[email protected]" // %2 in questa query sarà sostituito con il nome utente (senza // alcuna parte di dominio), come "jose" // %3 in questa query sarà sostituito con il nome di dominio, // come "example.com" // //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"'; //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"'; $force_change_password_check_query = ''; // password_encryption // // Quale metodo di crittografia utilizzi per memorizzare le password // nel tuo database? Si prega di utilizzare uno dei seguenti, // esattamente come lo vedi: // // NONE Le password sono memorizzate solo in testo semplice // MYSQLPWD Le password sono memorizzate utilizzando la funzione MySQL password() // MYSQLENCRYPT Le password sono memorizzate utilizzando la funzione MySQL encrypt() // PHPCRYPT Le password sono memorizzate utilizzando la funzione PHP crypt() // MD5CRYPT Le password sono memorizzate utilizzando l'algoritmo MD5 crittografato // MD5 Le password sono memorizzate come hash MD5 // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // I tipi di crittografia che necessitano di un sale devono sapere dove ottenere // quel sale. Se hai un valore di sale costante e noto, dovresti // definirlo in $csp_salt_static. Altrimenti, lascia quel // valore vuoto e definisci un valore per il $csp_salt_query. // // Lascia entrambi i valori vuoti se non hai bisogno (o utilizzi) sale // per crittografare le tue password. // // La query dovrebbe restituire un valore (una riga, una colonna) che // è il valore di sale per la password dell'utente corrente. Questa // query viene ignorata se $csp_salt_static è qualsiasi cosa diversa da vuota. // // %1 in questa query sarà sostituito con il nome utente completo // (incluso il dominio), come "[email protected]" // %2 in questa query sarà sostituito con il nome utente (senza // alcuna parte di dominio), come "jose" // %3 in questa query sarà sostituito con il nome di dominio, // come "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // usa questo formato con MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // usa questo formato con PHPCRYPT //$csp_salt_static = ''; $csp_salt_static = 'LEFT(password, 2)'; //$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; //$csp_salt_query = ''; // csp_secure_port // // Puoi assicurarti che la crittografia SSL venga utilizzata durante il cambio della password // impostando questo alla porta su cui viene servito il tuo HTTPS // (443 è tipico). Imposta a zero se non desideri forzare // una connessione HTTPS quando gli utenti cambiano le loro password. // // Puoi sovrascrivere questo valore per determinati domini, utenti o // livelli di servizio tramite il plugin Virtual Host Login (vlogin) // impostando un valore per $vlogin_csp_secure_port nella configurazione vlogin. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Se servi richieste web HTTP standard su una porta non standard // (qualsiasi cosa diversa dalla porta 80), dovresti specificare quel // numero di porta qui. Imposta a zero altrimenti. // // Puoi sovrascrivere questo valore per determinati domini, utenti o // livelli di servizio tramite il plugin Virtual Host Login (vlogin) // impostando un valore per $vlogin_csp_non_standard_http_port // nella configurazione vlogin. // //$csp_non_standard_http_port = 8080; $csp_non_standard_http_port = 0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // // Puoi impostare le lunghezze minime e massime delle password che // accetti o lasciare queste impostazioni a zero per indicare che // non deve essere applicato alcun limite. // // Attiva qualsiasi altra impostazione qui per controllare che la // nuova password contenga almeno una cifra, una lettera maiuscola, // una lettera minuscola e/o un carattere non alfanumerico. // $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; // csp_delimiter // // se il tuo sistema ha nomi utente con qualcosa di diverso da // un segno "@" che separa la parte utente e dominio, // specifica quel carattere qui // //$csp_delimiter = '|'; $csp_delimiter = '@'; // modalità debug // $csp_debug = 0; ?> |

Il plugin Change SQL Password dipende anche dal plugin Compatibility che installiamo come segue:

cd /usr/share/squirrelmail/plugins  
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.16-1.0.tar.gz  
tar xvfz compatibility-2.0.16-1.0.tar.gz

Ora dobbiamo entrare nella configurazione di SquirrelMail e dire a SquirrelMail che utilizziamo Courier come nostro server POP3 e IMAP e abilitare i plugin Change SQL Password e Compatibility:

/usr/share/squirrelmail/config/conf.pl

Vedrai il seguente menu. Naviga attraverso di esso come indicato:

Configurazione di SquirrelMail : Leggi: config.php (1.4.0)  
---------------------------------------------------------  
Menu principale --  
1.  Preferenze organizzazione  
2.  Impostazioni server  
3.  Impostazioni cartella  
4.  Opzioni generali  
5.  Temi  
6.  Rubriche  
7.  Messaggio del giorno (MOTD)  
8.  Plugin  
9.  Database  
10.  Lingue  
  
D.  Imposta impostazioni predefinite per server IMAP specifici  
  
C   Disattiva colore  
S   Salva dati  
Q   Esci  
  
Comando >> <-- D  
  
  
Configurazione di SquirrelMail : Leggi: config.php  
---------------------------------------------------------  
Mentre abbiamo costruito SquirrelMail, abbiamo scoperto alcune  
preferenze che funzionano meglio con alcuni server che  
non funzionano così bene con altri.  Se selezioni il tuo  
server IMAP, questa opzione imposterà alcune  
impostazioni predefinite per quel server.  
  
Si prega di notare che dovrai comunque  
controllare e assicurarti che tutto sia corretto.  
Questo non cambia tutto.  Ci sono  
solo alcune impostazioni che questo cambierà.  
  
Si prega di selezionare il proprio server IMAP:  
    bincimap    = Server IMAP Binc  
    courier      = Server IMAP Courier  
    cyrus        = Server IMAP Cyrus  
    dovecot      = Server IMAP Dovecot Secure  
    exchange     = Server IMAP Microsoft Exchange  
    hmailserver  = hMailServer  
    macosx       = Server di posta Mac OS X  
    mercury32    = Mercury/32  
    uw           = Server IMAP dell'Università di Washington  
    gmail        = Accesso IMAP agli account di Google mail (Gmail)  
  
    quit        = Non cambiare nulla  
Comando >> <-- courier  
  
  
              imap_server_type = courier  
          default_folder_prefix = INBOX.  
                  trash_folder = Trash  
                   sent_folder = Inviati  
                  draft_folder = Bozze  
              show_prefix_option = false  
            default_sub_of_inbox = false  
show_contain_subfolders_option = false  
              optional_delimiter = .  
                  delete_folder = true  
  
Premi un tasto qualsiasi per continuare... <-- premi un tasto  
  
  
Configurazione di SquirrelMail : Leggi: config.php (1.4.0)  
---------------------------------------------------------  
Menu principale --  
1.  Preferenze organizzazione  
2.  Impostazioni server  
3.  Impostazioni cartella  
4.  Opzioni generali  
5.  Temi  
6.  Rubriche  
7.  Messaggio del giorno (MOTD)  
8.  Plugin  
9.  Database  
10.  Lingue  
  
D.  Imposta impostazioni predefinite per server IMAP specifici  
  
C   Disattiva colore  
S   Salva dati  
Q   Esci  
  
Comando >> <-- 8  
  
  
Configurazione di SquirrelMail : Leggi: config.php (1.4.0)  
---------------------------------------------------------  
Plugin  
  Plugin installati  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
  
  Plugin disponibili:  
    4. administrator  
    5. bug_report  
    6. calendar  
    7. change_sqlpass  
    8. compatibility  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Torna al menu principale  
C   Disattiva colore  
S   Salva dati  
Q   Esci  
  
Comando >> <-- 8 (o qualsiasi numero abbia il plugin compatibility - è necessario per il plugin change_sqlpass)  
  
  
Configurazione di SquirrelMail : Leggi: config.php (1.4.0)  
---------------------------------------------------------  
Plugin  
  Plugin installati  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
  
  Plugin disponibili:  
    5. administrator  
    6. bug_report  
    7. calendar  
    8. change_sqlpass  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Torna al menu principale  
C   Disattiva colore  
S   Salva dati  
Q   Esci  
  
Comando >> <-- 8 (il numero del plugin change_sqlpass)  
  
  
Configurazione di SquirrelMail : Leggi: config.php (1.4.0)  
---------------------------------------------------------  
Plugin  
  Plugin installati  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Plugin disponibili:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Torna al menu principale  
C   Disattiva colore  
S   Salva dati  
Q   Esci  
  
Comando >> <-- S  
  
  
Configurazione di SquirrelMail : Leggi: config.php (1.4.0)  
---------------------------------------------------------  
Plugin  
  Plugin installati  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Plugin disponibili:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Torna al menu principale  
C   Disattiva colore  
S   Salva dati  
Q   Esci  
  
Comando >> <-- Q

L’ultima cosa che dobbiamo fare è modificare il file /etc/squirrelmail/config_local.php e commentare la variabile $default_folder_prefix - se non lo fai, vedrai il seguente messaggio di errore in SquirrelMail dopo aver effettuato l’accesso: Query: CREATE “Sent” Motivo fornito: Nome della casella di posta non valido.

vi /etc/squirrelmail/config_local.php

| |

Ora puoi digitare http://server1.example.com/webmail o http://192.168.0.100/webmail nel tuo browser per accedere a SquirrelMail.

Accedi con il tuo indirizzo email (ad es. [email protected]) e la tua password:

Dovresti trovare l’email di benvenuto nella tua casella di posta:

Per cambiare la tua password, vai su Opzioni e poi seleziona Cambia Password:

Digita la tua password attuale e poi la tua nuova password due volte:

Dopo aver cambiato la password, dovrai accedere di nuovo immediatamente con la nuova password:

19 Riferimenti

Tutorial: Servizio email in stile ISP con Debian-Sarge e Postfix 2.1: http://workaround.org/articles/ispmail-sarge/

Postfix + Quota: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17

Password email crittografate utilizzando saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws

20 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.