L'installation d'un serveur de messagerie sur CentOS 7 peut se faire de plusieurs manières, mais l'une des plus courantes consiste à utiliser une combinaison de Postfix et de Dovecot.
Postfix est un logiciel d'envoi et l'un des serveurs de messagerie les plus populaires au monde. Dovecot, quant à lui, est un serveur de messagerie qui est utilisé pour recevoir des courriels en utilisant le protocole IMAP ou POP.
Exim est un agent de transfert de courrier (MTA) couramment utilisé dans les systèmes d'exploitation de type Unix. Exim est un logiciel gratuit distribué selon les termes de la licence GNU (General Public Licence). C'est un outil de messagerie polyvalent et flexible qui offre des fonctionnalités étendues pour la vérification du courrier électronique entrant.
Dovecot est un serveur de messagerie IMAP et POP3 open source pour les systèmes de type Linux/UNIX. La sécurité est la pierre angulaire de ce produit qui met l'accent sur la flexibilité et la rapidité.
Roundcube est une interface de messagerie basée sur le web qui permet de travailler avec vos boîtes aux lettres en utilisant IMAP et SMTP. L'application dispose de fonctionnalités puissantes et est comparable, en termes de capacités, aux clients de messagerie de bureau tels que Outlook Express ou Mozilla Thunderbird.
Connectez-vous via SSH à votre serveur virtuel.
Ensuite, vous devez mettre à jour le système, entrez la commande :
# sudo yum update -y
Après la mise à jour du système, un message comme celui-ci apparaîtra.
Pour installer Apache sur votre serveur virtuel, entrez la commande :
# sudo yum install httpd -y
Après l'installation, démarrez Apache :
# sudo systemctl start httpd.service
Ensuite, allez sur - http://ServerIP/
et vérifiez qu'Apache fonctionne correctement.
Si tout fonctionne correctement, entrez la commande pour lancer automatiquement Apache sur le serveur virtuel :
# sudo systemctl enable httpd.service
Pour télécharger, utilisez la commande :
# sudo yum install mariadb-server mariadb -y
Une fois le téléchargement et l'installation terminés, vous devez lancer MariaDB :
# sudo systemctl start mariadb
Exécutez le script d'installation sécurisée, qui supprimera les paramètres non sécurisés :
# sudo mysql_secure_installation
Entrez le mot de passe root, puisque vous venez de créer la base de données, il est vide par défaut. Ensuite, acceptez les paramètres, entrez"Y
" partout. Entrez un nouveau mot de passe, confirmez-le, et acceptez à nouveau les changements"Y
".
MariaDB est maintenant installé.
Pour installer PHP, entrez la commande :
# sudo yum install php php-mysql -y
Ensuite, redémarrez Apache pour qu'il puisse exécuter PHP :
# sudo systemctl restart httpd.service
Pour tester le fonctionnement de PHP, vous devez créer un fichier, tel que index.php, à l'aide de la commande suivante :
# echo "<?php phpinfo(); ?>" > /var/www/html/index.php
Ouvrez maintenant le lien dans votre navigateur - http://ServerIP/index.php
Vous devriez voir une page avec des paramètres PHP.
Ensuite, vous devez installer le paquetage pour supporter MariaDB dans PHP :
# sudo yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel
Redémarrez ensuite Apache :
# sudo systemctl restart httpd.service
C'est fait. Vous avez installé Apache, MySQL et PHP sur le serveur virtuel.
Connexion de référentiels supplémentaires
Vous devrez connecter un référentiel supplémentaire pour installer tous les composants.
# sudo yum install epel-release
Pour créer une connexion entre tous les composants de la chaîne, il est nécessaire d'utiliser une base de données. Connectez-vous au serveur MySQL :
# mysql -u root -p
Créer une base de données, vous devez spécifier votre propre mot de passe :
CREATE DATABASE vexim;
GRANT ALL ON vexim.* to vexim@localhost identified by 'password';
quit
Si tous les modules PHP ne sont pas installés, une installation supplémentaire est nécessaire.
# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli
Téléchargez Postfixadmin et installez-le dans le dossier /var/www/html/postfixadmin
.
# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.0/postfixadmin-3.0.tar.gz
# tar xpf postfixadmin-3.0.tar.gz
# mv postfixadmin-3.0 /var/www/html/postfixadmin
# chown -R apache:apache /var/www/html/postfixadmin
# rm postfixadmin-3.0.tar.gz
# cd /var/www/html/postfixadmin > # vi config.inc.php
Editez le fichier de configuration config .inc.php :
# yum -y install dovecot dovecot-mysql
Renommez la configuration par défaut afin de pouvoir y revenir si nécessaire :
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
# vi /etc/dovecot/dovecot.conf
Enregistrer les entrées suivantes dans le fichier de configuration dovecot.conf :
## Dovecot configuration file
base_dir = /var/run/dovecot/
auth_default_realm = site.com
auth_mechanisms = plain login cram-md5
protocols = imap pop3
listen = *
disable_plaintext_auth = no
dotlock_use_excl = yes
first_valid_gid = 5
first_valid_uid = 25
mail_location = maildir:/var/vmail/%d/%u
mail_privileged_group = mail
passdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
service auth {
unix_listener auth-client {
group = exim
mode = 0660
user = exim
}
unix_listener auth-master {
group = exim
mode = 0600
user = exim
}
user = root
}
ssl = no
userdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
verbose_proctitle = yes
protocol imap {
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = info@site.com
}
Pour configurer l'accès à la base de données, créez un fichier de configuration séparé dovecot-mysql.conf
# vi /etc/dovecot/dovecot-mysql.conf
et mettez-y les paramètres suivants :
## Dovecot database configuration
driver = mysql
connect = host=localhost dbname=vexim user=vexim password=password
default_pass_scheme = CRAM-MD5
password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
# yum -y install exim exim-mysql cyrus-sasl
# mv /etc/exim/exim.conf /etc/exim/exim.conf-orig
# vi /etc/exim/exim.conf
Modifier la configuration par défaut tout en gardant une copie de sauvegarde.
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
primary_hostname = mail.site.com
hide mysql_servers = localhost/vexim/vexim/password
domainlist local_domains = ${lookup mysql{SELECT `domain`
FROM `domain` WHERE
`domain`='${quote_mysql:$domain}' AND
`active`='1'}}
domainlist relay_to_domains = ${lookup mysql{SELECT `domain`
FROM `domain` WHERE
`domain`='${quote_mysql:$domain}' AND
`active`='1'}}
hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24
auth_advertise_hosts = *
acl_not_smtp = acl_not_smtp
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
qualify_domain = site.com
qualify_recipient = site.com
allow_domain_literals = true
exim_user = exim
exim_group = exim
never_users = root
rfc1413_query_timeout = 0s
sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts
ignore_bounce_errors_after = 45m
timeout_frozen_after = 15d
helo_accept_junk_hosts = 192.168.1.0/24
auto_thaw = 1h
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
smtp_accept_max = 50
smtp_accept_max_per_connection = 25
smtp_connect_backlog = 30
smtp_accept_max_per_host = 20
split_spool_directory = true
remote_max_parallel = 15
return_size_limit = 70k
message_size_limit = 64M
helo_allow_chars = _
smtp_enforce_sync = true
log_selector =
+all_parents
+connection_reject
+incoming_interface
+lost_incoming_connection
+received_sender
+received_recipients
+smtp_confirmation
+smtp_syntax_error
+smtp_protocol_error
-queue_run
syslog_timestamp = no
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_not_smtp:
deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
ratelimit = 50 / 1h / strict
accept
acl_check_rcpt:
deny message = "Lookup failed"
condition = ${if eq{$host_lookup_failed}{1}}
accept hosts = :
deny message = "incorrect symbol in address"
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = "incorrect symbol in address"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\.\./
accept local_parts = postmaster
domains = +local_domains
deny message = "HELO/EHLO required by SMTP RFC"
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
accept authenticated = *
deny condition = ${if eq{$sender_helo_name}
{$interface_address}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "My IP in your HELO! Access denied!"
deny condition = ${if match{$sender_helo_name}
{N^d+$N}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "Incorrect HELO string"
warn
set acl_m0 = 30s
warn
hosts = +relay_from_hosts:4.3.2.1/32:192.168.1.0/24 #disable waits for 'friendly' hosts
set acl_m0 = 0s
warn
logwrite = Delay $acl_m0 for $sender_host_name
[$sender_host_address] with HELO=$sender_helo_name. Mail
from $sender_address to $local_part@$domain.
delay = $acl_m0
accept domains = +local_domains
endpass
message = "No such user"
verify = recipient
accept domains = +relay_to_domains
endpass
message = "i don't know how to relay to this address"
verify = recipient
deny message = "you in blacklist - $dnslist_domain n $dnslist_text"
dnslists = opm.blitzed.org :
cbl.abuseat.org :
bl.csma.biz
accept hosts = +relay_from_hosts
deny message = "Homo hominus lupus est"
acl_check_dаta:
deny malware = */defer_ok
message = "Your message contains viruses: $malware_name"
accept
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
# THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! #
# An address is passed to each router in turn until it is accepted. #
######################################################################
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE
`address`='${quote_mysql:$local_part@$domain}' OR
`address`='${quote_mysql:@$domain}'}}
dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM
`alias` WHERE
`address`='${quote_mysql:$local_part@$domain}' OR
`address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
begin transports
remote_smtp:
driver = smtp
dovecot_delivery:
driver = pipe
command = /usr/libexec/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = exim
address_pipe:
driver = pipe
return_output
address_reply:
driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators
auth_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
Désinstallation de Postfix
# alternatives --config mta
# systemctl disable postfix
# systemctl stop postfix
# yum -y remove postfix
Allez sur http://server_ip/postfixadmin/setup.php
et suivez les instructions d'installation. Après avoir créé le superadmin, l'installateur vous donnera un code de hachage du mot de passe :
Il doit être remplacé dans le fichier config.inc.php
(à la racine du répertoire postfixadmin) à la place de cette ligne :
Ensuite, vous devez vous connecter sous les données créées, ajouter les domaines et boîtes aux lettres nécessaires.
Installation de Roundcube
# yum -y install roundcubemail
Après l'installation, vous devez ajouter la configuration au serveur web pour que le script s'ouvre à http://server_ip/roundcubemail/.
# vi /etc/httpd/conf.d/roundcubemail.conf
Sauvegardez les données suivantes :
#
# Round Cube Webmail is a browser-based multilingual IMAP client
#
Alias /roundcubemail /usr/share/roundcubemail
Alias /webmail /usr/share/roundcubemail
<Directory /usr/share/roundcubemail/>
Options none
AllowOverride Limit
Require all granted
</Directory>
<Directory /usr/share/roundcubemail/installer>
Options none
AllowOverride Limit
Require all granted
</Directory>
# Those directories should not be viewed by Web clients.
<Directory /usr/share/roundcubemail/bin/>
Order Allow,Deny
Deny from all
</Directory>
<Directory /usr/share/roundcubemail/plugins/enigma/home/>
Order Allow,Deny
Deny from all
</Directory>
Apache doit être redémarré après l'écriture :
# systemctl restart httpd.service
Pour la suite de l'installation, créez une base de données, pour cela connectez-vous à MySQL :
# mysql -u root -p
et exécutez des requêtes (spécifiez vos propres données) :
CREATE DATABASE roundcubedb;
CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ;
FLUSH PRIVILEGES;
quit
Ensuite, vous devez ouvrir le programme d'installation http://server_ip/roundcubemail/installer
et configurer.
Ceci termine la configuration, allez sur Roundcube http://server_ip/roundcubemail/,
connectez-vous sous la boîte précédemment créée (dans Postfixadmin), faites les réglages et utilisez.