Activer TLS avec proFTPd sous CentOS 7

Installation et configuration du chiffrement TLS pour le serveur FTP proFTPD.

Dans son utilisation classique le protocole FTP n’est pas sécurisé car il n’est pas chiffré, les données et même le mot de passe de session circulent en clair. Ce rapide tutoriel va servir de guide pour mettre en place un chiffrement TLS avec le serveur FTP proFTPd sur une machine sous CentOS 7.

Continuer la lecture de « Activer TLS avec proFTPd sous CentOS 7 »

Repartitionnement d’un VPS SSD gamme 2016 sous CentOS 7

Procédure de repartitionnement d’un VPS SSD sous CentOS 7 suite à un passage à l’offre supérieure.

Après trois serveurs dédiés Kimsufi d’OVH ces dernières années, j’ai décidé de faire des économies niveau budget tout en augmentant les performances en essayant leur offre VPS SSD. Et après les quelques tests effectués depuis une paire de semaines, il n’y a pas photo, les VPS même l’offre d’entrée de gamme (VPS SSD 1) offrent des performances meilleures que mon dernier Kimsufi SSD, même avec 2 fois moins de mémoire. Je pense que le gros goulot d’étranglement vient des processeurs Atom des Kimsufi d’entrée et de milieu de gamme, pas vraiment adaptés à une utilisation serveur. Coté VPS, on a beau être à la base sur des ressources système partagées, on reste sur du processing à base de Xeon.

Cette petite introduction faite, passons au sujet de ce billet, le repartitionnement du disque dur suite à un upgrade de l’offre, sans perte de données. En effet, après deux semaines de test sur le VPS SSD 1 et ses 10 Go de stockage, tous les sites migrés, j’ai fait la migration vers le VPS SSD 2 qui double la RAM et l’espace disque. Mais voilà, une fois l’offre à jour , il faut repartitionner cet espace disque car on reste avec les 10 Go utilisables du départ.

Continuer la lecture de « Repartitionnement d’un VPS SSD gamme 2016 sous CentOS 7 »

Récupération SFTP automatique sous Windows avec WinSCP

Script SFTP automatique d’un serveur GNU/Linux distant sous Windows avec les fonctionnalités de scripting de WinSCP.

Il y a quelque temps maintenant je suis passé à un serveur Kimsufi SSD, ce qui a bien augmenté ses performances  au détriment de la capacité de stockage. Mon plan de sauvegarde (du système et des sites hébergés) a donc été modifié pour garder moins de backups sur le serveur en supprimant les plus anciens. Suite à ce constat, j’ai décidé d’automatiser le téléchargement des backups sur ma machine locale, mais sous Windows on a pas facilement un rsync ou du ssh à porté de main. Après un peu de recherche j’ai découvert que le client FTP/SFTP WinSCP était facilement scriptable, ceci ajouté à une tâche planifiée, j’avais ma solution de download de sauvegardes sous Windows.

Le principe est très simple, nous allons écrire un script WinSCP qui sera appelé par un batch Windows.

Script WinSCP

Voici un exemple de scripting WinSCP, à mettre dans un fichier texte genre backup_ftp.txt  :

open sftp://username:xxxxxxx@monserveur.net/ 
    -hostkey="ssh-rsa 2048 fc:6d:bc:4d:76:9d:08:4e:7e:31:56:45:d9:a4:97:22"
cd /home/username/backups/
option transfer binary
get -neweronly *.tgz c:\Users\win-username\backups\
close
exit

 

Plutôt explicite non? Ligne par ligne :

  1. Ouverture d’une session SFTP sur le serveur distant.
  2. Déplacement dans le répertoire des fichiers à récupèrer.
  3. Quelques options de transfert.
  4. On récupère les nouveaux fichiers uniquement ayant l’extension TGZ avec la commande get
  5. On ferme la connexion.

Pour la partie hostkey de l’ouverture de session, WinSCP permet de facilement la trouver. Pour cela il faut se connecter sur le serveur, puis aller dans Session > Informations sur le serveur/protocole et dans le premier onglet, il suffit de recopier la valeur sous Empreinte digitale du serveur hôte.

Trouver la clé du serveur dans WinSCP
Trouver la clé du serveur dans WinSCP

 

 

 

 

 

 

 

 

 

 

Les scripts WinSCP permettent de faire beaucoup de choses, se référer à la liste des commandes disponibles pour avoir un aperçu exhaustif des possibilités.

Script CMD

Le script Windows va invoquer la commande winscp.exe  avec en option le chemin vers notre fichier de script, je l’ai nommé download_backups.cmd  :

"C:\Program Files (x86)\WinSCP\winscp.com" 
    /script=C:\Users\win-username\bin\backup_ftp.txt

 

C’est tout. Pour l’automatisation, il suffit de créer une tâche planifiée qui exécute notre script download_backups.cmd.

Plus tard nous verrons comment ajouter un log et envoyer le rapport par email en fin de récupération.

Installer un certificat Let’s encrypt pour Nginx et servir WordPress en https

Dans ce billet, voyons comment créer un certificat ssl avec Let’s encrypt et configurer le serveur web Nginx en HTTPS pour l’admin de Wordpress.

La folie Let’s encrypt fait des ravages, tout le monde y passe (même la Freebox!), en même temps c’est tout à fait naturel, pouvoir obtenir un vrai certificat SSL gratuit pour son site web, reconnu par les navigateurs sans message de sécurité, c’est plutôt sympa.

Je n’avais pas vraiment prêté attention à ce buzz au début, mais j’ai franchi le pas, d’ailleurs cet article vous présente un pas-à-pas de l’installation d’un certificat Let’s encrypt pour un serveur Nginx. Et spécialement pour les utilisateurs de WordPress, nous allons sécuriser la partie administration du CMS afin de laisser le site non crypté, car c’est toujours mieux pour les moteurs de recherche et la SEO.

Let’s encrypt

L’installation sous Fedora et consorts se fait très simplement avec dnf :

$ sudo dnf install letsencrypt

 

Lorsque l’installation est terminée, il y a plusieurs moyens de prouver la propriété d’un domaine et ainsi générer un certificat, dans notre cas nous utiliserons la méthode standalone qui a juste un petit point négatif, le serveur web (tout de moins le serveur tournant sur le port 80, dans mon cas c’est plutôt Varnish) doit être stoppé, car le script Let’s encrypt va démarrer son propre serveur web sur ce port (et le 443) afin de se répondre à lui-même et ainsi prouver la propriété du domaine.

Pour stopper Nginx sous Fedora 23 :

$ sudo systemctl nginx stop

 

On peut maintenant lancer le script Let’s encrypt pour vérifier le domaine. Il est possible de spécifier plusieurs domaines en les séparant par des virgules, par exemple pour le domaine nu et sa version avec www :

$ sudo letsencrypt --text --email fabien@feub.net \
--domains www.feub.net,feub.net \
--agree-tos --renew-by-default \
--standalone --standalone-supported-challenges \
http-01 certonly

 

Lorsque le script a terminé son exécution, il donne quelques informations sur le certificat créé, en particulier sur sa date d’expiration :

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.feub.net/fullchain.pem. Your cert will
expire on 2016-05-10. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.

 

Configurer Nginx avec SSL

Le certificat étant créé, on peut configurer le serveur web Nginx. Pour le tutoriel je suppose que votre configuration se situe sous /etc/nginx/nginx.conf.
Comme expliqué en introduction, le but ici est de n’avoir que l’admin de WordPress en HTTPS, c’est-à-dire uniquement https://feub.net/wp-admin (et https://feub.net/wp-login). Pour ceci, on va définir deux server blocks pour le même domaine, un qui servira les pages sur le port 80 et un pour les pages sur le port 443 (HTTPS) et sur le site normal on redirigera vers HTTPS tout ce qui arrive sur /wp-admin.

server {
        listen          80;

        server_name     feub.net;

        root            /var/www/html;
        index           index.php index.html index.htm;

        # Redirection de l'admin WordPress en HTTPS
        location ~ /wp-(?:admin|login) {
                return 301 https://$host$request_uri;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        # La configuration PHP
        include global/php.conf;
        include global/wordpress.conf;
        include global/things_not_logged.conf;
}

server {
        listen          443 ssl;

        server_name     feub.net;

        ssl_certificate     /etc/letsencrypt/live/www.feub.net/fullchain.pem;
        ssl_certificate_key    /etc/letsencrypt/live/www.feub.net/privkey.pem;

        root            /var/www/html;
        index           index.php index.html index.htm;

        # Redirect all other requests to HTTP.
        location / {
                return 301 http://$host$request_uri;
        }

        # Redirection de l'admin WordPress en HTTPS
        location ~ /wp-(admin|login) {
                # La configuration PHP
                include global/php.conf;

                try_files $uri $uri/ \1/index.php?$args;
        }
}

 

 

Vérification de la configuration Nginx et si tout est ok redémarrage du serveur web :

$ sudo nginx -t
$ sudo systemctl nginx start

 

WordPress

Pour terminer nous allons dire à WordPress d’utiliser HTTPS pour l’admin en ajoutant cette ligne dans le fichier de configuration wp-config.php :

define( 'FORCE_SSL_ADMIN', true );

On vérifie que l’accès au site se fait bien normalement en se rendant sur le site, puis on essaie l’admin de WordPress, on voit que l’on est redirigé sur https://feub.net/wp-login. Cela fonctionne.

Admin WordPress en https
Admin WordPress en https

 

 

 

 

 

 

 

Les certificats Let’s encrypt expirent après 90 jours, il faut donc penser à le renouveler avant la date indiquée lors de sa création.