Plugins Fail2Ban pour Munin

Adminstration Server Linux, Sécurité 14 Comments »

Ne trouvant pas mon bonheur parmi les plugins munin pour fail2ban j’ai décidé de l’écrire moi même. Le plugins s’adapte automatiquement à votre fail2ban car il récupère les jails activées.

On crée le fichier /usr/share/munin/plugins/fail2ban et on le remplit le avec le code ci-dessous

#! /bin/bash

PROGNAME=fail2ban
STATEDIR=/var/lib/munin/plugin-state
LISTJAIL=$(fail2ban-client status | grep " Jail list:" | sed 's/`- Jail list:\t\t//g' | sed 's/,//g')

if [ "$1" = "config" ]
then
 echo 'system.type ABSOLUTE'
 echo 'graph_title Fail2ban'
 echo 'graph_vlabel Number of ban'
 echo 'graph_category Security'
 for f  in $LISTJAIL; do
 echo "$f.label $f"
 done
 exit 0
fi

for f  in $LISTJAIL; do
 echo "$f.value $(fail2ban-client status $f | grep " Currently banned:" | sed 's/   |- Currently banned:\t//g')"
done

Ensuite on active le plugins en créant le lien symbolyque

ln -s /usr/share/munin/plugins/fail2ban /etc/munin/plugins/

Il faut également élever les privilèges de munin pour qu’il puisse utiliser fail2ban

vi /etc/munin/plugin-conf.d/munin-node

On ajoute à la fin :

[fail2ban]
user root

On termine on redémarrant munin

/etc/init.d/munin-node restart

Et vous devriez avoir après quelques jours un graphique semblable 🙂

Graph Munin Fail2ban

Graph Munin Fail2ban

Assassin’s Creed 2 le 20 novembre sur consoles

Jeux Vidéo No Comments »

Assassin’s Creed 2 s’est indéniablement imposé comme l’un des meilleurs jeux de l’E3 2009, Ubisoft vient d’annoncer sa date de sortie pour le 20 novembre en europe pour les consoles. La date pour PC n’est pas encore connue par contre …

Voici une interview de Patrice Désilets responsable créatif qui nous en apprend un peu plus sur le gameplay Assassin’s Creed 2


Assassin’s Creed 2 – Interview de Patrice Désilets

Plus cas attendre la date de sortie sur PC 🙂

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é 6 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

S’authentifier sur apache2 avec LDAP

Adminstration Server Linux 2 Comments »

Nous avons récemment mis en place en serveur LDAP sous OpenLDAP.
On va maintenant configurer apache2 pour qu’il puisse s’authentifier dans le LDAP.

Voici le lien vers la documentation officielle d’apache2 à ce sujet

On va commencer par activer les modules nécessaires d’apache2

a2enmod ldap auth_basic authnz_ldap authz_user

Ensuite vous éditez vos vhosts et ajouter une des configurations suivante entre les balises

L’utilisateur doit exister dans l’Organisation Unit Users

AuthType Basic
AuthName "Restricted Area"
AuthLDAPBindDN "uid=read_user,cn=Managers,dc=majorxtrem,dc=be"
AuthLDAPBindPassword "le_pass_de_read_user"
AuthBasicProvider ldap
AuthLDAPURL ldap://127.0.0.1/ou=Users,dc=majorxtrem,dc=be?uid
AuthzLDAPAuthoritative OFF
Require valid-user

L’utilisateur doit exister dans l’Organisation Unit Users et faire partie du groupe Admins

AuthType Basic
AuthName "Restricted Area"
AuthLDAPBindDN "uid=read_user,cn=Managers,dc=majorxtrem,dc=be"
AuthLDAPBindPassword "le_pass_de_read_user"
AuthBasicProvider ldap
AuthLDAPURL ldap://127.0.0.1/ou=Users,dc=majorxtrem,dc=be?uid
AuthzLDAPAuthoritative OFF
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN on
Require ldap-group cn=Admins,ou=Groups,dc=comitetig,dc=be

L’utilisateur doit être majorxtrem

AuthType Basic
AuthName "Restricted Area"
AuthLDAPBindDN "uid=read_user,cn=Managers,dc=majorxtrem,dc=be"
AuthLDAPBindPassword "le_pass_de_read_user"
AuthBasicProvider ldap
AuthLDAPURL ldap://127.0.0.1/ou=Users,dc=majorxtrem,dc=be?uid
AuthzLDAPAuthoritative OFF
Require user majorxtrem

On termine en rédémrant apache2

/etc/init.d/apache2 restart

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 11 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

Réalisasion d’un server COD4 sous Debian

Adminstration Server Linux, Debian, Jeux Vidéo 2 Comments »

1 Préparation du server

Une fois que la machine est installée, ou que vous venez de recevoir les accès du serveur que vous louez, il y a une série de petites choses à faire pour un fonctionnement optimal du serveur.

1.1 Mise à jour

Sur Debian il est très facile de mettre à jour son système, il faut être en root (su)

# apt-get update && apt-get upgrade

1.2 Installation des outils essentiel

Pour que votre server fonctionne correctement il faut ajouter certain programme et services. Nous allons les installer tous d’un coup et au fur et à mesure du tutorial les configurer.

# apt-get install vsftpd ssh vim ntpdate bzip2 htop md5tools build-essential screen libstdc++6-dbg

1.3 Configuration du server FTP : vsftpd

La configuration de vsftpd est assez simple et ce toruve dans le fichier /etc/vsftpd.conf

# vim /etc/vsftpd.conf

Une fois dans l’éditeur vim il faut faire insert pour passer en mode insertion, vous ne devez avoir dans votre configuration uniquement les lignes suivantes active, les autre doivent être commentées en utilisant un #

listen=YES
local_enable=YES
write_enable=YES
local_umask=001
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

Pour sauvegarder et quitter, vous faites escape et ensuite :wq

Vous redémarre maintenant votre server FTP

# /etc/init.d/vsftpd restart

1.4 Ajout de l’utilisateur COD4

Jusqu’à présent vous travailliez en root, c’est le super-admin de la machine. Il est très dangereux de faire tourner des services directement en root. Il convient donc de créer un simple utilisateur pour lancer les serveurs.

# adduser cod4
Ajout de l'utilisateur « cod4 »...
Ajout du nouveau groupe « cod44 » (1001)...
Ajout du nouvel utilisateur « cod44 » (1001) avec le groupe « cod44 »...
Création du répertoire personnel « /home/cod4 »...
Copie des fichiers depuis « /etc/skel »...
Enter new UNIX password:
Retype new UNIX password:
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur cod4
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []: COD4_user
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:
Ces informations sont-elles correctes ? [o/N] o

Vous venez de créer un utilisateur cod4 avec comme répertoire personnel /home/cod4 et le mot de passe ce que vous avez entrez.

Il est temps de tester votre serveur FTP en vous logant avec le user cod4. Vous arrivez dans un répertoire vide, c’est votre dossier personnel /home/cod4.

2 Installation et configuration du master install

Nous allons maintenant installer cod4 de façon professionnel et propre, les GSP utilisent en effet la même technique pour déployer un grand nombre de serveur d’un coup.

2.1 Copie des fichiers du jeu

2.1.1 Via le lecteur DVD

Si vous êtes à coté du serveur et que celui-ci dispose d’un cd-rom au tant en profiter.

Tous d’abord, on va crée le dossier master dans le dossier personnel du user cod4

# mkdir /home/cod4/master

Insérez le DVD dans le lecteur, le lecteur se trouve dans /media/cdrom. On va copier les fichier qui nous intéressent vers le dossier /home/cod4/master/

# cp -r /media/cdrom/Setup/Data/* /home/cod4/master/ 

Il a copié prés de plus de 1 GO de vidéo complètement inutile, on les supprime de la manière suivante

# rm -r /home/cod/master/main/video

2.1.2 Via le réseau

Si la première méthode ne vous plaie pas ou que vous n’avez pas moyen de le faire, connectez vous au server ftp avec le user cod4.

Ensuite créez un dossier master et dans ce dossier vous copier les fichiers et dossiers se trouvant dans le dossier \Setup\Data\ du DVD.

Ici aussi inutile d’uploader sur le serveur les vidéos du dossier \Setup\Data\main\video

2.1.3 Vérification

Une fois copier vous devez avoir quelque choses de similaire dans votre dossier /home/cod4/master

# ls /home/cod4/master
binkw32.dll cod4.ico cod.bmp codlogo.bmp iw3mp.exe iw3sp.exe localization.txt main miles Mods mss32.dll zone

2.2 Téléchargement et installation des binaires linux

Les binaires linux sont produits par une ICCULUS, c’est donc sur leur site qu’il faut allé récupérer les deniers binaires en date => http://icculus.org/news/news.php

# mkdir /home/cod4/temp
# cd /home/cod4/temp
# wget wget http://www.shrapnet.com/downloads/cod4-linux-server-06282008.tar.bz2
# tar xvfj cod4-linux-server-06282008.tar.bz2

Avant de continuer il est important de savoir si les données que vous avez copiées proviennent dans DVD français ou anglais. Pour le savoir rien de plus simple

# ls /home/cod4/master/zone

Les binaires ne sont disponible quand anlgais, si vous avez une version française pas de panique, vous aurez juste une manipulation supplémentaire à faire.

# cd cod4-linux-server/cod4-linux-server
# cp -r ./* /home/cod4/master/

Pour la version française il faut faire en plus

# cp -r zone/english/* /home/cod4/master/zone/french/

2.3 Test du server

On va vérifier si tous fonctionne correctement, pour ce test on utilise aucune config, mods ou quoi que ce soit. On va d’abord par définir le propriétaire des fichiers et ensuite on va se loguer en temps que l’utilisateur cod4.

# chown -R cod4 /home/cod4
# chgrp -R cod4 /home/cod4
# su cod4
$ cd ~/master
$ ./cod4_lnxded

Là vous devriez vous le serveur démarrer une fois fait, vous devez lancer une map.

map mp_backlot

Vous pouvez maintenant vous connectez au server en utilisant son ip et le port par défaut 28960.

C’est juste un test pourvoir si le serveur se lance correctement et que le patch est installé, il n’est pas du tous jouable notamment à cause du PB pas à jour.

Coupez le server.

quit

On va maintenant s’occuper de configurer le serveur a proprement parler

2.4 Mise à jour et installation de Punkbuster

On va exécuter pbsetup, il fonctionne de la même façon que la version windows à la différence qu’il est en ligne de commande. On l’initialise, ensuite on ajoute le master install et le met à jour.

$ cd ~/master
$ ./pbsetup.run –e
$ ./pbsetup.run -ag cod4 -ap /home/cod4/master/ --i-accept-the-pb-eula
$ ./pbsetup.run -u --i-accept-the-pb-eula

3 Configuration des servers

La base de votre serveur est maintenant opérationnel, on va maintenant s’occuper de lancer une voir plusieurs instance du serveur, en effet il est tous à fait possible de lancer plusieurs serveur cod4 sur la même machine à condition qu’ils ne soient pas sur le même port.

A fin de vous facilité la vie, voici un script qui vous permettra de gérer le Start-Stop-Reboot de votre serveur, il est même compatible avec une interface web de gestion spécialement.

3.1 Screen fonctionne-il ?

On commence par tester si on peut ouvrir un screen, en effet on en a besoin pour lancer les serveurs cod dedans car on peut les lancer en arrière plant. Si vous lancer un serveur directement depuis votre Shell, celui-ci devra rester en permance ouvert

$ screen
Cannot open your terminal '/dev/pts/0' - please check.

Si vous avez ce message faites

$ exit
# chmod 777 /dev/pts/0
# su cod4

Taper exit pour quitter le screen que vous venez d’ouvrir

exit

3.2 Installation du script de gestion des serveurs

Uploader avec le ftp le script server_cod4 à la racine, c’est-à-dire à coté du dossier master.

Il va vous permettre de gérer tous vos serveur cod4 sur cette machine.

Une fois uploadé il faut lui donner des droits d’exécution

$ chmod 775 ~/server_cod4

Il fonctionne de la manière suivante server_cod4

Les actions a votre disposition sont : start, stop, restart, list et check.

3.2.1 < action >

start : démarre le serveur sur le port avec le mod
stop : arrête le serveur sur le port
restart : reboot le serveur sur le port avec le mod
list permet de voir quel serveur tourne actuellement

$ ./server_cod4 list
6155.cod4_28960 (Detached)
1 Socket in /var/run/screen/S-cod4.

check : retourne 0 ou 1 si le serveur est lancé ou non, cette fonction sert uniquement avec l’interface web

3.2.2

Vous avez le choix entre un port de 20000 à 40000

3.2.3

C’est le nom du répertoire contenant le mod. Dans le cas ou vous ne le spécifiez pas le serveur démarre en Ranked.

3.3 Premier démarrage du serveur

On va lancer de nouveau le serveur à vide sans config à fin qu’il créer les fichiers et dossier de votre serveur.

./server_cod4 start 28960 promod
Server cod4 successfully on 28960
$ ./server_cod4 list
6155.cod4_28960 (Detached)
1 Socket in /var/run/screen/S-cod4.

Vous devriez obtenir quelque chose de semblable. On va couper le server pour configurer punkbuster, installer le promod et la cfg.

$ ./server_cod4 stop 28960
Stopping server cod4 on 28960

On va faire un petit état des lieux avant de continuer pour bien comprendre ce qu’on à fait jusqu’a présent.

$ cd ~
$ ls
cod4_28960 master server_cod4

Le dossier master contient la base de votre serveur
Le dossier cod4_28960 contient les fichiers de configuration du serveur tournant sur le port 28960

server_cod4 c’est le script de lancement

3.4 Config de punkbuster

$ cd ~/master
$ ./pbsetup.run -ag cod4 -ap /home/cod4/cod4_28960/ --i-accept-the-pb-eula
$ ./pbsetup.run -u --i-accept-the-pb-eula

3.5 Ajout de la CFG

Via le FTP uploader votre CFG dans le dossier /cod4_28960/mods/promod/ sous le nom server.cfg

L’emplacement est très important, vous ne devez pas installer de CFG dans le dossier master, elle serait en effet active sur tous les autres serveurs que vous lanceriez.

3.6 Ajout du mod

Toujours dans le dossier /cod4_28960/mods/promod/ uploader tous les fichiers du mods

Mais ce n’est pas tous, et cette partie est extrêmement importante, chaque mod sur cod4 à un fichier mod.ff, vous devez le également uploader dans le master install ce fichier exactement au même endroit.

~/cod4_28960/mods/promod/mod.ff

~/master/mods/promod/mod.ff

Vous l’aurez compris, si vous installer un mod < mon_mods > vous devez avoir dans l’install du server et dans le master install le même fichier au même endroit

~/cod4_/mods/< mon_mods > /mod.ff

~/master/mods/< mon_mods > /mod.ff

3.6.1 / !\ Piège à éviter / !\

Vous ne pouvez pas mettre dans le serveur cod4_28960 une version du promod dans le dossier mods/promod et une autre dans le dossier mods/promod du serveur cod4_29960.

Vous devez ABSOMUMENT mettre un nom différent si les mods ne sont pas identique et de même version.

3.7 Installation des scripts Punkbuster pour le streaming

Les éventuels scripts Punkbuster sont à uploader via le FTP dans le dossier /cod4_/pb

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