Authentification NTLM sur GLPI (Apache/Debian)

Administration des Réseaux, Adminstration Server Linux, Debian, Windows Seven No Comments »

imagesUtiliser l’authentification via LDAP/Active Directory c’est bien, mais il faut retaper son login/mot de passe à chaque fois.

Une solution est d’utiliser l’authentification NTLM au niveau d’Apache

La suite de ce tuto/mémo par du principe que votre installation de GLPI fonctionne déjà

Version:

  • Apache : 2.2.22
  • Debian 7.1

Installation des paquets nécessaire :

aptitude install libapache2-authenntlm-perl

Et ensuite on active le module apache

a2enmod authnz_ldap

Configuration:

La configuration d’apache est assez simple

vi /etc/apache2/conf.d/glpi

Ensuite on l’édite comme ceci:

Alias /glpi /usr/share/glpi
Alias /helpdesk /usr/share/glpi

PerlModule Apache2::AuthenNTLM


  DirectoryIndex index.php
  Options FollowSymLinks
  PerlAuthenHandler Apache2::AuthenNTLM
  AuthType ntlm,basic
  AuthName paipartners
  require valid-user
  PerlAddVar ntdomain "mondomaine.com dc1 dc2"
  PerlSetVar defaultdomain mondomaine.com
  PerlSetVar splitdomainprefix 1
  PerlSetVar ntlmdebug 0
  PerlSetVar ntlmauthoritative off

Dans un premier temps, il est utile de mettre ntlmdebug à 1 voir 2 pour avec des logs

Configuration du client

Sur Windows 7 il faut modifier ou créer une clé registre

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
 "LmCompatibilityLevel"=dword:00000001

Si le GLPI ne se trouve pas dans l’intranet, il faut également l’ajouter aux sites de confiances de IE

Configuration de GLPI

Il faut se rendre en super-admin dans :

Accueil >Configuration >Authentification >Autre méthode d’authentification

Et ajouter dans « Champs de stockage de l’identifiant dans la requête HTTP »

REMOTE_USER

Ensuite on termine par un reload d’Apache

apache2ctl restart

 

 

 

Update : Installation de Cacti et des plugins Network Weathermap et Discovery

Adminstration Server Linux, Debian, Supervision 4 Comments »

Le tuto précédent étant dépassé, je ai refait l’installation à partir d’une debian squeeze et cacti 0.8.7g. Pour les détails et/ou explication référez vous à l’ancien tuto

Installation du serveur LAMP

aptitude update && aptitude full-upgrade
aptitude install apache2 mysql-server php5 php5-cli snmp rrdtool phpmyadmin php-pear unzip patch

Installation de cacti

aptitude install cacti cacti-spine

Installation du Plugin Architecture

cd /tmp
wget  http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7g-PA-v2.8.tar.gz
tar xvf cacti-plugin-0.8.7g-PA-v2.8.tar.gz
cd cacti-plugin-arch
cp cacti-plugin-0.8.7g-PA-v2.8.diff /usr/share/cacti/site/
cd /usr/share/cacti/site/
patch -p1 -N < cacti-plugin-0.8.7g-PA-v2.8.diff
mysql -u root -p cacti < /tmp/cacti-plugin-arch/pa.sql
vi include/config.php

Remplacer

$url_path = "/";

par

$url_path = "/cacti/";

Installation du Plugin Network Weathermap

cd  /usr/share/cacti/site/plugins
wget http://www.network-weathermap.com/files/php-weathermap-0.97a.zip
unzip php-weathermap-0.97a.zip
vi weathermap/editor.php

Remplacer

$ENABLED=false;

par

$ENABLED=true;
chown www-data weathermap/configs -R
chown www-data /usr/share/cacti/site/plugins/weathermap/output -R

Activation du plugin

-> User Management -> admin -> cocher [Plugin Management]

-> Plugin Management

aptitude update && aptitude full-upgrade

aptitude install apache2 mysql-server php5 php5-cli snmp rrdtool phpmyadmin php-pear unzip patch

Les paquets suivants ont des dépendances non satisfaites :
apache2-mpm-prefork: Est en conflit avec: apache2-mpm qui est un paquet virtuel
apache2-mpm-worker: Est en conflit avec: apache2-mpm qui est un paquet virtuel
Les actions suivantes permettront de résoudre ces dépendances :

Conserver les paquets suivants dans leur version actuelle :
1)     apache2-mpm-worker [Non installé]

Accepter cette solution ? [Y/n/q/?]Y

aptitude install cacti cacti-spine

ATTENTION : le répertoire d’installation a changé !                                                                                                        │
libphp-adodb n’est plus installé dans /usr/share/adodb. Le nouveau chemin d’installation (« include path » pour php) est maintenant /usr/share/php/adodb.  │
Veuillez mettre à jour votre fichier php.ini. Par ailleurs, vous devrez peut-être également modifier la configuration de votre serveur web.

cd /tmp
wget  http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7g-PA-v2.8.tar.gz
tar xvf cacti-plugin-0.8.7g-PA-v2.8.tar.gz

cd cacti-plugin-arch
cp cacti-plugin-0.8.7g-PA-v2.8.diff /usr/share/cacti/site/
cd /usr/share/cacti/site/

patch -p1 -N < cacti-plugin-0.8.7g-PA-v2.8.diff
mysql -u root -p cacti < /tmp/cacti-plugin-arch/pa.sql

vi include/config.php
$url_path = « /cacti/ »;

cd  /usr/share/cacti/site/plugins
wget http://www.network-weathermap.com/files/php-weathermap-0.97a.zip

vi weathermap/editor.php
$ENABLED=true;

chown www-data weathermap/configs -R

chown www-data /usr/share/cacti/site/plugins/weathermap/output -R

Configuration des dépôts dans Debian Squeeze

Adminstration Server Linux No Comments »

Après deux ans de développement, Debian publie la version 6.0 du projet de la distribution Linux au non de code Squeeze.

Quelques petits changements dans la configuration des dépôts.
Le dépôt « volatile » n’existe plus, il est remplacé par une branche squeeze-updates, il contient les mises à jour des paquets ne pouvant pas attendre une nouvelle version Debian tous les 2 ou 3 ans.

vi /etc/apt/sources.list
deb ftp://ftp.fr.debian.org/debian/ squeeze main contrib  non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb ftp://ftp.fr.debian.org/debian/ squeeze-updates main contrib  non-free
# facultatif
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

Utiliser les dépôts stable, testing et unstable en même temps sur debian

Adminstration Server Linux, Debian 4 Comments »

Si vous devez installer certain packets dans leur version la plus récent sur debian sans pour autant mettre à jour tous votre système cette manip est pour vous.

La première étape est de configurer vos dépots en ajoutant les différentes version.

vi /etc/apt/sources.list

Et le configurer comme ci-dessous :

################################################
## lenny
deb http://ftp.be.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.be.debian.org/debian/ lenny main contrib non-free

# lenny security
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

# volatile
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

################################################
## squeeze
deb http://ftp.be.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.be.debian.org/debian/ squeeze main contrib non-free

## squeeze security
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

################################################
## sid
deb http://ftp.be.debian.org/debian/ sid main contrib non-free
deb-src http://ftp.be.debian.org/debian/ sid main contrib non-free

## sid security
deb http://security.debian.org/ sid/updates main contrib non-free
deb-src http://security.debian.org/ sid/updates main contrib non-free

On va maintenant configurer la priorité des dépôts, cela se configure dans le fichier/etc/apt/preferences

vi /etc/apt/preferences

Et le remplir de cette façon :

Package: *
Pin: release o=apt-build
Pin-Priority: 989

Package: *
Pin: release o=volatile.debian.org,a=stable,l=debian-volatile
Pin-Priority: 988

Package: *
Pin: release o=Debian,a=stable,l=Debian-Security
Pin-Priority: 987

Package: *
Pin: release o=Unofficial Multimedia Packages,a=stable,l=Unofficial Multimedia Packages
Pin-Priority: 986

Package: *
Pin: release o=Debian,a=stable,l=Debian
Pin-Priority: 985

Package: *
Pin: release o=Debian,a=testing,l=Debian-Security
Pin-Priority: 99

Package: *
Pin: release o=Unofficial Multimedia Packages,a=testing,l=Unofficial Multimedia Packages
Pin-Priority: 98

Package: *
Pin: release o=Debian,a=testing,l=Debian
Pin-Priority: 97

Package: *
Pin: release o=Unofficial Multimedia Packages,a=unstable,l=Unofficial Multimedia Packages
Pin-Priority: 96

Package: *
Pin: release o=Debian,a=unstable,l=Debian
Pin-Priority: 95

Package: *
Pin: release o=Unofficial Multimedia Packages,a=experimental,l=Unofficial Multimedia Packages
Pin-Priority: 94

Package: *
Pin: release o=Debian,a=experimental,l=Debian
Pin-Priority: 93

Ensuite vous faites une mise à jour de la liste des packets disponible dans les dépôts

aptitude update

Voilà vous pouvez mnt installer vos packets dans la version que vous voulez, par défaut il utilisera la version stable. Pour utiliser une autre version il faut procéder de la façon suivante

aptitude install apache2 php5/testing

Aptitude installera apache en version stable et php5 en version testing, aptitude se chargera de régler le problème de dépendance mais également de version entre les dépendances

Installation de Cacti et des plugins Network Weathermap et Discovery

Administration des Réseaux, Adminstration Server Linux, Debian, Supervision 33 Comments »

Introduction

Cacti est un logiciel libre de supervision serveur basé sur la puissance de stockage de données de RRDTool. Il fonctionne grâce à un serveur web équipé d’une base de données et du langage PHP. Il peut-être considéré comme le successeur de MRTG et également comme une interface d’utilisation de RRDTool.

Il permet de représenter graphiquement divers statuts de périphériques réseau utilisant SNMP ou encore grâce à des scripts (Bash, PHP, Perl, VBs…) pour avoir par exemple l’espace disque restant ou bien la mémoire utilisée, la charge processeur ou le ping d’un élément actif. Les données sont récoltées auprès des différents agents SNMP (ou auprès des scripts locaux) grâce à un script php.

L’intérêt de ce logiciel réside principalement dans son principe de modèles (Templates) qui permet de créer de manière générique les graphiques afin de pouvoir les réutiliser. De manière générale, tout est modèle sous Cacti. Cela est avantageux lorsque de nombreuses données identiques doivent être observées, mais cela peut se révéler fastidieux à configurer lorsque les données sont hétérogènes.

Version des logiciels utilisés

Debian : Net Install Squeeze
Cacti : 0.8.7e-1.1
Plugin Architecture : 2.6

Installation du server LAMP

Une fois la distribution installée et la configuration réseau faites, on met à jour les dépôts et on met tous a jour, même si normalement tous doit être déjà à jour

aptitude update && aptitude full-upgrade

On installe maintenant le server apache2 avec php5 et mysql-server, plus d’autre outil nécessaire a cacti

aptitude install apache2 mysql-server php5 php5-cli snmp rrdtool phpmyadmin php-pear

Réponse aux questions durant l’installation :
Nouveau mot de passe du superutilisateur de MySQL : superpass
Confirmation du mot de passe du superutilisateur de MySQL : superpass
Serveur web à reconfigurer automatiquement: Apache2
Faut-il configurer la base de données de phpmyadmin avec dbconfig-common : oui
Mot de passe de l’administrateur de la base de données : superpass
Mot de passe de connexion MySQL pour phpmyadmin : laisser vide, il sera générer aléatoirement

Votre server web est fonctionnel, vous pouvez tester en allant sur http://ip-du-server/phpmyadmin

Installation de Cacti

aptitude install cacti cacti-spine

Réponse aux questions durant l’installation :
Faut-il configurer la base de données de cacti avec dbconfig-common : oui
Mot de passe de l’administrateur de la base de données : superpass
Mot de passe de connexion MySQL pour cacti : laisser vide, il sera générer aléatoirement
Type de serveur web: Apache2

Si tous c’est bien dérouler vous devriez avoir accès à l’interface de Cacti via cette adresse http://ip-du-server/cacti
Le login:password par défaut est admin:admin, il vous sera demandé de le changer immédiatement au premier login.
C’est terminer pour la partie installation de cacti

Installation du Plugin Architecture

Une grande force de Cacti est sa faculté d’utiliser des autres outils dans des plugins intégrés à son interface. L’avantage sera alors de pouvoir gérer plusieurs logiciels avec une seule plate-forme.

On le trouve sur le site http://cactiusers.org/downloads/

On commence par installer de quoi dézip et ensuite on télécharge l’archive

aptitude install unzip
cd /tmp
wget  http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7e-PA-v2.6.zip
unzip cacti-plugin-0.8.7e-PA-v2.6.zip

On copie les fichiers pré modifié dans cacti

cd /tmp/cacti-plugin-arch/files-0.8.7e
cp -r * /usr/share/cacti/site/

On met à jour la base de données

mysql -u root -p cacti < pa.sql

On va maintenant configurer et corriger quelque bug dans la configuration

cd /usr/share/cacti/site/
vi include/global.php

À la ligne 56 remplacer

$config['url_path'] = '/';

Par

$config['url_path'] = '/cacti/';

À la ligne 202 remplacer

include($config["library_path"] . "/adodb/adodb.inc.php");

Par

include("/usr/share/php/adodb/adodb.inc.php");

Le Plugin Architecture est installé et configuré, vous pouvez l’activé dans les permissions des utilisateurs
utilites -> user management -> admin -> Realm Permissions
Cochez Plugin Management

Ajout de plugins

On se place dans le dossier plugins de Cacti

cd  /usr/share/cacti/site/plugins

Network Weathermap

PHP Weathermap est un outil particulièrement utile qui génère des cartes graphiques pour mesurer les bandes passantes (en pourcentage ou en absolu) de vos liens réseaux.
Les cartes vont vous montrer s’il existe des goulots d’étranglements (bottlenecks) sur votre réseau et ainsi vous permettre de mettre à jour le bon lien réseau au lieu de les mettre à jour au hasard et à grand frais.

wget http://www.network-weathermap.com/files/php-weathermap-0.96a.zip
unzip php-weathermap-0.96a.zip
rm php-weathermap-0.96a.zip

Petite correction d’un bug connu

vi /usr/share/cacti/site/plugins/weathermap/setup.php

À la ligne 146 remplacer

if($_REQUEST["action"] == 'viewmapcycle')

Par

if (isset( $_REQUEST["action"] ) && $_REQUEST["action"] == 'viewmapcycle')

Discovery

Ce plugin ajoute la possibilité de découvrir automatiquement tous les périphériques d’un sous-réseau qui ne sont pas surveillées par Cacti et vous indique si SNMP est activé.
Disponible sur cactiusers.org

mkdir discovery
cd discovery/
wget http://cactiusers.org/downloads/discovery.zip
unzip discovery-0.8.5.zip
rm discovery-0.8.5.zip

Activation des plugins

Pour activer les plugins il suffit de remplir un tableau dans le fichier de configuration global

cd  /usr/share/cacti/site/
vi include/global.php

À la ligne 44 on remplace

$plugins = array();
//$plugins[] = 'thold';

Par

$plugins = array(
	'weathermap',
	'disco’
	) ;

Et enfin dans utilites -> user management -> admin -> Realm Permissions
Cochez:
Plugin -> Weathermap: Configure/Manage
Plugin -> Weathermap: View
View Host Auto-Discovery

Finalisation

On termine l’installation par créer le dossier rra si il n’a pas été créé automatiquement et on change le propriétaire des fichiers pour que tous fonctionne bien

mkdir  /usr/share/cacti/site/rra
chown www-data: -R usr/share/cacti/site

C’est fini, il ne vous reste plus cas ajouter vos devices et créer votre carte réseau.

Liens additionnels

Installer Debian Lenny dans une VM XenServer

Debian, Virtualisation 1 Comment »

Petit mémo pour installer une Debian Lenny dans une VM Xenserver

Installation

Tous d’abord, il faut installer une debian etch à partir des templates disponibles dans XenCenter.
Une fois l’installation terminée, on remplace etch par lenny dans les fichier source.list

vi /etc/apt/sources.list
vi /etc/apt/sources.list.d/citrix.list

On Install ensuite les nouvelles clés gpg des dépôts

wget -q http://updates.vmd.citrix.com/XenServer/5.5.0/GPG-KEY -O- | apt-key add -
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 9AA38DCD55BE302B
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 4D270D06F42584E6
apt-key add .gnupg/pubring.gpg

On met à jour la liste des paquets et on install les paquets suivant. On termine enfin par une mise à jour des clefs

aptitude update 
aptitude install debian-keyring debian-archive-keyring
apt-key update

Mise à jour vers Lenny

On lance un apt-get dist-upgrade pour mettre à jour la ditribution

aptitude dist-upgrade

Une fois la mise à jour vers Lenny faites, on install les tools Xen et le dernier kernel disponible pour Xen, si durant l’installation des paquets il demande d’annuler, il faut ignorer ce message et continuer.

aptitude install linux-doc-2.6.29-xs5.5.0.14 linux-headers-2.6.29-xs5.5.0.14 linux-image-2.6.29-xs5.5.0.14 linux-manual-2.6.29-xs5.5.0.14 linux-source-2.6.29-xs5.5.0.14 xe-guest-utilities

Avant de rebooter il est trés important de faire ce qui suit, sans quoi votre VM ne démarrera plus.
On ajoute les modules suivant au initramfs

vi /etc/initramfs-tools/modules

Et on ajoute

xenblk
xennet

On met à jour les changements en faisant

update-initramfs -u

On va maintenant changer le le kernel par défaut dans grub

vi /boot/grub/menu.lst

On remplace

default 0

Par

default 2

On termine par une mise à jour de grub

update-grub

Dernière étape, il faut changer l’interface de sortie de la console, pour ce faire on édite /etc/inittab

vi /etc/inittab

On remplace

1:2345:respawn:/sbin/getty 38400 tty1

Par

1:2345:respawn:/sbin/getty 38400 hvc0

On reboot finalement le système

reboot

Vous avez à présent une Debian Lenny fonctionnel dans votre VM XenServer

D’où proviennent les noms de code des distributions Debian ?

Debian No Comments »

Jusqu’ici les noms de code des distribution Debian proviennent des personnages du film « Toy Story » par Pixar.

  • buzz (Buzz Lightyear) est le cosmonaute,
  • rex est le tyrannosaure,
  • bo (Bo Peep) est la bergère,
  • hamm est la tirelire en forme de cochon,
  • slink (Slinky Dog ®) est le chien,
  • potato est bien sûr, Mr. Patate ®,
  • woody est le cowboy,
  • sarge est le sergent de l’armée de plastique vert,
  • etch est l’ardoise magique (Etch-a-Sketch ®),
  • lenny est la paire de jumelles.
  • sid est le garçon des voisins qui détruit les jouets

Installation et configuration du mod_security pour apache2 sous Debian

Adminstration Server Linux, Debian, Sécurité 14 Comments »

Le module Security est une sorte de firewall pour Apache qui apporte une solution aux problèmes de sécurité et d’attaques applicatives web. En effet, malgrés le déploiement de mesures de sécurité élevées sur un serveur web, il est toujours possible qu’une simple erreur de programmation dans un script « cgi » ou « php » mette en péril l’intégrité et la confidentialité des données stockées.
Pour faire simple ce module bloque les requêtes pouvant être dangereuses.
Exemple en image :

modsecurity

Installation.

Ce module n’est pas installé de base avec Apache, je vais vous proposer deux méthodes à vous de choisir la votre :
L’installation par la commande dpkg est très simple, wget doit être installé sur votre système.

wget http://etc.inittab.org/~agi/debian/libapache-mod-security2/mod-security-common_2.5.9-1_all.deb
wget http://etc.inittab.org/~agi/debian/libapache-mod-security2/libapache-mod-security_2.5.9-1_i386.deb

Installation du paquet :

dpkg -i mod-security-common_2.5.9-1_all.deb libapache-mod-security_2.5.9-1_i386.deb

Voila le module est installé. Maintenant on active ce dernier auprès d’Apache.

 a2enmod mod-security

L’installation du module Security est terminée

Configuration

La configuration du module Security consiste dans sa plus grande partie à ajouter des règles “de filtrage”.
Ces règles sont séparées en plusieurs fichiers (blacklist, proxy, règles de bases, rootkits, etc…).
On créé un répertoire modsecurity2 dans le répertoire /etc/apache2/, on se place dedans et on télécharge les règles.

mkdir /etc/apache2/modsecurity2/
cd /etc/apache2/modsecurity2/
wget http://www.gotroot.com/downloads/ftp/mod_security/2.0/apache2/apache2-gotrootrules-modsec2.0-latest.tar.gz

Une fois le téléchargement terminé nous allons décompresser l’archive contenant les règles.

tar zxvf apache2-gotrootrules-modsec2.0-latest.tar.gz

Puis créez un fichiers nommé mod_security pour y ajouter les lignes suivantes :

vi /etc/apache2/conf.d/mod_security
# A adapter en fonction de la version du module qui est utilisé.


# Analyse uniquement les requêtes dynamiques.
#SecFilterEngine DynamicOnly

# Active le filtrage.
SecFilterEngine On

# Rejette les requêtes ayant le status 500.
SecFilterDefaultAction "deny,log,status:500"

# Quelques règles de bases.
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckCookieFormat On
SecFilterCheckUnicodeEncoding Off
SecFilterNormalizeCookies On
# Active la version 1 (RFC 2965) cookies
SecFilterCookieFormat 1

# Ne donne aucune précision sur le serveur web.
SecServerResponseToken Off

# Scanner le flux de sortie.
#SecFilterScanOutput On
#SecFilterOutputMimeTypes "(null) text/html text/plain"

# Autorise presques toutes les valeurs de bytes.
SecFilterForceByteRange 1 255

# Masquer le serveur.
#fake server banner - NOYB used - no one needs to know what we are using
SecServerSignature "NOYB"

#SecUploadDir /tmp
#SecUploadKeepFiles Off

# Only record the interesting stuff
SecAuditEngine RelevantOnly
SecAuditLog logs/audit_log

# Configuration du module de debuggage.
SecFilterDebugLevel 0
SecFilterDebugLog /var/logs/apache2/modsec_debug_log

# Règles d'exlusion.
# Cette ligne doit rester devant les autres.
Include /etc/apache2/modsecurity2/exclude.conf

# Règles de protections.
Include /etc/apache2/modsecurity2/rules.conf

# Règles dédiées au spam.
Include /etc/apache2/modsecurity2/blacklist.conf

# Règles de filtrage des hotes, proxy, etc...
Include /etc/apache2/modsecurity2/blacklist2.conf

# Règles interdisant certains client, robots, etc...
Include /etc/apache2/modsecurity2/useragents.conf

# Protection contre les rootkits.
Include /etc/apache2/modsecurity2/rootkits.conf

# Règle empéchant l'utilisation du serveur comme proxy.
# A utiliser seulement si le serveur n'est pas en mod proxy.
Include /etc/apache2/modsecurity2/proxy.conf

# Quelques règles de plus, uniquement pour Apache2.
Include /etc/apache2/modsecurity2/apache2-rules.conf

La configuration du module est terminé, il ne reste plus qu’a relancer Apache.

/etc/init.d/apache2 restart

Mise à jour des règles.

Un script a été conçu pour permettre le téléchargement des nouvelles règles automatiquement.
Cette méthode nécessite l’ajout d’une tâche dans votre crontab.

Dans le répertoire /etc/cron.d/ nous allons créer un fichier modsecurity contenant ceci :

vi /etc/cron.d/modsecurity
# Tout les jours à 5h30 du matin.
30 5 * * * /etc/apache2/modsecurity2/modsec.sh

Ce script bash a été adapté pour une distribution Debian, il aura pour nom modsec.sh et sera placé dans /etc/apache2/modsecurity2/

vi /etc/apache2/modsecurity2/modsec.sh
#!/bin/sh

# Autoupdater for modsec rulesets.
 #
 # This script will attempt to update your rulefiles, and restart apache.
 # If it apache does not start after changing rules, it will roll back to
 # the old ruleset and restart apache again.
 #
 # Version: $Id: modsec.sh,v 1.1 2005/06/29 18:07:53 olei Exp $
 # URL: http://cs.evilnetwork.org/cycro
 # Copyright 2005, All Rights Reserved

APACHESTART="/usr/sbin/apache2ctl start"
 MODSECPATH="/etc/apache2/modsecurity2 "
 APACHEPID="/var/run/apache2.pid"

##########################################################################
 ######### you probably don't need to change anything below here ##########
 ##########################################################################

# urls
 BLACKLIST="http://www.gotroot.com/downloads/ftp/mod_security/blacklist.conf"
 RULES="http://www.gotroot.com/downloads/ftp/mod_security/rules.conf"
 APACHE2="http://www.gotroot.com/downloads/ftp/mod_security/apache2-rules.conf"

# internal
 PID=`cat ${APACHEPID}`
 UPDATED=0

echo -n "Changing PWD: "
 cd ${MODSECPATH}
 echo `pwd`

# blacklist
 echo -n "Updating blacklist.conf: "
 /usr/bin/wget -t 30 -O blacklist.conf.1 -q ${BLACKLIST}
 if [ `md5sum blacklist.conf | cut -d " " -f1` != `md5sum blacklist.conf.1 | cut -d " " -f1` ] ; then
 /bin/mv blacklist.conf blacklist.conf.bak
 /bin/mv blacklist.conf.1 blacklist.conf
 UPDATED=`expr $UPDATED + 1`
 echo "ok."
 else
 echo "allready up to date."
 /bin/rm -f blacklist.conf.1
 fi

# rules
 echo -n "Updating rules.conf: "
 /usr/bin/wget -t 30 -O rules.conf.1 -q ${RULES}
 if [ `md5sum rules.conf | cut -d " " -f1` != `md5sum rules.conf.1 | cut -d " " -f1` ] ; then
 /bin/mv rules.conf rules.conf.bak
 /bin/mv rules.conf.1 rules.conf
 UPDATED=`expr $UPDATED + 1`
 echo "ok."
 else
 echo "allready up to date."
 /bin/rm -f rules.conf.1
 fi

# apache2 rules
 echo -n "Updating apache2-rules.conf: "
 /usr/bin/wget -t 30 -O apache2-rules.conf.1 -q ${APACHE2}
 if [ `md5sum apache2-rules.conf | cut -d " " -f1` != `md5sum apache2-rules.conf.1 | cut -d " " -f1` ] ; then
 /bin/mv apache2-rules.conf apache2-rules.conf.bak
 /bin/mv apache2-rules.conf.1 apache2-rules.conf
 UPDATED=`expr $UPDATED + 1`
 echo "ok."
 else
 echo "allready up to date."
 /bin/rm -f apache2-rules.conf.1
 fi

# try restart
 if [ "$UPDATED" -gt "0" ]; then
 echo -n "Restarting apache: "
 /bin/kill -HUP ${PID} 2>/dev/null
 # did it work?
 if `/bin/kill -CHLD ${PID} >/dev/null 2>&1`; then
 echo "ok."
 exit 0
 fi
 echo "error. Apache not running."

# blacklist
 echo -n "Rolling back blacklist.conf: "
 /bin/mv blacklist.conf blacklist.conf.new
 /bin/mv blacklist.conf.bak blacklist.conf
 echo "ok."

# rules
 echo -n "Rolling back rules.conf: "
 /bin/mv rules.conf rules.conf.new
 /bin/mv rules.conf.bak rules.conf
 echo "ok."

# apache2 rules
 echo -n "Rolling back apache2-rules.conf: "
 /bin/mv apache2-rules.conf apache2-rules.conf.new
 /bin/mv apache2-rules.conf.bak apache2-rules.conf
 echo "ok."

# try starting httpd again
 `${APACHESTART}`
 PID=`cat ${APACHEPID}`

# did that fix the problem?
 if `/bin/kill -CHLD ${PID} >/dev/null 2>&1`; then
 echo "That did the trick."
 exit 0
 fi

echo "Fatal: Apache still not running! Run apache2ctl -t to find the error."
 exit 999
 fi

Il faut rendre ce script exécutable.

chmod +x /etc/apache2/modsecurity2/modsec.sh

Configurer SSH via un jeu de clé privée/publique

Adminstration Server Linux, Sécurité No Comments »

Dans ce mémo j’expliquerais comment générer un jeu de clé avec PuttyGen et comment l’installer sur le server afin que le user ROOT ne puisse se connecter qu’avec un jeu de clé.

A télécharger si vous ne les avez pas encore Putty et PuttyGen sur PuTTY Download Page

Génération d’une paire de clés (privée/publique) avec PuTTYGen

On commence par lancer PuTTYGen, choisir le type de clé à générer SSH-2 RSA, et la longueur de la clé 1024 bits. On clique ensuite sur le bouton Generate, il faut faire bouger la souris dans la fenêtre de PuTTY Key Generator de façon aléatoire, et c’est ce mouvement aléatoire qui va servir à générer la clé.

puttygen

Une fois la clé générée , on doit arriver à quelque chose ressemblant à ça :

puttygen2

On commence par remplir le champ passphrase afin d’avoir encore un peu de plus de sécurité. Ainsi, même si quelqu’un avait accès à notre clé privée, il lui faudrait le mot de passe pour s’en servir. On peut maintenant sauvegarder la clé publique et la clé privée; pour la clé publique on peut lui affecter l’extension que l’on veut, mais on prend généralement .pub, et on peut largement diffuser cette clé, alors que pour la clé privée, ce sera l’extension .ppk, et cette clé DOIT rester confidentielle.
Attention : laissez ouvert votre PuTTYGen ouvert, afin d’avoir la clé à copier/coller sous la main.

Enregistrement d’une session dans Putty

On va maintenant ajouter la configuration d’une session vers un serveur dans putty. Pour cela, ouvre Putty. On renseigne les champs hostname, Saved Session,  l’encodage des caractères dans Window > Translation (puisque la plupart des serveurs sont en UTF-8 alors que PuTTY est en ISO par défaut), etc. Pour gagner encore un peu de temps lors de chaque connexion, on peut rentrer le nom d’utilisateur dans Connection > Data, au champ auto-login username.

putty

On peut maintenant retourner dans Session, enregistrer notre session sous le nom que l’on veut, et, enfin, ouvrir la connexion en cliquant sur Open.

Ajout de la clé publique sur le serveur Linux

La première connexion au serveur se déroule comme d’habitude, il faut rentrer notre mot de passe. Une fois cette tâche effectuée, on va éditer le fichier /root/.ssh/authorized_keys, et on va copier/coller notre clé publique dans ce fichier (n’hésitez pas à créer le répertoire et le fichier s’ils n’existent pas). On retourne sur la fenêtre de PuTTYGen, et on copie/colle la clé. Si jamais vous aviez fermé bêtement la fenêtre de PuTTYGen, vous pouvez rouvrir le logiciel, et charger votre clé privée grâce au bouton load. Il faut respecter simplement le fait de placer une seule clé par ligne dans le fichier /root/.ssh/authorized_keys.

Configuration de OpenSSH

Il faut configurer le serveur ssh pour qu’il n’autorise que l’accès par clé y compris pour root. On passe les options suivantes dans /etc/ssh/sshd_config

PermitRootLogin without-password
AllowUsers toto root
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no

Il faut ensuite redémarrer le sshd

/etc/init.d/ssh reload

On peut désormait se loguer en root en utilisant uniquement un jeu de clé.

Installation du mod evasive sur apache 2.2 pour contrer des attaques DOS

Adminstration Server Linux, Sécurité 8 Comments »

Cette après midi après plusieurs test de charge du serveur Web, je me suis rendu compte que c’était un jeu d’enfant de faire planter à la fois le apache mais aussi la machine.

Comment me direz-vous, tous simplement en flood le serveur de centaine de thread, la charge CPU monte la ram aussi, vient ensuite le tour de la swap et puis c’est la fin, le serveur ne répond plus à rien sauf au ping.

htop

Après quelque recherche j’ai installé le mod_evasive qui permet de détecter les floods et les tentatives de déni de service.  Ce module renvoie des erreurs HTTP 403 lorsque le seuil de sollicitation du serveur Web par IP a été dépassé. Ce blocage dure pendant 10 secondes (paramétrable). Il est aussi possible de demander au module d’exécuter une commande lorsque qu’un flood est détecté, il est ainsi possible d’ajouter une règle Iptables à chaque nouvelle détection de flood.

apt-get install libapache2-mod-evasive

On édite le fichier de configuration d’apache2 et on ajoute les lignes suivante :

vi /etc/apache2/apache2.conf
# mod_evasive


DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 50
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 300
DOSEmailNotify "admin@majorxtrem.be"
DOSLogDir "/var/log/mod_evasive/"
#DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"
DOSSystemCommand "/bin/echo %s >> /var/log/mod_evasive/dos_evasive.log && /bin/date >> /var/log/mod_evasive/dos_evasive.log"
DOSWhiteList 127.0.0.1
DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*
DOSWhitelist 66.249.67.*

Les valeurs données dans cette exemple sont à adapter selon votre serveur.

Explications :

DOSHashTableSize Size of the hash table. The greater this setting, the more memory is required for the look up table, but also the faster the look ups are processed. This option will automatically round up to the nearest prime number.
DOSPageCount définie le nombre de fois ou une page peut être appelée par la même adresse IP avant que celle-ci soit bloquée.
DOSSiteCount définie le nombre de fois ou un site peut être demandé par la même adresse IP avant que celle-ci soit bloquée.
DOSPageInterval détermine un interval en seconde qui autorise l’affichage de la même page avant un bloquage.
DOSSiteInterval détermine un interval en seconde qui autorise l’affichage de d’un même site avant un bloquage.
DOSBlockingPeriod détermine la durée de bloquage.
DOSEmailNotify permet qu’un email soit envoyé à chaque bloquage d’adresses IP.
DOSSystemCommand permet de définir une commande bien précise en cas d’attaque (bannissement de l’adresse IP dans IPTables par exemple).
DOSLogDir détermine le chemin ou seront stockés les logs d’attaques.
DOSWhiteLt définie une liste blanche d’adresse IP.

DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"

Cette commande permet de bloquer une adresse IP à l’aide d’IPTable.
Cependant l’utilisation de DOSSystemCommand doit être prise au sérieux car en cas d’attaques massives l’instruction déterminée entre ”“ sera répétée autant de fois qu’il faut.

Pour que l’adresse IP soit ajoutée à IPTables il est nécessaire que l’utilisateur “www-data” ait les droits pour manipuler IPTables

On crée le dossier /var/log/mod_evasive/ et on lui donne les bon droits

mkdir /var/log/mod_evasive/
chown -R www-data /var/log/mod_evasive/

On charge le module

a2enmod mod-evasive

On termine en redémarrant apache

/etc/init.d/apache2 restart

On va maintenant tester la configuration à l’aide d’un petit script perl mais il faut avant tous commenter temporairement la ligne DOSWhiteList 127.0.0.1 et redémarrer apache

vi test.pl
#!/usr/bin/perl

# test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..100) {
  my($response);
  my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                      PeerAddr=> "127.0.0.1:80");
  if (! defined $SOCKET) { die $!; }
  print $SOCKET "GET /?$_ HTTP/1.0nn";
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}

On le rend exécutable

chmod +x test.pl

Et on le lance

./test.pl

Code Source & Résultat

Votre serveur apache est désormais capable de réagir sur des attaques DOS

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Connexion
ipv6 ready