~~ODT~~
Distribution GNU/Linux CentOS 6.x (pour du support à long terme).
Ces différents services sont maintenant répartis dans différentes VMs.
Voir linuxedconfdns.
Cheminement d'un mail:
⇒ Attention, le package postfix de Fedora 8 ne supporte pas MySQL, il faut donc le recompiler pour activer le support. Le support MySQL est necessaire pour la gestion des comptes simplifiés avec Cyrus (webcyradm etc).
Le support de MySQL est présent avec le paquet postfix de CentOS 6.
Postgrey est utiliser pour gérer la liste grise.
# yum install postgrey
⇒ Ne pas oublier de modifier le fichier /etc/init.d/postgrey pour indiquer dans la variable OPTIONS que postgrey doit écouter sur le port 10030 (et non sur un socket unix).
Sur RedHat/CentOS 6, avec le dépôt epel, postgrey n'est plus disponible. Son remplaçant est sqlgrey.
L'installation se fait via le paquet disponible dans les dépôts officiels:
# yum install postfix
Voici le fichier de configuration /etc/postfix/main.cf actuellement utilisé:
alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases broken_sasl_auth_clients = yes command_directory = /usr/sbin config_directory = /etc/postfix # AntiVirus / AntiSpam content_filter = smtp-amavis:[127.0.0.1]:10024 daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix debug_peer_level = 2 disable_vrfy_command = yes html_directory = no inet_protocols = ipv4 mail_owner = postfix mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp mailq_path = /usr/bin/mailq.postfix manpage_directory = /usr/share/man message_size_limit = 20480000 mydestination = $myhostname, localhost.$mydomain, localhost, mysql:/etc/postfix/mysql-mydestination.cf mydomain = linuxed.net mynetworks = 192.168.0.0/16, 127.0.0.1, 172.16.4.2, 172.16.3.2, 172.16.2.2, 172.16.254.0/24, [2001:41d0:1:b877::]/64, [2001:41d0:2:43df::/64], 37.187.23.86, 5.196.26.28 myorigin = $mydomain newaliases_path = /usr/bin/newaliases.postfix queue_directory = /var/spool/postfix readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES recipient_delimiter = + relay_domains = $mydestination sample_directory = /usr/share/doc/postfix-2.6.6/samples sender_canonical_maps = mysql:/etc/postfix/mysql-canonical.cf sendmail_path = /usr/sbin/sendmail.postfix setgid_group = postdrop smtpd_tls_auth_only = yes smtp_tls_note_starttls_offer = yes smtpd_client_restrictions = check_client_access hash:/etc/postfix/access smtpd_data_restrictions = reject_unauth_pipelining smtpd_helo_required = yes smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_hostname smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_rbl_client zen.spamhaus.org, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service unix:postgrey/socket smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous smtpd_sender_restrictions = check_client_access hash:/etc/postfix/access, reject_sender_login_mismatch, reject_non_fqdn_sender, reject_unknown_sender_domain #smtpd_tls_CAfile = /etc/pki/postfix/ca.crt smtpd_tls_CAfile = /etc/letsencrypt/live/smtp.linuxed.net/chain.pem #smtpd_tls_cert_file = /etc/pki/postfix/mx01.virt.linuxed.net.crt smtpd_tls_cert_file = /etc/letsencrypt/live/smtp.linuxed.net/cert.pem #smtpd_tls_key_file = /etc/pki/postfix/mx01.virt.linuxed.net.key smtpd_tls_key_file = /etc/letsencrypt/live/smtp.linuxed.net/privkey.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s smtpd_use_tls = yes tls_random_source = dev:/dev/urandom transport_maps = mysql:/etc/postfix/mysql-transport.cf, regexp:/etc/postfix/transport_regexp unknown_local_recipient_reject_code = 550 virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf, regexp:/etc/postfix/virtual_regexp smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual.cf, regexp:/etc/postfix/virtual_regexp
Et voici le fichier /etc/postfix/master.cf:
smtp inet n - n - - smtpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap smtp unix - - n - - smtp relay unix - - n - - smtp -o fallback_relay= showq unix n - n - - showq error unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} old-cyrus unix - n n - - pipe flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user} cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus-imapd/deliver -r ${sender} -m ${extension} ${recipient} uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - n n - - pipe flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient retry unix - - n - - error smtp-amavis unix - - y - 2 lmtp -o smtp_data_done_timeout=1200 -o disable_dns_lookup=yes 127.0.0.1:10025 inet n - y - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_sasl_authenticated,permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o mynetworks_style=host -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o alias_maps= -o relocated_maps= -o virtual_alias_maps= -o virtual_mailbox_maps=
Le fichier pour la resolution canonique dans la base MySQL /etc/postfix/mysql-canonical.cf:
hosts = [DB HOST] user = [DB USER] password = [DB PASS] dbname = [DB NAME] table = virtual select_field = alias where_field = username additional_conditions = and status = '1' limit 1
Le fichier pour la resolution des domaines gérés par le serveur /etc/postfix/mysql-mydestination.cf:
hosts = [DB HOST] user = [DB USER] password = [DB PASS] dbname = [DB NAME] table = domain select_field = domain_name where_field = domain_name
Le fichier pour la resolution des domaines à relayer /etc/postfix/mysql-relay.cf:
hosts = [DB HOST] user = [DB USER] password = [DB PASS] dbname = [DB NAME] table = domain select_field = transport where_field = domain_name
Le fichier pour la table des transports /etc/postfix/mysql-transport.cf:
hosts = [DB HOST] user = [DB USER] password = [DB PASS] dbname = [DB NAME] table = domain select_field = transport where_field = domain_name
Le fichier pour la gestion des comptes virtuels /etc/postfix/mysql-virtual.cf:
hosts = [DB HOST] user = [DB USER] password = [DB PASS] dbname = [DB NAME] table = virtual select_field = dest where_field = alias additional_conditions = and status = '1'
Coté Mysql, voici la structure_des_bases_pour_la_gestion_des_mails.
Pour changer le mot de passe d'un compte:
update accountuser set password=encrypt("LE PASSWORD",CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) where username="USER@DOMAIN" limit 1;
Pour la partie authentification des utilisateurs en pop/imap il faut installer le support mysql pour pam avec le package pam_mysql:
# yum install pam_mysql
Le fichiers /etc/pam.d/pop, /etc/pam.d/imap, /etc/pam.d/sieve sont modifiés pour avoir le contenu suivant:
#%PAM-1.0 auth sufficient pam_mysql.so user=[DB USER] passwd=[DB PASS] host=[DB HOST] db=[DB NAME] table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time account required pam_mysql.so user=[DB USER] passwd=[DB PASS] host=[DB HOST] db=[DB NAME] table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time
Pour l'antispam, les packages amavisd-new, clamav et spamassassin doivent être installés.
# yum install amavisd-new clamav spamassassin
Voir le fichier de configuration d'amavis: /etc/amavisd/amavisd.conf
Voici le contenu du fichier /etc/clamd.d/amavisd.conf:
# Use system logger. LogSyslog yes # Specify the type of syslog messages - please refer to 'man syslog' # for facility names. LogFacility LOG_MAIL # This option allows you to save a process identifier of the listening # daemon (main thread). PidFile /var/run/amavisd/clamd.pid # Remove stale socket after unclean shutdown. # Default: disabled FixStaleSocket yes # Run as a selected user (clamd must be started by root). User amavis # Path to a local socket file the daemon will listen on. LocalSocket /var/spool/amavisd/clamd.sock
Mettre à jour la base antivirus:
freshclam
Pour la partie collecte de mails coté utilisateur, il faut installer le package cyrus-imapd. Cyrus fournit les services IMAP et POP3 en version standard et sécurisée.
# yum install cyrus-imapd
Configuration du fichier /etc/cyrus.conf:
# standard standalone server implementation START { # do not delete this entry! recover cmd="ctl_cyrusdb -r" # this is only necessary if using idled for IMAP IDLE idled cmd="idled" } # UNIX sockets start with a slash and are put into /var/lib/imap/sockets SERVICES { # add or remove based on preferences imap cmd="imapd" listen="imap" prefork=5 imaps cmd="imapd -s" listen="imaps" prefork=1 pop3 cmd="pop3d" listen="pop3" prefork=3 pop3s cmd="pop3d -s" listen="pop3s" prefork=1 sieve cmd="timsieved" listen="sieve" prefork=1 # these are only necessary if receiving/exporting usenet via NNTP # nntp cmd="nntpd" listen="nntp" prefork=3 # nntps cmd="nntpd -s" listen="nntps" prefork=1 # at least one LMTP is required for delivery # lmtp cmd="lmtpd" listen="lmtp" prefork=0 lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1 # this is only necessary if using notifications # notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1 } EVENTS { # this is required checkpoint cmd="ctl_cyrusdb -c" period=30 # this is only necessary if using duplicate delivery suppression, # Sieve or NNTP delprune cmd="cyr_expire -E 3" at=0400 # this is only necessary if caching TLS sessions tlsprune cmd="tls_prune" at=0400 # index mailboxes squat cmd="squatter -r *" period=60 squat cmd="squatter -r *@*" period=60 }
⇒ Attention: squat est assez gourmand. Pourquoi est-il en double??
Configuration de la partie collecte des mails, avec le fichier /etc/imapd.conf:
postmaster: postmaster@domaine.com configdirectory: /var/lib/imap partition-default: /var/spool/imap admins: admin cyrus sieve_admins: admin cyrus sievedir: /var/lib/imap/sieve sendmail: /usr/sbin/sendmail hashimapspool: true sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt allowanonymouslogin: no allowplaintext: yes allowplainwithouttls: yes servername: lutin dracinterval: 0 drachost: localhost createonpost: 1 unixhierarchysep: yes virtdomains: yes
Pour migrer d'un serveur Cyrus vers un autre serveur Cyrus, il faut synchroniser les fichiers des comptes cyrus, ainsi que les fichiers des boites mails. Il faut bien sur arreter cyrus sur les 2 machines.
# rsync -azC --progress /var/lib/imap/* serveur2:/var/lib/imap/ # rsync -azC --progress /var/spool/imap/* serveur2:/var/spool/imap/
⇒ Attention: penser à restaurer les contextes SELinux avec la commande restorecon sur ces répertoires.
Pour générer le certificat:
# openssl req -new -nodes -out req.pem -keyout key.pem # openssl rsa -in key.pem -out new.key.pem
A faire signer ensuite par un CA. Ou on signe soi-même:
# openssl x509 -in req.pem -out ca-cert -req -signkey new.key.pem -days 999 # cat ca-cert>> new.key.pem
Pour administrer cyrus:
cyradm --user cyrus localhost
Pour voir un quota:
localhost> lq user/francoise@linuxed.net STORAGE 2078593/60000000 (3.46432166666667%)
Pour changer un quota:
sq user/jeanluc@linuxed.net 10000000
Il s'agit d'une interface web d'administration de Cyrus. Le site officiel est http://www.web-cyradm.org.
Il est necessaire d'installer le support Pear::DB pour utiliser web-cyradm:
# yum install php-pear-DB
L'authentification se fera avec cyrus-sasl, il faudra installer le package cyrus-sasl-mysql. On active le support sasl avec postfix, le fichier de configuration suivant /usr/lib/sasl/smtpd.conf doit avoir le contenu suivant:
pwcheck_method: saslauthd mech_list: plain login saslauthd_version: 2
Mais c'est le contenu du fichier /usr/lib/sasl2/smtpd.conf qui est utilisé:
pwcheck_method: saslauthd #mech_list: plain login #pwcheck_method: pam #pwcheck_method: auxprop mech_list: plain login cram-md5 digest-md5 sql_engine: mysql sql_database: mail sql_user: mail sql_passwd: facteur sql_select: SELECT password FROM accountuser WHERE username='%u' and domain_name='%r';
Il faut ensuite indiquer à saslauthd d'utiliser l'adresse mail complete en tant que login utilisateur (login@domain.com) avec l'option -r dans le fichier /etc/sysconfig/saslauthd:
# Directory in which to place saslauthd's listening socket, pid file, and so # on. This directory must already exist. SOCKETDIR=/var/run/saslauthd # Mechanism to use when checking passwords. Run "saslauthd -v" to get a list # of which mechanism your installation was compiled with the ablity to use. MECH=pam # Additional flags to pass to saslauthd on the command line. See saslauthd(8) # for the list of accepted flags. FLAGS="-r"
Pour que postfix dispose des mécanismes SASL, il faut au minimum installer le paquet cyrus-sasl-plain:
# yum install cyrus-sasl-plain
⇒ Attention à SELinux qui par défaut peut bloquer les connexions mysql depuis saslauthd.
Il existe squirrelmail et roundcube dans la categorie des excellents webmail.
# yum install squirrelmail
ou
# yum install roundcube
Il peut manquer certaines dépendances pour roundcube, notemment php-mcrypt:
# yum install php-mcrypt
La configuration se fait dans /etc/squirrelmail/config.php mais il est plus facile de passer par le script de configuration:
# /usr/share/squirrelmail/config/conf.pl
Maintenant que tout est configuré, il ne faut pas oublier d'activer au demarrage les services necessaires à la messagerie:
# chkconfig postfix on # chkconfig saslauthd on # chkconfig mysqld on # chkconfig cyrus-imapd on
Pour activer IPv6 sur lighttpd, voici le contenu du fichier /etc/lighttpd/conf.d/ipv6.conf:
server.use-ipv6 = "enable"
Migration de Luchta vers Goigniu ici.