Testez la configuration SSL de vos serveurs avec ssllabs

Article publiée le 23 Mai 2016

 

Depuis pas mal de temps je bosse sur la configuration SSL des serveurs web. Ayant rejoint une entreprise dont la préoccupation sur la sécurité est forte j’ai pu connaitre l’existence de petits outils permettant de faire un check complet de la configuration SSL (HTTPS) de votre site Web.

Cet outil est vraiment bien et peu notamment vous servir en cas d’audit pour prouver que la configuration de vos serveurs web est sérieuse.

1) Qualys SSL LABs

Le plus connu et réputé Qualys SSLLABS. Via cette page web vous pouvez avoir un diagnostic complet de votre site avec une note ainsi que des indications sur ce qui peut être amélioré:

2) API SSL Labs

Pour ceux qui sont vraiment à fond dans la configuration SSL de leurs serveurs web, je leur propose une petite solution afin d’automatiser les checks de leurs site. Pour ma part un script va vérifier chaque jour que les serveurs webs de mon employeur aient la note A+.

Afin d’éviter de réinventer la roue, un petit outil opensource en ligne de commande existe:

https://github.com/ssllabs/ssllabs-scan

Ci dessous la procédure pour l’installer

  • Téléchargez le package
  • Assurez vous d’avoir les outils de compilations (make, gcc etc…), pour les utilisateurs de Debian faites un « apt-get install build-essential » et vous serez tranquille 😉
  • Assure vous également que golang-go soient installé:
    • Sous debian: apt-get install golang-go
    • RedHat/Centos: Installez les dépots EPEL  et installez le paquet golang (yum install epel-release && yum install golang)
  • Enfin il ne vous reste plus qu’à compiler avec la commande « make » à la racine du répertoire contenant les sources de ssllabs-scan
  • Enfin lancer le binaire ssllabs-scan <URL>:
  • Une fois l’exécution terminée un fichier avec le résultat complet de votre test sera créé.

3) Scripts d’automatisations

Enfin, j’ai conçu un petit script permettant de monitorer automatiquement la note et d’envoyer une alerte si jamais la note que vous désirez et inférieur.

#!/bin/bash

BASEDIR=$(dirname $(readlink -f $0))

SSL_LABS_BINARY=$BASEDIR/bin/ssllabs-scan
SSL_LABS_CONF=$BASEDIR/conf/hosts.conf
SSL_LOGS_DIR=$BASEDIR/logs

unset HTTP_PROXY

if [ ! -f $SSL_LABS_BINARY ] || [ ! -f $SSL_LABS_CONF ]; then
echo « ERREUR: Arret du script, l’un des fichiers n’est pas présent »
exit 1
fi

if [ ! -d $SSL_LOGS_BINARY ]; then
mkdir $SSL_LOGS_DIR
fi

audit_securite ()
{
LOGNAME= »`date +%Y%m%d` ».log
$SSL_LABS_BINARY –hostfile $SSL_LABS_CONF >> $SSL_LOGS_DIR/$LOGNAME
if [ $? -eq 0 ]; then
echo « Rapport de securite généré et disponible dans $SSL_LOGS_DIR/$LOGNAME »
else
echo « Erreur durant la génération du rapport » >> $SSL_LOGS_DIR/$LOGNAME
mail -a « from:ssllabs » -s « Erreur de génération du rapport SSLLABS » votremail@votredomaine.com <<< ‘Bonjour, une erreur a été detectée durant la génération quotidienne du rapport SSLLABS.’
exit 1
fi
}

rapport_securite ()
{
LOGNAME= »`date +%Y%m%d` ».log
RAPPORT_TEMP=$(grep ‘grade’ $SSL_LOGS_DIR/$LOGNAME | grep -v ‘gradeTrustIgnored’)
NOTE_FINALE=$(echo $RAPPORT_TEMP | cut -d « : » -f2 | cut -c3-4)

if [ « $NOTE_FINALE » != « A+ » ]; then      # Changer ici pour la note désirée
mail -a « from:ssllabs » -s « WARNING : NOTE SSLLABS INFERIEURE A A+ » votremail@votredomaine.com <<< ‘Bonjour, la note SSLLABS est inferieure a A+, Merci de verifier la conf Apache !’
fi
}

audit_securite
rapport_securite

Dans le fichier hosts.conf, indiquez juste l’URL du site que vous voulez monitorer

 




Comprendre les commandes SHELL avec explainshell

Article publiée le 24 Avril 2014

 

Toujours dans ma foulé des outils de scripting SHELL je vous  propose aujourd’hui un super outil qui s’appelle ExplainShell.

Ce site accessible depuis une interface web via l’url : http://explainshell.com/  vous explique la signification des commandes shell les plus complexes.

Finit les longs moment de solitudes devant un script SHELL conçu par un de vos collègue utilisant des commandes incompréhensible !!! 🙂

 

 

 

Enjoy!

 

 

 

 

 

 




Vérifier vos scripts Shell avec ShellCheck

Article publiée le 16 Avril 2014

 

Une petite découverte forte sympathique!

Un collègue vient de me montrer un outil absolument génial qui permet de vérifier vos scripts shell (Variable non initialisée, erreur de synthaxe etc…) et je dois dire que cet outil s’est montré très performant voir bleuffant!

Cette outil s’appelle ShellCheck.

Vous avez la version online ici disponible sur ce site: http://www.shellcheck.net/

De plus il est également possible de télécharger une version local installé sur un de vos serveurs. Vous pourrez donc en une commande checker vos scripts!

Pour cela allez sur le site pour récupérer les sources: https://github.com/koalaman/shellcheck

 

– Dézipper l’archive zip

unzip -e <nom de l’archive>

– Aller dans le répertoire contenant les sources

– Installez ensuite les dépendances nécessaires:

 

Sous Debian:

– apt-get install ghc libghc-parsec3-dev lightghc-json-dev lightghc-regex-compat-dev libghc-quickcheck2-dev pandoc

 

Sous Centos/RedHat

– Installez les dépots EPEL. (tutoriel disponible ici)

– yum install ghc ghc-parsec-devel ghc-QuickCheck-devel ghc-json-devel ghc-regex-compat-devel pandoc

Le package pandoc n’est pas indiqué dans la documentation officielle, il est cependant nécessaire de l’installer!

 

– Il ne reste plus qu’à compiler:

make

– Copier le binaire dans /usr/bin

La commande shellcheck est maintenant disponible.

 

Faisons un petit test  avec un script contenant une erreur (par de fermeture de la condition if avec fi).

Contenu du script

– Vérifions avec shellcheck le script:

– Nous allons maintenant tester shellcheck avec une erreur un peu plus subtile (variable initialisé mais non utilisée):

Contenu du script

Résultat avec shellcheck:

Shellcheck  relève l’erreur!(en rouge les erreurs critiques, en vert les erreurs non critiques)

Enjoy! 🙂

 

 

 

 

 

 

 

 

 

 

 




Afficher la liste des processus qui utilisent le SWAP

Article publiée le 9 Octobre 2013

Il y a quelque jour j’ai eu un gros problème de SWAP sur une de mes machines Linux. Mon collègue a trouvé un script très utile qui permet d’afficher tous les processus utilisant le SWAP:

 

 

#!/bin/bash
# Get current swap usage for all running processes
# Usage: ./getswap.sh | sort -n -k 5
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
PROGPATH=`cat /proc/$PID/cmdline`
for SWAP in `grep Swap $DIR/smaps 2&gt;/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME - $PROGPATH)"
let OVERALL=$OVERALL+$SUM
SUM=0

done
echo "Overall swap used: $OVERALL"

 

 

Si vous voulez connaitre les processus qui SWAP le plus:

./getswap.sh | sort -n -k 5

 

Exemple de résultat du scripts.:

Enjoy 🙂

Ce script ne fonctionne que pour les distributions RedHat/Centos/Fedora. Une petite modif sera certainement nécessaire si vous êtes utilisateurs d’une autre distrib 😉

 




Création utilisateur restreint

Article publié le 12 Mai 2013

 

Lors d’une de mes missions on m’a demandé de créer un compte invité spécial avec la possibilité de lui autorisé ou non l’utilisation de tel ou tel commande. C’est une problématique qui se pose souvent en entreprise. Comment donner accès à un utilisateur sans que celui ci le pourrisse avec des commandes grep ou autre qui peuvent consommer toute la mémoire???

Le script ci dessous répond à cette problématique:

 

 

#!/bin/bash
v
# Ce script permet de restreindre les commandes sur le compte invite
#il est valide uniquement pour les distributions DEBIAN 4, DEBIAN 5 et DEBIAN 6 et REDHAT 5
#Ce script doit être executer depuis le répertoire /etc
cd /etc
##########################RECHERCHE DU COMPTE INVITE#######################
grep ‘invite’ passwd
retval=$?
if [ « $retval » -ne 0 ]; then
useradd  -m -d /home/invite invite
echo « invite:invite » | chpasswdfi
#############################################################################if [ -f « issue » ]; then###############################PARTIE DEBIAN 5 et 6################################version=$(cat issue)
if [ « $version » = « Debian GNU/Linux 6.0 \n \l » ] || [ « $version » = « Debian GNU/Linux 5.0 \n \l » ];
then
cp /bin/bash /bin/guestbash
usermod -s /bin/guestbash invite
groupmod -g 9999 invite;usermod -u 9999 -g 9999 invite
usermod -G invite -a invitecd /home/invite
echo « export PATH=/usr/local/guestbash » >> .profile
mkdir /usr/local/guestbash
chown -R root:root /home/invite && chmod 511 /home/invite
chmod 444 /home/invite/.profile
cd /usr/local/guestbash
chown invite  /home/invite###########################Lien Symbolique Commande autorise#####################
ln -s /usr/bin/alias alias
ln -s /usr/bin/basename basename
ln -s /bin/cat cat
ln -s /usr/bin/clear clear

ln -s /bin/date date
ln -s /usr/bin/diff diff
ln -s /usr/bin/env env
ln -s /bin/echo echo
ln -s /usr/bin/head head
ln -s /usr/bin/host host
ln -s /bin/less less
ln -s /bin/ls ls
ln -s /usr/bin/man man
ln -s /bin/more more
ln -s /bin/nano nano
ln -s /bin/netstat netstat
ln -s /usr/bin/nslookup nslookup
ln -s /bin/ping ping
ln -s /bin/pwd pwd
ln -s /bin/sed sed
ln -s /usr/bin/size size
ln -s /usr/bin/tail tail
ln -s /usr/bin/telnet telnet
ln -s /usr/bin/top top
ln -s /usr/bin/traceroute traceroute
ln -s /usr/bin/vi vi
ln -s /usr/bin/tty tty
ln -s /usr/bin/vim vim
ln -s /usr/bin/whoam whoami
#################################################################################
echo « La procedure DEBIAN 5 / DEBIAN 6 Terminée »
fi#############################FIN PARTIE DEBIAN 5 et 6#############################################################PARTIE DEBIAN 4 OU RED HAT######################################if [ « $version » = « Debian GNU/Linux 4.0 \n \l » ] || [ -f « redhat-release » ];
thencp /bin/bash /bin/guestbash
usermod -s /bin/guestbash invite
groupmod -g 9999 invite;usermod -u 9999 -g 9999 invite
usermod -G invite -a invite
echo « invite:invite » | chpasswdcd /home/invite
echo « export PATH=/usr/local/guestbash » >> .bash_profile
mkdir /usr/local/guestbash
chown -R root:root /home/invite && chmod 511 /home/invite
chmod 444 /home/invite/.bash_profile
cd /usr/local/guestbash
chown invite  /home/invite

###########################Lien Symbolique Commande autorise#####################ln -s /usr/bin/alias alias
ln -s /usr/bin/basename basename;
ln -s /bin/cat cat
ln -s /usr/bin/clear clear
ln -s /bin/date date
ln -s /usr/bin/diff diff
ln -s /usr/bin/env env
ln -s /bin/echo echo
ln -s /usr/bin/head head
ln -s /usr/bin/host host
ln -s /bin/ls ls
ln -s /bin/less less
ln -s /usr/bin/man man
ln -s /bin/more more
ln -s /bin/nano nano
ln -s /bin/netstat netstat
ln -s /usr/bin/nslookup nslookup
ln -s /bin/ping ping
ln -s /bin/pwd pwd
ln -s /bin/sed sed
ln -s /usr/bin/size size
ln -s /usr/bin/tail tail
ln -s /usr/bin/telnet telnet
ln -s /usr/bin/top top
ln -s /usr/bin/traceroute traceroute
ln -s /usr/bin/vi vi
ln -s /usr/bin/tty tty
ln -s /usr/bin/vim vim
ln -s /usr/bin/whoam whoami
#################################################################################echo « La procedure REDHAT / DEBIAN 4 Terminée »
echo « Enjoy 😉 »#############################FIN PARTI DEBIAN 4 et RED HAT 5 ######################################################################################################################
elseecho « BYE 🙂 »
fi
##############################FIN DU SCRIPT##########################################
fi




Script de vérification de connectivité

Article publié le 19 Mai 2013 
Ce bout de script pourra vous être très utile pour vérification de connectivité d’une machine distante avant d’effectuer un traitement à distance:
#!/bin/bash
declare -a HOSTS=(
« <Nom Host> »
)CONF_HOSTS= »OK »
for HOST in ${HOSTS[*]};
do
#Test de connectivité ssh :
#echo « ssh root@ »$HOST »… »
ssh root@ »$HOST » « ls / » 1>/dev/null 2>&1 || { echo « (EE) Impossible de se connecter à \ » »$HOSTS »\ » » && CONF_HOSTS= »KO »; }
T=0
for ALL_HOSTS in ${HOSTS[*]};do
if [ « $HOST » = « $ALL_HOSTS » ];then T=$(($T+1));fi
done
if [ $T -gt 1 ];then
echo « (EE) La machine \ » »$HOSTS »\ » est mentionnée $T fois dans la variable \ »HOSTS\ ». »
CONF_HOSTS= »KO »
fiif [ « $CONF_HOSTS » != « OK » ];then echo « (EE) Abandon. » && exit 1;fi