Configurer un serveur mail

Posté le dim. 15 novembre 2015 • Tags : mail, postfix, dovecot, ssl, imap

Installation d'un serveur mail complet et à jour sous debian jessie (8.2).

Configuration des DNS

Pour commencer nous allons créer des entrées DNS.

Nous créons un MX pour les mails avec une priorité de 1, un sous domaine "mail" qui pointe vers l'adresse ipv4 de votre serveur, d'un sous domaine webmail qui pointe sur le sous domaine mail et d'un enregistrement SPF :

votredomaine.com.           MX      1   mail.votredomaine.com.
mail.votredomaine.com.      A           ip.v4.du.serveur
webmail.votredomaine.com.   CNAME       mail.votredomaine.com.
votredomain.com.            SPF         "v=spf1 ip4:ip.v4.du.server ~all"

Installation des paquets

Maintenant installons postfix dovecot-imapd et sasl2-bin :

apt-get install postfix dovecot-imapd sasl2-bin php5-curl

Configurer le serveur de messagerie comme "Site Internet", puis en nom de courrier indiquer "mail.votredomaine.com".

Configuration de dovecot

Créer un dossier ssl dans dovecot :

mkdir /etc/dovecot/ssl && cd /etc/dovecot/ssl

Créer un certificat ssl :

openssl req -new -newkey rsa:2048 -nodes -keyout certificat.key -out certificat.csr

Puis répondre aux différentes questions pour ma part j'ai répondu :

FR
(vide)
Paris
votredomaine
IT
mail.votredomaine.com
contact@votredomaine.com
(vide)
(vide)

Ensuite :

openssl x509 -req -days 365 -in certificat.csr -signkey certificat.key -out certificat.crt

Puis :

cat certificat.key certificat.crt > certificat.pem

Créer le groupe et l'utilisateur vmail :

groupadd -g 5000 vmail
useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail

Ajouter dans /etc/dovecot/dovecot.conf :

listen = ip.v4.du.server

Editer /etc/dovecot/conf.d/10-auth.conf :

disable_plaintext_auth = yes
auth_username_format = %Lu
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext

Editer /etc/dovecot/conf.d/10-logging.conf :

auth_verbose = yes
mail_debug = yes

Editer /etc/dovecot/conf.d/10-master.conf :

unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
}

Editer /etc/dovecot/conf.d/10-ssl.conf :

ssl = required
ssl_cert = </etc/dovecot/ssl/certificat.pem
ssl_key = </etc/dovecot/ssl/certificat.key

Editer /etc/dovecot/conf.d/15-mailboxes.conf :

mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
}

mailbox Junk {
    auto = subscribe
    special_use = \Junk
}

mailbox Trash {
    auto = subscribe
    special_use = \Trash
}

mailbox Sent {
    auto = subscribe
    special_use = \Sent
}

#mailbox "Sent Messages" {
#    special_use = \Sent
#}

Editer /etc/dovecot/conf.d/auth-passwdfile.conf.ext :

passdb {
    driver = passwd-file
    args = scheme=MD5 username_format=%u /etc/dovecot/users
}

userdb {
    driver = passwd-file
    args = username_format=%u /etc/dovecot/users
    default_fields = uid=5000 gid=5000 home=/var/vmail/%d mail=maildir:~/%u
}

Créer le fichier /etc/dovecot/users :

touch /etc/dovecot/users

Puis pour chaque mail créer un enregistrement :

adresse@votredomaine.com:motdepassemd5:::::::

Le format est le suivant :

Champ Valeur
Adresse email
Mot de passe (MD5) motdepassemd5
uid déjà défini dans auth-passwdfile
gid déjà défini dans auth-passwdfile
home directory déjà défini dans auth-passwdfile
mail directory déjà défini dans auth-passwdfile

Tester votre utilisateur grâce à la commande :

doveadm user adresse@votredomaine.com

Ce qui devrait afficher :

field   value
uid     5000
gid     5000
home    /var/vmail/votredomaine.com
mail    maildir:~/adresse@votredomaine.com

Démarrer dovecot :

/etc/init.d/dovecot start

Tester la connexion :

openssl s_client -connect ip.v4.du.server:993

Si vous avez "* OK [CAPABILITY …] Dovecot ready. Vous pouvez vous authentifier :

. LOGIN adresse@votredomaine.com motdepasseenclair

C'est fini pour dovecot.

Configuration de sasl

Editer /etc/default/saslauthd :

START=yes
OPTIONS="-m /var/spool/postfix/var/run/saslauthd"

Puis lancer :

/etc/init.d/saslauthd start

C'est fini pour sasl

Configuration de postfix

Editer /etc/postfix/main.cf ::

smtpd_banner = $myhostname ESMTP $mail_name
smtpd_tls_cert_file=/etc/dovecot/ssl/certificat.pem
smtpd_tls_key_file=/etc/dovecot/ssl/certificat.key
mynetworks = 127.0.0.0/8 ip.v4.du.server

virtual_mailbox_domains = votredomaine.com, autredomaine.com
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual_alias

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname

broken_sasl_auth_clients = yes

smtpd_helo_restrictions = reject_unknown_helo_hostname
smtpd_sender_restrictions = permit_sasl_authenticated reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination

smtpd_enforce_tls = no
smtpd_tls_auth_only = no
smtpd_tls_ask_ccert = no
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom

Créer /etc/postfix/virtual_alias :

touch /etc/postfix/virtual_alias

Pour créer un alias, éditer /etc/postfix/virtual_alias :

alias@votredomaine.com          destination@votredomaine.com

Créer /etc/postfix/virtual_domains :

touch /etc/postfix/virtual_domains

Pour gérer vos domaines, éditer /etc/postfix/virtual_domains :

votredomaine.com                OK
votredeuxiemedomaine.com        OK

Créer /etc/postfix/virtual_mailbox :

touch /etc/postfix/virtual_mailbox

Pour créer un comte mail, éditer /etc/postfix/virtual_mailbox :

email@votredomaine.com          votredomaine.com/email@votredomaine.com/
linus@torvald.com               torvald.com/linus@torvald.com/

N'oubliez pas lors de la création de nouveau comptes mail d'éditer /etc/dovecot/users ;-)

Maintenant il faut dire a postfix que nous avons modifier nos fichiers virtuels :

postmap /etc/postfix/virtual_alias
postmap /etc/postfix/virtual_domains
postmap /etc/postfix/virtual_mailbox

Editer /etc/postfix/master.cf :

smtp    inet    n   -   -   -   -   smtpd   -v
 -o smtpd_tls_cert_file=/etc/dovecot/ssl/certificat.pem
 -o smtpd_tls_key_file=/etc/dovecot/ssl/certificat.key
submission inet n - n - - smtpd
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
urd inet n - n - - smtpd
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
smtps   inet    n   -   -   -   -   smtpd   -v
 -o smtpd_tls_wrappermode=yes
 -o smtpd_tls_cert_file=/etc/dovecot/ssl/certificat.pem
 -o smtpd_tls_key_file=/etc/dovecot/ssl/certificat.key

Puis redemarrer postfix :

/etc/init.d/postfix restart

Fin de la configuration de postfix.

Vous pouvez maintenant tester votre serveur mail ainsi que la qualité de votre serveur sur le site http://www.mail-tester.com

Installation d'un webmail rainloop

Créer un dossier pour votre webmail :

mkdir -p /var/www/webmail/public && cd /var/www/webmail/public

Télécharger rainloop :

wget http://repository.rainloop.net/v2/webmail/rainloop-community-latest.zip

Décompresser rainloop :

unzip rainloop*.zip && rm -rf rainloop*.zip

Modifier les droits :

chown -R www-data:www-data /var/www/webmail
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

Créer un vhost pour apache dans /etc/apache2/site-enabled/001-webmail.domain.com.conf :

<VirtualHost *:80>
    ServerAdmin contact@domain.com
    ServerName mail.domain.com

    DocumentRoot /var/www/webmail/public
    <Directory /var/www/webmail/public>
        Options FollowSymLinks
        #Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    <Directory /var/www/webmail/public/data>
        Options -FollowSymLinks
        AllowOverride None
        Order allow,deny
        Deny from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/webmail_error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/webmail_access.log combined
</VirtualHost>

N'oubliez pas de redémarrer apache :

/etc/init.d/apache2 restart

Pour configurer rainloop se rendre sur : http://mail.domain.com/?admin

Login admin
Password 12345

Changer la langue et votre mot de passe (dans security).

Puis dans domains configurez votre nom de domaine en cliquant sur + Add domain

Name domaine.com
IMAP
Server mail.domain.com
Secure SSL/TLS
SMTP
Server mail.domain.com
Secure SSL/TLS

Puis + Add

Je supprime tous les autres domaines (gmail etc…)

Ensuite j'active les plugins, et les packages : X-Originating-IP, Black list et White list.

Maintenant rendez-vous sur : http://mail.domain.com et identifiez-vous avec votre login et mot de passe.


Gentoo Navigateur Web par Défaut

Posté le dim. 25 octobre 2015 • Tags : gentoo, web, linux

Sur ma machine "links" était le navigateur web par défaut. Il est pratique pour lire du texte, dès que l'on a du contenu audio ou vidéo il est préférable d'utiliser un navigateur tel que Firefox.

Voici la commande pour voir le navigateur par défaut pour les url utilisants le protocole "http" :

xdg-mime query default x-scheme-handler/http

Et voici la commande pour le "https" :

xdg-mime query default x-scheme-handler/https

Pour changer le navigateur par défaut par Firefox il suffit d'executer ses deux commandes :

xdg-mime default firefox.desktop x-scheme-handler/http
xdg-mime default firefox.desktop x-scheme-handler/https

Vagrant faire un réseau privé

Posté le mar. 13 octobre 2015 • Tags : linux, network

J'utilise plusieurs machines virtuelles avec vagrant, une avec un backoffice et une avec une API.

J'ai donc du faire un réseau privé dans vagrant pour que le BO communique avec l'API.

Il suffit de modifier la configuration de la vm #1 et d'ajouter :

config.vm.network "private_network", ip: "192.168.10.1"

Et dans la configuration de la vm #2 d'ajouter :

config.vm.network "private_network", ip: "192.168.10.2"

Votre vm #1 peut (suite au redémarrage des deux vm vagrant) communiquer avec votre vm #2 directement avec l'ip 192.168.10.2.


Des commentaires efficaces

Posté le lun. 12 octobre 2015 • Tags : commentaire, code

Dans mes fichiers de test j'utilise souvent des commentaires pour tester qu'une fonctionnalité de code.

Par exemple pour tester une api :

// Obtenir le livre #1
api_get('books/1');

// Ajouter un livre
api_add('books', $datas);

Je test généralement chaque élément séparement.

Pour tester la première portion de mon code :

//* Obtenir le livre #1
api_get('books/1');
//*/

/* Ajouter un livre
api_add('books', $datas);
//*/

Pour tester la seconde portion de mon code :

/* Obtenir le livre #1
api_get('books/1');
//*/

//* Ajouter un livre
api_add('books', $datas);
//*/

Il me suffit d'ajouter ou d'enlever un slash sur le premier commentaire pour commenter ou non tout le bloc.

Ce n'est pas forcément très lisible donc je fais ça uniquement pour mes tests.


Mettre à jour Gentoo

Posté le dim. 27 septembre 2015 • Tags : gentoo, emerge, linux

Pour mettre à jour Gentoo j'utilise différentes commandes.

Dans un premier temps je fais la mise à jour d'eix :

eix-sync

Ensuite :

emerge -pvuDN world

-p ou --pretend, permet d'afficher ce qui sera mis à jour. Affiche également les différents flags (N = new (not yet installed), U = updating (to another version) etc…) -v ou --verbose, mode verbeux. -u ou --update, met à jour les programmes dans la meilleur version disponible. -D ou --deep, met à jour les dépendances des programmes si nécessaire. -N ou --newuse, met à jour les programmes dont le "USE" a été modifié depuis son installation.

Une fois la liste des programmes et ses modifications vérifiée nous pouvons lancer la mise à jour :

emerge -vuDN world

Compilation Kernel Gentoo

Posté le dim. 06 septembre 2015 • Tags : kernel, gentoo, linux

Pour compiler le kernel sous gentoo :

cd /usr/src/linux

make menuconfig

make && make modules_install

make install

Le kernel est maintenant compilé.

Maintenant il faut mettre à jour grub. :

grub2-mkconfig -o /boot/grub/grub.cfg

Puis lancer uname -a qui affiche le kernel actuellement utilisé ainsi que le nombre de compilation.

Il faut maintenant redémarrer la machine :

reboot

Au final vérifier avec uname -a si le bon kernel est chargé.


Compression Décompression tar.gz tar.bz2 tar.xz

Posté le dim. 30 août 2015 • Tags : archive, gzip

J'ai toujours du mal pour décompresser un fichier de type "tar.bz2" ou "tar.xz". Je n'ai pas encore trouvé le moyen de me souvenir de la syntaxe…

tar.gz

Pour les fichiers tar.gz j'arrive parfaitement à compresser ou décompresser ce format exemple :

On compresse avec :

tar -cvzf archive.tar.gz dossier_a_compresser/

On décompresse avec :

tar -xvzf archive.tar.gz

Il suffit de retenir :

-c comme compression / "x" comme eXtract ou eXtraction. -v pour le mode verbeux. -z pour le "gzip" d'ou le ".gz". -f pour spécifier le fichier.

tar.bz2

Pour les tar.bz2 je ne sais JAMAIS qu'il faut remplacer "z" de gizip par "j" de Bzip… (la lettre "b" étant sans doute utilisé avant que le bzip n'apparaisse). L'alternative est d'utiliser "--bzip"

On compresse avec :

tar -cvjf archive.tar.bz2 dossier_a_compresser/

Ou :

tar --bzip2 -cvf archive.tar.bz2 dossier_a_compresser/

On décompresse avec :

tar -xvjf archive.tar.bz2

Ou :

tar --bzip2 -xvf archive.tar.bz2

tar.xz

Pour ce qui est de Lzma ou le tar.xz c'est un "J" majuscule cette fois ou d'utiliser "--xz".

On compresse avec :

tar -cvJf archive.tar.xz dossier_a_compresser/

Ou :

tar --xz -cvf archive.tar.xz dossier_a_compresser/

On décompresse avec :

tar -xvJf archive.tar.xz

Ou :

tar --xz -xvf archive.tar.xz

Suppression des branches distantes inexistantes

Posté le mar. 25 août 2015 • Tags : git

Lors d'un developpement j'ai créé une branche "add_namespace" qui m'a permis d'ajouté des namespaces a différents fichiers PHP.

Une fois la modification faite j'ai envoyé ma branche sur l'origin, en faisant un "pull request" (github) ou "merge request" (gitlab).

Un autre développeur a accepté mon pull request (il a donc mergé la branche) et a supprimé ma branche de l'origine.

Sur mon environnement je vois toujours cette branche.

git branch -a

* master

remote/origin/HEAD -> origin/master

remote/origin/add_namespace

remote/origin/master

Pour pouvoir effacer cette branche dans le remote, il suffit de tapper la commande :

git remote prune origin

Élimination de origin

URL : git@git.mondomain.com:mondepot.git

* [éliminé] origin/add_namespace

Maintenant, vérifions que tout est propre :

git branch -a

* master

remote/origin/HEAD -> origin/master

remote/origin/master


Migration de Tumblr à Pelican

Posté le jeu. 20 août 2015 • Tags : blog

J'ai testé pelican, lors de mon voyage à Bruxelles en Thalys le 15 Août 2014. Depuis cette date je n'avais pas pris le temps de m'occuper de la migration de mon blog de tumblr vers pelican.

Pelican est un générateur de site statique, il est pratique pour la gestion des articles tel que mon blog.

Il suffit de créer un fichier texte avec le contenu de l'article et l'envoyer sur github pour que celui-ci soit publié.


Touche pour sortir sa machine de veille

Posté le sam. 08 août 2015 • Tags : key, computer

Il y a quelques années, pour sortir ma machine de veille j'utilisais la touche "enter" ou "escape".

Ce qui fonctionne mais, si vous êtes dans un programme d'installation qui demande une confirmation (formater tout le disque par exemple), en appuyant sur "enter" vous allez confirmer le formatage…

Avec la touche escape vous allez généralement annuler l'action que l'on vous propose.

Même problème avec toutes les autres touches : "espace" qui confirme généralement, "o" pour "oui", "y" pour "yes", "n" pour "no" ou "non", ou une quantité "1", "2", ou toute autre lettre défini tel que "a" pour "annuler", "c" pour "cancel"…

Bref la seule touche que j'utilise pour sortir mon ordinateur de veille est "shift". Que ça soit le "shift" droit ou gauche il ne fais jamais d'action spécifique à ma connaissance ;-)