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

 

 

 

Installation de NRPE sur Nextenta

Administration des Réseaux, Non classé, Supervision 1 Comment »

Voici une procédure pour installer NRPE 2.13 sur NexentaStor afin de monitorer les Zpools avec nagios/centreon.

Connexion au serveur Nexenta en SSH et ensuite passage sur le shell complet

option expert_mode = 1
!bash

On met à jour les depôts

aptitude update

Ensuite on installe les paquets suivant

aptitude install make gcc openssl libssl-dev nagios-plugins nagios-nrpe-server openssl-tools

Le paquet NRPE n’est pas à jour dans les dépôts, on va donc le compiler et remplacer le daemon

cd /tmp
wget http://freefr.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.13/nrpe-2.13.tar.gz
tar xvf nrpe-2.13.tar.gz
cd nrpe-2.13

On lance la config

./configure

Et on compile

make all
make install

On remplace maintenant le deamon par le nouveau

cp /tmp/nrpe-2.13/src/nrpe /usr/sbin/nrpe

Ne pas oublier de configurer NRPE, notamment au niveau des serveurs autorisés

allowed_hosts=

Il ne vous reste plus cas installer et configurer les scripts nagios

Ajouter des réservations IPs au serveur DHCP – Win 2K8 R2

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

Lorsque l’on doit ajouter un grand nombre de réservations IPs, l’interface graphique peux vite devenir contraignante.

Voici les commandes afin d’automatiser l’ajout. Il faut tous d’abord préparer une feuille excel avec les infos suivantes.

add reservedip [address-ip] [mac -address] [name]

Ensuite dans une console vous tapez :

netsh
dhcp
server 192.168.3.192
scope 192.168.3.0
  • Server étant le serveur dhcp
  • Scope étant l’étendue dans laquelle vous souhaitez ajouter les IPs

Ensuite vous collez toutes les lignes de votre fichier excel

add reservedip 192.168.3.55 005b38e793ab pc1.home.be

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

WPAD : Auto-configuration d’un serveur proxy

Administration des Réseaux, Adminstration Server Linux 4 Comments »

Web Proxy Auto-Discovery. Il s’agit d’un protocole imaginé par Microsoft, qui permet d’effectuer automatiquement le paramétrage du server proxy de son navigateur.

Server DNS

Par défaut le browser cherche le sous-domaine wpad du domaine dans le quel on est connecté ensuite il lira a la racine de de ce domaine le fichier wpad.dat (http://wpad.mondomaine.lan/wpad.dat
Voici un exemple de ligne a mettre dans votre BIND

intranet        A       172.16.1.100
wpad            CNAME   intranet

Server DHCP

Dans la config du server DHCP il faut ajouter l’option 252, et lui indiqué le lien du fichier de configuration, les lignes suivante doivent se mettre en dehors d’une définition de range

option wpad-url    code 252 = text;
option wpad-url     "http://wpad.mondomaine.lan/wpad.dat\n";

Server WEB

Il faut maintenant configurer un vhost pour ce sous domaine


 DocumentRoot /home/website/wpad
 ServerName wpad.mondomaine.lan
 ServerAlias 172.16.1.100
 AddType application/x-ns-proxy-autoconfig .dat
 AddType application/x-ns-proxy-autoconfig .pac
 Redirect permanent /wpad.dat /proxy.pac
 
 Options FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 allow from all
 

Le fichier de config

Dans notre exemple nous avons définit la racine du vhost là /home/website/wpad

On crée le fichier proxy.pac

vi /home/website/wpad/proxy.pac

et on copie le code suivant

function FindProxyForURL(url, host)
{
if( shExpMatch(url, "!https:*") || isPlainHostName(host) || dnsDomainIs(host, ".mondomaine.lan"))
return "DIRECT";
else
return "PROXY srvproxy:3128";
}

Cette fonction va permettre de définir quand utiliser le proxy et de spécifier le proxy en question. Ici on se connecte directement au machine du même domaine par contre tous le reste utilise le proxy

Installation et configuration d’un serveur OpenLDAP sous Debian

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

ldapworm

OpenLDAP est une implémentation libre du protocole LDAP développée par The OpenLDAP Project.
Lightweight Directory Access Protocol (LDAP) est à l’origine un protocole permettant l’interrogation et la modification des services d’annuaire.

Nous allons utiliser le serveur LDAP afin de centraliser les informations utilisateurs des sites et services du serveur. En effet la plus par des services telles que les serveur web, ftp, proxy peuvent s’authentifier sur un serveur LDAP, mais également les CMS les plus populaires.

Avant de commencer l’installation on va vérifier le hostname de la machine

# hostname -f
server.majorxtrem.be

Vous devez obtenir quelque chose de similaire, si ce n’était pas le cas éditer le fichier /etc/hostname afin d’avoir :  nomdelamchine.domaine.com

On commence l’installation par le traditionnel apt-get

apt-get install slapd ldap-utils

Durant l’installation on vous demande simplement le password admin du serveur .

Vous tapez ensuite la commande slappasswd, elle va vous permettre de générer un password SSHA

# slappasswd
New password: toto
Re-enter new password: toto
{SSHA}gHus2hriMC95mCcmPtXbK8Nv/oh2hZy5

Copiez-le on va en avoir besoin dans le fichier de configuration de slapd, il se trouve ici :

vi /etc/ldap/slapd.conf

Vous vérifiez que suffix est égale à :

suffix          "dc=majorxtrem,dc=be"

Et ajouter les lignes :

rootdn          "cn=admin,dc=majorxtrem,dc=be"
rootpw          {SSHA}gHus2hriMC95mCcmPtXbK8Nv/oh2hZy5

On édite également afin que l’annuaire ne soit pas lisible en anonyme

access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=majorxtrem,dc=be" write
        by anonymous auth
        by self write
        by * none

access to *
        by dn="cn=admin,dc=majorxtrem,dc=be" write
        by dn="uid=read_user,cn=Managers,dc=majorxtrem,dc=be" read

On redémarre slpad

/etc/init.d/slapd restart

On va maintenant créer la base de l’annuaire

vi racine.ldif

Et on ajoute les lignes suivantes dedans

# Racine
dn: dc=majorxtrem,dc=be
objectClass: top
objectClass: dcObject
objectClass: organization
o: majorxtrem.be
dc: majorxtrem

# OU Manager
dn: cn=Managers,dc=majorxtrem,dc=be
objectClass: organizationalRole
objectClass: top
cn: Managers

# OU Groups
dn: ou=Groups,dc=majorxtrem,dc=be
objectClass: organizationalUnit
objectClass: top
ou: Groups

# OU Users
dn: ou=Users,dc=majorxtrem,dc=be
objectClass: organizationalUnit
objectClass: top
ou: Users

Ensuite on l’ajoute au LDAP :

ldapadd -f racine.ldif -D "cn=admin,dc=majorxtrem,dc=be" -w toto

À ce stade votre serveur est fonctionnel, on va tous de même installer une interface de gestion en PHP
apt-get install phpldapadmin

L’interface sera accessible via l’url http://ipduserver/phpldapadmin

Loguez vous et ajoutez un utilisateur read_user dans le groupe Manager
Le login est cn=admin,dc=majorxtrem,dc=be, le pass est celui que vous avez généré tous à l’heure

Cliquez sur manager et ensuite sur Create a child

ldap1

Choisissez : Simple Security Object

ldap2

Ensuite remplissez le username, le password et spécifiez SSHA pour l’encryption

ldap3
Ce user servira pour authentifier apache, phpbb & cie pour vérifier le login de vos utilisateurs

Dans un prochain article, on verra comment restrientre via apache l’accés à un dossier via authentification LDAP

Bloquer les scans de dossier par dictionnaire sur votre serveur WEB

Administration des Réseaux, Adminstration Server Linux 4 Comments »

Je vous expliquais hier comment se protéger des scans Dfind. Aujourd’hui nous allons aller un peu plus loin dans la sécurisation de son server web en bannisant tous requêtes se faisant directement sur l’ip et non via un nom de domaine.

Concrètement dans les logs d’apache vous devriez avoir quelque chose de semblable :

[Fri May 01 14:52:11 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/phpMyAdmin
[Fri May 01 14:52:11 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/PHPMYADMIN
[Fri May 01 14:52:11 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/phpmyadmin/main.php
[Fri May 01 14:52:12 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/pHpMyAdMiN
[Fri May 01 14:52:12 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/PhPmYaDmIn
[Fri May 01 14:52:13 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/phpMYadmin
[Fri May 01 14:52:13 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/PHPmyadmin
[Fri May 01 14:52:13 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/PHPMYadmin
[Fri May 01 14:52:14 2009] [error] [client 24.123.67.41] client denied by server configuration: /var/www/phpmyADMIN

On  commence par préparer apache, en effet on va déclarer un vhost qui s’occupera de traiter les requêtes sur l’IP

On crée le dossier /var/empty et on lui donne les droits adéquats pour que apache puisse lire le dossier

mkdir /var/empty
chown www-data:www-data -R /var/empty
chmod 664 -R /var/empty

Ensuite vous créez le vhost

vi /etc/apache2/sites-available/nodnsuse

Et vous copier les lignes suivantes dedans :


        DocumentRoot /var/empty/
        
                Order Deny,Allow
                Deny from All
        

Vous activez le vhost et relancez apache2

a2ensite nodnsuse
/etc/init.d/apache2 restart

On installe Fail2Ban si vous ne l’avez pas encore fait

apt-get update && apt-get install fail2ban

On edit le fichier jail.conf pour y ajouter la nouvelle règle

vi /etc/fail2ban/jail.conf

On ajoute à la fin du fichier les lignes suivantes :

[apache-nodnsuse]

enabled = true
port    = http,https
filter  = apache-nodnsuse
logpath = /var/log/apache*/*error.log
maxretry = 1
banTime = 86400

On ajoute le fichier de détection

vi /etc/fail2ban/filter.d/apache-nodnsuse.conf

Et on y ajoute :

[Definition]
failregex = [[]client []] client denied by server configuration: /var/empty/.*
ignoreregex=

Vous redémarrez enfin Fail2Ban et consulter les logs pour voir qui sera le premier gagnant

/etc/init.d/fail2ban restart && tail -f -n 30 /var/log/fail2ban.log

Bloquer les attaques de type w00tw00t.at.ISC.SANS sur Apache2

Administration des Réseaux, Adminstration Server Linux 4 Comments »

apache_w00tw00tSi vous avez un serveur Apache, vous avez très certainement dans les logs des attaques de type w00tw00t.at.ISC.SANS. Elles sont le fruit de kiddies utilisant un logiciel de scanning nommé DFind

Si votre serveur est à jour et correctement configuré, vous ne devriez pas en avoir peur. Mais on va quand même s’occuper de ces petits mariols du net tout juste bon à utiliser un script.

On va installer Fail2Ban est dés que l’on trouvera la signature du scanner dans les logs, on bannira l’IP de l’attaquant via iptables, simple et radicale.

On commence par mettre à jour les dépôts et installer fail2ban

apt-get update && apt-get install fail2ban

On créer maintenant le fichier qui ajoutera une règle iptables

vi /etc/fail2ban/action.d/iptables-allports.conf

On copie les lignes suivantes dedans

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
# Modified: Yaroslav O. Halchenko 
#             made active on all ports from original iptables.conf
#
# $Revision: 658 $
#

[Definition]

# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD
#
actionstart = iptables -N fail2ban-
              iptables -A fail2ban- -j RETURN
              iptables -I INPUT -p  -j fail2ban-

# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop = iptables -D INPUT -p  -j fail2ban-
             iptables -F fail2ban-
             iptables -X fail2ban-

# Option:  actioncheck
# Notes.:  command executed once before each actionban command
# Values:  CMD
#
actioncheck = iptables -n -L INPUT | grep -q fail2ban-

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:      IP address
#            number of failures
#          

On créé maintenant le fichier qui contenant le regex de détection de la signature de Dfind

vi /etc/fail2ban/filter.d/apache-w00tw00t.conf

On le rempli avec ce qui suit

# w00tw00t.at.ISC.SANS.DFind

[Definition]

# Option:  failregex
# Notes.:  regex to match the w00tw00t scan messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching.
# Values:  TEXT
failregex = [[]client []] (client sent HTTP/1.1 request without hostname|Invalid method in request|request failed: URI too long|erroneous characters after protocol string)

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT

ignoreregex =

Pour finir on édit le fichier jail.conf

vi /etc/fail2ban/jail.conf

Et on y ajoute les lignes suivantes, elles on pour effet de bannir complètement pendant 24h l’IP des attaquant.

[apache-w00tw00t]
enabled  = true
filter   = apache-w00tw00t
action   = iptables-allports[name=w00tw00t]
logpath  = /var/log/apache2/error.log
maxretry = 1
bantime  = 86400

On redémarre Fail2ban

/etc/init.d/fail2ban restart

On peut à présent attendre tranquillement les prochaines attaques

tail /var/log/fail2ban.log
2009-04-30 20:24:29,858 fail2ban.actions: WARNING [apache-w00tw00t] Ban 85.114.141.205
2009-04-30 20:24:29,906 fail2ban.actions: WARNING [apache-w00tw00t] Ban 62.75.220.143
2009-04-30 20:24:29,954 fail2ban.actions: WARNING [apache-w00tw00t] Ban 212.180.3.123
2009-04-30 20:24:30,001 fail2ban.actions: WARNING [apache-w00tw00t] Ban 91.121.210.244
2009-04-30 20:26:03,142 fail2ban.actions: WARNING [apache-w00tw00t] Ban 89.19.1.18

Installation d’OpenVPN over HTTPS sous debian

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

Avant-propos

OpenVPN est un logiciel permettant de créer des réseaux privés virtuels sans utiliser des technologies telles que PPtP (Microsoft) ou IPSec. Il est de plus disponibles sur de nombreux systèmes d’exploitation (Microsoft Windows, GNU / Linux, MacOS X, …). C’est une solution simple pour gérer un réseau privé virtuel composé de machines hétéroclites dans un environnement n’autorisant pas IPSec.

Dans notre cas nous allons utiliser OpenVPN over HTTPS afin de contourner les éventuels restrictions que l’on trouve à l’école ou au boulot.

Voici un schéma du réseaux que nous allons mettre en place

tunnelvpn

Le server dispose de deux ips, l’une public et une autre privée pour le réseau VPN
Eth0 : 91.121.95.122
Tun0 : 172.16.0.1

Le client dispose également de deux ips, l’ip de l’interface normal donnant accès au net et l’ip du l’interface virtuel d’OpenVPN
Réseau local : 10.1.6.30
Interface virtuel 172.16.0.6

Voyons maintenant en détail l’installation et la configuration du server

Server OpenVPN

L’installation d’OpenVPN se fait simplement par la ligne de commande :

apt-get install openvpn openssl

Création du certificat de l’autorité de certification

La partie la plus compliquée et la plus fastidieuse dans la mise en place d’un serveur OpenVPN concerne la génération des clés et des certificats. OpenVPN est livré avec plusieurs scripts permettant de générer plus facilement les clés et les certificats pour OpenSSL. Ces scripts sont enregistrés dans le dossier « easy-rsa » :

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

On maintenant configuré les variable du script, pour ce faire on édite le fichier vars :

Vi /usr/share/doc/openvpn/examples/easy-rsa/2.0/vars

Tous en bas on trouve :

export KEY_COUNTRY="BE"
export KEY_PROVINCE="Belgium"
export KEY_CITY="Namur"
export KEY_ORG="MajorXtrem"
export KEY_EMAIL="admin@majorxtrem.be"

Une fois le fichier modifié, la ligne suivante permet d’initialiser les variables pour les scripts :

source ./vars

Le script suivant, permet de créer ou de réinitialiser le sous-dossier « keys » :

./clean-all

Le script suivant permet de créer le certificat principal du serveur « ca.crt » et la clé correspondante « ca.key » :

./build-ca

Pour le « Common Name » il faut le renseigner manuellement, exemple le FQDN de la machine

Création du certificat et de la clé pour le serveur OpenVPN

Le script suivant permet de créer le certificat et la pour le serveur VPN

/build-key-server server

ATTENTION : Pour les questions, la plupart des champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement. Exemple le FQDN de la machine

Pour les questions, tous les champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement.
Je n’ai pas renseigné le champ « password »

Création du certificat et de la clé pour un client OpenVPN

Le script suivant permet de créer le certificat et la clé pour le client VPN.

./build-key johann-laptop

Lorsque le script vous pose des questions, utilisez les valeurs par défaut, mais faites bien attention de répondre y aux questions :
Pour le « Common Name » il faut le renseigner manuellement, exemple le FQDN de la machine
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y

Création du paramètre Diffie Hellman

Le script suivant permet de créer dans « keys » le fichier « dh1024.pem » :

./build-dh

Mise en place des certificats et des clés

concernant le serveur OpenVPN, le plus simple est de copier les 4 fichiers dans le dossier « /etc/openvpn » :

cp ./keys/ca.crt /etc/openvpn/
cp ./keys/ca.key /etc/openvpn/
cp ./keys/server.crt /etc/openvpn/
cp ./keys/server.key /etc/openvpn/
cp ./keys/dh1024.pem /etc/openvpn/

Création d’un utilisateur avec des droits limités pour OpenVPN

Pour limiter les risques d’attaques sur OpenVPN, il est important que le processus d’OpenVPN fonctionne sur un utilisateur n’ayant aucun droit sur le système.

Souvent, l’utilisateur « nobody » est utilisé par défaut, mais il est encore plus sécurisant de faire tourner chaque processus avec un utilisateur différent. Donc, pour le processus OpenVPN, nous allons créer l’utilisateur « openvpn » :

groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn
chown openvpn:openvpn -R /etc/openvpn/

Génération d’une clef TLS

Nous allons maintenant générer une clef qui nous protègera de certains types d’attaques. Elle va nous permettre de créer un pare-feu HSA :

openvpn --genkey --secret /etc/openvpn/ta.key

Configuration d’OpenVPN

On va partir d’une configuration vierge

Mv /etc/openvpn/server.conf /etc/openvpn/server.conf_old
Vi /etc/openvpn/server.conf

Ensuite on copie la config suivante :

# Server configuration
mode server
dev tun
max-clients 4
port 443
port-share 91.121.95.122 4443
server 172.16.0.0 255.255.255.0
proto tcp
keepalive 10 120
persist-key
persist-tun
comp-lzo

# SSL parameters
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
tls-auth ta.key 0
tls-server

# VPN Gateway offer DNS parameters
push "dhcp-option DOMAIN majorxtrem.be"
push "dhcp-option DNS 172.16.0.1"
push "dhcp-option NTP 172.16.0.1"

# VPN Gateway offer this routes to clients
push "redirect-gateway"
push "route 172.16.0.0 255.255.255.0"
ifconfig-pool-persist ipp.txt

# Fix MTU problems
mssfix 1300

# Drop root privileges
chroot /etc/openvpn
user openvpn
group openvpn

#  Gestion des clients
client-to-client
client-config-dir ccd

# Logging configuration
status /var/log/openvpn-status.log
verb 1

Les paramètres port et port-share sont extrêmes important et requière une petite explication.

Le server OpenVPN tournera sur le port 443 pour pouvoir passer à travers d’éventuel proxy dans le cas ou l’accès direct au net n’est pas possible là ou vous vous trouvez. Ce pendant apache écoute aussi sur le port 443, on va donc dire a OpenVPN de transmettre les requêtes qui ne lui sont pas attribuer sur le port 4443. Il faut évidement configurer vos vhosts ssl apache sur le port 4443 et ne plus le mettre à l’écoute du port 443 mais 4443.

cat /etc/apache2/ports.conf
Listen 80
Listen 4443
cat /etc/apache2/sites-available/ssl
NameVirtualHost 91.121.95.122:4443

    …
    …

Pour le reste des option je vous invite a voir leur signification sur la doc d’OpenVPN (http://openvpn.net/index.php/documentation/manuals/openvpn-21.html)

Ne pas oublier de redémarrer apache et OpenVPN

/etc/init.d/apache2 restart
/etc/init.d/openvpn restart

Ne pas hésiter à regarder dans les logs que tout c’est bien passé :

tail -n 100 /var/log/syslog

Bien vérifier également que le processus tourne sous l’utilisateur « openvpn »

ps aux | grep openvpn

Pour finir, si tout c’est bien passé l’interface « tun0 » doit apparaître dans la configuration du réseau :

ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet adr:172.16.0.1  P-t-P:172.16.0.2  Masque:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:100
          RX bytes:1436 (1.4 KiB)  TX bytes:1436 (1.4 KiB)

Et il doit être possible de la pinguer :

ping 172.16.0.1

Configuration du NAT

L’objectif du VPN étant d’outre passé les limite du réseau dans le quel on se trouve, il serait peut-être utile d’activé le forward des paquet sur le server

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE

Voilà pour la partie serveur 🙂 On va maintenant installer et configurer la partie client

Client OpenVPN sous Windows Seven

On télécharge la dernier version en date à savoir la 2.1_rc15 à partir du site d’OpenVPN ( http://openvpn.net/release/ ).
L’installateur ne fonctionne pas sous seven, il suffit de faire clic droit compatibilité et de choisir Windows XP SP3

Récupérer les key et certificats sur le serveur, ils se trouvent dans le dossier :
/usr/share/doc/openvpn/examples/easy-rsa/2.0/key/

Vous avez besoin de la clef et du certificat du client, du certificat racine ainsi que de la clef
○ johann-laptop.crt
○ johann-laptop.key
○ ca.crt

Vous avez également besoin de la clef TSL, elle se trouve dans le repertoire /etc/openvpn/
○ ta.key

Copiez ces 4 fichiers dans le répertoire conf C:\Program Files\OpenVPN\config du client

Lancer ensuite le GUI d’OpenVPN, et dans la zone de notification faites un clic droit dessus et sélectionner « edit config »

# Client configuration
client
dev tun
remote 91.121.95.122 443
proto tcp
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo

# SSL parameters
ca ca.crt
cert johann-laptop.crt
key johann-laptop.key
tls-auth ta.key 1 

# Route and Network
route-method exe
route-delay 2
shaper 100000000 

# Log
verb 3

Sur l’icône dans la zone de notification faites connect

Si tous fonctionne bien, vous devriez être capable de pinguer le serveur via le tunnel

Ping 172.16.0.1

Démarrer une console et tappez route print

Network Destination	Netmask		Gateway		Interface	Metric
0.0.0.0		0.0.0.0		172.16.0.5	172.16.0.6	31
91.121.95.122		255.255.255.255	192.168.3.1	192.168.3.9	21

Vous devez avoir quelque chose de la sorte, a savoir que la passerelle par défaut est maintenant 172.16.0.5
Et que pour joindre le server VPN la route a prendre est l’ancienne passerelle par défaut

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