Configurazione Server · 10 min read · Nov 12, 2025
Come configurare il server di posta ISP con utenti/domini virtuali su Centos 5.0 utilizzando Postfix, Dovecot, MySQL, phpMyAdmin, TLS/SSL - Pagina 2
Configurazione:
SMTP-AUTH/TLS
Prima configuriamo SMTP-AUTH e TLS. Per questo modifica /usr/lib/sasl2/smtpd.conf con il tuo editor preferito.
vi /usr/lib/sasl2/smtpd.confe apporta le modifiche come indicato di seguito.
pwcheck_method: saslauthd
mech_list: plain loginCrea le directory, poi la chiave privata e infine il certificato.
mkdir -p /etc/postfix/ssl/mailserver
cd /etc/postfix/ssl/mailserver
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650Le chiavi private e i certificati sono stati creati. Più avanti diremo a Postfix di usarli.
MySQL:
Ora creeremo un database chiamato mail, per questo emetteremo i comandi indicati di seguito;
mysql -u root -pInserisci la password e sarai al prompt di MySQL ( mysql>).
CREATE DATABASE mail;Dai tutti i privilegi su mail all’utente mail.
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';
FLUSH PRIVILEGES;
quitImposta la password per l’utente mail. Questo sarà fatto con la seguente istruzione.
mysqladmin -u mail password newpasswordPoi creeremo le tabelle necessarie per il nostro nuovo database (mail) che contiene informazioni su domini, utenti, alias e caselle di posta.
mysql -u mail -pDopo aver inserito la password sarai al prompt di MySQL.
show databases;Mostrerà tutti i database, incluso il nostro database “mail”. Useremo “mail”.
USE mail;- Crea la tabella dei domini.
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Domini Virtuali';- La seconda tabella più importante è la casella di posta, quindi crea la casella di posta.
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Caselle di Posta Virtuali';- Crea la tabella alias.
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Alias Virtuali';Abbiamo creato le tabelle necessarie, quindi esci da MySQL.
quitPostfix MySQL:
Postfix ha bisogno di sapere dove e come può cercare tutte le informazioni relative alle caselle di posta. A questo scopo creeremo i seguenti file sotto /etc/postfix. Le versioni recenti di Postfix potrebbero utilizzare questo invece delle altre istruzioni, e in tal caso, commenta semplicemente tutte le righe e decommenta l’ultima.
- Crea il file mysql_virtual_alias_maps.cf per inoltrare le email da un indirizzo email a un altro.
vi /etc/postfix/mysql_virtual_alias_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'- Crea il file mysql_virtual_domains_maps.cf, per il mapping dei domini virtuali. I domini virtuali vengono interrogati utilizzando le informazioni fornite in questo file.
vi /etc/postfix/mysql_virtual_domains_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'- Crea il file mysql_virtual_mailbox_maps.cf. Che è solitamente il mapping degli indirizzi email alla posizione della casella di posta dell’utente sul tuo disco rigido. Se hai salvato le email in arrivo sul disco rigido utilizzando l’agente di consegna virtuale integrato di Postfix, allora verrà interrogato per trovare il percorso della casella di posta.
vi /etc/postfix/mysql_virtual_mailbox_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'- Infine crea il file mysql_virtual_mailbox_limit_maps.cf che sarà utilizzato per mappare il limite di quota delle caselle di posta degli utenti.
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'- Dai ai file mysql_virtual i diritti di proprietà e permessi appropriati.
chown root:postfix *.cf
chmod 644 *.cfPostfix:
Nella sezione di configurazione di Postfix modificheremo il file main.cf situato nella directory di configurazione di Postfix ( /etc/postfix), per inserire alcune informazioni di base necessarie per Postfix.
mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
vi /etc/postfix/main.cf############## Postfix###############
#Data Modificata 17 Giugno 2008
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
####################sezione postfix termina qui###############Informazioni sugli utenti virtuali di Postfix:
Ancora una volta modificheremo il file main.cf per aggiungere supporto per gli utenti virtuali. Il “virtual_minimum_uid” e “virtual_uid_maps” puntano all’ID utente 150 nel mio caso, che è un utente che ho creato specificamente per gestire la posta virtuale. Usa il gruppo standard “mail” con il gid predefinito 12. Quindi prima crea l’utente emettendo il comando useradd o adduser.
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Casella di posta virtuale" vmail
chmod 770 /var/vmail/ (crea la directory se non esiste)
chown vmail:mail /var/vmail
vi /etc/postfix/main.cf#######################Utenti e caselle di posta dei Domini Virtuali###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################La sezione Virtual di main.cf termina##############Autenticazione SASL/TLS di Postfix:
Infine modificheremo di nuovo il file main.cf per abilitare l’autenticazione SASL/TLS. In precedenza abbiamo creato alcuni certificati, li utilizzeremo qui per proteggere il server di posta.
vi /etc/postfix.main.cf#################### Autenticazione SASL/TLS###########################
######PARTE SASL#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######PARTE TLS###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
###########################L'autenticazione SASL/TLS termina qui#############Per mia comodità ho diviso main.cf in tre sezioni { Postfix, domini virtuali, utenti e caselle di posta, autenticazione SASL/TLS}. L’autenticazione SASL/TLS è ulteriormente suddivisa in (PARTE SASL e PARTE TLS). Per mostrarti ciascuna sezione e i loro parametri ho modificato lo stesso file tre volte. Ora copia il /etc/aliases e /etc/aliases.db in /etc/postfix/ e esegui newaliases.
cp /etc/aliases* /etc/postfix/
newaliasesConfigurazione e installazione di Dovecot v1.x IMAP e POP:
Configuriamo Dovecot che fornisce sia un servizio POP3 che IMAP. Il file di configurazione per Dovecot è /etc/dovecot.conf. Effettueremo un backup del file originale in dovecot.conf.orig e modificheremo il file in esecuzione secondo le nostre esigenze. Per gestire gli utenti virtuali con dovecot creeremo il file /etc/dovecot-mysql.conf.
vi /etc/dovecot-mysql.conf######dovecot-mysql.conf dovrebbe apparire così##########
# NOTA: '\' la suddivisione delle righe è utilizzata solo per la leggibilità, attualmente Dovecot non la supporta
# Il socket mysqld.sock può trovarsi in posizioni diverse in sistemi diversi
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# In alternativa puoi connetterti anche a localhost:
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u' AND active ='1'
####################termina qui####################Ora passiamo a configurare dovecot.conf, per autenticare l’utente virtuale utilizzando il metodo mysql_auth. Tieni presente che gli utenti Linux normali non possono accedere al server di posta. Perché non abbiamo abilitato il metodo di autenticazione Pam nella nostra configurazione di dovecot. Inoltre, first_valid_uid e last_valid_uid sono impostati su 150, il che significa che solo l’utente con uid 150 sarà in grado di accedere. I protocolli Pop3 e pop3s sono resi disponibili.
cp -p /etc/dovecot.conf /etc/dovecot.conf.orig
vi /etc/dovecot.conf(Solo modifica le seguenti righe)
##############dovecot configurato per lavorare con utenti virtuali############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
####################################termina qui######################Dopo questo imposteremo i diritti di proprietà e accesso su /etc/dovecot-mysql.conf.
chmod 600 /etc/dovecot/*.conf
chown vmail /etc/dovecot/*.confInstallazione e configurazione di Roundcube:
Basato sulle NOTE DI INSTALLAZIONE (Roundcube)
- Decomprimi e metti questa cartella da qualche parte all’interno della tua root documentale ( /var/www/html/mail)
- Assicurati che le seguenti directory (e i file all’interno) siano scrivibili dal server web
- /temp
- /logs
- Crea un nuovo database e un utente del database per RoundCube (vedi CONFIGURAZIONE DEL DATABASE)
- Punta il tuo browser a http://url-to-roundcube/installer/
- Segui le istruzioni dello script di installazione (o vedi CONFIGURAZIONE MANUALE)
- Dopo aver creato e testato la configurazione, rimuovi la directory dell’installer
- Fatto!
CONFIGURAZIONE DEL DATABASE
- MySQL 4.1.x/5.x
Per la versione di MySQL 4.1 e successive, si consiglia di creare il database per RoundCube con il set di caratteri utf-8. Ecco un esempio della procedura di inizializzazione:
mysql -u root -pCREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
quitmysql -u mail -p roundcubemail < SQL/mysql5.initial.sqlNota: ‘password’ è la password principale per l’utente roundcube. Si consiglia vivamente di sostituirla con una password più sicura. Tieni presente: Devi specificare questa password più avanti in ‘config/db.inc.php’.
Sezione HTTP:
Per iniziare a utilizzare l’interfaccia web del server di posta, modificheremo il file /etc/httpd/conf/httpd.conf.
vi /etc/httpd/conf/httpd.confE aggiungi le istruzioni indicate di seguito.
#Accesso frontale alla posta utilizzando roundcube
DocumentRoot /var/www/html/mail
ServerName mail.example.co.tz
Salva la configurazione ed esci.
Creazione di utenti e domini virtuali:
- Ora creeremo domini virtuali e utenti virtuali nel nostro database di posta.
mysql -u mail -p- Inserisci la password e sarai al prompt mysql>.
USE mail;- Prima crea un dominio virtuale nella tabella dei domini (example.co.tz) utilizzando il comando indicato di seguito.
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','Dominio virtuale','10','10', '0','virtual', '0','1');- Ora crea due utenti virtuali nella tabella delle caselle di posta. Ho creato ( [email protected] & [email protected]) come nomi utente per kiiza e hoboka.
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Hoboka Mwamakunge ','hoboka/', '0','example.co.tz','1');
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Kiiza Mutungi','kiiza/', '0','example.co.tz','1');
quitOra che abbiamo creato utenti virtuali e un dominio virtuale, vogliamo testare il nostro server di posta accedendo e inviando posta da un account utente a un altro. Quindi iniziamo i demoni Dovecot, Postfix, MySQL e webserver. Vogliamo anche che si avviino automaticamente al prossimo riavvio. Per questo emettiamo i seguenti comandi.
chkconfig -level 235 mysqld on
chkconfig -level 235 saslauthd on
chkconfig -level 235 postfix on
chkconfig -level 235 dovecot on
chkconfig -level 235 httpd on
/etc/init.d/saslauthd start
/etc/init.d/mysqld start
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/httpd startRicevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.