Puppet 5, Comprendre et interconnexion agent – serveur

logo puppet

5 décembre 2018 | Posted in puppet | By

Vous avez maintenant une installation de puppet accouplé à l’interface web Foreman. (voir le tutorial ici).
Après avoir fait un petit point sur ce que fait puppet et ses principes de fonctionnement, nous allons maintenant voir comment rajouter un ordinateur que vous voulez gérer dans votre infrastructure Puppet. Nous verrons aussi rapidement les commandes principales du Puppet server.

Principe de Base de Puppet

Puppet c’est simple. Nous sommes sur le principe de base client/serveur. Le serveur étant le puppetserver, les clients sont les puppet-agent qui sont installés sur les ordinateurs ou serveurs à configurer, on les appelles aussi les nodes.

Le puppet-agent discute avec le puppetserver de manière crypter à l’aide d’un certificat propre à chaque node. Il en découle que lors de l’installation du Puppet agent, au premier lancement vous aurez un message d’erreur, il faudra d’abord valider la demande de certificat auprès du Puppetserver. Il en découle aussi que si vous réinstallez le Puppet agent après une réinstallation de système d’exploitation, il faudra révoquer l’ancien certificat pour accepter le nouveau.

L’agent Puppet embarque avec lui une couche logiciel qui s appelle Facter. Cet Outil va faire un état des lieux et mettre à disposition de nombreuses informations sous forme de variable. Le gros intérêt est que nous allons pouvoir grâce à ces variables scripter nos installations pour les rendre modulables suivant la machines.

Dans le Puppetserver, nous pouvons définir des environnements qui représentent par exemple des services (compta, bureau d’étude, serveur) en production ou en phase de test. L’agent Puppet lors de son installation sera configuré pour être raccordé à un environnement.

Chaque environnement dispose de ses manifests, ceux sont les fichiers qui décrivent l’état dans lequel le node doit se trouver. Lorsque vous installer l’agent vous définissez l’environnement auquel vous rattachez votre node. A chaque lancement, l agent va demander au Puppetserver l’état dans lequel il doit se trouver , le comparer grâce à Facter et appliquer les modifications.

Puppet peut :

  • installer un logiciel ou le désinstaller
  • installer une imprimante réseaux
  • modifier des fichiers textes
  • gérer des utilisateurs, groupes et acl
  • modifier des bases de registres
  • déposer des fichiers

Pour gérer tout cela, le Puppetserver se base sur des modules, la liste des modules installables est disponible ici : liste des modules puppet (en Anglais)

Ajout d’un ordinateur

Afin de télécharger la bonne version de l’agent, connectez vous sur votre serveur Puppet :

puppet status
vous devriez avoir un résultat comme suit :

{
"is_alive": true,
"version": "5.5.8"
}

Nous allons donc télécharger l’agent pour la version 5.5.8.

Sous Windows

Lien pour télécharger votre agent puppet : https://downloads.puppetlabs.com/windows/puppet5/
Lien vers la documentation en anglais : https://puppet.com/docs/puppet/5.5/install_windows.html

Après avoir télécharger votre installeur en 32 ou 64 bits, voici les etapes :

next installation puppet agent windows

licence installation puppet agent windows

1 on accepte, 2 suivant

parametre installation puppet agent windows

1 url de votre puppet master , 2 suivant

installation puppet agent windows

fin installation puppet agent windows

Voila votre agent est installé, mais ce n’est pas encore fini.

Nous devons maintenant faire le nécessaire pour le certificat.

Pour cela lancer une première fois l agent Puppet

lancement puppet agent windowsVous aurez alors ce résultat :

puppet agent certificat nokComme vous pouvez le voir, pas de certificat trouvé.

Il faut néanmoins faire cette étape qui permet au Puppetserver de savoir qu’un agent est en attente de validation.

Suivez l’étape Autorisation du certificat

Lorsque cela est fait relancer votre Puppet agent, vous aurez alors ce résultat :

puppet agent cert ok

Le fichier de configuration de l’agent se trouve  par défaut:
C:\ProgramData\PuppetLabs\puppet\etc\puppet.conf
Vous pourrez y définir votre environnement pour cet agent, il est par défaut sur production.

Sous Linux

Lien vers la documentation en anglais : https://puppet.com/docs/puppet/5.5/install_linux.html

Tout comme pour le serveur on commence par rajouter le dépôt Puppet :

cd && wget https://apt.puppetlabs.com/puppet5-release-stretch.deb
dpkg -i puppet5-release-stretch.deb

Le fichier sources pour apt est installé nous allons maintenant faire en sorte que nous soyons bien sur Puppet version 5.

vim /etc/apt/sources.list.d/puppet.list

changez :
deb http://apt.puppetlabs.com stretch puppet
en
deb http://apt.puppetlabs.com stretch puppet5

On installe le paquet puppet-agent
apt update && apt install puppet-agent

On ajoute maintenant à notre terminal le PATH pour l’exécutable Puppet.
echo "PATH=\$PATH:/opt/puppetlabs/puppet/bin" >> ~/.bashrc
source .bashrc

Nous devons maintenant configurer notre agent puppet :

Éditez le fichier /opt/puppetlabs/puppet/puppet.conf et coller ceci à la fin :

[main]
certname = nom.machine
server = url.puppetserver
environment = production

Modifiez les éléments en gras suivant votre configuration.
Nous lancons maintenant la génération du certificat :
puppet agent --test
Voici le résultat :

Suivez l’étape Autorisation du certificat

Relancez la dernière commande :
puppet agent --test

puppet agent debian test ok

Autorisation du certificat

Comme je vous l’expliquez précédemment il faut maintenant autoriser le certificat . Depuis le serveur puppet, tapez ceci pour voir les certificats en attente de validation :

puppet cert list
vous aurez alors ce résultat :

puppet cert listOn voit que nous avons une machine w7-test-ibe en attente.

Nous allons la rajoutez

puppet cert sign w7-test-ibe
puppet cert sign
Voila votre agent est maintenant opérationnel.

Read More...

Installation Puppet et Foreman sous debian Stretch

logo puppet

3 décembre 2018 | Posted in puppet | By

Vous cherchez à automatiser vos déploiements DevOps et la gestion de votre parc informatique rapidement, puppet est l’outil qu’il vous faut. Je vous laisse le soin de chercher sur internet pour mieux comprendre les possibilités de software.

Puppet en version opensource n est pas fourni avec une interface web de gestion, c est pour cela que dans ce tutorial nous allons déployé puppet grace à foreman.

Il est à noté qu’a leur actuel, foreman ne supporte puppet que dans sa version 5

Préambule

C’est parti, comme d’habitude nous allons partir d’un debian stretch 64 bits from scratch.
Nous allons installer simplement 3 plugins de base pour travailler.

apt update
apt install vim ca-certificates certbot

Installation

En tout premier lieu nous allons installer et configurer le dépot puppet. Attention le dépôt va être configuré pour utiliser la dernière version de puppet c’est à dire la 6. Nous devrons donc le modifier.

cd && wget https://apt.puppetlabs.com/puppet5-release-stretch.deb
dpkg -i puppet5-release-stretch.deb

Le fichier sources pour apt est installé nous allons maintenant faire en sorte que nous soyons bien sur puppet version 5.

vim /etc/apt/sources.list.d/puppet.list

changez :
deb http://apt.puppetlabs.com stretch puppet
en
deb http://apt.puppetlabs.com stretch puppet5

Maintenant nous configurer les dépôts de foreman.

echo "deb http://deb.theforeman.org/ stretch 1.20" | tee /etc/apt/sources.list.d/foreman.list
echo "deb http://deb.theforeman.org/ plugins 1.20" | tee -a /etc/apt/sources.list.d/foreman.list
wget -q https://deb.theforeman.org/pubkey.gpg -O- | apt-key add -

Avant de lancer l’installation, nous devons vérifier deux points importants :

  • L’installation va générer un certificat SSL, pour cela il faut que le nom de domaine que vous allez utilisez soit bien dans le fichier /etc/hosts et ne ping pas sur l’adresse ip 127.0.1.1.
    Pour cela on test comme ceci :
    ping $(hostname -f)
    Si ce n’est pas le cas modifier votre fichier /etc/hosts afin de cela corresponde.
    exemple
    178.33.44.78 foreman.site.com foreman
    et le fichier hostname /etc/hostname
    foreman.site.com
  • si votre système est en français il faut changer les locales, en effet foreman à cause de Postgrel génère des erreurs si le système n’est pas en en_US.
    dpkg-reconfigure locales
    et sélectionnez en_US.UTF8 et en faire la langue par défaut.

Voila maintenant nous pouvons lancer l’installation, nous commencons par installer l’installeur qui va de plus mettre en place les paquets nécessaire en prérequis. Puis nous lançons l’installeur.

apt update && apt -y install foreman-installer

foreman-installer

Si tout ce passe bien vous vous retrouverez avec ceci à la fin :
resultat foreman puppet

L’installeur vous récapitule les informations essentielles , tel que :

  • l’url de votre foreman qui doit correspondre à votre hostname
  • votre couple login / mot de passe.

Voici le résultat :

foreman website

Enfin faisons en sorte que depuis notre terminal sur le serveur nous puissions lancez facilement les lignes de commande de gestion Puppet :

echo "PATH=\$PATH:/opt/puppetlabs/puppet/bin:/opt/puppetlabs/server/bin" >> ~/.bashrc

 

Félicitation vous venez juste d’installer ce qu’il vous faut pour commencer à faire du DevOps. Dans les prochains tutoriaux sur puppet, nous verrons comment configurer et déployer.

 

Read More...

Docker sous Debian Stretch

logo docker

12 octobre 2017 | Posted in Docker | By

Docker est train de devenir incontournable. Je reviendrai pas ici sur ce qu’est docker ni son principe de fonctionnement, il y a de très bons articles qui expliquent la différence entre docker et une machine virtuelle, ses avantages et aussi ses inconvénients.

Cet article a pour but de vous aider à installer docker mais aussi des outils dans la bonne version tel que docker-compose dans votre Debian from scratch.

Pré-requis :

Rien de bien compliqué, une installation vierge et à jour d’une Debian stretch 64 bit. Un conseil lors de la mise en place de votre Debian, il est fortement recommandé de faire une partition spécialement pour docker.
En effet vous n’êtes pas a l’abri d une image mal faite qui remplirait votre espace disque plantant ainsi votre serveur.

Installation de docker

L installation de docker est simple et d ailleurs très bien documenter dans leur wiki :

https://docs.docker.com/engine/installation/linux/docker-ce/debian/

Je vais néanmoins reprendre la documentation ici et vous donnez les instructions de sécurisation très simple à mettre en place.

Ce qui est bon à savoir c’est que docker propose un dépôt pour Debian.

Vu que vous êtes sur une Debian vierge on peut sauter les étapes de nettoyage.

On commence par installer les packets nécessaires à l utilisation du dépôt docker en https
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

On importe la clé du dépôt docker :
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add -

Maintenant on peut intégrer le dépôt docker dans notre sources.list
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"

Il nous reste plus qu’a installer docker

apt-get update
apt-get install docker-ce

Maintenant on configure docker pour démarrer automatiquement
systemctl enable docker

Sécurisation de docker

Docker déconseille de lancer les conteneurs en tant que root. L installation crée déjà un group docker. On doit juste rattacher votre utilisateur standard au group docker. Ensuite pensez bien que vous devez lancer vos conteneurs avec cet utilisateur

j’appellerai ici mon utilisateur toto, je sais c’est pas original.
usermod -aG docker toto

Vérification de votre docker

On va vérifier la version et lancer un docker de test :

Pour la version
sudo -u toto docker version
qui va répondre :

Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:09 2017
OS/Arch: linux/amd64

Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:40:48 2017
OS/Arch: linux/amd64
Experimental: false

On lance un docker :

sudo -u toto docker run hello-world
qui répondra un jolie Hello from Docker!

Voila docker est prêt à être utilisé

Installation de docker-compose

Malheureusement le docker-compose disponible dans les dépôts officiels Debian est obsolète. Nous allons donc installer la dernière version en manuel.
Pour connaître la dernière version voici le lien :

https://github.com/docker/compose/releases

Normalement il n’y a pas besoin de dépendance pour que cela marche. Mais quand on regarde les dépendances du paquet officiel Debian on trouve cela :

python-backports.ssl-match-hostname python-cached-property python-docker python-dockerpty python-docopt python-functools32 python-jsonschema python-texttable python-websocket python-yaml

J ai testé sans , cela marche . Mais voulant être tranquille je les installe quand même :

apt install python-backports.ssl-match-hostname python-cached-property python-docker python-dockerpty python-docopt python-functools32 python-jsonschema python-texttable python-websocket python-yaml

On télécharge maintenant la dernière version du docker-compose. Vérifiez bien dans la ligne ci-dessous que la version est la mème que celle proposée dans le lien que je viens de vous fournir.

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

On verifie que tout fonctionne :
docker-compose version

qui répondra :

docker-compose version 1.16.1, build 6d1ac21

Conclusion

Voilà rien de bien compliquer, vous venez d’installer docker sous votre Debian ainsi que l utilitaire docker-compose. Souvenez vous que la bonne pratique est de ne pas lancer vos conteneurs en route !!
Nous venons ici que d’effleurer le haut de l iceberg. Docker est une technologie vaste et complexe.
Par la suite nous verrons :

  • Les commandes simples de docker
  • Les fichiers de configuration Dockerfile
  • Les principes de volumes et de persistances des données
  • Comment mettre à jour un conteneur
  • Les environnement complexes multi-conteneurs avec docker-compose
  • Des outils pour vous simplifier la vie comme Portainer ou Rancher
  • Comment superviser vos conteneurs
  • Comment sauvegarder vos conteneurs

Comme vous le voyez la route est encore longue avant de maîtriser complètement docker.

Read More...

Centraliser vos logs avec Graylog2 sous Debian 9

graylog logo

9 juin 2017 | Posted in Réseau, Supervision | By

Présentation de Graylog2

Aujourd’hui on va installer le génialisime Graylog !!! Tout bon administrateur système comprend la nécessité d’avoir des logs faciles à lire et à stocker.
Le log a plusieurs inconvénient :

  • Le Log peux prendre beaucoup de place sur un serveur de production et remplir une partition.
  • Le Log peut être perdu suite à un crash d’une machine, on est alors aveugle sur le pourquoi du crash
  • Le Log peut aussi bien être corrompu par un attaquant pour masquer son attaque.

Graylog va donc centraliser les logs de vos serveurs et application et grâce à son interface très intuitive de pouvoir facilement comparer les logs et les analyser. Un gain de temps phénoménal. Mais ce n’est pas tout.
Graylog peut aussi faire des analyses automatiques qui vous alerteront en automatique via email. Tout bonnement génial. Avant j’utilisais octopussy , maintenant sans hésitez graylog !!!

Objectif de ce tutorial sur Graylog2

Comme toujours nous allons partir sur une Debian vierge, mais pour la première fois une Debian 9 stretch. Après tout elle sort officiellement dans 10 jours.
Quelques conseils pour votre infrastructure :

  • Que vous soyez dans un vswitch ou sur un LAN je vous invite fortement à avoir un VLAN réservé à votre administration (sonde de monitoring et log) et cela bien sur dans la mesure du possible sur une autre carte Réseaux.
    Pourquoi me direz vous? Tout simplement pour séparer les Flux applicatifs des flux administrations.
  • N’oubliez pas que les Logs sont soumis à la réglementation et qu’ils doivent être conservé, l’espace disque peut donc devenir conséquent et suivant le parc machine les accès en écriture et lecture tout autant, dimensionnez bien votre infrastructure. Personnellement je monte une partition sur un nas pour les données.
  • Les logs ne doivent jamais circulé en clair, il y a bien souvent trop d’informations importantes.

Graylog s’appuie sur deux dépendances :

  • Elasticsearch
  • MongoDb

Nous verrons donc comment installer ses dépendances mais aussi un peu les sécuriser. Puis nous installerons Graylog et le configurerons.

Pour tout ce qui sera certificat SSL je me baserai sur le tutorial Letsencrypt que j’ai écrit précédemment.

Installation de Graylog

Infrastructure

On commence par monter une infrastructure de test. Pour des raisons pratiques je ferai tout cela dans mon esxi.
Cette infrastructure  comprendra :

  1. Un vm de test sous debian jessie avec un apache et un mysql
  2. Une vm de test sous windows 2012 Server R2
  3. Une Vm equivalent à un nas
  4. La Vm pour Graylog en mode standalone

Toutes les Vms à part bien sur le nas auront une interface public. ( Traduction chez ovh une ipfailover )
Toutes les Vms auront une interface privé en Lan réservé au log sur un viswitch dédié.
La vm faisant office de nas servira a stocker les logs et les données. Le point de montage sera /mnt/data

Attention à bien faire ce point de montage car je le met en dur dans la configuration.

Génération des certificats

Installation

Comme je le disais précédemment nous allons encrypter les flux de données. Grace à Letsencrypt rien de bien compliquer. Il vous faut juste un nom de domaine pointant vers votre serveur et le package certbot

apt-get install certbot

Configuration

Imaginons que vous decidiez d avoir comme nom de domaine pour votre graylog : log.mon-domaine.com
Pour générez le certificat il vous faut faire :

certbot certonly --standalone -d log.mon-domaine.com

Le certificat ainsi généré sera disponible dans le dossier : /etc/letsencrypt/live/log.mon-domaine.com

Elasticsearch

Installation

Nous allons maintenant installé elasticsearch en passant par le dépôt officiel mais attention !!! la plupart des tutoriaaux remonte l’information que Graylog2 requière au minimum elasticsearch 2.x, mais ne stipule pas que Graylog2 n’est pas compatible avec les versions supérieurs à 5.x !!!!! On va donc prendre la version 2.4 et non la 6 ou 5. Oui elasticsearch est passé de la version 2.4 à 5 sans passer par le 3 ou 4

Perso pour information, j ai essayé avec la 6 ou cas ou, je confirme que graylog ne fonctionne pas du tout.


apt-get install apt-transport-https openjdk-8-jdk
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
apt-get update && apt-get install elasticsearch

On crée nos répertoires sur le nas pour les logs et les data d elasticsearch

mkdir /mnt/nas/elasticsearch && chown -R elasticsearch:elasticsearch /mnt/nas/elasticsearch

Configuration

Nous allons configurer elasticsearch, le sécuriser et aussi s occuper de systemd pour automatiser son démarrage.

sed -i -r 's/^# cluster.name:.*/cluster.name: graylog/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# node.name:.*/node.name: graylog-server/' /etc/elasticsearch/elasticsearch.yml
sed -i 's/# node.max_local_storage_nodes: 1/node.max_local_storage_nodes: 1/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# network.host:.*/network.host: 127.0.0.1/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# path.data:.*/path.data: \/mnt\/nas\/elasticsearch\/data /' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# path.logs:.*/path.logs: \/mnt\/nas\/elasticsearch\/logs /' /etc/elasticsearch/elasticsearch.yml

Pour comprendre, je demande en premier de changer le nom du cluster et celui du node. Je force à ce qu’il y ait qu’un seul node.
Puis pour sécuriser je bloque l’écoute de l elasticsearch qu’en local.
Enfin je déplace les données et les logs directement sur le nas.

Enfin j active le redemarrage automatique et je lance elasticsearch
systemctl start elasticsearch
systemctl enable elasticsearch

Pour verifier que tout fonctionne :
journalctl | tail

et

netstat -anp | grep 9200

Mongodb

Maintenant nous passons à Mongodb qui malheureusement ne possède pas à ce jour de dépôt propre sur le site de mongodb.
On va donc installer la version de base qui par chance est la version 3.2 parfaitement compatible avec graylog

Installation

apt-get install mongodb-server

Configuration

Nous allons donc sécuriser votre serveur.

sed -i -r 's/^#nohttpinterface/nohttpinterface/' /etc/mongodb.conf
Enfin vérifiez bien que votre bind_ip est bien sur 127.0.0.1

Installation de Graylog 2.2

Installation

apt-get install uuid-runtime pwgen
wget https://packages.graylog2.org/repo/packages/graylog-2.2-repository_latest.deb
dpkg -i graylog-2.2-repository_latest.deb
apt-get update
apt-get install -y graylog-server

Comme indiquer, à la fin de l’installation, il vous reste à automatiser le démarrage de Graylog


systemctl enable graylog-server.service
systemctl daemon-reload
systemctl start graylog-server.service

Configuration


# generation d un salt unique pour hash mot de passe
mdprand=$(openssl rand -base64 32)
sed -i 's#password_secret =.*#password_secret = '"$mdprand"'#' /etc/graylog/server/server.conf
# Mot de passe de l administrateur , changez MOT_DE_PASSE_ROOT par votre mot de passe
mdp_root=$(echo -n "MOT_DE_PASSE_ROOT" | shasum -a 256 | awk '{print $1}')
sed -i 's#root_password_sha2 =.*#root_password_sha2 = '"$mdp_root"'#' /etc/graylog/server/server.conf
# email contact
sed -i 's/#root_email = ""/root_email = "ROOT_EMAIL"/' /etc/graylog/server/server.conf
#Timezone Paris
sed -i 's/#root_timezone = UTC/root_timezone = CET/' /etc/graylog/server/server.conf
#config elasticsearch
sed -i 's/elasticsearch_shards = 4/elasticsearch_shards = 1/' /etc/graylog/server/server.conf
sed -i 's/#elasticsearch_discovery_zen_ping_multicast_enabled = false/elasticsearch_discovery_zen_ping_multicast_enabled = false/' /etc/graylog/server/server.conf
sed -i 's/#elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300/elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300/' /etc/graylog/server/server.conf
# On ouvre l interface web en 127.0.0.1 et on fera apres un proxy avec apache pour avoir du https
sed -i 's/#web_listen_uri = .*/web_listen_uri = http:\/\/127.0.0.1:9000/' /etc/graylog/server/server.conf

On redemarre graylog


systemctl restart graylog-server.service

Accès à l’interface web

On installe apache :

apt-get install apache2 cronolog

On active les mods apache dont on a besoin :

a2enmod ssl
a2enmod rewrite
a2enmod headers
a2enmod proxy
a2enmod proxy_http

Il ne reste plus qu’à mettre ne place un vhost qui force le https avec le certificat que l on a créé précédemment.

Je rappelle qu il faut remplacer dans ce qui suit log.mon-domaine.com par votre nom de domaine

On crée le virtualhost dans le fichier :

touch /etc/apache2/sites-available/log.mon-domaine.com.conf

Vous y coller la configuration suivante :

<VirtualHost *:80>
ServerName log.mon-domaine.com
Redirect permanent / https://log.mon-domaine.com/
</VirtualHost>

<VirtualHost *:443>
ServerName log.mon-domaine.com

ErrorLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/error_log »
CustomLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/access_log » combined
TransferLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/transfer_log »

 

SSLEngine On
SSLCertificateKeyFile /etc/letsencrypt/live/log.mon-domaine.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/log.mon-domaine.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/log.mon-domaine.com/chain.pem

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite « EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4 »
SSLHonorCipherOrder on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

# HSTS (mod_headers est requis, 15 768 000 secondes = 6 mois)
Header always set Strict-Transport-Security « max-age=15768000 »

RequestHeader set X-Graylog-Server-URL « https://log.mon-domaine.com/api/ »
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/

</VirtualHost>

Astuce pour bien ne rien oubliez passer par sed pour tout modifier :

sed -i 's#log.mon-domaine.com#www.mon-domaine.com#' /etc/apache2/sites-available/log.mon-domaine.com.conf

On active le site

a2ensite log.mon-domaine.com
apache2ctl graceful

On peut maintenant apprécié le résultat :

Conclusion

Nous venons donc d’installer notre centralisateur de log Graylog2 en version 2.2.3 sur une debian 9 Stretch tout en y apportant une petite couche de sécurité. Je vous invite à bien lire le fichier server.conf qui regorgent d informations sur les possibles configurations de Graylog2.

Il ne vous reste plus qu à configurer vos inputs, il existe de nombreux tutoriaux la dessus.
Note importante : Votre graylog bien évidemment ne tourne pas avec l utilisateur root, donc lorsque vous créez vos input il faut mettre un port supérieur à 1024 !!!

Liens annexes

D’excellents tutoriaux proposent de la documentation sur Graylog :

En francais :

En anglais :

Read More...

Mysql – Cryptage SSL des connexions sous Debian Jessie

logo mysql

16 janvier 2017 | Posted in Réseau, Securisation | By

Pour plusieurs raisons propres, vous devez ouvrir votre serveur mysql vers l’extérieur. Vous trouverez de nombreux tutoriels afin de le faire. Mais ici, nous allons voir comment sécuriser vos communications entre le client et le serveur rendant ainsi impossible d’intercepter par sniffage un mot de passe ou le résultat de vos requêtes.
Il serait gênant de devoir expliquer à vos clients que leurs informations personnelles sont entre les mains de hackers malins.

Pre-requis

Serveur Debian 8 jessie dont l’ip sera 192.168.0.1
le package mysql-server installé

Information Importante

La documentation de mysql 5.5 décrit la manière de sécuriser les connexions, vous trouverez aussi de nombreux tutoriels décrivant les processus. Néanmoins, ces dernières ne fonctionnent pas sous Debian 8 à cause d’openssl. La version actuelle d’openssl sous jessie est la 1.0.1t alors que lors de l’écriture des tutoriels officiels, la version était 0.9.8. Il en découle une différence dans les protocoles PKS. La procédure décrite ci dessous en tient compte.

Ouvrir les connexions distantes

En premier lieu, nous allons modifier le fichier /etc/my.cnf afin de dire à mysql d’ouvrir son port 3306 vers l’extérieur.

sed -i '/bind-address/ s/^/# /' /etc/mysql/my.cnf
service mysql restart

Il faut maintenant faire deux choses.
La première : vérifiez que vous n’avez pas déjà un utilisateur ayant pour attribut un host % (signifiant que vous acceptez des connexions de partout) et la deuxième, de savoir créer un utilisateur.

mysql -u root -p

puis dans le shell mysql on commence par vérifier

select user,host from mysql.user;
sortie bash mysql requete
Comme on peut le voir, pas d’utilisateur ouvert vers l’extérieur.

On créé maintenant un utilisateur ssl_user provenant de l’adresse 192.168.0.10.

CREATE USER "ssl_user"@"192.168.0.10" IDENTIFIED BY "mot_de_passe";
GRANT SELECT, SHOW DATABASES ON *.* TO "ssl_user"@"192.168.0.10" REQUIRE SSL;
FLUSH PRIVILEGES;

On vérifie le tout :
select user,host,ssl_type from mysql.user;
sortie bash mysql requete
On peut voir le champ ssl_type avec la valeur ANY qui montre que l’utilisateur sssl_user accepte n’importe quel type de chiffrement ssl.

Création et déploiement des certificats SSL

Nous allons en premier lieu vérifier que votre serveur mysql est bien compilé avec le support SSL. Normalement, si vous êtes passé par les dépôts, pas de soucis à se faire

toujours depuis le shell mysql tapez :
show variables LIKE "%ssl%";
sortie bash mysql requete

Comme vous pouvez le voir, on est en etat DISABLED.
Jusque là rien d’anormal, si vous aviez eu NO à la place cela vous indiquerait alors que votre serveur Mysql n’est pas compilé avec openssl.

Géneration des certificats

Personnellement, je range mes certificats dans le même dossier que la configuration mysql


cd /etc/mysql && mkdir MysqlCertif
cd MysqlCertif

Nous allons y stocker les certificats de l’autorité de certification, du serveur et du client.

Autorité de certification


openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 1825 -key ca-key.pem > ca-cert.pem

On génère donc une clé de 2048 bits (le maximum légal en France, perso je mets plus …) valable 1825 jours soit 5 ans.

Certificat serveur


openssl req -newkey rsa:2048 -days 1825 -nodes -keyout serverMysql-key.pem > serverMysql-req.pem
openssl x509 -req -in serverMysql-req.pem -days 1825 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > serverMysql-cert.pem
openssl rsa -in serverMysql-key.pem -out serverMysql-key.pem

Certificat Client


openssl req -newkey rsa:2048 -days 30 -nodes -keyout clientMysql-key.pem > clientMysql-req.pem
openssl x509 -req -in clientMysql-req.pem -days 30 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > clientMysql-cert.pem
openssl rsa -in clientMysql-key.pem -out clientMysql-key.pem

j’ai modifié la validité du certificat client à 30 jours afin de vous montrer que vous pouvez donner ainsi une date de péremption et bloquer la connexion au bout de 30 jours

Cela évite aussi de laisser traîner des certificats valides dans la nature trop longtemps.

on fini en mettant les certificats avec les droits mysql

chown -R mysql:mysql /etc/mysql/MysqlCertif

Configuration du serveur mysql

Editez le fichier /etc/mysql/my.cnf

dans la section [mysqld] ajoutez :

ssl-ca=/etc/mysql/MysqlCertif/ca-cert.pem
ssl-cert=/etc/mysql/MysqlCertif/serverMysql-cert.pem
ssl-key=/etc/mysql/MysqlCertif/serverMysql-key.pem

Il ne reste plus qu’à redémarrer le service

service mysql restart

Vérifions maintenant que tout fonctionne :

Dans la console mysql :
show variables LIKE "%ssl%";

sortie bash mysql requete serveur ok

On a bien la confirmation que tout est ok.

Configuration cote client

En premier lieu, il faut récupérer les fichiers pour le certificat client

Les fichiers à transmettre sont :

  • /etc/mysql/MysqlCertif/ca-cert.pem
  • /etc/mysql/MysqlCertif/clientMysql-cert.pem
  • /etc/mysql/MysqlCertif/clientMysql-key.pem

Pour le client, vous avez deux manières de vous connecter.

Soit en ligne de commandes :
mysql -u ssl_user -p -h 192.168.0.1 --ssl-ca=/etc/mysql/MysqlCertif/ca-cert.pem --ssl-cert=/etc/mysql/MysqlCertif/clientMysql-cert.pem --ssl-key=/etc/mysql/MysqlCertif/clientMysql-key.pem

Soit directement dans le fichier my.cnf du client sous la section [client] :

éditez le fichier my.cnf

vim /etc/mysql/my.cnf

ssl-ca=/etc/mysql/MysqlCertif/ca-cert.pem
ssl-cert=/etc/mysql/MysqlCertif/clientMysql-cert.pem
ssl-key=/etc/mysql/MysqlCertif/clientMysql-key.pem

redémarrer le service

service mysql restart

on teste la connexion :

mysql -u ssl_user -p -h 192.168.0.1

Si tout fonctionne en tapant \s dans la console mysql on aura :

Que voit t’on la dedans? Première chose, le SSL fonctionne car on a le Cipher in use is DHE-RSA-AES256-SHA, la deuxième chose, je vous laisse la deviner et la mettre en commentaire.

Vérifier la sécurité

On pourrait s’arrêter là, mais on va aller un peu plus loin en regardant de plus près ce que l’on a avec mysql 5.5

dans votre console mysql :

SHOW GLOBAL STATUS where Variable_name like "Ssl%";

sortie bash mysql requete option global

On voit donc que la version ssl est TLSv1, ce qui est une bonne chose.
Le cipher est calé sur DHE-RSA-AES256-SHA ce qui est bon aussi.

Maintenant il faudra passer sous mysql 5.7 pour pouvoir modifier les valeurs et forcer par exemple le serveur en TLSv1.2.

Conclusion

Voila vos connexions extérieures cryptées.
Le cryptage de la connexion va un peu consommer de ressources mais d’après plusieurs benchmark cela est minime. Vous aurez par contre une latence augmentant proportionnellement avec le nombre de connexion actives.
Autre désavantage à prendre en compte, certains logiciels, sondes de monitoring ne fonctionnent pas avec une connexion cryptée ssl.

Read More...

Avoir et installer un certificat SSL https gratuitement

letsencrypt certificat ssl

16 janvier 2017 | Posted in Non classé, Réseau, Securisation | By

Toujours dans l’optique d’améliorer la sécurité de votre site, vous avez pensé acheter un certificat. Mais un certificat, cela a un coût… Payer une rente annuelle pour sécuriser un flux smtp, ftp ou autres avec un certificat authentifié est hors de vos moyens.
Mais ça, c’etait avant, maintenant grâce à letsencrypt, à vous les certificats SSL valides mais sans assurance sur les transactions financières. Ils sont donc parfait pour un site ou un service non e-commerce.

Comment ca marche ?

Afin de délivrer le certificat, letsencrypt vérifie que le nom de domaine est bien relié à l’ip déclarée dans le dns. Pour cela, il monte un mini serveur http pour effectuer une connexion au service afin d’authentifier la demande de certificat. C’est pour cela que lors de la génération ou le renouvellement d’un certificat il faut arrêter apache.

Pré-requis

Si vous copier-coller mes virtualhosts, avoir installé chronolog.
Les sites sont placés dans le dossier /var/www avec comme architecture de dossier :

  • log
  • tmp
  • html

Installation

Il faut commencer par installer letsencrypt sur son serveur, la procédure est différente entre Debian 7 et une Debian 8. La Debian 8 permet maintenant l’utilisation du package.

Debian 7

On choisi d’installer le script certbot directement dans le dossier /var/ice/script/shell/

cd /opt/
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Debian 8

Il faut commencer par activer les backports de debian

echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
apt-get update
apt-get install certbot -t jessie-backports

Générez vos certificats

Pour info : on peut générer plusieurs certificats en une ligne en ajoutant des -d nomdedomaine.com
Remplacer évidemment nomdedomaine.com par la valeur du nom de domaine sans les www pour les racines.

Debian 7

cd /opt/
./certbot-auto certonly --standalone -d nomdedomaine.com --pre-hook "/etc/init.d/apache2 stop" --post-hook "/etc/init.d/apache2 start"

Debian 8

certbot certonly --standalone -d nomdedomaine.com --pre-hook "service apache2 stop" --post-hook "service apache2 start"

Renouvellement des certificats

Debian 7

cd /opt/
./certbot-auto renew --pre-hook "/etc/init.d/apache2 stop" --post-hook "/etc/init.d/apache2 start"

Debian 8

certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 start"

Configuration apache

on utilise deux mods

a2enmod headers
a2enmod ssl

le mode ssl gère les multi ssl avec une ip

ATTENTION :

Header always set Strict-Transport-Security envoie une commande via le header au navigateur qui va pendant le temps exprimé, forcer le navigateur à passer en HTTPS, même si vous avez désactivé le https ou mis un htaccess après. Cela reste dans le cache du navigateur.

Exemple de virtualhost


ServerName www.site.fr
ServerAlias site.fr
DocumentRoot /var/www/www.site.fr/html
LogLevel warn

ErrorLog « |/usr/bin/cronolog /var/www/www.site.fr/log/%Y/%m/error_log »
CustomLog « |/usr/bin/cronolog /var/www/www.site.fr/log/%Y/%m/access_log » combined
TransferLog « |/usr/bin/cronolog /var/www/www.site.fr/log/%Y/%m/transfer_log »

php_admin_value auto_prepend_file none
php_admin_value open_basedir /var/www/www.site.fr:/tmp
php_admin_value upload_tmp_dir /var/www/www.site.fr/tmp
php_admin_value session.save_path /var/www/www.site.fr/tmp

SetEnv AWSTATS_FORCE_CONFIG www.site.fr

SSLEngine On
SSLCertificateKeyFile /etc/letsencrypt/live/www.site.fr/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/www.site.fr/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.site.fr/chain.pem

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCompression Off

# HSTS (mod_headers est requis, 15 768 000 secondes = 6 mois)
Header always set Strict-Transport-Security « max-age=15768000

Virtualhost pour debian 6


ServerName www.site.fr
ServerAlias site.fr

DocumentRoot /var/www/www.site.fr/html

LogLevel warn

ErrorLog « |/usr/bin/cronolog /var/www/www.site.fr/log/%Y/%m/error_log »
CustomLog « |/usr/bin/cronolog /var/www/www.site.fr/log/%Y/%m/access_log » combined
TransferLog « |/usr/bin/cronolog /var/www/www.site.fr/log/%Y/%m/transfer_log »

php_admin_value auto_prepend_file none
php_admin_value open_basedir /var/www/www.site.fr:/tmp
php_admin_value upload_tmp_dir /var/www/www.site.fr/tmp
php_admin_value session.save_path /var/www/www.site.fr/tmp

SetEnv AWSTATS_FORCE_CONFIG www.site.fr

SSLEngine on

SSLCertificateKeyFile /etc/letsencrypt/live/www.site.fr/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/www.site.fr/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.site.fr/chain.pem

<FilesMatch « \.(cgi|shtml|phtml|php)$ »>
SSLOptions +StdEnvVars

SSLOptions +StdEnvVars

BrowserMatch « .*MSIE.* » \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

on active et on recharge apache

a2ensite www.site.fr.conf
apache2ctl graceful

Lexique commande

certonly : pour la création de certificat
renew : Pour le renouvellement
–dry-run : mode test
-q : mode silencieux sans sortie dans le shell
–force-renewal : pour forcer le renouvellement même si il n’est pas encore temps de le renouveler.
–email : pour spécifier un email différent de celui par défaut généré lors de la première utilisation
–rsa-key-size : taille de la clé RSA par défaut 2018
–pre-hook : Pour lancer une commande avant que certbot fasse l’action
–post-hook : Pour lance une commande après que certbot ait fonctionné.

Cas spécial pour les os non supportés.

L’astuce est valable si vous avez deux serveurs dont un avec une Debian. Il suffit de bouger les dns sur le serveur pouvant générer le certificat et de générer les fichiers.
Recopier les certificats dans le dossier /etc/letsencrypt sur la machine d’origine. Attention n’utilisez pas cette technique pour un service critique.

Test

Pour vérifier que votre serveur apache, votre virtualhost et votre certificat marchent correctement, rien de plus simple, il suffit de se rendre à cette adresse :

https://www.ssllabs.com/ssltest/

Et voila le résultat :

resultat test ssl site

Inconvénient

Il y a néammoins un inconvénient avec letsencrypt, les certificats sont valables que 2 mois … Il faut penser à renouveler vos certificats.

J’ai pour cela une astuce : nous allons utiliser le crontab et y mettre cette commande.


30 3 10 * * ./certbot-auto renew --pre-hook "/etc/init.d/apache2 stop" --post-hook "/etc/init.d/apache2 start"

Conclusion

Maintenant vous avez un site en https et en plus A+ d’après qualys et sans avoir débourser d’argent.

 

Read More...

Réécrire l’adresse mail d’un utilisateur linux via postfix

email logo

16 janvier 2017 | Posted in Mail | By

Vous avez peut être déjà eu le cas d’un programme en bash qui envoie des emails via la fonction mail et vous avez défini votre hostname avec un nom spécial pour votre réseau du style serveurHp1

Quand votre utilisateur lance un mail, il y a donc un from du type utilisateur@serveurHp1

Évidemment, beaucoup de serveurs mail vont le refuser !! En effet, il est impossible de résoudre serveurHp1
Alors comment modifier ce mail from ?

Fonction Mail

Si c’est votre script, vous pouvez utiliser la fonction mail en modifiant ses attributs.

export REPLYTO=reponse@mondomaine.com
echo $MonCorpsdeMessage | mail -aFrom:email@mondomaine.com -s 'Sujet' destinataire@email.com

Décryptons :
En premier lieu, on peut définir avec le export une adresse différente pour le reply-to/
Ensuite, on pousse le corps du message via la variable $MonCorpsdeMessage.
L’attribut -a permet de modifier le header et donc l’adresse d’envoi (from).
L’attribut -s permet de spécifier le sujet.
Et enfin, nous mettons l’adresse du destinataire ( à noter que si vous envoyez à plusieurs contacts, il suffit de les séparer par une virgule )
Pour plus d’informations reportez vous au man.
man mail

Mais il arrive que cela ne soit pas vos scripts et que vous ne puissiez pas les modifier, alors voici la deuxième méthode :

Postfix

Il suffit de passer par le generic_maps de postfix

rajouter dans /etc/postfix/main.cf :
smtp_generic_maps = hash:/etc/postfix/generic

Il ne reste plus qu’à relier votre utilisateur à votre email

echo 'www-data email@mondomaine.com' >> /etc/postfix/generic

puis on créé la map et relance postfix

postmap /etc/postfix/generic
/etc/init.d/postfix restart

Voilà, ce n’est pas grand chose, mais pour le suivi de vos crons ou de vos robots cette astuce peut vraiment vous aider.

Read More...

Installation de Zend Server 8.5 sous debian 7

Zend server

26 septembre 2016 | Posted in Logiciel, php | By

Bien qu’étant administrateur système depuis quelques années, mon premier amour a été le code php. Et comme on dit souvent, on revient souvent à ses premiers amours. Ainsi, aujourd’hui, on va installer et utiliser la dernière version de Zend Server.

Alors pourquoi Zend server. Tout simplement parce que j’aime coder avec Zend Studio et que les deux forment une plate-forme de développement très efficace. De plus, avec le Z-ray, nous avons une veritable analyse de notre code. Plusieurs Framework et CMS sont en plus pleinement intégrés dans Z-ray :

  • Magento
  • Drupal
  • ZF
  • WordPress
  • Symfony

Et franchement c’est un gros plus. Certains me diront « oui mais pour symfony on a la même chose ». Oui certes, mais que pour symphony, là, on l’a pour plusieurs types de framework.

Pré-requis :

Une debian 7 64 bits from scratch

Pour commencer, nous allons installer mysql car il n’est pas installé automatiquement. On en profitera pour rajouter quelques paquets.

apt-get install htop screen rsync wget less sudo psmisc ntp ntpdate bind9 bzip2 vim w3m zip iftop git joe iotop tmux fail2ban rkhunter mysql-server

et un peu de couleur pour vim

Editez le fichier /etc/apt/source.list et ajoutez

Puis récupérez la clé

on met à jour notre liste

on installe notre zend server avec la version du php que l’on désire.

Configuration de Zend

Pour finir l’installation, il faut vous rendre sur l’interface web d’administration de votre serveur

http://VOTRE_IP:10081/ZendServer

Sélection_001_17_12:23:40Il suffit d’accepter en cochant la case puis next

Sélection_001_17_12:24:03On sélectionne le type de serveur que l’on veut, personnellement c’est pour du développement ce qui me permet d’avoir Z-ray d’activé.

Sélection_001_17_12:25:31On définit les mots de passe administrateur et développeur pour le zend server.

Sélection_001_17_12:25:42

Le zend server déploie ses librairies :

Sélection_001_17_12:26:23Il reste plus qu’a cliquer sur launch pour finir l’installation

Sélection_001_17_12:26:39Zend server travaille quelques intants

et vous arrivez sur votre administration :

Sélection_001_17_12:27:19

On va maintenant déployer phpmyadmin depuis l’interface de zend. Pour cela, c’est très simple, sur la page d’accueil, cliquez sur le logo phpmyadmin

Sélection_001_17_13:31:13

Sélection_001_17_13:31:50Zend server télécharge son paquet d’installation de phpmyadminSélection_001_17_13:32:21 Il faut rentrer le nom du répertoire pour la configuration d’apache

Sélection_001_17_13:42:55Zend Server valide que les pré-requis sont installés.

Sélection_001_17_13:50:40Il vous demande de rentrer les paramètres de la base de données que nous avons installé précédemment.
Normalement vous n’avez qu’a mettre le mot de passe.

Sélection_001_17_13:50:59Le dernier écran qui récapitule les informations et on clique sur déployer

Sélection_001_17_13:51:10Zend installe phpmyadmin.

Comme vous pouvez le constater, il est très simple de déployer une application sur zend server.

 

Conclusion

On a vu ensemble l’installation via le dépot de zend de zend server 8.5 sous debian 7. Mais pourquoi ne pas l’avoir fait sous debian 8 ?

En fait sous debian 8, on a un souci avec le module php5 de zend et apache 2.4. Ce n’est pour l instant pas compatible.

Read More...

Installation de Redmine 3.0.3 sous debian 7 avec passenger

logo redmine

13 juin 2015 | Posted in Logiciel | By

On ne présente plus redmine, le soft open-source de gestion de projet développé en Ruby sur la base du framework Ruby on Rails.

Pré requis

Un serveur sous debian 7 64 bit vierge.

Introduction

Je vais vous montrer comment installer redmine en version 3 sur une debian 7 avec :

  • mysql 5.5
  • ruby 2.2
  • rails 4.2
  • gem 2.4.5
  • apache2
  • passenger
  • et une authentification ldap

Installation d’apache et de mysql

On commence par le plus simple, on rajoutera le php et phpmyadmin et imagemagick en même temps.

Vous pouvez après reprendre les fichiers de configuration d’apache, php et mysql afin d’optimiser le tout et surtout le sécuriser.

Installation de ruby

Nous allons d’abord installer les pré-requis puis télécharger la dernière version disponible. En effet le package dans debian est la 1:1.9.3
C’est d’ailleurs pour cela que je n’ai pas installé le paquet passenger disponible.

Afin de faciliter l’installation, on va utiliser rmv
J’ai essayé avec rbenv et j’ai eu des soucis pour info.

Il faut maintenant reload votre shell

Pour vérifier que c’est bon :

Si vous obtenez

c’est que vous avez le paquet ruby de debian, supprimez le et recommencez l’installation comme décrite ci-dessus

et on vérifie gem

Installation de rails, bundler et passenger pour redmine

On active le passenger
On génère les fichiers de configuration de passenger

On va mettre en place le fichier de configuration

Puis le chargement du module

On active le module et on refresh apache

 

On vérifie que le module est bien activé

qui doit nous répondre

Tout va bien on continue.

Création de la base de données redmine

Pensez à changer my_password par votre mot de passe.

Installation de redmine

Pour plus de sécurité, nous allons créer un utilisateur système redmine avec pour groupe www-data

On télécharge notre archive et on la décompresse, pour faciliter les mises à jour futures, je vais créer un lien symbolique

On configure la connexion à la base de données

On se place dedans

On installe les dépendances

On génère le token

On nourrit la base de données de production

puis

On configure le vhost d apache

on active le site et on restart apache

Conclusion

Vous voila avec une installation redmine, il ne vous reste plus qu’à configurer vos projets et votre authentification Ldap dans l’administration de votre interface.

Read More...

Installation du waf modsecurity d’apache et reverse proxy

security logo

13 juin 2015 | Posted in Securisation | By

Par tous les moyens, vous cherchez à protéger votre réseau. Vous déployez un firewall pour bloquer les accès et les protéger de l’anti-spoofing, un fail2ban contre le brut force, rkhunter et compagnie, mais comment sécuriser les sites web que vous hébergez ??? Êtes-vous sûr que leur développement respecte les règles de l’art, qu’ils sont bien patchés avec les versions à jour… Il existe pourtant des solutions. Explorons ensemble la mise en place d’un web applicatif firewall appelé entre-amis WAF.

WAF le firewall pour vos applications web

Le principe du WAF est assez simple, un WAF se place entre internet et votre application web. Il va intercepter toutes les requêtes http pour les analyser suivant des règles de filtrage permettant de repérer les attaques et de les bloquer.
Il existe plusieurs modèles de WAF, nous allons ici mettre en place le module d’apache modsecurity. Vous pouvez bien sûr mettre directement votre waf sur votre serveur où sont les sites internets, mais ici je vais vous montrer comment mutualiser un WAF.

Schema waf mutualisé

schéma de flux pour infrastructure serveur web protégé par un waf

 

Explication de l infrastructure réseaux WAF

J ai choisi de mettre le serveur WAF sur un esxi pour plusieurs raison. D abord c est un serveur qui doit pouvoir évoluer suivant notre datacenter, une machine virtuelle offre cette flexibilité. Ensuite j ai fait le choix de donner une interface réseaux sur le WAF pour chaque serveur web que protégera le WAF. J ai donc une interface pour l administration et une pour chaque serveur web soit ici 3 en tout.
Pourquoi sommes toutes une interface par serveur web. Et bien tout simplement parce que cela m apporte de nombreux avantages de configurations je trouve. Pour le proxy je peux tout rediriger par l ip et non par le nom de domaine. Très utilie lorsque l’on a un serveur web hébergeant plusieurs nom de domaine.

 

Installation du WAF et du PROXY

On part d’une debian 7 fron scratch.

On commence par installer le serveur web apache et le modsecurity et le mod proxy

On active tout le monde

 

Réglons tout de suite un bug de load de module. Si vous ne le faites pas vous aurez cette erreur dans votre /var/log/error.log

Il suffit de faire ceci :

Paramétrage Modsecurity

on paramètre modsecurity

On l’édite

On active complètement modescurity

en

Puis rajouter juste après

Modifiez

En

Enfin

En

Dé-commentez

et pour activer des règles on ajoute

Attention l’include ne marche pas de manière récursive il faut toujours spécifier tous les répertoires ou vous avez des règles à charger.

Trouvez des règles pour le modsecurity

Par défault le modsecurity ne comporte pas de règle il faut en installer dans le dossier /etc/modsecurity/activerules/.

Il existe plusieurs sources gratuites ou payantes. Voici quelques liens.

A vous de faire votre choix.

En annexe un petit document à lire pour vous

http://www.ssi.gouv.fr/uploads/IMG/cspn/anssi-cspn-cible_2010-05fr.pdf

Configuration du Proxy

Pour rappel, nous avons détourné le flux http (port 80) allant sur le serveur web1 (192.168.1.40) vers le serveur waf sur son interface 192.168.1.4.

Il faut donc maintenant via apache rediriger le flux sur le serveur web1 grâce au mod_proxy

On active le virtualhost et on recharge

Modification des logs sur les serveurs Web

Si vous regardez les logs de votre serveur web, vous n’aurez plus que l’ip de l’interface du waf. Pour cela, il faut modifier le LogFormat afin qu’il reprenne en compte l’ip de l’internaute.

Éditez le fichier apache2.conf

Commenter la ligne

ce qui donne

et ajoutez en dessous

Il suffit maintenant d’appliquer le tout

Conclusion

Nous venons de rajouter une couche en plus pour la protection de votre infrastructure, de plus nous l’avons centralisé en un endroit, ce qui facilite l’entretien. N’oubliez pas que sans les règles un WAF ne sert à rien, il faut donc les mettre à jour régulièrement.

Read More...