Coming soon…
Suite à la mise à jour de Kubuntu aux versions 10.10 puis 11.04 (voir ici et ici), je me suis retrouvée à réinstaller une ancienne version des paquets unison et unison-gtk. Ce tutoriel explique comment bloquer la mise à jour automatique de ce paquet.


Les lignes suivantes permettent de bloquer la mise à jour automatique des paquets unison et unison-gtk ;

echo "unison hold" | sudo dpkg --set-selections
echo "unison-gtk hold" | sudo dpkg --set-selections

Pour vérifier que le blocage est bien effectif, taper :

dpkg --get-selections | grep unison

qui doit retourner :

unison                    hold
unison-gtk              hold

Débloquer la mise à niveau est effectué par la commande suivante :

echo "unison install" | dpkg --set-selections
echo "unison-gtk install" | dpkg --set-selections


Ce tutoriel décrit comment installer un serveur git sur son serveur : git est un logiciel libre de gestion de versions décentralisée.

Attention ! Ce tutoriel a été écrit pour l’installation d’un serveur git avec gitosis ; dans les versions plus récentes de Ubuntu serveur (12.04 LTS par exemple), gitosis a été remplacé par gitolite, voir ce post (à la fin) pour plus de détails sur l’installation de gitolite, qui est assez similaire à celle de gitosis.

Initialisation de la configuration du serveur git

Dans un premier temps, on installe les packages nécessaires :

apt-get install git-core gitosis

En utilisant la clé ssh publique tuxette.pub permettant la connexion au server, initialiser le serveur git :

sudo -H -u gitosis gitosis-init < tuxette.pub

Le serveur répond :

Initialized empty Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /srv/gitosis/repositories/gitosis-admin.git/

Création d’un projet test

Sur votre ordinateur local, après avoir chargé votre clé privée (correspondant à la clé publique nath.pub), récupérer le dépôt administrateur de git

git clone gitosis@server.domain-name.org:gitosis-admin.git

server.domain-name.org doit être remplacé par le nom de votre serveur.

Dans le répertoire gitosis-admin, éditer le fichier gitosis.conf qui est initialement de cette forme

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = keyfilename

keyfilename correspond au nom donné à votre clé (ne pas changer ce nom ni le fichier correspondant dans keydir sous peine de se voir banni du serveur. Ajouter un nouveau projet :

[gitosis]

[group team]
writable = testproject
members = keyfilename

[group gitosis-admin]
writable = gitosis-admin
members = keyfilename

puis mettre à jour les informations sur le dépôt admin de git :

git commit -a
git push

Sur votre ordinateur local, créez quelque part un répertoire testproject dans lequel vous placez un fichier test a_file.txt avant d’initialiser le dépôt git et de l’installer sur le serveur :

mkdir testproject
cd testproject
nano a_file.txt
git init
git add a_file.txt
git commit -a
git remote add origin gitosis@server.domain-name.org:testproject.git
git push origin master

Pour ajouter un nouvel utilisateur au projet testproject, de clé ssh publique tux.pub, placer le fichier tux.pub dans le répertoire gitosis-admin/keydir puis

git add keydir/tux.pub
git commit -a
git push

puis modifier le projet testproject dans le fichier gitconfig par :

[group team]
writable = testproject
members = keyfilename tux

(ne pas oublier de pousser les modifications sur le serveur).

Utilisation du dépôt git par l’utilisateur tux

Pour pouvoir récupérer le dépôt git, l’utilisateur tux doit posséder un client git

apt-get install git

pour ubuntu ou bien ce lien pour Mac OS X (voir ce post pour l’installation sur une version ancienne de Mac OS X) et ce lien pour Windows. Une fois installé, les commandes suivantes permettent d’initialiser la configuration :

git config --global user.name "Tux Dude"
git config --global user.email tux-email@whatnot.com

Enfin, pour configurer l’éditeur de test par défaut des messages de commit (j’utilise nano : basique mais rapide), utiliser la commande :

git config --global core.editor nano

Enfin, après avoir chargé sa clé privée, il peut récupérer le dépot git :

git clone gitosis@server.domain-name.org:testproject.git

En savoir plus : Plus d’information sur les manipulations de fichiers sur un dépôt git sur ce lien.


Le cinquième post concerne l’installation et la configuration d’un serveur mail avec postfix, postfix-mysql, dovecot.


Tutoriel utile : http://workaround.org/ispmail/

Voir aussi ce post (installation de postfixadmin et utilisation via postfix) et ce post (mise à jour vers la version 12.04 du serveur mail en fin de post).

  1. Installation de postfix et configuration de postfix-mysql
  2. Configuration des certificats SSL pour postfix
  3. Configuration du serveur IMAP avec dovecot
  4. Configuration du SMTP distant
  5. Configuration de fetchmail pour récupérer ses emails sur un autre serveur mail
  6. Configuration du client pour envoyer/recevoir des emails depuis votre ordinateur personnel
  7. Configuration du webmail roundcube

Installation de postfix et configuration de postfix-mysql

L’installation du serveur mail postfix se fait, en mode super utilisateur, via :

apt-get install postfix postfix-mysql

Lors de l’installation du serveur mail, il faut préciser le nom de domaine de votre serveur ; dans la suite nommé domain-name.org.

La deuxième étape de l’installation consiste à installer et créer la base de données du serveur mail qui contiendra les informations sur les utilisateurs et les noms de domaines du serveur. Sur MySQL (via PhpMyAdmin, par exemple),

  1. créer une base de données nommée maildatabase ;
  2. créer un utilisateur virtuel nommé mailuser avec les privilèges “select” sur la base de données maildatabase ;
  3. trois tables doivent ensuite être créées sur la base de données maildatabase : domains pour les noms de domaine virtuels, users pour les utilisateurs virtuels et aliasespour lister les alias d’adresses. Le code SQL permettant la création de ces trois tables est donné ci-dessous :
    CREATE TABLE `domains` (
         `domain_id` int(11) NOT NULL auto_increment,
         `domain_name` varchar(50) NOT NULL,
         PRIMARY KEY (`domain_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `users` (
         `user_id` int(11) NOT NULL auto_increment,
        `d_id` int(11) NOT NULL,
        `passwd` varchar(32) NOT NULL,
        `user_email` varchar(100) NOT NULL,
        PRIMARY KEY (`user_id`),
        UNIQUE KEY `user_email` (`user_email`),
        FOREIGN KEY (d_id) REFERENCES domains(domain_id) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `aliases` (
        `alias_id` int(11) NOT NULL auto_increment,
        `d_id` int(11) NOT NULL,
        `from` varchar(100) NOT NULL,
        `to` varchar(100) NOT NULL,
        PRIMARY KEY (`alias_id`),
        FOREIGN KEY (d_id) REFERENCES domains(domain_id) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  4. les informations concernant le serveur sont ensuite à insérer dans les tables correspondantes. Dans la suite, nous prenons l’exemple de deux domaines virtuels : serveur.domain-name.org et domain-name.org et deux deux utilisateurs tuxette@domain-name.org et tuxette@server.domain-name.org tuxette@server.domain-name.org est un alias de tuxette@domain-name.org . Ces données sont insérées dans les tables correspondantes par les requêtes SQL suivantes :
    INSERT INTO `maildatabase`.`domains` (
         `domain_id` ,
         `domain_name`
    )
    VALUES (
         '1' , 'server.domain-name.org'),(
         '2', 'domain-name.org'
    );
    INSERT INTO `maildatabase`.`users` (
         `user_id` ,
         `d_id` ,
         `passwd` ,
         `user_email`
    )
    VALUES (
         '1', '1', MD5('the-first-passwd'), 'tuxette@server.domain-name.org'
         '2', '2', MD5('the-second-passwd'), 'tuxette@domain-name.org'
    );
    INSERT INTO `maildatabase`.`aliases` (
         `alias_id` ,
         `d_id` ,
         `from` ,
         `to`
    )
    VALUES (
         '1', '1', 'tuxette@server.domain-name.org', 'tuxette@domain-name.org'
    );
  5. Il faut ensuite configurer le serveur postfix pour qu’il soit capable de lire ces informations : pour cela, créer un fichier /etc/postfix/mysql-virtual-domains.cfcontenant les informations suivantes :
    user=mailuser
    password=the-mailuser-passwd
    hosts=127.0.0.1
    dbname=maildatabase
    query=SELECT 1 FROM domains WHERE domain_name='%s'

    puis exécuter le script suivant (en super utilisateur) :

    postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-domains.cf

    Vérifier que tout fonctionne par :

    postmap -q domain-name.org mysql:/etc/postfix/mysql-virtual-domains.cf

    qui doit retourner la valeur “1”.
    De même, créer les fichiers /etc/postfix/mysql-virtual-users.cf et /etc/postfix/mysql-virtual-aliases.cf contenant, respectivement,

    user = mailuser
    password = the-mailuser-passwd
    hosts = 127.0.0.1
    dbname = maildatabase
    query = SELECT 1 FROM users WHERE user_email='%s'

    et

    user = mailuser
    password = the-mailuser-passwd
    hosts = 127.0.0.1
    dbname = maildatabase
    query = SELECT to FROM aliases WHERE from='%s'

    puis exécuter les scripts :

    postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-users.cf
    postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-aliases.cf

    Enfin, pour assurer que quelqu’un non autorisé n’aille lire ces fichiers, modifier les propriétaires et droits :

    chgrp postfix /etc/postfix/mysql-*.cf
    chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf

Enfin, éditez le fichier /etc/postfix/main.cf et régler la taille maximale souhaitée pour les emails (en envoi et réception) :

message_size_limit = 10485760

(pour 10 Mo)

Configuration des certificats SSL pour postfix

Afin d’assurer le cryptage des données entre le serveur server.domain-name.org et le client (votre ordinateur personnel), des certificats de sécurité SSL sont mis en place. Ceux-ci sont générés comme décrit dans ce post et postfix est configuré pour utiliser ces certificats en exécutant les lignes de commande suivantes :

postconf -e "smtpd_tls_key_file = /etc/ssl/private/apache-enc-key.pem"
postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/apache-cert.pem"
postconf -e "smtpd_tls_CAfile = /usr/share/ca-certificates/self/root-cacert.crt"
postconf -e "smtpd_tls_received_header = yes"
postconf -e "mydomain = domain-name.org"
postconf -e "myorigin = server.domain-name.org"
postconf -e "myhostname = server.domain-name.org"
postconf -e "mydestination = server.domain-name.org, localhost"

À ce stade, vous pouvez vérifier l’état de la configuration par :

/etc/init.d/postfix start

ou

/etc/init.d/postfix reload

si postfix était déjà démarré. Le serveur doit démarrer sans erreur…

Configuration du serveur IMAP avec dovecot

Dovecot est installé par :

apt-get install dovecot-imapd

La configuration de dovecot est ensuite effectuée comme suit :

  1. un groupe et un utilisateur mailusersont créés qui seront les seuls à avoir des droits sur les boîtes mail virtuelles (pour assurer la confidentialité des données :
    groupadd -g 5000 mailuser
    useradd -g mailuser -u 5000 mailuser -d /var/vmail -m
  2. Le dossier dans lesquels les boîtes mail virtuelles seront stockées est ensuite créé (dans /home/mail) et les droits sur ces dossier sont donnés à l’utilisateur mailsuser:
    mkdir /home/mail
    chown -R mailuser:mailuser /home/mail
    chmod 740 -R /home/mail
  3. Le fichier /etc/dovecot/dovecot.confest édité pour
    • assurer l’utilisation obligatoire de imaps (qui est la version sécurisée de imap). Pour cela, la ligne protocols = imap imaps est commentée et remplacée par la ligne protocols = imaps.
    • préciser le dossier contenant les emails virtuels : mail_location = maildir:/home/mail/%d/%n/Maildir qui assure que les emails pour l’utilisateur tuxette@domain-name.org seront stockés dans le dossier /home/mail/domain-name.org/tuxette/Maildir
    • configurer les certificats de sécurité pour imaps :
      ssl_ca_file = /usr/share/ca-certificates/self/root-cacert.crt
      ssl_cert_file = /etc/ssl/certs/dovecot-cert.pem
      ssl_key_file = /etc/ssl/private/dovecot-enc-key.pem
      ssl_verify_client_cert = no
      verbose_ssl = yes
    • autoriser dovecot à utiliser la base de données postfix en décommentant la ligne passdb sqlet en ajoutant
      userdb static {
      args = uid=5000 gid=5000 home=/home/mail/%d/%n/Maildir allow_all_users=yes
      }
    • permettre la communication entre dovecot et postfix en ajoutant les lignes suivantes :
      socket listen {
      master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = mailuser
      }
      
      client {
      path = /var/spool/postfix/private/auth-client
      mode = 0660
      user = postfix
      group = postfix
      }
      }
      
      protocol lda {
      auth_socket_path = /var/run/dovecot/auth-master
      postmaster_address = tuxette@domain-name.com
      log_path =
      }

      Commenter également la partie « passdb pam » pour éviter les erreurs d’authentification pam (que l’on n’utilise pas) dans le fichier de log.</li> </ul> </li>

    • Dovecot est ensuite configuré pour pouvoir utiliser la base de données MySQL : le fichier /etc/dovecot/dovecot-sql.confest édité de la manière suivante :
      driver=mysql
      connect = host=127.0.0.1 dbname=maildatabase user=mailuser
        password=the-mailuser-passwd
      default_pass_scheme = PLAIN-MD5
      password_query = SELECT user_email as user, user_passwd FROM users
        WHERE user_email='%u';
    • Les derniers points de sécurité sont ajoutés en définissant les droits sur les fichiers de configuration de dovecot :
      chgrp usermail /etc/dovecot/dovecot.conf
      chmod g+r /etc/dovecot/dovecot.conf
      chown root:root /etc/dovecot/dovecot-sql.conf
      chmod go= /etc/dovecot/dovecot-sql.conf
    • Dovecot et postfix sont ensuite respectivement configurés pour communiquer entre eux :
      • pour dovecot, le fichier /etc/dovecot/master.cfest édité et les lignes suivantes sont ajoutées :
        dovecot unix - n n - - pipe
        flags=DRhu user=usermail:usermail argv=/usr/lib/dovecot/deliver
          -f ${sender} -d ${recipient}
      • pour postfix, les lignes suivantes sont exécutées :
        postconf -e virtual_transport=dovecot
        postconf -e dovecot_destination_recipient_limit=1

      et la configuration est testée en relançant dovecot et postfix :

      /etc/init.d/dovecot restart
      /etc/init.d/postfix restart

      Pour tester la réception des emails et leur tri en local, on lance les commandes suivantes :

      find /home/mail
      echo test | mail tuxette@domain-name.org
      find /home/mail

      la deuxième commande find doit faire apparaître la création du dossier mail virtuel pour l’utilisateur tuxette@domain-name.org dans lequel le message test a été stocké.</li>

    • Si le test précédent est un succès, il est temps de rediriger les mails de votre nom de domaine domain-name.org vers votre serveur (à ce stade, OVH les redirige vers ses propres boîtes mail. Pour cela, se connecter à son manager OVH et cliquer sur “Domaines et champ DNS” ; dans la rubrique “Zone DNS” du domaine concerné, effacer les champs MX existants. Cliquer ensuite sur “Type A” et ajouter un champ comme ci-dessous :sous-domaine : domain-name.org sélectionner une IP : adresse_IP_du_serveur_de_mailCliquez sur “Validez” pour confirmer l’opération. Ensuite, choisissez “Type MX” et ajoutez un champ comme ci-dessous :Sous-domaine : domain-name.org Destination: mail2.domain-name.orgTester la réception d’emails depuis l’extérieur en envoyant un email à votre adresse (dans l’exemple tuxette@domain-name.org) et en exécutant à nouveau la commande
      find /home/mail

      qui doit faire apparaître le nouvel email.</li>

    • Un dernier test de lecture peut être pratiqué avec l’utilitaire mutt :
      • en local en lecture directe : mutt -f /home/mail/domain-name.org/tuxette/Maildir ;
      • en local en lecture imaps : mutt -f imaps://home/mail/domain-name.org/tuxette/Maildir qui doit demander la validation de 2 certificats de sécurité puis le mot de passe de l’utilisateur ;
      • à distance par imaps : mutt -f imaps://tuxette@domain-name.org@domain-name.org qui doit demander la validation de 2 certificats de sécurité puis le mot de passe de l’utilisateur.
    • </ol>

      Configuration du SMTP distant

      Cette partie explique comment configurer postfix pour envoyer des emails depuis une machine distante (votre ordinateur personnel). L’envoi se fera en SMTPs (protocole sécurisé utilisant SSL) via le port 465 pour les utilisateurs listés dans la base de données de postfix.

      1. Éditer le fichier /etc/postfix/main.cfet y faire figurer les informations suivantes :
        smtpd_sasl_type=dovecot
        smtpd_sasl_path=private/auth
        smtpd_sasl_auth_enable=yes
        smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated
          reject_unauth_destination
        smtpd_use_tls=yes
        smtpd_tls_auth_only=yes
        smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
        smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

        qui permet les envois selon les conditions suivantes : en local toujours, à distance si l’utilisateur est authentifié. Ces paramètres obligent l’authentification via le protocole TLS qui sécurise les échanges par la mise en place d’un cryptage SSL. Ainsi, l’utilisateur commence par négocier l’établissement de la connexion sécurisée TLS (et doit donc accepter le certificat de sécurité SSL) puis envoie son login et son mot de passe via cette connexion sécurisée. Il peut ensuite envoyer un email.</li>

      2. Le serveur doit ensuite accepter les envois via le port 465 (car ce port est généralement utilisée pour les connexions sécurisées : il est probable que vous puissiez l’utiliser à peu près avec n’importe quelle connexion internet, contrairement au port 25) : pour cela, il faut éditer le fichier /etc/postfix/master.cf et décommenter la ligne commençant par “submission” ainsi que la ligne commençant par “smtps”. Une fois ces réglages effectués, redémarrer postfix :
        /etc/init.d/postfix restart
      3. Finalement, on teste l’envoi d’emails à distance. La première chose pour ce faire est de récupérer l’encodage en base64 des informations de connexion (login utilisateur et mot de passe) :
        perl -MMIME::Base64 -e 'print
          encode_base64("\000tuxette\@domain-name.org\000the-first-passwd")'

        qui renvoie une chaîne de caractères du type :

        AHR1eGV0dGVAZG9tYWluLW5hbWUub3JnAHRoZS1maXJzdC1wYXNzd2Q=

        que l’on note soigneusement pour la suite.
        On commence ensuite par vérifier que le serveur accepte l’authentification via TLS :

        telnet mail2.domain-name.org 465

        ce à quoi le serveur doit répondre

        Trying xx.xx.xx.xx...
        Connected to mail2.domain-name.org.
        Escape character is '^]'.
        220 server.domain-name.org ESMTP Postfix (Ubuntu Lynx)

        On envoie alors la commande EHLO pour se connecter au serveur :

        EHLO example.com

        à laquelle le serveur répond

        250-server.domain-name.org
        250-PIPELINING
        250-SIZE 10485760
        250-VRFY
        250-ETRN
        250-STARTTLS
        250-ENHANCEDSTATUSCODES
        250-8BITMIME
        250 DSN

        Par la ligne “STARTTLS”, le serveur indique que la connexion via TLS est autorisée. On tape

        quit

        pour quitter telnet et faire un essai d’envoi d’email sécurisé. Celui-ci est effectué en lançant la commande

        openssl s_client -starttls smtp -crlf -connect mail2.domain-name.org:465

        Le serveur commence par envoyer le certificat de sécurité pour négocier le cryptage de la connexion. Envoyer alors la commande EHLO

        EHLO example.com

        à laquelle le serveur répond

        250-server.domain-name.org
        250-PIPELINING
        250-SIZE 10485760
        250-VRFY
        250-ETRN
        250-AUTH PLAIN
        250-ENHANCEDSTATUSCODES
        250-8BITMIME
        250 DSN

        L’authentification est autorisée (“AUTH PLAIN”) ; on lance donc celle-ci :

        AUTH PLAIN AHR1eGV0dGVAZG9tYWluLW5hbWUub3JnAHRoZS1maXJzdC1wYXNzd2Q=

        à laquelle le serveur doit répondre

        235 ok, go ahead (#2.0.0)

        On peut alors tester l’envoi d’un email :

        mail from: 
        250 ok
        rcpt to: 
        250 ok
        data
        354 go ahead
        From: Moi 
        To: Personne 
        Subject: Rien du tout...
        Salut!
        .
        250 ok 1113954693 qp 29052
        quit
        221 server.domain-name.org NO UCE

        Si dans la partie “rcpt to:”, vous précisez une adresse email valide, le serveur doit envoyer l’email qui doit être reçue dans la boîte mail correspondante.

        Ref : http://qmail.jms1.net/test-auth.shtml</li> </ol>

        Configuration de fetchmail pour récupérer ses emails sur un autre serveur mail

        Le programme fetchmail permet de rappatrier votre courrier électronique situé sur un autre serveur mail (par exemple, un compte free comme tuxettechix@free.fr). L’installation de fetchmail est effectuée par :

        apt-get install fetchmail

        et la configuration se fait en créant un fichier .fetchmailrc dans votre dossier utilisateur (/home/tuxette, par exemple). Le fichier contient les informations sur la boîte email dont le courrier doit être récupéré :

        poll pop.free.fr
               proto pop3
               user "tuxettechix@free.fr"
               pass "tuxettechix-passwd"
               is "tuxette@domain-name.org"

        qui indique que le courrier de tuxettechix@free.fr est récupéré pour le compte de l’utilisateur virtuel tuxette@domain-name.org. Avec cette configuration, le courrier électronique n’est pas conservé sur le serveur d’origine (free) ; pour en laisser une copie, ajouter l’option keep. Enfin, régler la confidentialité du fichier .fetchmailrc (qui contient le mot de passe du compte email tuxettechix@free.fr) par :

        chown nathalie:nathalie .fetchmailrc
        cmod 710 .fetchmailrc

        puis démarrez le démon fetchmail

        fetchmail -d 60

        pour relever le courrier toutes les 60 secondes.

        Configuration du client pour envoyer/recevoir des emails depuis votre ordinateur personnel

        Cette partie décrit la configuration pour paramétrer votre client de messagerie préféré pour envoyer et recevoir des emails via le serveur. La configuration de 3 clients de messagerie est décrite :

        • thunderbird (le plus détaillé)
        • apple mail
        • TODO: outlook (au cas très improbable où vous voudriez utiliser ce programme :-p…)

        Configurer thunderbird

        Dans Édition -> Paramètres des comptes, cliquez sur le menu “Gestion des comptes” puis “Ajouter un compte de messagerie” que vous configurer comme sur la figure ci-dessous :

        Lorsque vous validez, thunderbird recherche des serveurs dont le nom correspond à votre adresse électronique. Ne conservez pas les propositions par défaut et cliquez sur “Configuration manuelle” et remplissez les champs comme ci-dessous :

        puis cliquer sur “Re-tester“. Lorsque thunderbird a effectué les vérification, vous pouvez appuyer sur “Créer le compte“. Lors de la première connexion au compte puis lors du premier envoi d’email via le serveur SMTP, il vous sera demandé d’accepter le certificat de sécurité puis de rentrer votre mot de passe (celui de tuxette@domain-name.org dans la base de données postfix). Une fois le compte créé, vous pouvez aller dans les paramètres du compte “Gérer les identités” pour ajouter des identités correspondant à des adresses emails que vous rapatriez sur votre serveur (par exemple, tuxettechix@free.fr). Vérifiez également, dans l’onglet “Serveur sortant” de Édition -> Paramètres des comptes que le serveur smtp utilise le port 465 (sinon modifier ce paramètre) et “Mot de passe normal” pour l’authentification.

        Configurer apple mail

        Cliquer sur l’icône “timbre” dans le menu d’Apple Mail et commencer par donner les spécifications du compte :

        Full name: Tuxette Chix

        Email Address: tuxette@domain-name.org

        Password: the-first-passwd

        Dans la partie “Account Type“, choisir “IMAP” puis

        Description: Domain-Name mail server

        Incomming Mail Server: mail2.domain-name.org

        User name: tuxette

        Password: the-first-passwd

        Cocher la case “Use Secure Socket Layer (SSL)” et choisir comme méthode d’authentification “Password“. Pour configurer ensuite le serveur SMTP, ajoutez dans la partie “Outgoing Mail Server” :

        Description: Domain-Name mail server

        Outgoing Mail Server: mail2.domain-name.org

        cocher “Use authentification” et remplir:

        User: tuxette@domain-name.org

        Passwd: the-first-passwd

        Cocher enfin la case “Use Secure Socket Layer (SSL)“. Au premier redémarrage d’Apple Mail après la création du compte, un message apparaît informant que le certificat n’est pas sécurisé (si vous utilisez un certificat auto-signé, du moins). Cliquez sur “Show Certificate” pour vérifier le certificat en vue de l’approuver. Dans la partie “When using this certificate“, cliquer sur “Always trust” puis cliquer sur “Connect” et “OK” (après avoir entré le mot de passe administrateur de votre mac).

        Il peut s’avérer nécessaire de redémarrer l’ordinateur pour que la configuration fonctionne.

        Configurer Outlook

        Dans “Fichier“, choisir “Ajouter un compte“. Remplir les champs comme suit :

        Nom : Tuxette Chix

        Adresse de messagerie : tuxette@domain-name.org

        Mot de passe : the-first-passwd

        Outlook recherche les paramètres du serveur. TODO

        Configuration du webmail roundcube

        roundcube est un webmail simple qui peut être installé sur votre serveur pour consulter et envoyer vos emails avec un simple navigateur. Il s’installe par :

        apt-get install roundcube roundcube-mysql

        La configuration de roundcube s’effectue de la manière suivante :

        1. Sur le serveur MySQL, créer une base de données “roundcubedb” avec un utilisateur “roundcubeuser” ayant tous les droits sur cette base.
        2. Éditer le fichier /etc/roundcubeet modifier les deux premières lignes pour décommenter les alias. Relancer apache :
          /etc/init.d/apache2 reload

          À ce stade, roundcube est accessible à l’url http://www.domain-name.org/roundcube ou https://www.domain-name.org/roundcube en sécurisé si vous avez configuré les certificats SSL pour apache (ce que je conseille : voir ce post).</li>

        3. Il faut ensuite configurer la connexion de roundcube à la base de données en éditant le fichier /etc/roundcube/debian-db.phpde la manière suivante :
          $dbuser='roundcubeuser';
          $dbpass='roundcubeuser-passwd';
          $basepath='';
          $dbname='roundcubedb';
          $dbserver='localhost';
          $dbport='';
          $dbtype='mysql';
        4. Enfin, il faut permettre à roundcube la connexion au serveur IMAP par le port 993 en éditant le fichier /etc/roundcube/main.inc.phpdans lequel on inscrit :
          $rcmail_config['default_host'] = 'ssl://localhost:993';
        5. </ol>

          </div>


Le quatrième post concerne l’installation et la configuration d’un serveur apache, notamment pour sécuriser les échanges avec celui-ci via SSL.

Coming (probably not so) soon…

Installation de apache

Apache s’installe simplement par la commande

apt-get install apache2
/etc/init.d/apache2 start

L’installation est réussie si, lorsque vous tapez dans un navigateur votre nom de domaine (ou votre adresse IP), vous avez le message : “It works!”.

Les fichiers que vous voulez rendre accessibles depuis le serveur apache sont à placer dans le répertoire /var/www/ de votre serveur.

Configuration de apache pour la prise en charge des fichiers .htaccess

Si vous souhaitez restreindre l’accès d’un répertoire du type http://nom-du-serveur.org/dir/ par login et mot de passe, une méthode consiste à placer dans /var/www/dir un fichier nommé .htaccess et définissant les autorisations d’accès à ce répertoire. On procède de la manière suivante :

  • On édite le fichier /etc/apache2/sites-enabled/default et on y ajoute les lignes suivantes
        AllowOverride all
    On relance ensuite le serveur apache :
    /etc/init.d/apache2 reload
  • Dans le répertoire /var/www/dir, on crée un fichier nommé .htaccess et contenant les informations suivantes :
    AuthUserFile /var/www/dir/password/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Entrer login et mot de passe, svp"
    AuthType Basic
    Require valid-user
    En l’état, ce fichier permet l’accès au répertoire /dir pour les utilisateurs identifiés par login et mot de passe, les logins et mots de passe étant inclus dans un fichier .htpasswd du sous-répertoire dir/password.
  • Dans le répertoire /var/www/dir/password, on crée deux fichiers :
    • un fichier .htaccess contenant
      deny from all
      qui interdit l’accès au répertoire password à tout le monde ;
    • un fichier .htpasswd contenant
      login1:enc-mdp1
      login2:enc-mdp2
      loginn sont les logins et enc-mdpn contient les mots de passe correspondant, préalablement encryptés (voir par exemple site web pour encrypter un mot de passe).

Configuration pour la prise en charge de SSL

SSL est un protocole qui permet des échanges sécurisés entre le serveur apache et le navigateur web. Pour mettre en place la sécurisation des échanges par SSL, il faut disposer d’un certificat qui est signé par une autorité. Généralement, pour les serveurs privés (qui ne prétendent pas faire de commerce, par exemple), un certificat SSL auto-signé suffit (l’utilisateur aura alors un message de sécurité lui indiquant que le certificat n’est pas signé par une autorité reconnue mais une fois l’exception de sécurité acceptée, les échanges se feront bien de manière sécurisée).

Les étapes suivantes décrivent :

    • comment générer un certificat d’autorité pour signer le certificat du serveur apache ;
    • comment générer et signer un certificat pour le serveur apache ;
    • comment configurer le serveur apache pour qu’il utilise SSL.
      • Création d’un fichier de configuration initial, root-cacert.cnf: ce fichier texte contient les informations suivantes :
        # Configuration file example (root certificate)
        # Default configuration to use when one is not provided on the command line.
        [ ca ]
        default_ca      = local_ca
        # Default location of directories and files needed to generate certificates.
        [ local_ca ]
        dir             = /home/USERNAME/CertSSL
        certificate     = $dir/root-cacert.pem
        database        = $dir/index.txt
        new_certs_dir   = $dir/signedcerts
        private_key     = $dir/private/root-key.pem
        serial          = $dir/serial
        # Default expiration and encryption policies for certificates.
        default_crl_days        = 365
        default_days            = 1825
        default_md              = md5
        policy          = local_ca_policy
        x509_extensions = local_ca_extensions
        # Default policy to use when generating server certificates.  The following
        # fields must be defined in the server certificate.
        [ local_ca_policy ]
        commonName              = supplied
        stateOrProvinceName     = supplied
        countryName             = supplied
        emailAddress            = supplied
        organizationName        = supplied
        organizationalUnitName  = supplied
        # x509 extensions to use when generating server certificates.
        [ local_ca_extensions ]
        subjectAltName          = DNS:server-name.org
        subjectAltName          = DNS:*.server-name.org
        basicConstraints        = CA:false
        nsCertType              = server
        # The default root certificate generation policy.
        [ req ]
        default_bits    = 2048
        default_keyfile = /home//CertSSL/private/root-key.pem
        default_md      = md5
        prompt                  = no
        distinguished_name      = root_ca_distinguished_name
        x509_extensions         = root_ca_extensions
        # Root Certificate Authority distinguished name.  Change these fields to match
        # your local environment!
        [ root_ca_distinguished_name ]
        commonName              = Tuxette s Root Certificate Authority
        stateOrProvinceName     = NC
        countryName             = FR
        emailAddress            = my-email@server-name.org
        organizationName        = My Home
        organizationalUnitName  = My Office
        [ root_ca_extensions ]
        basicConstraints        = CA:true

        les parties [ local_ca ] et [ root_ca_distinguished_name ] sont à adapter à votre environnement de travail ; en particulier subjectAltName permettra de gérer des URL du type server-name.org et des sous-domaines du type subdomain.server-name.org. La partie default_days donne la durée de validité de votre certificat et elle est aussi à adapter à vos besoins éventuellement.</li>

      • Génération du certificat:
        export OPENSSL_CONF=~/CertSSL/root-cacert.cnf
        openssl req -x509 -newkey rsa:2048 -out root-cacert.pem -outform PEM -days 1825

        un mot de passe à conserver précieusement vous est alors demandé.</li>

      • Nettoyage du certificat:
        openssl x509 -in root-cacert.pem -out root-cacert.crt
      • </ul>
        • un certificat SSL auto-signé pour le serveur, apache-cert.pem ;
        • une clé SSL pour le serveur, apache-enc-key.pem.
        • Création d’un fichier de configuration pour le certificat sur serveur, apache-cert.cnf:
          # Configuration file example (server)
          [ req ]
          prompt                  = no
          distinguished_name      = server_distinguished_name
          
          [ server_distinguished_name ]
          commonName              = server-name.org
          stateOrProvinceName     = NC
          countryName             = FR
          emailAddress            = my-email@server-name.org
          organizationName        = My Home
          organizationalUnitName  = My Office

          où la partie [ server_distinguished_name ] doit être personnalisée (particulièrement la partie commonName). Dans le cas où des sous-domaines sont utilisés sur le serveur, domain1.server-name.org et domain2.server-name.org, il faudra générer autant de certificats que de sous-domaines, chacun possédant une partie commonName personnalisée.</li>

        • Génération du certificat et de la clé:
          export OPENSSL_CONF=~/CertSSL/apache-cert.cnf
          openssl req -newkey rsa:1024 -keyout apache-key.pem -keyform PEM -out
            apache-temp-cert.pem -outform PEM

          Un nouveau mot de passe vous est demandé, également à conserver précieusement.</li>

        • Encrypter la clé privée:
          openssl rsa < apache-key.pem > apache-enc-key.pem

          Le mot de passe entré précédemment est demandé.</li>

        • Signer le certificat du serveur avec le certificat d’autorité créé à la section précédente:
          export OPENSSL_CONF=~/CertSSL/root-cacert.cnf
          openssl ca -in apache-temp-cert.pem -out apache-cert.pem

          Le mode de passe du certificat d’autorité est demandé.</li>

        • Supprimer les certificats temporaires inutiles
          rm apache-temp-cert.pem apache-key.pem
        • </ul>
          • Installation du certificat d’autorité sur le serveur : Créer un répertoire self dans /usr/share/ca-certificates et y déposer le fichier root-cacert.crt. Reconfigurer ca-certificatespour qu’il utilise ce certificat d’autorité :
            dpkg-reconfigure ca-certificates

            (cocher root-cacert de self dans la liste des certificats).</li>

          • Installation du certificat et de la clé du serveur : copier le fichier apache-cert.pem dans /etc/ssl/certs et le fichier apache-enc-key.pem dans /etc/ssl/private. Modifier les droits sur la clé privée :
            chmod 400 /etc/ssl/private/apache-enc-key.pem

            de manière à ce qu’elle ne soit pas lisible.</li>

          • Édition des fichiers de configuration du serveur apache : dans le répertoire, /etc/apache2/sites-available
            • Éditer le fichier defaultde manière à ce qu’il commence par : < VirtualHost *:80>
                      ServerAdmin my-email@server-name.org
                      ServerName server-name.org
                      ServerAlias www.server-name.org

              où les valeurs de ServerName et ServerAlias doivent correspondre à votre serveur.</li>

            • Éditer le fichier default-sslde manière à ce qu’il commence par : < VirtualHost *:443>
                      
                      ServerAdmin my-email@server-name.org
                      ServerName server-name.org
                      ServerAlias www.server-name.org
              
                      SSLEngine On
                      SSLCertificateFile /etc/ssl/certs/apache-cert.pem
                      SSLCertificateKeyFile /etc/ssl/private/apache-enc-key.pem

              où les valeurs de ServerName et ServerAlias doivent correspondre à votre serveur.</li> </ul> </li>

            • Configuration de apache pour SSL
              a2enmod ssl rewrite
              a2ensite default-ssl
              /etc/init.d/apache2 reload
            • </ul> </li> </ul> </ul>

              Les deux premières étapes peuvent être effectuées en local et les clés déposées ensuite sur le serveur : c’est cette approche que nous décrivons ici. Les manipulations en local sont effectuées dans un répertoire choisi par l’utilisateur (par exemple ~/CertSSL), répertoire qui contient deux sous-répertoires, private et signedcert. Vous pouvez vous connecter à votre serveur par :

              http://server-name.org (non sécurisé)

              https://server-name.org (sécurisé)

              Pour en savoir plus : Documentation Ubuntu (en anglais).

              </div>


Coming soon …
Le troisième post concerne la paramétrisation du nom du serveur.

Le serveur est hébergé chez OVH chez lequel je possède aussi le nom de domaine (nathalievialaneix.eu). Les étapes permettant de changer le nom du serveur et d’y associer l’adresse IP sont les suivantes :

  • dans le manager OVH, sur l’interface de gestion du nom de domaine, faire pointer le nom de domaine vers l’adresse IP du serveur (dans Domaine & DNS -> Zone DNS, placer A du nom de domaine et des sous-domaines vers l’IP du serveur) ;
  • par connexion SSH, sur le serveur, tapez la commande
    hostname machine.nom-du-domaine.org

    pour un serveur nommé machine</coode> sur le nom de domaine<code>nom-du-domaine.org. Éditez ensuite le fichier /etc/hosts pour ajouter machine.nom-du-domaine.org machine en face de l'adresse IP puis redémarrez les interfaces réseaux :

    /etc/init.d/networking restart
  • dans le manager OVH du serveur, configurer le DNS (dans Service -> Gestion DNS, associer le nom du serveur à l'adresse IP).