WIP cert client
This commit is contained in:
parent
b88dddba96
commit
0ad5793be7
1 changed files with 57 additions and 12 deletions
|
@ -93,6 +93,8 @@ On supprime exim4, car Mailcow utilise postfix.
|
||||||
# apt purge exim4 exim4-base exim4-config exim4-daemon-light
|
# apt purge exim4 exim4-base exim4-config exim4-daemon-light
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
Puis on télécharge le script d'installation, on édite la configuration et on lance l'installation.
|
Puis on télécharge le script d'installation, on édite la configuration et on lance l'installation.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -109,7 +111,7 @@ Laissez-vous guider par le script d'installation.
|
||||||
# ./install.sh
|
# ./install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
# Fini
|
## Fini
|
||||||
|
|
||||||
Voilà, c'est fini ! Il vous reste à créer votre premier compte mail via l'interface d'admin.
|
Voilà, c'est fini ! Il vous reste à créer votre premier compte mail via l'interface d'admin.
|
||||||
|
|
||||||
|
@ -117,7 +119,7 @@ Si vous avez des questions ou besoin d'aide, n'hésitez pas à ouvrir un ticket
|
||||||
|
|
||||||
# Bonus : Certificat client X.509
|
# Bonus : Certificat client X.509
|
||||||
|
|
||||||
L'idée est de restreindre l'accès au services web (webmail et admin), et mail (SMTPS/IMAPS) via un certificat client X.509. Sans ce certificat, impossible d'accéder à quoi que ce soit.
|
L'idée est de restreindre l'accès aux services web (webmail et admin), et mail (SMTPS/IMAPS) via un certificat client X.509. Sans ce certificat, impossible d'accéder à quoi que ce soit.
|
||||||
|
|
||||||
> **Note** : Cela remplace le certificat Let's Encrypt utilisé par Mailcow.
|
> **Note** : Cela remplace le certificat Let's Encrypt utilisé par Mailcow.
|
||||||
|
|
||||||
|
@ -133,30 +135,74 @@ Pour cela il faut mettre en place une `PKI` et émettre un certificat client. J'
|
||||||
# sed -i -e 's#PREFIX=.*#PREFIX=/etc/shellpki#' -e 's#WWWDIR=.*#WWWDIR=/etc/ssl/clients#' shellpki.sh
|
# sed -i -e 's#PREFIX=.*#PREFIX=/etc/shellpki#' -e 's#WWWDIR=.*#WWWDIR=/etc/ssl/clients#' shellpki.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Éditer `/etc/shellpki/openssl.cnf` et initialiser shellPKI. Le plus important est de remplir le « Common Name », par exemple `ca.domain.tld`.
|
Éditer `/etc/shellpki/openssl.cnf` et initialiser shellPKI. Le plus important est de remplir le « Common Name », par exemple `Myname Root Certificate`.
|
||||||
|
|
||||||
```
|
```
|
||||||
# vim /etc/shellpki/openssl.cnf
|
# vim /etc/shellpki/openssl.cnf
|
||||||
# ./shellpki.sh init
|
# ./shellpki.sh init
|
||||||
```
|
```
|
||||||
|
|
||||||
Ensuite on génère un
|
Injecter le certificat racine `/etc/shellpki/ca/cacert.pem` dans votre navigateur et vos appareils tel qu'un smartphone.
|
||||||
|
|
||||||
On obtiens un certificat et une clé dans `/etc/shellpki/ca/` que l'on peut positionner sur nginx, dovecot et postfix.
|
Ensuite on génère un certificat (sans passphrase) pour les services web et mail avec un « Common Name » correspondant à votre FQDN pour accéder à vos services comme `mail.domain.tld`.
|
||||||
|
|
||||||
```
|
```
|
||||||
# sed -i -e 's#/etc/ssl/mail/mail.crt#/etc/shellpki/ca/cacert.pem#' \
|
# ./shellpki.sh create
|
||||||
-e 's#/etc/ssl/mail/mail.key#/etc/shellpki/ca/private.key#' \
|
|
||||||
/etc/nginx/sites-available/mailcow.conf /etc/postfix/main.cf \
|
|
||||||
/etc/dovecot/dovecot.conf
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Générer un certificat client
|
On obtiens un certificat et une clé dans `/etc/ssl/clients/` que l'on positionne sur nginx, dovecot et postfix. Les différentes directives à modifier :
|
||||||
|
|
||||||
|
```
|
||||||
|
/etc/nginx/sites-available/mailcow.conf:25: ssl_certificate
|
||||||
|
/etc/nginx/sites-available/mailcow.conf:26: ssl_certificate_key
|
||||||
|
/etc/postfix/main.cf:17:smtpd_tls_cert_file
|
||||||
|
/etc/postfix/main.cf:18:smtpd_tls_key_fil
|
||||||
|
/etc/dovecot/dovecot.conf:129:ssl_cert
|
||||||
|
/etc/dovecot/dovecot.conf:130:ssl_key
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
# for service in dovecot postfix nginx; do systemctl restart $service; done
|
||||||
```
|
```
|
||||||
|
|
||||||
|
On en régénère un autre pour votre client (sans passphrase), soit un utilisateur par exemple. On pourra choisir un « Common Name » `username.mail.domain.tld` ou `Nom Prénom`.
|
||||||
|
|
||||||
|
```
|
||||||
|
# ./shellpki.sh create
|
||||||
|
```
|
||||||
|
|
||||||
|
Puis on le converti au format `PKCS#12` avec une passphrase d'export.
|
||||||
|
|
||||||
|
```
|
||||||
|
# cd /etc/ssl/clients
|
||||||
|
# openssl pkcs12 -export -in benoit.mail.benpro.fr.crt -inkey benoit.mail.benpro.fr.key -out benoit.mail.benpro.fr.p12
|
||||||
|
```
|
||||||
|
|
||||||
|
Il faudra importer ce certificat client dans les navigateurs et dans diverses applications (Thunderbird, Exchange/GMail sous Android, …).
|
||||||
|
|
||||||
|
La dernière étape consiste à dire à dovecot et nginx qu'il est nécessaire de présenter un certificat client.
|
||||||
|
|
||||||
|
Pour nginx :
|
||||||
|
|
||||||
|
```
|
||||||
|
ssl_client_certificate /etc/shellpki/ca/cacert.pem;
|
||||||
|
ssl_verify_client on;
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour dovecot :
|
||||||
|
|
||||||
|
```
|
||||||
|
ssl_client_ca_file = </etc/shellpki/ca/cacert.pem
|
||||||
|
ssl_verify_client_cert = yes
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl restart dovecot.service
|
||||||
|
```
|
||||||
|
|
||||||
# Autres actions
|
# Autres actions
|
||||||
|
|
||||||
|
@ -165,5 +211,4 @@ Voici une liste de tâches non exhaustives à faire de votre côté que je ne do
|
||||||
- Activer un pare-feu sur votre machine, par exemple `ufw` ;
|
- Activer un pare-feu sur votre machine, par exemple `ufw` ;
|
||||||
- Monitorer votre serveur ;
|
- Monitorer votre serveur ;
|
||||||
- S'assurer du suivi des mises à jour ;
|
- S'assurer du suivi des mises à jour ;
|
||||||
- Faire des sauvegardes ;
|
- Faire des sauvegardes.
|
||||||
- …
|
|
||||||
|
|
Loading…
Reference in a new issue