Axiso

Notes

Installation d’un serveur d’hébergement Linux – Debian

Serveur — janvier 2016

Messagerie

Créer un utilisateur virtuel représentant tous les comptes de messagerie :

useradd virtual
id -g virtual

Noter l’identifiant du groupe créé (1001 bien souvent).

SASL

Ajout de la couche de sécurisation des authentifications :

aptitude install -y libsasl2-2 libsasl2-modules sasl2-bin
sed -i 's/START=no/START=yes/' /etc/default/saslauthd

Postfix

Installer Postfix et Greylisting :

aptitude install -y postfix postfix-pcre postfix-doc mailx mailutils postgrey

Remplacer le nom du serveur à la seconde option

Internet Site mail.serveur-prod.example.com
dpkg-reconfigure postfix

Entrée (9-10 fois de suite).

Noter le port utilisé par Greylisting (10023) :

netstat -anp | grep postgrey

Débuter la configuration de Postfix avec les utilisateurs statiques virtuels :

postconf 'message_size_limit = 20480000'
postconf 'local_transport = virtual'
postconf 'local_recipient_maps = $virtual_mailbox_maps'
postconf 'virtual_mailbox_base = /home/mail'
postconf 'virtual_mailbox_domains = /etc/postfix/vdomains'
postconf 'virtual_mailbox_maps = hash:/etc/postfix/vmaps'
postconf 'virtual_alias_maps = hash:/etc/postfix/valias'
postconf 'transport_maps = hash:/etc/postfix/transport'
postconf 'virtual_minimum_uid = 100'
postconf 'virtual_uid_maps = static:1001'
postconf 'virtual_gid_maps = static:1001'
postconf 'sender_dependent_default_transport_maps = hash:/etc/postfix/sender_transport'

Préparer la liste des adresses et alias :

touch /etc/postfix/vdomains /etc/postfix/vmaps /etc/postfix/valias /etc/postfix/transport /etc/postfix/sender_transport
postmap /etc/postfix/vmaps
postmap /etc/postfix/valias
postmap /etc/postfix/transport
postmap /etc/postfix/sender_transport

Ajouter la prise en charge des clefs nécessaires à TLS :

ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/certs/postfix.pem
ln -s /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/postfix.key
postconf 'smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem'
postconf 'smtpd_tls_key_file=/etc/ssl/private/postfix.key'

Authentification SASL/Dovecot et listes noires contre le spam :

postconf 'smtpd_sasl_auth_enable = yes'
postconf 'smtpd_sasl_local_domain = mail.'$SERVER_DOMAIN
postconf 'smtpd_sasl_type = dovecot'
postconf 'smtpd_sasl_path = private/auth'
postconf 'smtpd_sasl_security_options = noanonymous'
postconf 'smtpd_recipient_restrictions = __temp__'
sed -i 's/__temp__/\
  permit_mynetworks,\
  permit_sasl_authenticated,\
  check_sender_access hash:\/etc\/postfix\/sender_access,\
  reject_unauth_destination,\
  reject_rbl_client zen.spamhaus.org,\
  reject_rbl_client bl.spamcop.net,\
  reject_rhsbl_client dbl.spamhaus.org,\
  check_policy_service inet:127.0.0.1:10023,/' /etc/postfix/main.cf

Liste des expéditeurs refusés

echo 'super_offres_commerciales@example.com' > /etc/postfix/sender_access REJECT
postmap /etc/postfix/sender_access

Masquage de l’adresse IP expéditrice

Il est possible que les filtres antispam refusent un e-mail envoyé à partir d’un terminal utilisant une connexion partagée : adresse IP renouvelée, réseau mobile. Il devient donc utile de transformer l’adresse réseau réelle par celle du serveur.

echo '/^\s*(Received: from)[^\n]*(.*)/ REPLACE $1 [127.0.0.1] (localhost [127.0.0.1])$2' > /etc/postfix/smtp_header_checks
vi /etc/postfix/master.cf

Décommenter les cinq lignes suivantes et ajouter la sixième :

submission inet n       -       -       -       -       smtpd   -o smtpd_tls_security_level=encrypt   -o smtpd_sasl_auth_enable=yes   -o smtpd_client_restrictions=permit_sasl_authenticated,reject   -o milter_macro_daemon_name=ORIGINATING   -o cleanup_service_name=subcleanup

Puis ajouter le service à la fin du fichier :

subcleanup unix n       -       -       -       0       cleanup     -o header_checks=pcre:/etc/postfix/smtp_header_checks

E-mail du compte root

Les messages envoyés par le serveur au compte root sont dirigés vers une adresse e-mail :

echo root: $EXTERNAL_EMAIL >> /etc/aliases
newaliases

Répondeur e-mail

Dans la configuration des services Postfix, insérer la prise en charge du service autoreply, en dernière ligne du fichier :

vi /etc/postfix/master.cf
autoreply unix -       n       n       -       -       pipe   flags= user=virtual:virtual argv=/usr/local/bin/autoreply ${sender} ${user} ${extension}

Préparer le script gérant le répondeur autoreply :

echo '#!/bin/bash
mail -s"Message d'\''absence / Autoreply - $2@$3" -a"From: <postmaster@$3>" $1 < /home/mail/$3/user/$2/mail/autoreply.txt' > /usr/local/bin/autoreply
chown virtual:virtual /usr/local/bin/autoreply
chmod 700 /usr/local/bin/autoreply

L’expéditeur de la réponse automatique ne doit pas être le destinataire du message afin d’éviter la création d’une boucle infinie entre deux répondeurs. Bien sûr l’adresse postmaster@ doit exister sans pour autant disposer elle-même d’un répondeur.

Intégration de DKIM

aptitude install -y opendkim opendkim-tools

Ajout à Postfix :

vi /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891, unix:/spamass/spamass.sock
non_smtpd_milters = inet:localhost:8891

Configuration :

mkdir -p /etc/opendkim/keys
chmod 0700 -R /etc/opendkim
chown opendkim:opendkim -R /etc/opendkim
echo '
SOCKET="inet:8891@localhost"' >> /etc/default/opendkim
echo '
AutoRestart yes
Background yes
Canonicalization relaxed/relaxed
DNSTimeout 5
Mode sv
SignatureAlgorithm rsa-sha256
SubDomains no
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts' >> /etc/opendkim.conf
echo '127.0.0.1
localhost' >> /etc/opendkim/TrustedHosts
service postfix reload
service postgrey restart

Dovecot

Serveur IMAP et POP.

aptitude install -y dovecot-common dovecot-imapd dovecot-pop3d

Remplacer la configuration par défaut :

echo 'protocols = imap pop3
mail_location = maildir:/home/mail/%d/user/%n/mail/
disable_plaintext_auth = no
pop3_uidl_format = %08Xu%08Xv
log_path = /var/log/dovecot.log
auth_mechanisms = plain login cram-md5
ssl = yes
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.key
userdb {
  driver = passwd-file
  args = /etc/virtual/passwd
}
passdb {
  driver = passwd-file
  args = /etc/virtual/shadow
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}' > /etc/dovecot/dovecot.conf

Utiliser les certificats SSL, préparer l’emplacement où lister les utilisateurs virtuels et ajouter la rotation des journaux :

ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/certs/dovecot.pem
ln -s /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/dovecot.key
mkdir /etc/virtual/
touch /etc/virtual/passwd
touch /etc/virtual/shadow
echo '/var/log/dovecot*.log {
  weekly
  compress
  missingok
  notifempty
  delaycompress
  postrotate
    service dovecot reload > /dev/null
  endscript
}' > /etc/logrotate.d/dovecot
service dovecot restart