MySQL/MariaDB : Déterminer la taille recommandée de innodb_buffer_pool_size

Rapide mémo pour déterminer la taille recommandée du buffer pour les tables utilisant le moteur de stockage InnoDB de MySQL. Par défaut après installation cette valeur est en général à 128 Mo, ce qui peut être bien bas pour de grosses bases de données.

La requête ci-dessous retourne la taille à renseigner pour la valeur de la variable innodb_buffer_pool_size :


SELECT 
	CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS 
FROM (
	SELECT 
		SUM(data_length+index_length) Total_InnoDB_Bytes
	FROM information_schema.tables 
	WHERE engine='InnoDB'
) A;

Il suffit alors de renseigner cette valeur dans le fichier de configuration /etc/my.cnf :

[mysqld]
innodb_buffer_pool_size=8G

Redémarrer MySQL/MariaDB :

$ sudo systemctl restart mariadb

Sécuriser Memcached pour éviter des attaques par amplification

J’utilisais Memcached depuis des années sans soucis. Jusqu’à ce début de semaine.

Il aura fallu une méchante attaque sur un serveur de production pour mettre celui-ci à genoux (et le site d’e-commerce sous Magento qu’il hébergeait) à cause d’un Memcached mal configuré.


Pour les détails techniques de ce type d’attaque par amplification visant Memcached, se reporter à cet article sur le blog de CloudFlare : Memcrashed – Major amplification attacks from UDP port 11211.

Sécuriser Memcached

Par défaut Memcached écoute sur toute les interfaces et sur le protocole UDP. Il faut donc désactiver UDP et le faire écouter seulement en localhost :

$ sudo vim /etc/sysconfig/memcached

Ajouter (ou adapter) ceci dans le champ OPTIONS :

OPTIONS="-l 127.0.0.1 -U 0"

Redémarrage de Memcached :

$ sudo systemctl restart memcached

Vérification que Memcached écoute bien seulement 127.0.0.1 en TCP :

$ sudo netstat -plunt
(...)
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 31938/memcached

Mettre en place un accès SFTP en jail chroot pour un groupe spécifique

Lorsque cela est possible, il est préférable d’utiliser le protocole SFTP pour effectuer des transferts de fichiers sur un serveur plutôt que du FTP classique. Je vous propose aujourd’hui un petit mémo pour mettre en place un accès SFTP avec utilisateurs chrootés.

L’exemple de base est de donner un accès au fichiers d’un serveur web qui seront situé sous /var/www, dans mon cas sous CentOS 7.


Configuration du SFTP

  • Créer un groupe pour le SFTP :
    $ sudo groupadd sftp_users
  • Ajouter un utilisateur (ici web) pour le SFTP :
    $ sudo useradd web
  • Ajouter un mot de passe à l’utilisateur web :
    $ sudo passwd web
  • Ajouter l’utilisateur web au groupe pour le SFTP et lui attribuer le répertoire par défaut :
    $ sudo usermod -g sftp_users web
    $ sudo usermod -d /var/www web
  • Éditer le fichier de configuration du daemon SSH sous /etc/ssh/sshd_config.
    • Commenter la ligne suivante :
      #Subsystem sftp /usr/libexec/openssh/sftp-server
    • Ajouter ce qui suit :
      Subsystem sftp internal-sftp
      
      Match Group sftp_users
      	X11Forwarding no
      	AllowTcpForwarding no
      	ChrootDirectory %h
      	ForceCommand internal-sftp
  • Redémarrer le service SSH :
    $ sudo systemctl restart sshd
  • S’assurer que les permissions sont correctes pour le chroot, le répertoire /var/www doit appartenir à root et uniquement éditable par le propriétaire.

Test de l’accès SFTP

On teste l’accès en SFTP :

$ sftp web@mon-serveur
web@mon-serveur's password:
Connected to mon-serveur.
sftp> ls -l
drwxrwxr-x 2 0 48 4096 Oct 19 20:39 cgi-bin
drwxrwxr-x 2 0 48 4096 Mar 29 06:12 html
sftp> pwd
Remote working directory: /
sftp>

Test de l’accès SSH

L’accès ssh quant à lui est bien refusé :

$ ssh web@mon-serveur
web@mon-serveur's password:
This service allows sftp connections only.
Connection to mon-serveur closed.

Sécuriser un site avec une authentification HTTP sous Nginx

Si vous avez besoin d’avoir une zone sécurisée sur un espace web sans vouloir déployer un système de gestion d’utilisateurs, l’authentification HTTP reste un moyen simple et rapide à mettre en place.

Voici la procédure en quelques points pour mettre en place une authentification HTTP avec Nginx sous CentOS 7.


Pour générer un fichier d’utilisateurs .htpasswd propre à une authentification HTTP, il nous faut l’outil du même nom qui est fourni par Apache. On n’a pas besoin d’Apache donc, juste des outils qui vont avec. Sous CentOS :

$ sudo yum install httpd-tools

Ensuite, il suffit de créer un utilisateur dans le répertoire voulu :

$ sudo htpasswd -c /etc/nginx/.htpasswd nom_utilisateur

On renseigne et vérifie le mot de passe.

Pour terminer, dans la configuration Nginx, à l’intérieur d’un server, ajouter :

auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;

Il suffit de tester puis si tout est ok de redémarrer Nginx :

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx

C’est terminé.

Authentification HTTP Nginx
Authentification HTTP Nginx