17 Déc 2018

Consul du pauvre via /etc/hosts pour infrastructure multi-machines sous Terraform

Category: Administration de serveur,Tutorielscduv @ 03:43

Si vous montez une infrastructure de plusieurs machines communiquant en réseau (micro-services, cluster de base de données, frontend et backend, etc.) il faut que chacune connaisse l'adresse IP de ses "collègues".

Globalement, dans la vie de tous les jours, l'adresse IP a été "remplacée" par des FQDN (noms de domaine). Et même dans une infrastructure non publique et entièrement sous contrôle, l'adresse IP devient rapidement problématique pour différentes raisons :

  • Elle n'est pas toujours parlante : On peut faire une erreur à la saisie et ne pas le remarquer ("server-sql.myapp.net" est mieux que 10.3.45.9... Oups, c'était 10.3.85.9 en réalité)
  • Elle est relativement figée : Si une nouvelle machine vient à remplacer une précédente (ou si un composant change de machine), généralement la nouvelle ne peut pas récupérer l'adresse IP de l'ancienne et donc les composants de l'infrastructure qui utilisant l'ancienne adresse doivent être modifiés pour leur donner la nouvelle adresse IP.

A mon avis, toute infrastructure de plus de 3 composants devrait dépendre de FQDN.

Une solution simple est le fichier texte /etc/hosts (C:\Windows\System32\drivers\etc\hosts sous Windows) qui permet d'associer une adresse IP à un FQDN.
L'autre solution est d'utiliser un serveur DNS, qu'il soit public (celui de votre registraire/registrar ) ou interne (BIND, Dnsmasq, ...) que les composants requêterons. Il existe des logiciels de Service Discovery tel que Apache ZooKeeper, Consul et etcd qui font exactement ça (mais en plus pratique).

Quand on débute un petit projet, on a pas forcément envie de faire appel à ce genre d'outil aussi pertinents soient-ils (pour des raisons de temps, de coût, de simplicité, etc.).

Si vous utilisez Terraform pour monter cette infrastructure, je vais vous montrer une petite astuce pour remplir le fichier /etc/hosts de tout vos composants de manière automatique. Poursuivre la lecture"Consul du pauvre via /etc/hosts pour infrastructure multi-machines sous Terraform"


25 Sep 2014

Shellshock : Faille de sécurité CVE-2014-6271 dans Bash

Category: Administration de serveur,GNU/Linuxcduv @ 15:31

Ces derniers jours une faille de sécurité a été découverte dans l’interpréteur de commande shell Bash.
Identifiée CVE-2014-6271 et surnommée Shellshock.
Assez grave, et même considérée plus importante que Heartbleed (datant de début 2014) par certains, ce bug peut déjà être exploité pour accéder à un shell sur vos serveurs à distance (en passant par votre serveur Web par exemple).

Poursuivre la lecture"Shellshock : Faille de sécurité CVE-2014-6271 dans Bash"

Étiquettes : , , ,


21 Juin 2014

Créer ses propres images de base pour Docker

Category: Administration de serveur,Tutorielscduv @ 03:37

Si vous utilisez Docker, il y a de fortes de chances que les images de bases présentes sur le Hub Docker vous convienne (debian, ubuntu, centos, etc.).
Mais il se peut également que vous ne trouviez pas l'image avec l'OS dont vous avez besoin (Mandrake, . Ou alors que les normes de sécurité de votre activité vous impose de construire vous même vos images afin d'être sûr du contenu.

Je vais vous montrer comment créer sa propre image Docker à partir de rien (sans FROM)

Poursuivre la lecture"Créer ses propres images de base pour Docker"

Étiquettes :


12 Juin 2014

Notification par SMS chez Free Mobile via API avec un client Shell

Category: Administration de serveur,Domotiquecduv @ 01:16

Hier, l'opérateur Free Mobile a annoncé un nouveau service gratuit pour ses abonnés : le service d'envoi de SMS via une API.

Pratique et réclamé depuis un moment (même payant) ce service permet d'envoyer des SMS à son propre numéro d'abonné Free Mobile (et uniquement à celui-ci) depuis des appareils connectés tels que les lapin Karotz, un NAS, un serveur (de domotique par exemple).

Poursuivre la lecture"Notification par SMS chez Free Mobile via API avec un client Shell"


21 Sep 2013

logrotate : Erreur "gzip: stdin: file size changed while zipping"

Category: Administration de serveur,Debiancduv @ 00:16

Après avoir installé et configuré logrotate sur son serveur il peut arriver de recevoir des courriels de cron contenant le message (visiblement d'erreur) suivant :

/etc/cron.daily/logrotate:
gzip: stdin: file size changed while zipping

N'arrivant pas à chaque fois et sans vraiment plus d'informations que ça : on recevra ce message encore quelques fois avant de se décider à faire quelque chose...

Poursuivre la lecture"logrotate : Erreur "gzip: stdin: file size changed while zipping""

Étiquettes : , ,


23 Mai 2013

Plusieurs serveurs virtuels Apache par nom (host-based) en SSL

Category: Administration de serveur,GNU/Linuxcduv @ 13:27

Les serveurs virtuels Apache permettent d'héberger, sur une même machine (et sur une même installation d'Apache) plusieurs sites Internet différents (ayant chacun leur propre FQDN). Il existe deux variantes de ce système bien pratique pour économiser sur les serveurs web :

  • Par IP (IP-based) : Apache recherche le <VirtualHost> ayant le couple adresse IP et port (généralement 80) du client (le navigateur)
  • Par nom (host-based, name-based) : Le serveur regarde l'entête Host (eg. Host: domaine.tld) reçue du client et recherche le <VirtualHost> où figure ce FQDN (soit dans ServerName, soit dans ServerAlias). Cette technique peut être combiné avec un choix par IP, mais généralement on utilise le wildcard * (eg. <VirtualHost *:80>) pour fonctionner avec n'importe quelle adresse IP)

Voir la documentation Apache pour plus d'informations ce sujet, notamment la manière dont Apache décide quel serveur virtuel va traiter la demande.
C'est souvent la variante par nom qui est utilisée car plus simple (pas besoin d'ajouter des interfaces réseau au serveur pour avoir de nouvelles adresses IP : l'aiguillage se passe au niveau DNS), plus souple (il est assez facile de configurer/modifier une zone DNS) et moins onéreux (l'achat d'adresses IP est plus cher qu'un nom de domaine -qu'on devra de toutes façon acquérir-, d'autant plus si c'est des IPv4).

En revanche, le host-based pose problème lors de l'hébergement de sites en https:// car l'entête Host n'est pas envoyé au serveur avant d'avoir établi une connexion sécurisée, or la négociation SSL préalable à cette connexion requiert un certificat, un certificat qui dépend du FQDN du site (il faut qu'il corresponde au CN du certificat) : c'est un peu l'histoire de la poule et de l’œuf où l'on a besoin de l'un pour avoir et l'autre de l'autre pour avoir l'un...

Je vais vous montrer comment faire, sous Apache 2.2.12 et avec OpenSSL 0.9.8f (minimums requis pour gérer le Server Name Indication (SNI) qui pallie l'absence d'entête Host) pour avoir plusieurs VHost par nom (name-based) en HTTPS, sur une seule adresse IP et sans avoir l'avertissement "_default_ VirtualHost overlap on port 443, the first has precedence"

Poursuivre la lecture"Plusieurs serveurs virtuels Apache par nom (host-based) en SSL"

Étiquettes : , ,


06 Mar 2012

Renommer un noeud Munin sans perdre son historique

Category: Administration de serveur,Debiancduv @ 15:32

Il arrive suite à migration ou erreur, de vouloir renommer une machine et, ce, sans perdre son historique de monitoring Munin. Je vous propose donc le script suivant, librement inspiré de celui de Yannick Warnier sur le blog BeezNest.

#! /bin/bash

# Moves RRD files from /var/lib/munin/$OLD_DOMAIN/ to /var/lib/munin/$NEW_DOMAIN/ by renaming files as required by munin.
# (Also does the same move operation for HTML files in /var/www/munin)
# 
# @author DUVERGIER Claude
# @version 2012-03-06
# @see http://blog.claude.duvergier.fr/2012/03/renommer-un-noeud-munin-sans-perdre-son-historique


# Move operation config (will obviously be changed anytime a move is required):
OLD_DOMAIN='localdomain'
OLD_HOSTFQDN='localhost.localdomain'
NEW_DOMAIN='subdom.company.com'
NEW_HOSTFQDN='mailserver.subdom.company.com'


# System config (shouldn't often be changed):
MUNIN_USER='munin'
MUNIN_GROUP='munin'
MUNIN_RRDDIR='/var/lib/munin'
MUNIN_HTMLDIR='/var/www/munin'


# DEBUG:
#for file in $MUNIN_RRDDIR/$OLD_DOMAIN/$OLD_HOSTFQDN-*.rrd; do echo `echo $file | sed "s,$OLD_HOSTFQDN,$NEW_HOSTFQDN," | sed "s,$MUNIN_RRDDIR/$OLD_DOMAIN/,$MUNIN_RRDDIR/$NEW_DOMAIN/,"`; done
#for file in $MUNIN_HTMLDIR/$OLD_DOMAIN/$OLD_HOSTFQDN*; do echo `echo $file | sed "s,$OLD_HOSTFQDN/$NEW_HOSTFQDN," | sed "s,$MUNIN_HTMLDIR/$OLD_DOMAIN/,$MUNIN_HTMLDIR/$NEW_DOMAIN/,"`; done


# RRD files :
mkdir -p "$MUNIN_RRDDIR/$NEW_DOMAIN"
chown $MUNIN_USER:$MUNIN_GROUP "$MUNIN_RRDDIR/$NEW_DOMAIN"
for file in $MUNIN_RRDDIR/$OLD_DOMAIN/$OLD_HOSTFQDN-*.rrd; do mv $file `echo $file | sed "s,$OLD_HOSTFQDN,$NEW_HOSTFQDN," | sed "s,$MUNIN_RRDDIR/$OLD_DOMAIN/,$MUNIN_RRDDIR/$NEW_DOMAIN/,"`; done


# HTML files :
mkdir -p "$MUNIN_HTMLDIR/$NEW_DOMAIN"
chown $MUNIN_USER:$MUNIN_GROUP "$MUNIN_HTMLDIR/$NEW_DOMAIN"
if [ -d "$MUNIN_HTMLDIR/$OLD_DOMAIN/$OLD_HOSTFQDN" ]; then # Each host has it's own sub-directory ($MUNIN_HTMLDIR/domain/host.domain/...)
	mv "$MUNIN_HTMLDIR/$OLD_DOMAIN/$OLD_HOSTFQDN" "$MUNIN_HTMLDIR/$NEW_DOMAIN/$NEW_HOSTFQDN"
else # Files of different hosts are stored in the same domain directory ($MUNIN_HTMLDIR/domain/host.domain-...)
	for file in $MUNIN_HTMLDIR/$OLD_DOMAIN/$OLD_HOSTFQDN-*; do mv $file `echo $file | sed "s,$OLD_HOSTFQDN,$NEW_HOSTFQDN," | sed "s,$MUNIN_HTMLDIR/$OLD_DOMAIN/,$MUNIN_HTMLDIR/$NEW_DOMAIN/,"`; done
fi

Penser à couper/désactiver le cron et le daemon Munin avant d'exécuter le script. Il faut aussi bien entendu modifier le fichier de configuration déclarant les noeud Munin pour y mettre le nouveau nom/FQDN du noeud.

Il a été testé sur Debian 5.0 et 6.0 mais est suffisamment générique/configurable pour fonctionner sur d'autres distributions Linux.


12 Juin 2011

mRemoteNG : Gestionnaire PuTTY avec onglet pour connexions distantes SSH

Jusqu'à il y a quelques jours, j'utilisais PuTTY Connection Manager pour gérer mes connexions SSH à différents serveurs.
Il s'agit d'un logiciel qui permet d'utiliser PuTTY dans des onglets et d'automatiser la phase d'authentification/connexion car il saisit automatiquement les identifiants que vous aurez configuré.

Poursuivre la lecture"mRemoteNG : Gestionnaire PuTTY avec onglet pour connexions distantes SSH"

Étiquettes : , , ,


09 Avr 2011

Séparer ou filtrer les logs de CRON

Category: Administration de serveur,Tutorielscduv @ 01:28

Il est, à mon avis, utile d'avoir tous les logs des différentes cronjobs dans un fichier spécifique. Voici comment faire (sous Debian avec rsyslog).

Poursuivre la lecture"Séparer ou filtrer les logs de CRON"

Étiquettes : ,