Résumé : Si il vous arrive maladroitement de changer un mot de passe Administrateur sur un serveur WINDOWS via par exemple un logiciel de prise en main à distance comme VNC, ce tutoriel est fait pour vous. -
Lire l'article
Ce tutoriel va vous permettre d'installer, de configurer et de sécuriser ces éléments. Nous vous conseillons pour gagner du temps de d'abord le lire ou tout du moins suvoler dans son intégralité afin d'en comprendre les tenants et les aboutissants. De nombreuses procédures d'automatisation vous sont également proposées. L'ensemble à installer est constitué de la sorte :
- Le serveur web Apache initialement basé sur le code de NCSA httpd 1.3, il est aujourd'hui plus évolué & considéré comme un standart autant en terme de performance, de fonctionnalité et de rapidité. C'est le serveur web le plus répandu (cf. Netcraft).
- Le patch apache-patch_HARD_SERVER_LIMIT.txt qui vous permettra d'accepter 512 clients en simultané plutot que les 256 par défaut en augmentant le hard server limit dans le fichier /usr/src/apache-1.3.31/src/include/httpd.h, qui est limité pour des sites de volume moyen ou important. Le contenu du patch :
--- httpd.h-old Wed Jan 31 00:58:19 2001
+++ httpd.h Wed Jan 31 01:09:25 2001
@@ -314,7 +314,7 @@
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#else
-#define HARD_SERVER_LIMIT 256
+#define HARD_SERVER_LIMIT 512
#endif
#endif
- Openssl offre les librairies et les fichiers d'entête nécessaires à mod_ssl. Il permet également de créer des certificats client ou serveur. SSL ("Secure Socket Layer") est un protocole permettant la transmission sécurisée de données tout en assurant l'authentification, la confidentialité et l'intégrité de ces données.
- Mod_ssl est un module Apache qui offre des fonctions de chiffrement fort aux serveurs Apache à travers les protocoles SSL v2/v3 et TLS v1. TLS ("Transport Layer Security") est un protocol de sécurisation de la couche transport.
- PHP ("Hypertext Preprocesseur" ou "Pre-HyperTexte-Processor") pour créer des pages web dynamiques et les interfacer par exemple avec vos bases de données.
- Mysql qui est un serveur de bases de données SQL ("Structured query language") ; le SQL est un langage de définition, de manipulation et de contrôle de données.
- Mod_security est un module pour Apache qui permet de mettre en place un système de détection d'intrusion et de prévention pour vos applications web à travers un moteur s'interfaçant directement avec le serveur apache.
- Mod_rewrite offre la possibilité de réécrire à la volée les localisateurs de type URL ("Uniform Resource Locator").
- Mod_perl est un module pour Apache qui y incorpore un interpréteur Perl. Apache peut alors directement éxécuter les scripts basés sur ce language. La bibliothèque d'exploitation Perl est lié au serveur apache par l'intermédiaire de Mod_perl. L'éxécution des CGI notamment est rendue plus rapide par le fait qu'un interpréteur externe n'a pas à être appelé.
Vous trouverez également un script PERL snort2modsec.pl qui vous permettra de convertir les rêgles du systèmes Opensource de détection d'intrusion Snort en rêgles pour mod_security, rêgles obtenues directement depuis la release courante snortrules-snapshot-CURRENT sur le site de Snort.
Snort est un système Opensource de détection d'intrusion sur les réseau IP qui permet de recevoir des alertes contre toutes tentatives d'intrusion dans votre réseau, vous avez également la possibilité dans Snort d'effectuer des actions lors d'une detection.
PERL (Practical Extraction and Report Language) est un language de programmation gratuit, interprété, portable qui a pour réputation sa robustesse, sa fléxibilité et sa simplicité d'utilisation face à des language plus complexes.
Ce tutorial est soumis au changement dans le temps des versions de chacun de ces logiciels en fonction des hotfixs notamment au niveau de la récupération des sources, le principe restant essentiellement le même.
-----------------------------------------------------------------------------------------------------------------
Dans un premier temps, vous devez récupérer les sources de l'ensemble de ces programmes snortrules-snapshot-CURRENT, snort2modsec.pl, mod_security-1.7.6, apache_1.3.31, mod_ssl-2.8.18-1.3.31, php-4.3.6, openssl-0.9.7d, mysql-3.23.58, mod_perl-1.0:
cd /usr/src/
rm -fr /usr/src/snort2modsec.pl
rm -fr /usr/src/mod_security-1.8.tar.gz
rm -fr /usr/src/apache_1.3.31.tar.gz
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31.tar.gz
rm -fr /usr/src/php-4.3.6.tar.gz
rm -fr /usr/src/openssl-0.9.7d.tar.gz
rm -fr /usr/src/mysql-3.23.58.tar.gz
rm -fr /usr/src/snortrules-snapshot-CURRENT.tar.gz
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.0-current.tar.gz
rm -fr /usr/src/mod_security-1.8
rm -fr /usr/src/apache_1.3.31
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31
rm -fr /usr/src/php-4.3.6
rm -fr /usr/src/openssl-0.9.7d
rm -fr /usr/src/mysql-3.23.58
rm -fr /usr/src/rules
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.29/
wget http://www.modsecurity.org/documentation/snort2modsec.pl
wget http://www.modsecurity.org/download/mod_security-1.8.tar.gz
wget http://apache.crihan.fr/dist/httpd/apache_1.3.31.tar.gz
wget http://www.modssl.org/source/mod_ssl-2.8.18-1.3.31.tar.gz
wget http://fr2.php.net/get/php-4.3.6.tar.gz/from/fr.php.net/mirror
wget http://www.openssl.org/source/openssl-0.9.7d.tar.gz
wget ftp://ftp.inria.fr/pub/MySQL/Downloads/MySQL-3.23/mysql-3.23.58.tar.gz
wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
wget http://www.delouw.ch/linux/apache-patch_HARD_SERVER_LIMIT.txt
wget http://perl.apache.org/dist/mod_perl-1.0-current.tar.gz
Vous pouvez tout récupérer d'un coup avec le fichier suivant. Nommez le wget.sh, passez un chmod +x wget.sh, placer le dans /usr/src/ puis éxécutez le avec la commande ./wget.sh en vous plaçant au préalable dans /usr/src/.
#!/bin/sh
rm -fr /usr/src/snort2modsec.pl
rm -fr /usr/src/mod_security-1.8.tar.gz
rm -fr /usr/src/apache_1.3.31.tar.gz
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31.tar.gz
rm -fr /usr/src/php-4.3.6.tar.gz
rm -fr /usr/src/openssl-0.9.7d.tar.gz
rm -fr /usr/src/mysql-3.23.58.tar.gz
rm -fr /usr/src/snortrules-snapshot-CURRENT.tar.gz
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.0-current.tar.gz
rm -fr /usr/src/mod_security-1.8
rm -fr /usr/src/apache_1.3.31
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31
rm -fr /usr/src/php-4.3.6
rm -fr /usr/src/openssl-0.9.7d
rm -fr /usr/src/mysql-3.23.58
rm -fr /usr/src/rules
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.29/
wget http://www.modsecurity.org/documentation/snort2modsec.pl
wget http://www.modsecurity.org/download/mod_security-1.8.tar.gz
wget http://apache.crihan.fr/dist/httpd/apache_1.3.31.tar.gz
wget http://www.modssl.org/source/mod_ssl-2.8.18-1.3.31.tar.gz
wget http://fr2.php.net/get/php-4.3.6.tar.gz/from/fr.php.net/mirror
wget http://www.openssl.org/source/openssl-0.9.7d.tar.gz
wget ftp://ftp.inria.fr/pub/MySQL/Downloads/MySQL-3.23/mysql-3.23.58.tar.gz
wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
wget http://www.delouw.ch/linux/apache-patch_HARD_SERVER_LIMIT.txt
wget http://perl.apache.org/dist/mod_perl-1.0-current.tar.gz
-----------------------------------------------------------------------------------------------------------------
Passez maintenant à l'installation de openssl-0.9.7d :
rm -fr /usr/local/ssl/
cd /usr/src/
tar -zxvf openssl-0.9.7d.tar.gz
chown -R root.root openssl-0.9.7d
cd openssl-0.9.7d
./config shared
make
make install
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig
Vous pouvez installer ce qui a trait à openssl d'un seul coup avec le fichier suivant. Nommez le openssl.sh, passer un chmod +x openssl.sh, placez le dans /usr/src/ puis éxécutez le avec la commande ./openssl.sh en vous plaçant au préalable dans /usr/src/
#!/bin/sh
rm -fr /usr/local/ssl/
cd /usr/src/
tar -zxvf openssl-0.9.7d.tar.gz
chown -R root.root openssl-0.9.7d
cd openssl-0.9.7d
./config shared
make
make install
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig
-----------------------------------------------------------------------------------------------------------------
Le serveur de base de donnée mysql-3.23.58 ensuite :
groupadd mysql
adduser -g mysql -d /usr/local/mysql mysql
rm -fr /usr/local/mysql/
mkdir /usr/local/mysql/
mkdir /usr/local/mysql/data/
mkdir /usr/local/mysql/tmp/
mkdir /usr/local/mysql/var/
cd /usr/src/
tar -zxvf mysql-3.23.58.tar.gz
cd mysql-3.23.58
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-unix-socket-path=/usr/local/mysql/tmp/mysql.socket
make
make install
chown -R mysql.mysql /usr/local/mysql
chmod 700 /usr/local/mysql/data
chmod 700 /usr/local/mysql/var
chmod 755 /usr/local/mysql/tmp
Vous pouvez installer ce qui a trait à mysql d'un seul coup avec le fichier suivant, nommez le mysql.sh, passez un chmod +x mysql.sh, placer le dans /usr/src/ puis éxécutez le avec la commande ./mysql.sh en vous plaçant au préalable dans /usr/src/
#!/bin/sh
groupadd mysql
adduser -g mysql -d /usr/local/mysql mysql
rm -fr /usr/local/mysql/
mkdir /usr/local/mysql/
mkdir /usr/local/mysql/data/
mkdir /usr/local/mysql/tmp/
mkdir /usr/local/mysql/var/
cd /usr/src/
tar -zxvf mysql-3.23.58.tar.gz
cd mysql-3.23.58
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-unix-socket-path=/usr/local/mysql/tmp/mysql.socket
make
make install
chown -R mysql.mysql /usr/local/mysql
chmod 700 /usr/local/mysql/data
chmod 700 /usr/local/mysql/var
chmod 755 /usr/local/mysql/tmp
Le serveur web apache_1.3.31 :
cd /usr/src
tar -zxvf apache_1.3.31.tar.gz
Appliquer le patch apache-patch_HARD_SERVER_LIMIT.txt :
cd /usr/src
tar -zxvf apache_1.3.31.tar.gz
rm -fr /usr/src/apache_1.3.31/src/include/apache-patch_HARD_SERVER_LIMIT.txt
cp apache-patch_HARD_SERVER_LIMIT.txt /usr/src/apache_1.3.31/src/include/
cd /usr/src/apache_1.3.31/src/include/
patch -p0 < ./apache-patch_HARD_SERVER_LIMIT.txt
#le fichier à patcher est httpd.h
Installer mod_ssl-2.9 dans les sources d'apache :
cd /usr/src
tar -zxvf mod_ssl-2.8.18-1.3.31.tar.gz
cd /usr/src/mod_ssl-2.8.18-1.3.31
./configure --with-apache=/usr/src/apache_1.3.31
-----------------------------------------------------------------------------------------------------------------
Nous ne pouvions établir un tutorial sur la sécurisation d'Apache sans vous parler de la fonction suEXEC qui permet au administrateur de serveur Apache de faire éxécuter des programmes CGI/SSI sous des utiisateurs et des groupes différents de celui sous lequel est lancé le serveur principal et qui est normalement celui sous lequel ils sont éxécutés.
Attention ! : Lisez l'ensemble de cette section avant de vous lancer dans l'installation ou la configuration de suEXEC
Si les termes setuid root, setuid/setgid ne vous sont pas familiers il vaut mieux ne pas installer suEXEC et passer directement à l'installation d'Apache, une mauvaise configuration ou une mauvaise utilisation de suEXEC pouvant à l'inverse se révéler catastrophique pour la sécurité de votre machine.
Vous devez éditer le fichier /usr/src/apache_1.3.31/support/suexec.h :
/*
* HTTPD_USER -- Définit le nom d'utilisateur sous lequel Apache tourne en
* temps normal. C'est le seul utilisateur habilité à exécuter
* ce programme.
*/
#define HTTPD_USER "apache"
/*
* UID_MIN -- Definit le plus faible UID permis pour l'utilisateur
* cible donné à suEXEC. Dans la plupart des cas, 500 ou 100 convient.
*/
#define UID_MIN 100
/*
* GID_MIN -- Definit le plus faible GID permis pour l'utilisateur
* cible donné à suEXEC. Dans la plupart des cas, 100 convient.
*/
#define GID_MIN 100
/*
* USERDIR_SUFFIX -- Definit le sous-répertoire relatif sous la racine
* du compte utilisateur auquel suEXEC a l'autorisation
* d'accès. Tous les exécutables dans ce répertoire
* pourront être lancés par suEXEC sous cet utilisateur
* et seront donc "sécurisés". Si vous utilisez une directive
* UserDir simple (c-à-d. une ou n'apparaît pas de
* "*"), cette étoile est implicite pour le répertoire
* spécifié. suEXEC ne fonctionnera pas correctement
* si la directive UserDir pointe vers un répertoire
* différent de celui défini comme répertoire de "login"
* pour cet utilisateu dans le fichier /etc/passwd.
*
* Si vous avez défini des VirtualHosts assignés à un
* UserDir différent pour chacun, vous aurez peut être besoin
* de rassembler tous les répertoires concernés dans un seul
* et unique répertoire père ; vous pouvez nommer ce répertoire
* père ici. SI CE PARAMETRE N'EST PAS CORRECTEMENT
* RENSEIGNE, LES REQUETES CGI POUR LES ~USERDIR
* N'ABOUTIRONT PAS !
* Voir la documentation de suEXEC pour plus d'informations.
*/
#define USERDIR_SUFFIX "suexec_directory"
/*
* LOG_EXEC -- Definit le nom de fichier dans lequel toutes les
* transactions et erreurs générées par l'usage de suEXEC
* seront tracées.
*/
#define LOG_EXEC "/usr/local/apache/logs/cgi.log" /* Need me? */
/*
* DOC_ROOT -- Definit le DocumentRoot pour Apache. Ce sous-arbre
* sera le seul (à part ceux définis par chaque UserDirs)
* à pouvoir être utilisé par suEXEC.
*/
#define DOC_ROOT "/usr/local/apache/htdocs"
/*
* SAFE_PATH -- Definit un PATH d'environment sécurisé à passer aux exécutables CGI.
*
*/
#define SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
Compiler et installer suEXEC :
cd /usr/src/apache_1.3.31/support/
cc /usr/src/apache_1.3.31/support/suexec.c -o /usr/src/apache_1.3.31/support/suexec
cp /usr/src/apache_1.3.31/support/suexec /usr/local/apache/sbin/
chown root /usr/local/apache/sbin/suexec
chmod 4711 /usr/local/apache/sbin/suexec
Pour vous servir de suEXEC, vous pouvez par exemple utiliser les directives USER & GROUP dans chaque Virtual Host défini à l'intérieur de votre fichier /usr/local/apache/conf/httpd.conf, les CGI de ce Virtual Host seront éxécutés sous ce couple user/group. Un exemple :
ServerAdmin postmaster@site.com
User test
Group test
DocumentRoot /usr/local/apache/www.site.com/www
ScriptAlias /cgi-bin /usr/local/apache/www.site.com/cgi-bin/
ServerName www.site.com
ErrorLog logs/www.site.com-error_log
CustomLog logs/www.site.com-access_log combined
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
Apache se sert d'un programme appelé setuid pour "lier" la requête vers le script CGI ou SSI appelé via les users & groups définis du Virtual Host, à chaque appel setuid, plus d'une vingtaine de vérification d'intégrité des arguments est effectuée.
Vu le caractère sensible de la fonctionnalité suEXEC, elle ne sera intégrée dans aucun des scripts automatisés de ce tutorial et à nouveau nous vous conseillons de l'utiliser uniquement dans le cas ou vous savez ce que vous faites !
Si vous voulez plus d'informations sur suEXEC, cliquez içi.
----------------------------------------------------------------------------
Compilez et installez apache_1.3.31 avec les modules standarts, mod_ssl & la prise en charge de DSO.
DSO ("Dynamic Shared Object") ou bibliothèque d'objets partagée est chargée uniquement lors de l'exécution du programme. Cela vous permet de ne pas la charger si vous le souhaitez et de compiler puis installer des modules supplémentaires pour Apache sans avoir à le recompiler grâce la commande /usr/local/apache/bin/apxs :
rm -fr /usr/local/apache
cd /usr/src/apache_1.3.31
./configure --prefix=/usr/local/apache --enable-module=ssl --enable-module=so --enable-module=status --enable-module=rewrite --enable-module=cgi --enable-module=include --enable-module=auth --enable-module=dir --enable-module=env --enable-module=setenvif --enable-module=userdir --enable-module=imap --enable-module=negotiation --enable-module=log_config --enable-module=asis --enable-module=autoindex --enable-module=mime --enable-module=access --enable-module=rewrite --enable-shared=max
make
make certificate
make install
Pour le make certificate, changer en fonction de vos configurations et $passwd par la passphrase que vous souhaitez utiliser :
The generated X.509 CA certificate can contain either
RSA or DSA based ingredients. Select the one you want to use.
Signature Algorithm ((R)SA or (D)SA) [R]: R
---------------------------------------------------------------------
1. Country Name (2 letter code) [XY]:FR
2. State or Province Name (full name) [Snake Desert]:France
3. Locality Name (eg, city) [Snake Town]:Paris
4. Organization Name (eg, company) [Snake Oil, Ltd]: Infratech
5. Organizational Unit Name (eg, section) [Webserver Team]:TechTeam
6. Common Name (eg, FQDN) [www.snakeoil.dom]: www.secuobs.com
7. Email Address (eg, name@FQDN) [www@snakeoil.dom]:xavier.poli@infratech.fr
8. Certificate Validity (days) [365]:
---------------------------------------------------------------------
: STEP 3: Generating X.509 certificate signed by Snake Oil CA [server.crt]
Certificate Version (1 or 3) [3]:
---------------------------------------------------------------------
STEP 4: Enrypting RSA private key with a pass phrase for security [server.key]
The contents of the server.key file (the generated private key) has to be
kept secret. So we strongly recommend you to encrypt the server.key file
with a Triple-DES cipher and a Pass Phrase.
Encrypt the private key now? [Y/n]: Y
writing RSA key
Enter PEM pass phrase: $passwd
Verifying - Enter PEM pass phrase: $passwd
Vous pouvez alors démarrer votre serveur apache pour tester, entrez au prompt votre passphrase :
/usr/local/apache/bin/apachectl startssl
Apache/1.3.31 mod_ssl/2.8.16 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.
Server votre_serveur:443 (RSA)
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
/usr/local/apache/bin/apachectl startssl: httpd started
Vous pouvez également décidé d'installer apache pour qu'il fonctionne sous un uid différent de nobody et un gid différent de nogroup qui sont les paramétres par défaut de l'installation d'apache.
Par défaut, à l'exception du process principal sous root, le reste des processus tourne sous l'uid nobody et le gid nogroup. En cas de corruption du serveur web, une personne mal intentionnée peut alors avoir les droits d'accès à l'ensemble des processus qui tourne sous le même couple uid/gid.
Vous pouvez configurer Apache pour tourner sous le couple apache/apache ; pour se faire, la compilation et les permissions associées seront alors les suivantes :
rm -fr /usr/local/apache/
groupadd apache
useradd apache -d /dev/null -g apache -s /sbin/nologin
cd /usr/src/apache_1.3.31
./configure --prefix=/usr/local/apache --enable-module=ssl --enable-module=so --server-uid=apache --server-gid=apache --enable-module=status --enable-module=rewrite --enable-module=cgi --enable-module=include --enable-module=auth --enable-module=dir --enable-module=env --enable-module=setenvif --enable-module=userdir --enable-module=imap --enable-module=negotiation --enable-module=log_config --enable-module=asis --enable-module=autoindex --enable-module=mime --enable-module=access --enable-module=rewrite --enable-shared=max
make
make certificate
make install
Vous pouvez installer ce qui a trait à apache + modssl + le patch hard server limit (fichier httpd.h à patcher) d'un seul coup avec le fichier suivant. Nommez le apache.sh, passez un chmod +x apache.sh, placer le dans /usr/src/ puis éxécuté le avec la commande ./apache.sh en vous plaçant au préalable dans /usr/src/, vous serez invité au prompt à rentrer les informations relatives au certificat ainsi que le nom du fichier à patcher (httpd.h), le fichier :
#!/bin/sh
cd /usr/src
tar -zxvf apache_1.3.31.tar.gz
rm -fr /usr/src/apache_1.3.31/src/include/apache-patch_HARD_SERVER_LIMIT.txt
cp apache-patch_HARD_SERVER_LIMIT.txt /usr/src/apache_1.3.31/src/include/
cd /usr/src/apache_1.3.31/src/include/
patch -p0 < ./apache-patch_HARD_SERVER_LIMIT.txt
cd /usr/src
tar -zxvf mod_ssl-2.8.17-1.3.31.tar.gz
cd /usr/src/mod_ssl-2.8.17-1.3.31
./configure --with-apache=/usr/src/apache_1.3.31
rm -fr /usr/local/apache
cd /usr/src/apache_1.3.31
./configure --prefix=/usr/local/apache --enable-module=ssl --enable-module=so --server-uid=apache --server-gid=apache --enable-module=status --enable-module=rewrite --enable-module=cgi --enable-module=include --enable-module=auth --enable-module=dir --enable-module=env --enable-module=setenvif --enable-module=userdir --enable-module=imap --enable-module=negotiation --enable-module=log_config --enable-module=asis --enable-module=autoindex --enable-module=mime --enable-module=access --enable-module=rewrite --enable-shared=max
make
make certificate
make install
/usr/local/apache/bin/apachectl startssl
Ajoutez les lignes suivantes dans la section DSO pour charger les modules, en choisissant en fonction de ce dont vous avez besoin :
LoadModule env_module libexec/mod_env.so
LoadModule config_log_module libexec/mod_log_config.so
LoadModule mime_module libexec/mod_mime.so
LoadModule negotiation_module libexec/mod_negotiation.so
LoadModule status_module libexec/mod_status.so
LoadModule includes_module libexec/mod_include.so
LoadModule autoindex_module libexec/mod_autoindex.so
LoadModule dir_module libexec/mod_dir.so
LoadModule cgi_module libexec/mod_cgi.so
LoadModule asis_module libexec/mod_asis.so
LoadModule imap_module libexec/mod_imap.so
LoadModule action_module libexec/mod_actions.so
LoadModule userdir_module libexec/mod_userdir.so
LoadModule alias_module libexec/mod_alias.so
LoadModule access_module libexec/mod_access.so
LoadModule auth_module libexec/mod_auth.so
LoadModule setenvif_module libexec/mod_setenvif.so
LoadModule rewrite_module libexec/mod_rewrite.so
LoadModule ssl_module libexec/libssl.so
ClearModuleList
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_so.c
AddModule mod_setenvif.c
AddModule mod_rewrite.c
AddModule mod_ssl.c
Vérifier la présence des lignes suivantes dans leur section respective du fichier de configuration d'apache /usr/local/apache/conf/httpd.conf, sinon ajouter ou modifier les :
User apache
Group apache
Vous avez aussi la possibilité de désactiver tous les modules à la compilation d'Apache puis les réactiver un par un si vous avez une connaissance suffisante au bon fonctionnement de votre serveur web :
--disable-module=all
--enable-module=nom_du_module
Déni de Service ("DoS"), attaque complexe dont le but est de rendre inatteignable une machine en envoyant une quantité de donnée importante afin qu'elle ne puisse pas la gérer, les conséquences : - crash des services et/ou reboot sauvage ! Ce genre d'attaque peut provenir d'une seule voir de plusieurs machines, dans ce cas, on appele plus communément cette attaque, un Déni de Service Distribué ou DDoS.
Afin d'éviter les possibilité de DoS ou de DDoS, ajuster les options suivantes du fichier de configuration d'apache /usr/local/apache/conf/httpd.conf en fonction des capacités de votre serveur :
MaxClients 150
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Timeout 300
Les sections Directory permettent de définir les permissions des répertoires où sont stockées les contenus accessibles via les sites web du serveur correspondant. La configuration de ces sections est vitale pour la sécurité de votre machine. Il est conseillé de mettre par défaut en deny puis d'autoriser uniquement ce que vous voulez bien alloué à la manière d'un firewall :
Order deny,allow
Deny from all
Puis :
AllowOverride None
Options None
Order allow,deny
Allow from all
Vous pouvez également permettre à des utilisateurs particuliers d'accéder à certains répertoires, vous devez pour cela mettre des sections du type :
AllowOverride AuthConfig
Options none
Order allow,deny
Allow from all
Différentes options sont disponibles, parmi elles Indexes FollowSymLinks Includes ExecCGi, nous vous conseillons de ne les activer qu'au cas ou vous en auriez réellement besoin.
CGI ("Common Gateway Interface") permet à un client d'exécuter des programmes spécifiques sur un serveur. Nous vous conseillons d'externaliser vos scripts CGI puis d'ajouter la ligne suivante dans les Virtual Host concernés
ScriptAlias /nom_du_directory_accedé_pour_vos_scripts_en_ligne
/chemin/vers/vos/scripts/cgi/
Et définir le directory des cgi-bin :
AllowOverride none
Options ExecCGI
Order allow,deny
Allow from all
Ces directory doivent être créés au préalable afin d'héberger les pages que vous souhaitez diffuser, récupérer également notre page html de test et placer la dans le répertoire racine www/.
mkdir -p /usr/local/apache/www.site.com/www
mkdir /usr/local/apache/www.site.com/cgi-bin
mkdir /usr/local/apache/www.site.com/secure
wget http://www.secuobs.com/tuto/index.html
mv index.html /usr/local/apache/www.site.com/www/
Les permissions se gérent à travers les fichiers .htaccess qui sont à placer dans le répertoire en question. La section définissant les .htaccess dans le fichier de configuration d'apache /usr/local/apache/conf/httpd.conf :
AccessFileName .htaccess
Order allow,deny
Deny from all
Satisfy All
Exemple de fichier .htaccess :
AuthUserFile /chemin/vers/.htpasswd
AuthName ByPassword
AuthType Basic
require user $user
Les logins & mots de passe sont stockés dans un fichier .htpasswd. Vous devez le placer impérativement hors des répertoires de votre site web. Vous devez générer un fichier .htpasswd avec la commande suivante, remplacer par $user par le login désiré puis entrez le mot de passe au prompt :
/usr/local/apache/bin/htpasswd -c /chemin/vers/.htpasswd $user
Si le fichier .htpasswd existe déjà, ne précisez pas l'option -c ni le fichier :
/usr/local/apache/bin/htpasswd $user
Vérifier la présence des lignes suivantes dans le fichier de configuration d'apache /usr/local/apache/conf/httpd.conf, si non présentes ou différentes, ajouter ou modifier les :
ServerSignature Off
ServerTokens Prod
Cela vous permet de ne pas divulguer d'informations confidentielles sur la version de votre server web. Pour parfaire cela vous devez également modifier les options suivante dans ce même fichier :
ErrorDocument 500 "erreur 500"
#ErrorDocument 404 /missing.html
ErrorDocument 400"erreur 400"
#ErrorDocument 404 /cgi-bin/missing_handler.pl
ErrorDocument 404 "erreur 404"
#ErrorDocument 402 http://www.example.com/subscription_info.html
ErrorDocument 402 "erreur 402"
Un Virtual Host ou serveur virtuel permet à un même serveur d'héberger, sur une même adresse IP, plusieurs sites différenciés par leur nom. La section d'un Virtual Host accessible en https doit être de la forme suivante :
NameVirtualHost "votre ip":443
ServerAdmin postmaster@site.com
DocumentRoot /usr/local/apache/www.site.com/www
ScriptAlias /cgi-bin /usr/local/apache/www.site.com/cgi-bin/
ServerName www.site.com
ErrorLog logs/www.site.com-error_log
CustomLog logs/www.site.com-access_log combined
SSLEngine on
SSLCipherSuite
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SSLCACertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLOptions +StdEnvVars
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /usr/local/apache/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
Changer "votre ip" par votre ip, privilégié à un nom de domaine pour éviter les problèmes en https en cas de panne de DNS ("domain name server" est un serveur offrant la conversion des noms de domaine en adresse IP ainsi que le reverse) et www.site.com par le nom de votre site (exemple = www.secuobs.com), ajouter chaque virtual host supplémentaire dans la section
. Changez également le nom des certificats en fonction des votres.
Un virtual host http classique se présente de la manière suivante :
ServerAdmin postmaster@site.com
DocumentRoot /usr/local/apache/www.site.com/www/
ScriptAlias /usr/local/apache/www.site.com/cgi-bin/
ServerName www.site.com
ErrorLog logs/www.site.com-error_log
CustomLog logs/www.site.com-access_log combined
L'ensemble des virtual host doit s'accompagner de la directive suivante (changer ip par votre ip), une seule directive pour l'ensemble des virtual host :
NameVirtualHost ip
Vérifier également la présence de la section suivante :
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
Mais aussi de :
CustomLog /var/log/httpd/access_log combined
Vous pouvez utiliser le fichier httpd.conf donné en modèle içi pour vous faire une idée de la configuration à apporter.
-----------------------------------------------------------------------------------------------------------------
Compiler puis installer php-4.3.6 en tant que module dynamique DSO :
:
cd /usr/src/
tar -zxvf php-4.3.6.tar.gz
cd php-4.3.6
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs
make
make install
cp php.ini-dist /usr/local/lib/php.ini
Vous pouvez installer ce qui a trait à php d'un seul coup avec le fichier suivant. Nommez le php.sh, passez un chmod +x php.sh, placez le dans /usr/src/ puis éxécutez le avec la commande ./php.sh en vous plaçant au préalable dans /usr/src/ .
#!/bin/sh
cd /usr/src/
tar -zxvf php-4.3.6.tar.gz
cd php-4.3.6
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs
make
make install
cp php.ini-dist /usr/local/lib/php.ini
PHP a été conçu pour vous permettre de configurer certaines options afin d'assurer la sécurité de vos systèmes, vous pouvez par exemple :
- vérifier les fichiers accédés avec le safe_mode,
- interdire l'utilisation de certaines commandes, disable_functions,
- accepter l'affichage de la bannière avec expose_php,
- max_execution_time et memory_limit pour empêcher les Dénis de Service DoS,
- magic_quotes_gpc mets des quotes dans les données reçues des cookies & formulaires en GET & POST.
- vous pouvez également interdire l'affichage des erreurs en cas de problème sur une page avec display_error.
L'ensemble se configure dans le fichier php.ini que vous venez de copier dans /usr/local/lib/ :
safe_mode = On
expose_php = Off
max_execution_time = 30
memory_limit = 8M
disable_functions =
magic_quotes_gpc = On
display_errors = Off
[SQL]
sql.safe_mode = On
Vérifier la présence des lignes suivantes dans leur section respective du fichier de configuration d'apache /usr/local/apache/conf/httpd.conf, sinon ajouter les :
LoadModule php4_module libexec/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php .php3 .php4
AddType application/x-httpd-php-source .phps
Ajouter index.php, index.php3 & index.php4 dans la section suivante du fichier de configuration :
DirectoryIndex index.html index.htm index.php index.php3 index.php4
Configurer mod_rewrite pour apache :
Vérifier la présence des lignes suivantes dans leur section respective du fichier de configuration d'apache /usr/local/apache/conf/httpd.conf, sinon ajouter les :
LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c
Pour chaque Virtual Host défini dans le fichier de configuration d'apache /usr/local/apache/conf/httpd.conf, vous devrez ajouter les rêgles suivantes de mod_rewrite si ils le contiennent pas déjà, cela vous permet d'éviter les failles de type Cross Site Scripting :
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
Installer Mod_perl en tant que DSO avec apxs :
cd /usr/src/
tar -zxvf /usr/src/mod_perl-1.0-current.tar.gz
cd /usr/src/mod_perl-1.29/
perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1
make
make install
Vous pouvez installer ce qui a trait à mod_perl d'un seul coup avec le fichier suivant. Nommez le perl.sh, passer un chmod +x perl.sh, placez le dans /usr/src/ puis éxécutez le avec la commande ./perl.sh en vous plaçant au préalable dans /usr/src/
#!/bin/sh
cd /usr/src/
tar -zxvf /usr/src/mod_perl-1.0-current.tar.gz
cd /usr/src/mod_perl-1.29/
perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1
make
make install
L'installation de mod_perl vous permet d'activer le "Tainted Mode" de vos scripts perl éxécuté à travers le serveur web apache.
Le "Tainted Mode" permet au couple Apache/PERL de prendre des précautions supplémentaires à l'éxécution des scripts en vérifiant par exemple que personne ne puisse écrire dans le path ou utiliser des données extérieures qui n'ont pas été vérifiés dans une variable.
Ajouter la directive suivante dans votre fichier de configuration d'apache /usr/local/apache/conf/httpd.conf :
PerlTaintCheck On
Vos scripts perl doivent alors commencer par le shebang suivant qui permet d'éxécuter vos scripts via l'interpréteur perl avec l'option Tainted Mode :
#!/usr/bin/perl -T
use strict;
$ENV{'PATH'} = '/bin:/usr/bin';
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
Ajuster la première ligne en localisant le path (chemin d'installation) de l'interpréteur perl de votre machine avec la ligne suivante dans votre shell (invite de commande linux) :
which perl
Vous pouvez par exemple nettoyer une variable mail postée à partir d'un formulaire avec les lignes suivantes :
my $email = param('email');
$email =~ /^([-\@\w.]+)$/;
$email = $1;
print "votre email $email";
Installer mod_security-1.7.6 en tant que DSO pour apache :
cd /usr/src/
tar -zxvf mod_security-1.8.tar.gz
cd mod_security-1.8
/usr/local/apache/bin/apxs -cia ./apache1/mod_security.c -DEAPI
Vérifiez la présence des lignes suivantes dans leur section respective du fichier de configuration d'apache /usr/local/apache/conf/httpd.conf, sinon ajoutez les dans la section DSO :
LoadModule security_module libexec/mod_security.so
AddModule mod_security.c
Convertir les rêgles snort du fichier snortrules-snapshot-CURRENT avec le script perl snort2modsec.pl :
cd /usr/src/
chmod +x snort2modsec.pl
rm -fr /usr/src/rules/
tar -C /usr/src/ -zxvf snortrules-snapshot-CURRENT.tar.gz
./snort2modsec.pl /usr/src/rules/* > /usr/local/apache/conf/modsec.conf
Ajouter la section module suivante dans le fichier de configuration d'apache /usr/local/apache/conf/httpd.conf avec votre éditeur préféré et ajuster vos rêgles :
# activer le moteur de mod_security
SecFilterEngine On
# vérifie la validité de l'encodage des urls
SecFilterCheckURLEncoding On
# vérifie la validité de l'unicode
SecFilterCheckUnicodeEncoding On
# Only allow bytes from this range
SecFilterForceByteRange 0 255
# log seulement pour certaines requetes
SecAuditEngine RelevantOnly
# Nom du fichier de log
SecAuditLog logs/modsec_log
# niveau de debug
SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLevel 0
# activation du scan des données en POST, par exemple les formulaires
SecFilterScanPOST On
# log des requetes http suspectes avec un status erreur 401, erreur d'authentification
SecFilterDefaultAction "deny,log,status:401"
# l'insertion du fichier modsec.conf contenant l equivalent des regles snort pour mod_security
include /usr/local/apache/conf/modsec.conf
Vous pouvez éditer le fichier /usr/local/apache/conf/modsec.conf et le fichier /usr/local/apache/conf/httpd.conf pour retirer ou configurer des rêgles. Le fichier modsec.conf devra de toutes façons être quelque peu modifié car la syntaxe de certaines rêgles (*xxx*, \x00, etc) empêche l'insertion du fichier dans httpd.conf, supprimer les rêgles qui posent problèmes, le lancement de la commande apachectl start ou apachectl startssl (/usr/local/apache/bin/) vous donnera plus d'informations sur les rêgles qui posent problèmes.
Quelques exemples de règles possibles sur lesquelles vous pouvez vous baser pour forger les votres que vous inclurez dans httpd.conf directement :
# filtre un mot dans la premiere ligne de la requête
SecFilter keyword
# filtres les mots dans des variables
SecFilterSelective "variable list separated with |" keyword
# autoriser une adresse ip à bypasser l'ensemble des regles de deny
SecFilterSelective REMOTE_ADDR "^IP_ADDRESS_HERE$" nolog,allow
# bypasser les rêgles pour les requetes avec HTTP_USER_AGENT = x
SecFilterSelective HTTP_USER_AGENT "x"
# n'autoriser les cookies que si ils comprenent entre 1 et 9 caractéres
SecFilterSelective COOKIE_sessionid "!^(|[0-9]{1,9})$"
# les entetes HTTP_USER_AGENT & HTTP_HOST sont requises, pas de telnet
SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"
# ne pas autoriser les fichiers en upload
SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data
# check si le login secuobs est utilisé avc un mauvais passwd puis fait appel à un script externe comme l'envoi d'un mail ou autre
SecFilterSelective REQUEST_URI "login_failed\.php" chain
SecFilterSelective ARG_username "^secuobs$" log,exec:/usr/local/apache/bin/mail.pl
# interdire googlebot
SecFilter HTTP_USER_AGENT "Google" nolog,redirect:http://www.google.com
# refuser les javascripts sauf ceux inclus dans une variable
SecFilter "ARGS|!ARG_html" "<[:space:]*script"
Différentes actions sont possibles :
deny
allow
status
redirect
exec
log
nolog
pass
pause
Vous pouvez installer tout ce qui a trait à mod_security + la conversion des rêgles Snort d'un seul coup avec le fichier suivant. Nommez le mod_security.sh, passez un chmod +x mod_security.sh, placez le dans /usr/src/ puis éxécutez le avec la commande ./mod_security.sh en vous plaçant au préalable dans /usr/src/, le fichier :
#!/bin/sh
cd /usr/src/
tar -zxvf mod_security-1.8.tar.gz
cd mod_security-1.8
mkdir -p /home/usr/local/apache
/usr/local/apache/bin/apxs -cia ./apache1/mod_security.c
cd /usr/src/
chmod +x snort2modsec.pl
rm -fr /usr/src/rules/
tar -C /usr/src/ -zxvf snortrules-snapshot-CURRENT.tar.gz
./snort2modsec.pl /usr/src/rules/* > /usr/local/apache/conf/modsec.conf
Mod_security vous permet aussi de chrooter votre serveur web en interne (après le chargement des bibliothéques dynamiques & l'ouverture des fichiers de logs). Le chroot permet de modifier l'emplacement de la racine du système de fichier afin que des utilisateurs malintentionnés ne puissent pas accéder à la véritable racine de votre système.
La procédure via Mod_security est trés simple alors que c'est une opération généralement plutôt complexe pour les non initiés aux techniques de chrooting. Ajoutez la directive suivante dans la section mod_security à votre fichier de configuration apache /usr/local/apache/conf/httpd.conf
SecChrootdir /home/chroot/
L'ordre dans lequel les modules apaches sont chargés (selon la conf du httpd.conf) est primordial, mod_security devant être placé et chargé en premier avant les autres modules (voir le fichier httpd.conf d'exemple en bas de la page). Créer le directory /home/chroot/usr/local/ puis faite un move de votre install d'apache vers les directory chroot puis créer le lien symbolique dans /usr/local vers ces directory.
mkdir -p /home/chroot/usr/local/
cd /usr/local/
mv apache /home/chroot/usr/local/
ln -s /home/chroot/usr/local/apache
Vous pouvez également changer la signature de votre server web sans avoir à changer le code source d'apache, ce qui vous permettra de ne pas divulguer d'informations confidentiels à propos du serveur et de sa version à des attaquants potentiels. ajouter la directive suivante à votre fichier de configuration apache /usr/local/apache/conf/httpd.conf :
SecServerSignature "Microsoft-IIS/4.0"
Cette directive n'est pas nécéssaire pour les utilisateurs souhaitant utiliser mod_security avec apache 2.x.
La directive suivante doit être mise à jour en conséquence dans apache 1.x:
ServerTokens Full
-----------------------------------------------------------------------------------------------------------------
Votre fichier httpd.conf pourrait ressembler à ça, ajuster en fonction de vos paramêtres personnels (ip, nom du serveur, répertoire, mail) :
ServerType standalone
ServerRoot "/usr/local/apache"
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0
LoadModule security_module libexec/mod_security.so
LoadModule env_module libexec/mod_env.so
LoadModule config_log_module libexec/mod_log_config.so
LoadModule mime_module libexec/mod_mime.so
LoadModule negotiation_module libexec/mod_negotiation.so
LoadModule status_module libexec/mod_status.so
LoadModule includes_module libexec/mod_include.so
LoadModule autoindex_module libexec/mod_autoindex.so
LoadModule dir_module libexec/mod_dir.so
LoadModule cgi_module libexec/mod_cgi.so
LoadModule asis_module libexec/mod_asis.so
LoadModule imap_module libexec/mod_imap.so
LoadModule action_module libexec/mod_actions.so
LoadModule userdir_module libexec/mod_userdir.so
LoadModule alias_module libexec/mod_alias.so
LoadModule rewrite_module libexec/mod_rewrite.so
LoadModule access_module libexec/mod_access.so
LoadModule auth_module libexec/mod_auth.so
LoadModule setenvif_module libexec/mod_setenvif.so
LoadModule ssl_module libexec/libssl.so
LoadModule php4_module libexec/libphp4.so
LoadModule perl_module libexec/libperl.so
ClearModuleList
AddModule mod_security.c
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_so.c
AddModule mod_setenvif.c
AddModule mod_ssl.c
AddModule mod_php4.c
AddModule mod_perl.c
Port 80
Listen 80
Listen 443
ExtendedStatus On
ServerSignature Off
ServerTokens Full
User apache
Group apache
ServerAdmin root@site.com
DocumentRoot "/usr/local/apache/htdocs"
PerlTaintCheck On
Options FollowSymLinks
AllowOverride None
AllowOverride None
Options none
Order allow,deny
Allow from all
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
AllowOverride AuthConfig
Options none
Order allow,deny
Allow from all
ErrorDocument 500 "erreur 500"
ErrorDocument 400 "erreur 400"
ErrorDocument 404 "erreur 404"
ErrorDocument 402 "erreur 402"
UserDir public_html
DirectoryIndex index.html index.cgi index.php index.php3 index.php4
AccessFileName .htaccess
Order allow,deny
Deny from all
Satisfy All
UseCanonicalName On
TypesConfig /usr/local/apache/conf/mime.types
DefaultType text/plain
MIMEMagicFile /usr/local/apache/conf/magic
HostnameLookups Off
ErrorLog /usr/local/apache/logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /usr/local/apache/logs/access_log combined
Alias /icons/ "/usr/local/apache/icons/"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
SecFilterEngine On
SecServerSignature "Microsoft-IIS/4.0"
SecChrootdir /home/chroot/
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding On
SecFilterForceByteRange 0 255
SecAuditEngine RelevantOnly
SecAuditLog logs/modsec_log
SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLevel 0
SecFilterScanPOST On
SecFilterDefaultAction "deny,log,status:401"
# include /usr/local/apache/conf/modsec.conf
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage he .he
AddCharset ISO-8859-8 .iso8859-8
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage kr .kr
AddCharset ISO-2022-KR .iso-kr
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cs .cz .cs
AddLanguage ru .ru
AddLanguage zh-TW .zh-tw
AddCharset Big5 .Big5 .big5
AddCharset WINDOWS-1251 .cp-1251
AddCharset CP866 .cp866
AddCharset ISO-8859-5 .iso-ru
AddCharset KOI8-R .koi8-r
AddCharset UCS-2 .ucs2
AddCharset UCS-4 .ucs4
AddCharset UTF-8 .utf8
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
AddType application/x-tar .tgz
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddHandler cgi-script .cgi .pl
AddType text/html .shtml
AddHandler server-parsed .shtml
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
AddType application/x-httpd-php .php .php3 .php4
AddType application/x-httpd-php-source .phps
AddType text/html .shtml
AddType application/xml .rss .xml
AddHandler server-parsed .shtml
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/usr/local/apache/logs/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache/logs/ssl_mutex
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLLog /usr/local/apache/logs/ssl_engine_log
SSLLogLevel info
NameVirtualHost 192.168.1.1
NameVirtualHost 192.168.1.1:443
DocumentRoot /usr/local/apache/www.site.com/www/
ServerName www.site.com
ServerAdmin root@kiko.adsl.nerim.net
ErrorLog /usr/local/apache/logs/error_log
TransferLog /usr/local/apache/logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /usr/local/apache/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
ServerAdmin postmaster@site.com
DocumentRoot /usr/local/apache/www.site.com/www/
ScriptAlias /usr/local/apache/www.site.com/cgi-bin/
ServerName www.site.com
ErrorLog logs/www.site.com-error_log
CustomLog logs/www.site.com-access_log combined
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
Vous pouvez installer, télécharger, configurer tout ce qui a trait à ce tutorial d'un seul coup avec le fichier suivant à l'exception de la configuration du fichier httpd.conf. Nommer le exoweb.sh, passer un chmod +x exoweb.sh, placer le dans /usr/src/ puis éxécutez le avec la commande ./exoweb.sh en vous plaçant au préalable dans /usr/src/, vous serez invité au prompt à rentrer différentes informations relatives à cette installation au niveau du prompt, conseil si vous avez déjà un apache installé, sauvegarder le directory ailleurs (cp -a /usr/local/apache /home/apache/ et rm -fr /usr/local/apache) et arrêter de préférences les services apache (sinon killall -9 httpd apres l'install avant de restarter l'apache) :
#!/bin/sh
cd /usr/src/
rm -fr /usr/src/snort2modsec.pl
rm -fr /usr/src/mod_security-1.8.tar.gz
rm -fr /usr/src/apache_1.3.31.tar.gz
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31.tar.gz
rm -fr /usr/src/php-4.3.6.tar.gz
rm -fr /usr/src/openssl-0.9.7d.tar.gz
rm -fr /usr/src/mysql-3.23.58.tar.gz
rm -fr /usr/src/snortrules-snapshot-CURRENT.tar.gz
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.0-current.tar.gz
rm -fr /usr/src/mod_security-1.8
rm -fr /usr/src/apache_1.3.31
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31
rm -fr /usr/src/php-4.3.6
rm -fr /usr/src/openssl-0.9.7d
rm -fr /usr/src/mysql-3.23.58
rm -fr /usr/src/rules
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.29/
wget http://www.modsecurity.org/documentation/snort2modsec.pl
wget http://www.modsecurity.org/download/mod_security-1.8.tar.gz
wget http://apache.crihan.fr/dist/httpd/apache_1.3.31.tar.gz
wget http://www.modssl.org/source/mod_ssl-2.8.18-1.3.31.tar.gz
wget http://fr2.php.net/get/php-4.3.6.tar.gz/from/fr.php.net/mirror
wget http://www.openssl.org/source/openssl-0.9.7d.tar.gz
wget ftp://ftp.inria.fr/pub/MySQL/Downloads/MySQL-3.23/mysql-3.23.58.tar.gz
wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
wget http://www.delouw.ch/linux/apache-patch_HARD_SERVER_LIMIT.txt
wget http://perl.apache.org/dist/mod_perl-1.0-current.tar.gz
rm -fr /usr/local/ssl/
cd /usr/src/
tar -zxvf openssl-0.9.7d.tar.gz
chown -R root.root openssl-0.9.7d
cd openssl-0.9.7d
./config shared
make
make install
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig
groupadd mysql
adduser -g mysql -d /usr/local/mysql mysql
rm -fr /usr/local/mysql/
mkdir /usr/local/mysql/
mkdir /usr/local/mysql/data/
mkdir /usr/local/mysql/tmp/
mkdir /usr/local/mysql/var/
cd /usr/src/
tar -zxvf mysql-3.23.58.tar.gz
cd mysql-3.23.58
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-unix-socket-path=/usr/local/mysql/tmp/mysql.socket
make
make install
chown -R mysql.mysql /usr/local/mysql
chmod 700 /usr/local/mysql/data
chmod 700 /usr/local/mysql/var
chmod 755 /usr/local/mysql/tmp
cd /usr/src
tar -zxvf apache_1.3.31.tar.gz
rm -fr /usr/src/apache_1.3.31/src/include/apache-patch_HARD_SERVER_LIMIT.txt
cp apache-patch_HARD_SERVER_LIMIT.txt /usr/src/apache_1.3.31/src/include/
cd /usr/src/apache_1.3.31/src/include/
patch -p0 < ./apache-patch_HARD_SERVER_LIMIT.txt
cd /usr/src
tar -zxvf mod_ssl-2.8.18-1.3.31.tar.gz
cd /usr/src/mod_ssl-2.8.18-1.3.31
./configure --with-apache=/usr/src/apache_1.3.31
rm -fr /usr/local/apache
groupadd apache
useradd apache -d /dev/null -g apache -s /sbin/nologin
cd /usr/src/apache_1.3.31
./configure --prefix=/usr/local/apache --enable-module=ssl --enable-module=so --server-uid=apache --server-gid=apache --enable-module=status --enable-module=rewrite --enable-module=cgi --enable-module=include --enable-module=auth --enable-module=dir --enable-module=env --enable-module=setenvif --enable-module=userdir --enable-module=imap --enable-module=negotiation --enable-module=log_config --enable-module=asis --enable-module=autoindex --enable-module=mime --enable-module=access --enable-module=rewrite --enable-shared=max
make
make certificate
make install
cd /usr/src/
tar -zxvf php-4.3.6.tar.gz
cd php-4.3.6
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs
make
make install
cp php.ini-dist /usr/local/lib/php.ini
cd /usr/src/
tar -zxvf mod_perl-1.0-current.tar.gz
cd /usr/src/mod_perl-1.29/
perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1
make
make install
cd /usr/src/
tar -zxvf mod_security-1.8.tar.gz
cd mod_security-1.8
/usr/local/apache/bin/apxs -cia ./apache1/mod_security.c -DEAPI
cd /usr/src/
chmod +x snort2modsec.pl
rm -fr /usr/src/rules/
tar -C /usr/src/ -zxvf snortrules-snapshot-CURRENT.tar.gz
./snort2modsec.pl /usr/src/rules/* > /usr/local/apache/conf/modsec.conf
cd /usr/src/
rm -fr /usr/src/mod_security-1.8.tar.gz
rm -fr /usr/src/apache_1.3.31.tar.gz
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31.tar.gz
rm -fr /usr/src/php-4.3.6.tar.gz
rm -fr /usr/src/openssl-0.9.7d.tar.gz
rm -fr /usr/src/mysql-3.23.58.tar.gz
rm -fr /usr/src/snortrules-snapshot-CURRENT.tar.gz
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txtwget
rm -fr /usr/src/mod_perl-1.0-current.tar.gz
rm -fr /usr/src/mod_security-1.8
rm -fr /usr/src/apache_1.3.31
rm -fr /usr/src/mod_ssl-2.8.18-1.3.31
rm -fr /usr/src/php-4.3.6
rm -fr /usr/src/openssl-0.9.7d
rm -fr /usr/src/mysql-3.23.58
rm -fr /usr/src/rules
rm -fr /usr/src/apache-patch_HARD_SERVER_LIMIT.txt
rm -fr /usr/src/mod_perl-1.29/
rm -fr /usr/src/httpd.conf.exemple
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.old
cd /usr/src/
wget http://www.secuobs.com/tutoriels/httpd.conf.exemple
mv /usr/src/httpd.conf.exemple /usr/local/apache/conf/httpd.conf
mkdir -p /home/chroot/usr/local/
cd /usr/local/
mv apache /home/chroot/usr/local/
ln -s /home/chroot/usr/local/apache
mkdir -p /usr/local/apache/www.site.com/www
mkdir /usr/local/apache/www.site.com/cgi-bin
mkdir /usr/local/apache/www.site.com/secure
wget http://www.secuobs.com/tuto/index.html
mv index.html /usr/local/apache/www.site.com/www/
/usr/local/apache/bin/apachectl startssl
Pour automatiser un peu plus, récupérer le script sh suivant plutot que de copier coller le long script ci-dessus, nommez le install.sh, copier coller le contenu ci-dessous, chmod +x dessus puis éxécuter le par ./install.sh :
#!/bin/sh
cd /usr/src/
wget http://www.secuobs.com/tuto/exoweb.sh.tar.gz
tar -zxvf exoweb.sh.tar.gz
chmod +x exoweb.sh
/usr/src/exoweb.sh
Il ne vous reste plus après qu'à utiliser le fichier modèle httpd.conf pour votre configuration (VirtualHost & NameVirtualHost: changer l'adresse ip, changer le noms de domaine), à savoir que le fichier initial d'installation d'apache a été copié sous /usr/local/apache/conf/httpd.conf.old, à lire il peut également être rempli d'informations intéressantes pour vous aider.
Pour tester : http://www.site.com/index.html & https://www.site.com/index.html
Remplacer www.site.com par votre nom de domaine.
N'hésitez pas à prendre contact avec nous si vous avez des commentaires ou des questions, envoyez nous de préférence vos fichier httpd.conf ainsi que vos configurations réseaux (ip, dns) en fichier attaché dans les mails.
Ce script et le modèle httpd.conf posent les bases de votre installation mais un minimum de recherche de votre part sera surement requis pour la personnalisation de votre configuration.
Bonne installation !
Vous pouvez également tester la sécurité de votre installation ainsi que celle de votre serveur en utilisant notre service gratuit et en ligne de scan de vulnérabilité Exoscan.
- Article suivant : Installer une passerelle filtrante antivirus et antispam
- Article précédent : Comment changer un mot de passe perdu pour un compte WINDOWS
- Article suivant dans la catégorie Tutoriels : Installer une passerelle filtrante antivirus et antispam
- Article précédent dans la catégorie Tutoriels : Comment changer un mot de passe perdu pour un compte WINDOWS
Mini-Tagwall des articles publiés sur SecuObs : | |
| |
sécurité, exploit, windows, attaque, outil, microsoft, réseau, audit, metasploit, vulnérabilité, système, virus, internet, usbsploit, données, source, linux, protocol, présentation, scanne, réseaux, scanner, bluetooth, conférence, reverse, shell, meterpreter, vista, rootkit, détection, mobile, security, malicieux, engineering, téléphone, paquet, trames, https, noyau, utilisant, intel, wishmaster, google, sysun, libre |
Mini-Tagwall de l'annuaire video : | |
| |
curit, security, biomet, metasploit, biometric, cking, password, windows, botnet, defcon, tutorial, crypt, xploit, exploit, lockpicking, linux, attack, wireshark, vmware, rootkit, conference, network, shmoocon, backtrack, virus, conficker, elcom, etter, elcomsoft, server, meterpreter, openvpn, ettercap, openbs, iphone, shell, openbsd, iptables, securitytube, deepsec, source, office, systm, openssh, radio |
Mini-Tagwall des articles de la revue de presse : | |
| |
security, microsoft, windows, hacker, attack, network, vulnerability, google, exploit, malware, internet, remote, iphone, server, inject, patch, apple, twitter, mobile, virus, ebook, facebook, vulnérabilité, crypt, source, linux, password, intel, research, virtual, phish, access, tutorial, trojan, social, privacy, firefox, adobe, overflow, office, cisco, conficker, botnet, pirate, sécurité |
Mini-Tagwall des Tweets de la revue Twitter : | |
| |
security, linux, botnet, attack, metasploit, cisco, defcon, phish, exploit, google, inject, server, firewall, network, twitter, vmware, windows, microsoft, compliance, vulnerability, python, engineering, source, kernel, crypt, social, overflow, nessus, crack, hacker, virus, iphone, patch, virtual, javascript, malware, conficker, pentest, research, email, password, adobe, apache, proxy, backtrack |