Cet article est une remise à jour de Bien configurer son serveur dédié sous Ubuntu 12.04 LTS
Bien démarrer
# apt-get update && apt-get upgrade
1 |
# reboot |
1 |
# adduser anthony |
on ajoute l’utilisateur principal au groupe sudo
1 |
# adduser anthony sudo |
on se déconnecte, et sur la machine locale, on lit le contenu de la clef SSH publique :
1 2 3 4 |
$ cat ~/.ssh/id_rsa.pub $ ssh anthony@host $ mkdir ~/.ssh $ vim ~/.ssh/authorized_keys |
on y insère le contenu de la clef public
1 |
$ chmod 600 .ssh/authorized_keys |
on se déconnecte, on se reconnecte sans mot de passe :
1 2 |
$ ssh anthony@host $ sudo vim /etc/ssh/sshd_config |
1 2 3 |
[...] PermitRootLogin no [...] |
1 2 3 |
$ sudo vim /etc/hostname $ sudo vim /etc/hosts $ sudo reboot |
Outils divers à installer
1 |
$ sudo apt-get install ntp ntpdate nmap iptraf mtr hardinfo |
Parefeu avec ufw
Avant de l’activer, on autorise ssh (ou sinon … c’est dommage )
1 2 |
$ sudo ufw allow 22 $ sudo ufw enable |
on verifie que ca fonctionne à coups de nmap du poste client, et on autorise les ports un à un
Dans le cas où vous voulez revenir en arrière sur une de vos configurations :
1 2 3 |
$ sudo ufw status numbered [18] 953 (v6) ALLOW IN Anywhere (v6) $ sudo ufw delete 18 |
Serveur web pour wordpress, galeries en tout genre (apache/mysql/php5)
1 2 3 |
$ sudo apt-get install apache2 php mysql-server libapache2-mod-php php-mysql phpmyadmin php-tidy php-mbstring $ sudo vim /etc/php/7.0/apache2/php.ini $ sudo vim /etc/apache2/apache2.conf |
1 2 |
$ sudo a2enmod ssl proxy_http rewrite $ sudo service apache2 restart |
Certificats SSL de Let’s encrypt
Là aussi, je m’inspire d’un article du blog sur la génération de certificats SSL gratuits avec Let’s Encrypt
1 2 3 4 5 6 7 |
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository universe sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install certbot python-certbot-apache sudo certbot certonly --apache |
1 2 |
$ ls /etc/letsencrypt/live/blog.dahanne.net/ cert.pem chain.pem fullchain.pem privkey.pem |
1 |
$ sudo vim /etc/apache2/sites-enabled/blog.dahanne.net |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<VirtualHost *:80> ServerAdmin valide@email.ca DocumentRoot /var/www/blog.dahanne.net ServerName blog.dahanne.net ErrorLog /var/log/apache2/blog.dahanne.net.error.log CustomLog /var/log/apache2/blog.dahanne.net.access.log combined # optionnel, pour rediriger tout le trafic clair en chiffré #Redirect permanent / https://blog.dahanne.net/ <Directory /home/www/blog.dahanne.net> AllowOverride FileInfo AuthConfig Limit Options Options -Indexes MultiViews FollowSymLinks IncludesNoExec Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:443> ServerAdmin valide@email.ca DocumentRoot /var/www/blog.dahanne.net ServerName blog.dahanne.net ErrorLog /var/log/apache2/blog.dahanne.net.error.log CustomLog /var/log/apache2/blog.dahanne.net.access.log combined <Directory /var/www/blog.dahanne.net> AllowOverride FileInfo AuthConfig Limit Options Options -Indexes MultiViews FollowSymLinks IncludesNoExec Order allow,deny Allow from all </Directory> SSLEngine On SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLProxyEngine On SSLCertificateKeyFile /etc/letsencrypt/live/blog.dahanne.net/privkey.pem # si apache2 > 2.4.8 # SSLCertificateFile /etc/letsencrypt/live/blog.dahanne.net/fullchain.pem </VirtualHost> |
DNS avec Bind
1 |
sudo apt-get install bind9 |
1 |
# sudo service bind9 stop |
Tout se passe dans /etc/bind ; je vous recommande de garder les fichiers présents et d’ajouter un fichier par zone.
named.conf.local : on y lie les fichiers des zones qu’on gère, named.conf.options on y configure les options de sécurité
1 |
$ sudo ufw allow 53/udp |
1 |
$ sudo ufw allow 53/tcp |
1 |
$ sudo service ufw restart |
1 |
# sudo service bind9 start |
on peut verifier la confiuration avec :
1 |
# named-checkzone mondomaine.com /etc/bind/domaine.com.hosts |
ca devrait etre correct, il n’y a plus qu’ a faire pointer votre registrar vers votre nouveau serveur dns
Liens utiles :
Le courrier
Avec postfix pour smtp, postgrey pour réduire le courriel indésirable, et dovecot pour accéder à ses boites en Imap Start tls
1 |
$ sudo apt-get install postfix postgrey dovecot-imapd postfix dovecot-managesieved dovecot-sieve |
Postfix
En migrant postfix de 2.9 à 3.1 faire très attention en recopiant l’ancienne configuration, le mieux est sans doute de reprendre avec la conf par défaut et ajouter les règles une par une dans main.cf
- mettre à jour le hostname,
- ajouter certaines regles de filtrage, dont le passage par postgrey, dont la configuration se trouve dans /etc/default/postgrey (rien à faire normalement)
- augmenter la taille maximale par défauts des courriels : message_size_limit = 31457280 (si on met rien c’est 10Mo, pour info gmail c’est 25Mo)
1 2 |
$ sudo vim /etc/aliases $ sudo newaliases |
Parfois il peut être utile d’ouvrir 1 autre port que le port 25 (smtp) ; comme par exemple le port 587 (submission) – si par exemple votre FAI ne vous autorise pas à utiliser le port 25 en sortant à part pour son propre serveur smtp.
Dans ce cas, rendez vous dans /etc/postfix/master.cf , afin de decommentez cette ligne :
1 2 |
[...] submission inet n - - - - smtpd |
Ensuite, il vous suffit de recharger la configuration postfix, et de demander l’ouverture du port 587 à votre parefeu:
1 |
# postfix reload |
Si lors du rechargement de config vous avez du warning comme :
1 2 3 4 |
postfix: Postfix is running with backwards-compatible default settings postfix: See http://www.postfix.org/COMPATIBILITY_README.html for details postfix: To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload" postfix/postfix-script: refreshing the Postfix mail system |
Alors, vous pouvez désactiver le mode compatibilité, mais avant çà, soyez sûr que inet_protocols = all
1 2 |
# postconf compatibility_level=2 # postfix reload |
1 2 |
# ufw allow 587 # ufw allow 25 |
SPF, DKIM et DMARC
Ces 3 spécifications visent à lier votre serveur de courrier ainsi que vos utilisateurs à votre nom de domaine – en gros certifier que vous êtes bien l’expéditeur des courriels. J’en parle plus dans cet article.
- SPF est le plus facile à mettre en pace, il suffit de rajouter une entrée TXT à votre domaine :
1 |
@ IN TXT "v=spf1 a mx ip4:192.95.25.170 ~all" |
- DKIM est un peu plus compliqué car vous devez installer opendkim qui sera appelé à chaque envoi de ocurriel pour signer avec une clef privée l’entrée DKIM (et vous devez donc donner la clef publique dans une entrée DNS TEXT); tout est là : https://easyengine.io/tutorials/mail/dkim-postfix-ubuntu/ – attention à ne pas utiliser un fichier sock mais plutôt un port comme indiqué dans le cas où votre Postfix est chroot’er !
- Enfin DMARC est très simple à obtenir une fois que vous avez obtenu DKIM :
1 |
_dmarc IN TXT "v=DMARC1;p=none;rua=mailto:postmaster@domaine.net;ruf=mailto:postmaster@domaine.net;fo=1" |
Je vous recommande l’outil en ligne Mail Tester pour vérifier que tout est en place !
Dovecot
configuration dans /etc/dovecot/dovecot.conf quand on migre de 2.0.19 vers 2.0.22 : ce n’est pas une bonne idée de garder la configuration, il vaut mieux prendre celle par défaut et la modifier.
pour configurer les accès distants (pop3s, imaps)
1 2 |
$ sudo vim /etc/dovecot/conf.d/01-mail-stack-delivery.conf $ sudo vim /etc/dovecot/conf.d/10-master.conf |
on peut jeter un coup d’oeil à la configuration :
1 |
$ sudo dovecot -n |
Par défaut, les dossiers IMAP seront sauvegardés sous Mailbox/.nom_du_dossier; si comme moi vous préférez ne pas avoir le . devant le nom du répertoire, dans /etc/dovecot/conf.d/01-mail-stack-delivery.conf rajoutez :LAYOUT=fs à la suite du chemin de votre boite :
1 |
mail_location = maildir:~/Mailbox:LAYOUT=fs |
enfin, il peut etre interessant d’utiliser un mot de passe different de celui de votre compte principal; pour cela dovecot permet de configurer une base de mot de passe :
dans /etc/dovecot/conf.d/10-auth.conf
1 2 3 4 5 |
auth_mechanisms = plain passdb { driver = passwd-file args = /etc/dovecot/passwd } |
pour ajouter des entrees dans /etc/dovecot/passwd :
1 2 3 4 |
$ sudo doveadm pw -s ssha Enter new password: Retype new password: {SSHA}SooqprNGh90i020FU8StgpzRzEiKB6Ne |
et vous pouvez recopier le mot de passe dans /etc/dovecot/passwd :
1 |
exemple:{SSHA}SooqprNGh90i020FU8StgpzRzEiKB6Ne |
Ceci étant fait, on peut même déléguer l’autorisation de smtp a dovecot :
1 2 3 4 5 6 7 8 9 10 |
service auth { ... unix_listener /var/spool/postfix/private/auth { mode = 0660 # Assuming the default Postfix user and group user = postfix group = postfix } ... } |
en verifiant que /etc/postfix/main.cf contient ces informations :
1 2 3 4 5 6 7 8 9 |
smtpd_sasl_type = dovecot # Can be an absolute path, or relative to $queue_directory # Debian/Ubuntu users: Postfix is setup by default to run chrooted, so it is best to leave it as-is below smtpd_sasl_path = private/auth # and the common settings to enable SASL: smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination |
1 2 3 |
# ufw allow 587 # ufw allow 25 # ufw allow 143 |
Compatibilité Docker
Si votre machine est hébergée chez OVH, il est probable que le kernel fourni vous empêche de faire fonctionner Docker.
Dans ce cas, installez Docker comme préconisé et ensuite : (merci à ce fil github)
1 2 3 4 5 6 |
apt update apt full-upgrade apt install linux-image-generic chmod -x /etc/grub.d/06_OVHkernel update-grub reboot |