Last update: 29/05/2007


EtatStable
Version1.11
Mise à jour07/12/2007

Projet Secure Web
"SECWEB" regroupe un ensemble de scripts permettant d'obtenir rapidement une plateforme APACHE/PHP/MySQL/SQUID sécurisée.

Présentation du dossier Secure Web (SECWEB)
Apache, PHP, MySQL et SQUID sont devenus des références utilisées dans de très nombreux contextes, dans le cadre de petits serveurs personnels, comme dans celui de grandes entreprises. Cette utilisation massive rend leur sécurisation particulièrement importante.

Ces services s'installent relativement rapidement, soit simplement par package ou par recompilation "configure/make/make install"
Il faut cependant être bien conscient que la sécurité de ce type d'installation "out-of-the-box" peut être considérablement améliorée :
  • Au niveau système de fichiers : restrictions des droits dans le système de fichiers
  • Au niveau des processus : chroot du serveur, exécution sous un utilisateur dédié,...
  • Au niveau de la configuration : charger uniquement des modules nécessaires, empêcher le serveur d'afficher sa version, ...
L'objectif de ce projet est de fournir un ensemble de scripts permettant de recompiler et d'installer rapidement une plateforme Apache/PHP/MySQL/SQUID sécurisée : serveurs chrootés, droits correctement positionnés, HTTPS disponible, ...
Etape 1 : Plateforme considérée
Les différents scripts de SECWEB ont été écrits et testés sur une Debian Lenny. L'installation présentée ici sera donc basée sur cette distribution. Si vous utilisez une autre distribution, il vous faudra peut-être effectuer quelques modifications.
De manière générale, les scripts fournis doivent être considérés comme une simple aide pour accélérer le processus d'installation. La sécurisation de la plateforme nécessitera avant tout que vous maitrisez et compreniez ces composants. Même si l'installation se déroule sans accroc, ne vous contentez donc pas lancer ces scripts sans les comprendre !

A partir d'une installation Lenny minimale, les packages supplémentaires suivants doivent être installés :
  • openssl
  • gcc
  • libssl-dev
  • g++
  • make
  • flex
  • libxml2-dev
  • esmtp : ce package n'est necessaire si vous souhaitez envoyer des emails à partir de pages PHP. Pensez également à adapter le fichier de configuration "/etc/esmtprc" à votre architecture
Si vous utilisez une autre distribution, il vous faudra trouver les packages correspondants.
Etape 2 : Mise en place de l'environnement SECWEB
Exécution de l'étape : Récupérez et décompressez l'archive SECWEB-1.11.tar.gz
Récupérez l'archive SECWEB-1.11.tar.gz et décompressez la dans le répertoire de votre choix
Voici un bref aperçu du contenu de l'archive :
[REP] APACHE          << Pour compiler APACHE
[REP] ARCHIVES        << Contient les archives des outils
[REP] CHROOT          << Pour créer les chroot
[FIL] install_env     << Fichier "sourcé" par les scripts contenant les versions des outils 
[REP] MYSQL           << Pour compiler MySQL
[REP] OPENSSL_CA      << Pour générer la mini autorité de certification
[REP] PHP             << Pour compiler PHP
[REP] SQUID           << Pour compiler SQUID
Dans un second temps :
  • Téléchargez les archives de Apache, PHP, MySQL et SQUID dans le répertoire "ARCHIVES".
  • Configurez le fichier "install_env". Ce fichier contient les versions des différents des composants. Il est pré-configuré pour les versions suivantes :
    • Apache version 2.2.6
    • PHP version 5.2.5
    • MySQL version 5.0.45
    • SQUID version 2.6.STABLE17
Etape 3 : Création de la mini autorité de certification (CA) dans le répertoire OPENSSL_CA
Exécution de l'étape : Allez dans le répertoire OPENSSL_CA et lancez le script install.sh
Etapes effectuées par le script :
  • Création dans le répertoire courant de l'arborescence nécessaire à la mini CA
  • Génération de la clé privée et du certificat auto-signé associé de la CA.
Extrait de la trace :
debian:~/SECWEB/OPENSSL_CA
# ./install.sh 
>>> Enter company name [BlackMoon]
My Company
my company
>>> Enter web site name [www.my company.com]
www.my-company.com
>>> Creating files&directory
>>> Creating CA root certificate
Generating RSA private key, 2048 bit long modulus
........................................................+++
..................+++
e is 65537 (0x10001)
Enter pass phrase for cakey.pem:
Verifying - Enter pass phrase for cakey.pem:
Enter pass phrase for cakey.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Pays [FR]:
Etat [Ile-de-France]:
Ville [Paris]:
Organisation [My Company]:
Nom ou URL []:My Company CA
Adresse Email []:admin_ca@my-company.com 
Résultat de l'étape
A l'issue de cette étape, l'arborescence nécessaire au fonctionnement d'une mini CA a été crée dans le répertoire "OPENSSL_CA"
La clé privée et le certificat auto-signé associé de la CA ont été créés.
Arborescence dans le répertoire "OPENSSL_CA" à l'issue de cette étape :
[FIL] cacert.pem          << certificat de la CA
[FIL] cakey.pem           << clé privée de la CA (protégée par une passphrase)
[DIR] certs               << Contiendra les requêtes de certificats et les certificats
[FIL] index.txt           << Liste des CN des certificats délivrés
[FIL] install.sh          << Script d'installation
[DIR] newcerts            << Contiendra une copie des nouveaux certificats
[FIL] openssl.cnf         << Fichier de configuration patché
[FIL] openssl.cnf.orig    << Fichier de configuration originel
[DIR] private             << Contiendra les clés privées
[FIL] serial              << Numéro du prochain certificat à délivrer 
Etape 4 : Compilation de APACHE et installation dans /usr/local/apache-[VERS]
Exécution de l'étape : Allez dans le répertoire APACHE et lancez le script install.sh
Etapes effectuées par le script :
  • Génération d'une clé privée et d'une requête de certificat associée
  • Signature de la requête de certificat par la mini-CA générée à l'étape précédente
  • Compilation du serveur APACHE et installation dans /usr/local/apache-[VERS]/
  • Ajout de l'utilisateur d'exécution "apache"
Extrait de la trace :
debian:~/SECWEB/APACHE
# ./install.sh 
================================================================================
  Installation script for APACHE (2.2.6) with SSL

Installation will be done in /usr/local//apache-2.2.6/

Prerequisits :
 - Package OpenSSL must have been installed
 - Package libssl-dev must have been installed
 - Archive httpd-2.2.6.tar.gz in ARCHIVES directory
================================================================================
=> Generating certificate/private key [y/N]?
y
Generating RSA private key, 2048 bit long modulus
...+++
..............................................+++
e is 65537 (0x10001)
Enter pass phrase for private/serverkey.pem:
Verifying - Enter pass phrase for private/serverkey.pem:
Enter pass phrase for private/serverkey.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Pays [FR]:
Etat [Ile-de-France]:
Ville [Paris]:
Organisation [My Company]:
Nom ou URL []:www.my-company.com
Adresse Email []:admin_web@my-company.com
Using configuration from ./openssl.cnf
Enter pass phrase for ./cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'FR'
stateOrProvinceName   :PRINTABLE:'Ile-de-France'
localityName          :PRINTABLE:'Paris'
organizationName      :PRINTABLE:'My Company'
commonName            :PRINTABLE:'www.my-company.com'
emailAddress          :IA5STRING:'admin_web@my-company.com'
Certificate is to be certified until Dec  6 19:35:28 2008 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
=> Building Apache Server [y/N]?
y
[...]
mkdir /usr/local/apache-2.2.6/man
mkdir /usr/local/apache-2.2.6/man/man1
mkdir /usr/local/apache-2.2.6/man/man8
mkdir /usr/local/apache-2.2.6/manual
make[1]: quittant le répertoire « /root/SECWEB/ARCHIVES/httpd-2.2.6 »
Enter pass phrase for serverkey.pem:
writing RSA key
=> Adding apache user [y/N]?
y 
Résultat de l'étape
A l'issue de cette étape :
  • le serveur Apache est installé dans /usr/local/apache-[VERS]/
  • l'utilisateur/groupe "apache" a été créé. Les processus fils de Apache s'exécuteront sous cette identité
  • le couple certificat/clé privé du serveur a été créé. La clé est stockée déchiffrée (droits 700) dans le répertoire APACHE
Le serveur Apache pourrait maintenant être démarré en HTTP/HTTPS via la commande "/usr/local/apache-[VERS]/bin/apachectl start/startssl", mais évitez de le lancer. En effet, aucune instance d'Apache ne devra s'exécuter à partir de cette arborescence qui n'a pas été sécurisée (configuration et droits par défaut). Cell-ci servira uniquement de référence pour créer les chroots.
Etape 5 : Compilation de MySQL et installation dans /usr/local/mysql-[VERS]
Exécution de l'étape : Allez dans le répertoire MySQL et lancez le script install.sh
Etapes effectuées par le script :
  • Compilation du serveur MySQL et installation dans /usr/local/mysql-[VERS]
  • Ajout de l'utilisateur d'exécution "mysql"
  • Exécution du script de configuration MySQL
  • Démarrage du serveur MySQL
  • Nettoyage de la base MySQL
  • Positionnement du mot de passe root@localhost
  • Installation du script de configuration /etc/mysql.conf
Extrait de la trace :
root@debian:~/SECWEB/MYSQL
================================================================================
  Installation script for MYSQL (5.0.45)

Installation will be done in /usr/local//mysql-5.0.45/

Prerequisits :
 - Archive mysql-5.0.45.tar.gz in ARCHIVES directory
================================================================================
=> Building MySQL Server [y/N]?
y
[...]
make[3]: quittant le répertoire « /root/SECWEB/ARCHIVES/mysql-5.0.45/server-tools »
make[2]: quittant le répertoire « /root/SECWEB/ARCHIVES/mysql-5.0.45/server-tools »
make[1]: quittant le répertoire « /root/SECWEB/ARCHIVES/mysql-5.0.45 »
=> Adding mysql user [y/N]?
y
=> Executing configuration script [y/N]?
y
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local//mysql-5.0.45//bin/mysqladmin -u root password 'new-password'
/usr/local//mysql-5.0.45//bin/mysqladmin -u root -h debian password 'new-password'
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr/local//mysql-5.0.45/ ; /usr/local//mysql-5.0.45//bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local//mysql-5.0.45//bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
=> Starting MySQL server [y/N]?
y
=> Cleaning Database [y/N]?
Starting mysqld daemon with databases from /usr/local//mysql-5.0.45//var
y
=> Configuring MySQL root password [y/N]?
y
Enter password :
Re-enter password :
=> Installing configuration file [y/N]?
y 
Résultat de l'étape
A l'issue de cette étape :
  • Le serveur MySQL est installé dans /usr/local/mysql-[VERS]/
  • Le serveur est démarré et pourra être arrêté par la commande "killall mysql" ("killall" requiert le package "psmisc")
  • La base de données a été nettoyée des utilisateurs et bases de test et le mot de passe root a été fixé
Etape 6 : Compilation de PHP
Exécution de l'étape : Allez dans le répertoire PHP et lancez le script install.sh
Etapes effectuées par le script :
  • Compilation de PHP et installation dans /usr/local/php-[VERS]
Extrait de la trace :
================================================================================
  Installation script for PHP (5.2.5)

Installation will be done in /usr/local//php-5.2.5/

Prerequisits :
 - Archive php-5.2.5.tar.gz in ARCHIVES directory
================================================================================
=> Building PHP [y/N]?
y
[...]
Wrote PEAR system config file at: /usr/local//php-5.2.5//etc/pear.conf
You may want to add: /usr/local//php-5.2.5//lib/php to your php.ini include_path
Installing PDO headers:          /usr/local//php-5.2.5//include/php/ext/pdo/ 
Résultat de l'étape
A l'issue de cette étape, PHP a été installé dans /usr/local/php-[VERS]/
Etape 7 : Chroot de Apache/PHP/MySQL dans /chroot/web/
Présentation du script chroot.pl
Les opérations de chroot sont basées sur un petit script personnel appelé "chroot.pl", qui peut être trouvé dans le répertoire CHROOT.
Lancez le script pour obtenir une liste des options valides :
debian:~/SECWEB/CHROOT
# ./chroot.pl  

                       >>> Chrooting script by [x90re] <<<

                                                                Version 1.00
Usage :
  chroot.pl -c  -r  [-e ]
  [-v <0-3>] [CONST=VALUE]

  -c  = configuration file to use
  -r         = root directory of chroot
  -e    = path to environment file (global vars values)
  [-v <0-3>]              = verbose level
  CONST=VALUE             = set constant CONST to VALUE in global vars array
	
  • -c : fichier de configuration contenant les intructions pour le chroot
  • -r : racine de la chroot
  • -e : fichier contenant les variables à sourcer avant l'exécution. Rempli la table des variables globales avec les valeurs correspondantes
  • -v <0-3> : niveau de verbosité. Par defaut : 2. Le niveau 3 est reservé pour du debug.
  • Tous les paramètres de la forme "CONST=VALUE" : fixe la variable globa "CONST" a "VALUE" dans la table
Chroot de Apache/PHP dans /chroot/web_dev/
Dans un premier temps, nous allons chrooter Apache et PHP dans le répertoire "/chroot/web_dev/". Le suffixe "dev" faisant référence au fait que cette arborescence correspond à l'environnement de dev. Le chroot de Apache dans /chroot/web_dev/ se fait par la commande suivante :
# ./chroot.pl -c apache.conf -r /chroot/web_dev/ PHP=1 PHP_MAIL=1 SSL=1 CGI=1
[TRACE] : *** Chroot main executable ***
[TRACE] : >>> mkdir -p /chroot/web_dev//lib/i686/cmov
[TRACE] : >>> cp /lib/i686/cmov/libm.so.6 /chroot/web_dev//lib/i686/cmov/libm.so.6
[TRACE] : >>> mkdir -p /chroot/web_dev//usr/local//apache-2.2.6//lib
[TRACE] : >>> cp /usr/local//apache-2.2.6//lib/libaprutil-1.so.0 /chroot/web_dev//usr/local//apache-2.2.6//lib/libaprutil-1.so.0
[TRACE] : >>> cp /usr/local//apache-2.2.6//lib/libexpat.so.0 /chroot/web_dev//usr/local//apache-2.2.6//lib/libexpat.so.0
[TRACE] : >>> cp /usr/local//apache-2.2.6//lib/libapr-1.so.0 /chroot/web_dev//usr/local//apache-2.2.6//lib/libapr-1.so.0
[TRACE] : >>> cp /lib/i686/cmov/librt.so.1 /chroot/web_dev//lib/i686/cmov/librt.so.1
[TRACE] : >>> cp /lib/i686/cmov/libcrypt.so.1 /chroot/web_dev//lib/i686/cmov/libcrypt.so.1
[TRACE] : >>> cp /lib/i686/cmov/libpthread.so.0 /chroot/web_dev//lib/i686/cmov/libpthread.so.0
[TRACE] : >>> cp /lib/i686/cmov/libdl.so.2 /chroot/web_dev//lib/i686/cmov/libdl.so.2
[TRACE] : >>> cp /lib/i686/cmov/libc.so.6 /chroot/web_dev//lib/i686/cmov/libc.so.6
[TRACE] : >>> cp /lib/ld-linux.so.2 /chroot/web_dev//lib/ld-linux.so.2
[TRACE] : >>> mkdir -p /chroot/web_dev//usr/local//apache-2.2.6//bin
[TRACE] : >>> cp /usr/local//apache-2.2.6//bin/httpd /chroot/web_dev//usr/local//apache-2.2.6//bin/httpd
[TRACE] : *** Create devices ***
[TRACE] : >>> mkdir -p /chroot/web_dev//dev
[TRACE] : >>> mknod /chroot/web_dev//dev/null c 1 3
[...]
[TRACE] : >>> chmod 700 /etc/init.d/apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev S99apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev S99apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev S99apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev S99apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev K99apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev K99apache_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/apache_chroot_web_dev K99apache_chroot_web_dev 
Remarquez le positionnement de constantes via les paramètres passés au script :
  • PHP=1 : Active le support de PHP
  • PHP_MAIL=1 : Active le support du mail. esmtp est automatiquement ajouté à la chroot et les fichiers de configuration sont modifiés de manière adéquate
  • SSL=1 : Ajoute le support de SSL
  • CGI=1 : Ajoute le support des CGI. Un CGI de test est automatiquement ajouté
Cette commande a créé un certain nombre de fichiers/répertoires. En voici une liste non exhaustive des principaux :
>>> Hors chroot :
  /etc/init.d/apache_chroot_web_dev       = script de démarrage de apache
  /chroot/admin/apachectl_chroot_web_dev  = script de gestion de apache dans /chroot/web_dev
  /etc/rc?.d/?99apache_chroot_web_dev     = liens pour le redémarrage / arrêt du serveur
>>> Dans la chroot :
  /chroot/web_dev/usr/local/              = Répertoire contenant toutes les applications
    apache -> apache-2.2.6                = Lien vers la version active d'Apache
    apache-2.2.6                          = Contient le moteur apache
    mysql -> mysql-5.0.45                 = Lien vers la version active de MySQL (pour l'instant ne contient qu'une librairie)
    mysql-5.0.45                          = Contient le moteur mysql et les tables
    php -> php-5.2.5                      = Lien vers la version active de PHP
    php-5.2.5                             = Contient le fichier de configuration php.ini

  /chroot/web_dev/var/www/                = Contient les ressources du serveur web. Les données à ce niveau
                                            ne sont pas accessibles depuis le PHP (restriction open_basedir)
    access                                = Contient les fichiers pour gérer les authentifications niveau HTTP
    cgi-bin                               = Contient les CGIs
    web                                   = Contient les ressources web. Celles-ci sont accessibles depuis le PHP
      htdocs                              = Contient les ressources publiques accessibles par les clients
      includes                            = Contient les fichiers incluts dans le code PHP
      tmp_cookies                         = Répertoire temporaire pour gérer les cookies PHP
      tmp_upload                          = Répertoire temporaire pour gérer les uploads
  /chroot/web_dev/var/mysql/              = Contient les bases mysql
     mysql                                = Contient la base "mysql" du serveur
  /chroot/web_dev/var/log/                = Répertoire de log 
Chroot de MySQL dans /chroot/web/
Par défaut, la communication Apache/PHP - MySQL se fait via une socket UNIX. Apache/PHP et MySQL doivent alors être installés dans la même chroot.
Le chroot de MySQL dans /chroot/web_dev/ se fait par la commande suivante :
debian:~/SECWEB/CHROOT
# ./chroot.pl -c mysql.conf -r /chroot/web_dev/
[TRACE] : *** Chroot main executable ***
[TRACE] : >>> cp /lib/i686/cmov/librt.so.1 /chroot/web_dev//lib/i686/cmov/librt.so.1
[TRACE] : >>> cp /usr/lib/libz.so.1 /chroot/web_dev//usr/lib/libz.so.1
[TRACE] : >>> cp /lib/i686/cmov/libdl.so.2 /chroot/web_dev//lib/i686/cmov/libdl.so.2
[TRACE] : >>> cp /lib/i686/cmov/libpthread.so.0 /chroot/web_dev//lib/i686/cmov/libpthread.so.0
[...]
[TRACE] : *** Installing service in rcX.d ***
[TRACE] : >>> cp MYSQL/mysqld /etc/init.d/mysqld_chroot_web_dev
[TRACE] : >>> copy/patch MYSQL/mysqld /etc/init.d/mysqld_chroot_web_dev
[TRACE] : >>> chmod 700 /etc/init.d/mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev S99mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev S99mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev S99mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev S99mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev K99mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev K99mysqld_chroot_web_dev
[TRACE] : >>> ln -s ../init.d/mysqld_chroot_web_dev K99mysqld_chroot_web_dev 
Résultat de l'étape
A l'issue de cette étape, Apache, PHP et MySQL ont été chrooté dans /chroot/web_dev/ (avec éventuellement le support SSL/PHP)
Le serveur Apache chrooté peut être lancé via le script /etc/init.d/apache_chroot_web_dev
Le serveur MySQL chrooté peut être lancé via le script /etc/init.d/mysqld_chroot_web_dev Remarques:
  • Lorsque vous utilisez chroot.pl pour créer / compléter une chroot, vous devez impérativement avoir arrêté tous les services s'exécutant dans cette chroot (sinon l'écrasement des librairies partagées provoque des instabilités des dits services).
  • Les scripts placés dans /etc/init.d sont personnalisés pour lancer les versions chrootées
  • Pour MySQL, même si le service est chrooté, le fichier de configuration reste /etc/my.cnf hors chroot.
Tests
Démarrez les services Apache et MySQL chrootés :
debian:~/SECWEB/CHROOT
# /etc/init.d/apache_chroot_web_dev start
Starting Apache Server.
debian:~/SECWEB/CHROOT
# /etc/init.d/mysqld_chroot_web_dev start
Starting MySQL Server: .
debian:~/SECWEB/CHROOT
# Starting mysqld daemon with databases from /usr/local//mysql-5.0.45//var 
Pour tester Apache, lancez un navigateur et connectez vous en http ou https. Vous devriez voir apparaître une page "Test HTML OK". Celle-ci contient également deux liens permettant de tester PHP et un CGI.
Bien sûr, ces tests échouerons si la gestion de PHP et des CGIs n'ont pas été activés lors du chroot.

Pour test MySQL, vous pouvez utiliser le client "mysql" pour vous connecter au serveur :
debian:~/SECWEB/CHROOT
# /usr/local/mysql-5.0.45/bin/mysql -S /chroot/web_dev/tmp/mysql.sock -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.45-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0,00 sec)

mysql> exit
Bye 
Pour tester l'envoi de mail, faites un premier test en ligne de commande :
# chroot /chroot/web_dev/ /usr/bin/esmtp -t
From: [EMAIL SRC]
To: [EMAIL DST]
Subject: Test

Test d'envoi de mails

^D^D
Avec :
  • [EMAIL SRC] = adresse mail source
  • [EMAIL DST] = destinataire du message
Pour tester l'envoi depuis le PHP, créez une page "test_mail.php" contenant :
<?php
	$to = "[EMAIL DST]";
	$subject = "Test";
	$message = "Test d'envoi de mails";
	$headers = "From: [EMAIL SRC]";

	if(!mail($to, $subject, $message, $headers))
	{
		echo "Error while sending mail";
		exit(-1);
	}
	echo "Mail successfully sent";
?>
Ouvrez ensuite un navigateur sur cette page pour tester l'envoi de mail
Etape 8 : Compilation de SQUID
Exécution de l'étape : Allez dans le répertoire SQUID et lancez le script install.sh
Etapes effectuées par le script :
  • Compilation de SQUID et installation dans /usr/local/SQUID-[VERS]
Extrait de la trace :
================================================================================
  Installation script for SQUID (2.6.STABLE17)

Installation will be done in /usr/local//squid-2.6.STABLE17/

Prerequisits :
 - Archive squid-2.6.STABLE17.tar.gz in ARCHIVES directory
================================================================================
=> Building SQUID Server [y/N]?
y
[...]
=> Adding squid user [y/N]?
y
make[3]: quittant le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17/tools »
make[2]: quittant le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17/tools »
make[1]: quittant le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17/tools »
make[1]: entrant dans le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17 »
make[2]: entrant dans le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17 »
make[2]: Rien à faire pour « install-exec-am ».
make[2]: Rien à faire pour « install-data-am ».
make[2]: quittant le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17 »
make[1]: quittant le répertoire « /root/SECWEB/ARCHIVES/squid-2.6.STABLE17 »
=> Adding squid user [y/N]?
y 
Résultat de l'étape
A l'issue de cette étape, SQUID a installé dans /usr/local/squid-[VERS]/
Etape 9 : chroot de SQUID dans /chroot/squid/
Chroot de SQUID dans /chroot/proxy/
L'opération de chroot de SQUID est également réalisée par le script PERL chroot.pl dans le répertoire CHROOT
debian:~/SECWEB/CHROOT
# ./chroot.pl -c squid.conf -r /chroot/proxy/
[TRACE] : *** Chroot main executable ***
[TRACE] : >>> mkdir -p /chroot/proxy//lib/i686/cmov
[TRACE] : >>> cp /lib/i686/cmov/libcrypt.so.1 /chroot/proxy//lib/i686/cmov/libcrypt.so.1
[TRACE] : >>> cp /lib/i686/cmov/libm.so.6 /chroot/proxy//lib/i686/cmov/libm.so.6
[TRACE] : >>> cp /lib/i686/cmov/libnsl.so.1 /chroot/proxy//lib/i686/cmov/libnsl.so.1
[TRACE] : >>> cp /lib/i686/cmov/libc.so.6 /chroot/proxy//lib/i686/cmov/libc.so.6
[TRACE] : >>> cp /lib/ld-linux.so.2 /chroot/proxy//lib/ld-linux.so.2
[...]
[TRACE] : >>> chmod 700 /etc/init.d/squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy S99squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy S99squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy S99squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy S99squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy K99squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy K99squid_chroot_proxy
[TRACE] : >>> ln -s ../init.d/squid_chroot_proxy K99squid_chroot_proxy
[TRACE] : *** Creating swap directories ***
[TRACE] : >>> chroot /chroot/proxy/ /usr/local//squid-2.6.STABLE17//sbin/squid -z
2007/12/07 21:03:09| Creating Swap Directories 
Résultat de l'étape
A l'issue de cette étape :
  • SQUID a été chrooté dans /chroot/proxy
  • Un script de redémarrage "/etc/init.d/squid_chroot_proxy" a été créé
  • Les différents liens dans rcX.d ont été créés
Tests
Démarrez le service SQUID :
# /etc/init.d/squid_chroot_proxy start
Starting proxy server: squid. 
Faites une tentative de connexion à partir d'un navigateur correctement configuré. Vous devriez revevoir une erreur "Access Denied" de SQUID (qui refuse par défaut de traiter toutes les requêtes émanant d'un autre hôte que localhost)
Etape 10 : Complément
  • Pour compléter cette sécurisation du serveur, il peut-être intéressant d'ajouter un serveur reverse-proxy frontal constitué d'une combinaison Apache/mod_proxy/mod_security.
    mod_security est disponible sur la page suivante : mod_security
  • Pour activer les uploads de fichiers via PHP, vous devrez les autoriser le fichier "php.ini" (file_uploads)
Accès aux ressources
License
L'ensemble des données (scripts et informations) fournis sur cette page dans l'archive "SECWEB" sont fournis « tels quels » et sans aucune garantie. Je ne donne aucune garantie à l’effet que les éléments et le contenu du site sont complets, justes, exacts, exhaustifs, fiables et à jours. Je ne donne de plus aucune garantie à l’effet que les éléments ou contenus fournis peuvent convenir ou être adaptés à une situation particulière précise par un usager. Je décline toute responsabilité face à une quelconque perte faisant suite à l'utilisation de ces informations ou scripts. Vous utilisez ces outils à vos propres risques. Ces outils sont libres de droits et peuvent être réutilisés modifiés dans tout projet.

Cette archive contient tous les scripts permettant d'effectuer les étapes décrites ci-dessus.
Ancienne version (utilisez de préférence la nouvelle)
Une remarque/un bug ?
N'hésitez donc pas à me faire part de vos remarques/suggestions pour l'améliorer: Benjamin CAILLAT