|
Tutorial : Installation sécurisée, automatisée en globalité ou manuelle de Apache pour Linux avec Openssl, Php4, Mysql, Mod_ssl, Mod_rewrite, Mod_perl , DSO & Mod_security avec les rêgles de l'IDS Snort
Note : Ce tutorial a été mis à jour le 16 juin 2004 à 15:38 pour la sortie de la version stable 1.8 de mod_security + activation par défaut du chroot dans la partie automatisée.
Par Xavier Poli, SecuObs.com
Le 03/05/2004
|
|
Pages : 1
- 2
- 3
- 4
- 5
- 6
- 7
----------------------------------------
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 :
<VirtualHost
www.site.com>
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]
</VirtualHost>
|
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
<IfDefine SSL>
LoadModule ssl_module libexec/libssl.so
</IfDefine>
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
<IfDefine SSL>
AddModule mod_ssl.c
</IfDefine>
|
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 :
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 :
<Directory
/>
Order deny,allow
Deny from all
</Directory>
|
Puis :
<Directory
"/usr/local/apache/www.site.com/www">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
|
Vous
pouvez également permettre à des
utilisateurs particuliers d'accéder à
certains répertoires, vous devez pour
cela mettre des sections du type :
<Directory
"/usr/local/apache/www.site.com/www/secure">
AllowOverride AuthConfig
Options none
Order allow,deny
Allow from all
</Directory>
|
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 :
<Directory "/usr/local/apache/www.site.com/www/cgi-bin">
AllowOverride none
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
|
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/
|
Pages : 1
- 2
- 3
- 4
- 5
- 6
- 7
----------------------------------------
|
|
|
|
|
| Mini-Tagwall | | | |
Revue de presse : security, microsoft, windows, vulnérabilité, network, google, vulnerability, hacker, attack, inject, remote, mobile, server
+ de mots clés pour la revue de presse
Annuaires des videos : virus, spyware, vmware, firmware, biometric, lockpicking, wimax, password, kernel, malware, spammer, windows, iphone
+ de mots clés pour les videos
| | |
|
|