jeudi 23 avril 2009

APACHE : Redirection automatique domaine.com vers www.domaine.com

Pour rediriger automatiquement les requetes sur domaine.com vers www.domaine.com, mettre ceci dans votre .htaccess .

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.domaine\.fr [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.domaine.fr/$1 [L,R=301]

mercredi 22 avril 2009

Lenny : Installer PhpSysInfo

PhpSysInfo n'est pas présent sur les paquets Debian. Il faut le telecharger:
wget http://ovh.dl.sourceforge.net/sourceforge/phpsysinfo/phpsysinfo-2.5.3-rc1.tar.gz

Décompressez-le dans votre dossier web adequate.

Dans le cadre de l'article APACHE : PHP4 et PHP5 sur le même serveur, il faudra indiquer à PhpSysInfo d'utiliser PHP5.

Dans votre dossier web mettre le .htaccess pour php5 avec les 2 lignes suivantes.
AddHandler x-httpd-php5 .php
Action x-httpd-php5 /cgi-bin/php

Il est recommandé de restreindre PhpSysInfo à votre propre IP seulement, comme vu dans l'article "APACHE : Activer le server-status".

mardi 21 avril 2009

Lenny : Installer PhpMyAdmin

Pour installer PhpMyAdmin, tapez la commande suivante sous Debian:
apt-get install PhpMyAdmin

Vous pouvez acceder à phpmyadmin via l'adresse http://127.0.0.1/phpmyadmin par exemple.

Dans le cadre de l'article APACHE : PHP4 et PHP5 sur le même serveur, il faudra indiquer à PhpMyAdmin d'utiliser PHP5 pour eviter le probleme avec la librairie mcrypt.

Dans /usr/share/phpMyAdmin mettre le .htaccess pour php5 avec les 2 lignes suivantes:
AddHandler x-httpd-php5 .php
Action x-httpd-php5 /cgi-bin/php

Si vous le pouvez, restreignez PhpMyAdmin à votre propre IP seulement, comme vu dans l'article APACHE : Activer le server-status.

lundi 20 avril 2009

APACHE : PHP4 et PHP5 sur le même serveur

Sur Debian Lenny, cela necessite un serieux bricolage. Il faut vraiment savoir ce que l'on fait.

Il faut commencer par ajouter etch au /etc/apt/sources.list en inserant la ligne suivante:
deb http://ftp.fr.debian.org/debian etch main

Puis on installe php4 en tant que module
apt-get install php4

et PHP5 en tant que CGI.
apt-get install php5-cgi

Surtout, sous aucun prétexte, ne pas installer le paquet php5.

Il faut activer le module actions puis redemarrer.
a2enmod actions
/etc/init.d/apache2 restart

A ce moment, un appel en php à la fonction phpinfo() devrait vous retourner la version de php4 installée.

Nous allons utiliser un fichier .htaccess pour passer du php4 à php5 dans le dossier voulu.

Inserer dans le .htaccess les lignes suivantes
AddHandler x-httpd-php5 .php
Action x-httpd-php5 /cgi-bin/php

Puis re-afficher phpinfo(). Normalement vous êtes désormais en PHP5. Vous pouvez switcher comme vous voulez entre php4/php5 grace à ce .htaccess en ajoutant ou commentant ces 2 lignes ci-dessus.

Nous pouvons désormais installer les extensions.

Installer l'extension GD
apt-get install php4-gd php5-gd

Installer le support de mysql pour PHP5
apt-get install php5-mysql

Si vous installez directement php4-mysql, lipaprutil1 risque d'entrer en conflit avec php4-mysql et vouloir supprimer un tas de paquets Apache. Il ne faut surtout pas! Nous allons donc retrograder vers une ancienne version Etch de libaprutils1 :
apt-get install "libpaprutil1=1.2.7+dfsg-2"

Puis installer php4-mysql. Normalement il n'y a plus de problemes.
apt-get install php4-mysql

Un rapide coup d'oeil à php -v peut vous indiquer que php4 connait quelques soucis avec les types magic-mime.

Si il y a des erreurs lors du php -v et dans les logs Apache , editer /usr/share/file/magic.mime et commenter les lignes suivantes:
#0 regex BEGIN[[:space:]]*[{] application/x-awk ##
#0 search/400 \\input text/x-tex
#0 search/400 \\section text/x-tex
#0 search/400 \\setlength text/x-tex
#0 search/400 \\documentstyle text/x-tex
#0 search/400 \\chapter text/x-tex
#0 search/400 \\documentclass text/x-tex

ainsi que la ligne contenant x-inform qui peut poser probleme également.

Redemarrez apache, verifiez les logs. Tout fonctionne.

Pour aller plus loin sur le sujet:
http://www.siteduzero.com/tutoriel-3-34539-php4-et-php5-en-meme-temps-sur-un-serveur-linux.html
http://packages.debian.org/etch/libaprutil1
https://forum.debian-fr.org/viewtopic.php?f=3&t=17168
http://forum.ovh.com/showthread.php?t=36949

dimanche 19 avril 2009

APACHE : Activer le server-status

Normalement, le module est déjà installé. Il suffit de l'activer:
a2enmod status

Puis ajouter, par exemple dans le VirtualHost on dans le general de /etc/apache2/apache2.conf:


SetHandler server-status
Order Deny,Allow
Allow from all


Dans ce cas on autorise l'accès à tous. Il sera bon par la suite de le limiter à votre seul ip de la façon suivante
Order Deny,Allow
Deny from all
Allow from 127.0.0.1

Il faut egalement mettre dans /etc/apache2/apache2.conf
ExtendedStatus On

Et redemarrer Apache, verifier tous les logs.

Vous retrouverez les principales infos serveurs à l 'adresse http://mondomaine.tld/server-status

samedi 18 avril 2009

APACHE : Modifier la signature du serveur

Bien que la sécurité par l'obscur ne soit pas ce que je préfère, il est tout de même important de cacher la version de son serveur pour donner un minimum d'informations à un eventuel hacker.

Pour cela, modifier ou ajouter dans /etc/apache2/apache2.conf
ServerTokens Prod
ServerSignature Off

Et redemarrer Apache, verifier tous les logs.

vendredi 17 avril 2009

APACHE : Utiliser le mod_evasive

Le mod-evasive permet d'éviter les attaques par saturation (multiples connections en un minimum de temps)

Installer le mod-evasive (sous Debian)
apt-get install libapache2-mod-evasive

Activer le mod-evasive
a2enmod mod-evasive

Dans /etc/apache2/conf.d/evasive ajouter ceci


DOSHashTableSize 3097
# Nbre d'affichage de la même page par IP : 2
DOSPageCount 2
# Nbre d'affichage du même site par IP : 50
DOSSiteCount 50
# Interval d'affichage de la même page par IP : 1 seconde
DOSPageInterval 1
# Interval d'affichage du même site par IP : 1 seconde
DOSSiteInterval 1
# Durée du blocus (exprimé en secondes)
DOSBlockingPeriod 10
# Notification par adresse email pour être prévenu
DOSEmailNotify adresse@email.com
# nouveau dossier pour y placer le logs du module
DOSLogDir "/var/log/apache2/evasive/"
# Utlisation de iptables pour bannier l'IP qui tente de saturer le serveur
#DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"
# Liste blanche permettant à une IP d'effecuer un nombre illimité de requètes
#DOSWhiteLt 127.0.0.1


Puis créer le dossier /var/log/apache2/evasive/ et lui donner les bons droits pour que Apache puisse ecrire dedans.
mkdir /var/log/apache2/evasive
chown -R www-data:www-data /var/log/apache2/evasive

Et redemarrer Apache, verifier tous les logs.

Pour tester, on peut utiliser un fichier Perl.

Creer test-evasive.pl et y ajouter ceci:
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..50) {
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.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}

Puis
chmod u+x test-evasive.pl
./test-evasive

Vous devez avoir des reponses normales "200" puis des reponses "403" lorsque que le mod-evasive detecte l'attaque par saturation du script test-evasive.pl.

mercredi 15 avril 2009

APACHE : Utiliser le mod_bw (bandwith)

Le module Bandwith permet de gerer la bande passante de chaque client VirtualHost individuellement.

Installer le module (sous Debian)
apt-get install libapache2-mod-bw

Activer le module
a2enmod bw

Modifier le virtualHost. Pour les 2 premieres lignes, se referer à l'article "Utiliser le module vhost_alias pour simplifier les virtualHosts".


Options +FollowSymLinks
VirtualDocumentRoot /var/Www/%0.0
#Gestion BandWith
BandWidthModule On
#ON LIMITE LA BANDE PASSANTE TOTALE A 5Mb/s
BandWidth all 5000000
#ON LIMITE LES FICHIERS DE + DE 5Mo à 500kb/s
LargeFileLimit all 5000 500000
#LE NB MAX DE CONNECTIONS à 20.
MaxConnection all 20
#LE MINIMUM ALLOUE DOIT ETRE DE 20Kb/s
MinBandWidth all 20000


Puis redemarrer apache et verifier attentivement les logs pour voir si tout va bien.

mardi 14 avril 2009

APACHE: SSL sur un multi-hosts

Mon but ici est que les sites web du VirtualHost aient un accès securisé au repertoire /admin, c'est à dire qu'ils transmettent le login/mdp encodé et non en clair. Je ne tiens pas des alertes de sécurité dû au même certificat utilisé pour tous les domaines.

Dans un premier temps nous allons générer notre certificat.

openssl genrsa -out my-ca.key 2048
openssl req -new -x509 -days 3650 -key my-ca.key -out my-ca.crt
openssl x509 -in my-ca.crt -text -noout

Nous avons donc, par l'intermédiaire de la première commande, généré une clé. Par la seconde, nous avons généré le certificat pour qu'il soit fonctionnel 10 ans. Et enfin, par la dernière commande, nous avons rempli ce certificat.

Ensuite nous allons créer le certificat pour le domaine en particulier

openssl genrsa -des3 -out test.com.key 1024
openssl req -new -key test.com.key -out test.com.csr

Important lors de la seconde commande : Dans Common Name il faut mettre le VRAI nom du serveur, exemple : test.com ou www.test.com

openssl x509 -req -in test.com.csr -out test.com.crt -sha1 -CA my-ca.crt -CAkey my-ca.key -CAcreateserial -days 3650

Une fois que tout cela est créé, pour éviter tout piratage, changez les permissions sur les fichiers *.key par cette commande :
chmod 0400 *.key

Nous devons à présent copier ces fichiers dans le répertoire d'Apache, pour cela :
cp test.com.crt /etc/apache2/ssl/ssl.crt
cp test.com.key /etc/apache2/ssl/ssl.key
cp test.com.crt /etc/apache2/ssl/my-ca.crt

Puis creer un virtualHost. Pour les 2 premieres lignes, se referer à l'article "Utiliser le module vhost_alias pour simplifier les virtualHosts"


Options +FollowSymLinks
VirtualDocumentRoot /var/www/%0.0

#SECTION SSL
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key
SSLCertificateChainFile /etc/apache2/ssl/my-ca.crt
SSLCACertificateFile /etc/apache2/ssl/my-ca.crt


Enfin, nous allons modifier le VirtualHost non-ssl (port 80) pour que l'on redirige automatique en sécurisé lorsque l'on invoque /admin.


Options +FollowSymLinks
VirtualDocumentRoot /var/www/%0.0
#GESTION DU SSL
SSLEngine off
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} /admin
RewriteRule ^(.*)$ https://%{HTTP_HOST}:443/admin


Puis on redemarre Apache
/etc/init.d/apache2 restart

Puis on fait des test http/https etc... pour s'assurer que tout est ok.

Plus d'informations sur le sujet
http://francois.openmod.org/blog/index.php?post/2007/05/28/55-apache2-en-mode-securise-sous-debian-etch
http://www.vanstormbroek.nl/blog/?p=4

lundi 13 avril 2009

APACHE : vhost_alias pour simplifier les virtualHosts

Pré-requis :
Utiliser une distribution Debian.
Avoir installé Apache 2 en utilisant la commande apt-get install apache2
Penser à ouvrir votre firewall en conséquence si ce n'est déjà fait

Normalement, après avoir installé Apache 2 il suffit d'activer le module vhost_alias
a2enmod vhost_alias

Ensuite dans Dans /etc/apache2/apache2.conf il faut ajouter cette ligne
Options +FollowSymLinks

Puis ajouter

Options +FollowSymLinks
VirtualDocumentRoot /var/www/%0.0


il suffit de creer le repertoire /var/www/mondomaine.tld pour que le mondomaine.tld soit hosté.
pour www.mondomaine.tld il faudra créer /var/www/www.mondomaine.tld

A noter que l'utilisation de liens symboliques fonctionne. C'est à dire que vous pouvez linker /var/www/mondomaine.tld vers /home/mondomaine, ce qui peut être pratique en cas d'hébergement FTP, utilisation de quotas, etc...

Plus d'infos sur Apache en général:
http://www.serveur-rps.fr/apache-mysql/installation_configuration_et_optimisation_d_apache2_et_des_modules