<h3>- Installation des packages :</h3>
<p class="spip">apt-get install apache2</p>

<p class="spip">apt-get install openssl</p>

<p class="spip">apt-get install php4-cli</p>

<p class="spip">ap-get install php4-mysql</p>

<p class="spip">apt-get install libapache2-mod-security</p>

<p class="spip">apt-get install awstats</p>

<p class="spip"><strong class="spip">contrôle :</strong> <i class="spip"> dans un navigateur verifier si apache tourne (http://localhost) </i></p>

<h3>Création du certificat pour le mode SSL</h3>
<p class="spip"><code class='spip_code' dir='ltr'>apache2-ssl-certificate</code></p>

<p class="spip">répondre aux questions qui sont posées</p>

<p class="spip"><strong class="spip">contrôle :</strong> <i class="spip"> vérifier la création du fichier /etc/apache2/apcahe.pem et d’un lien symbolique sur ce fichier. Ce fichier contient la clé publique et la clé privée qui seront utilisées par apache. Il existe une autre méthode plus complexe avec openssl pour créer ces clés. </i></p>

<h3>Activation du mode SSL </h3>
<li> Editer le fichier /etc/apache2/httpd.conf et ajouter les lignes ci-dessous
<div style='text-align: left;' class='spip_code' dir='ltr'><code>SSLProtocol -all +SSLv2<br />
SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP<br />
SSLCertificateFile /etc/apache2/ssl/apache.pem</code></div>
<li> Editer le fichier /etc/apache2/ports.conf et ajouter si elle n’existe pas déjà la ligne ci-dessous
<p class="spip"><code class='spip_code' dir='ltr'>Listen 443</code></p>

<h3>Configuration des sites par défault pour fonctionner en mod ssl.</h3>
<p class="spip"><code class='spip_code' dir='ltr'>cp /etc/apache2/sites-available/default cp /etc/apache2/sites-available/default-ssl</code></p>

<li> Editer le fichier /etc/apache2/sites-available/default-ssl et modifier/ajouter comme ci dessous(Ajout de la ligne « SSLEngine on » et ajout de « :443 » après « NameVirtualHost * » et « VirtualHost * » )
<div style='text-align: left;' class='spip_code' dir='ltr'><code>NameVirtualHost *:443<br />
<VirtualHost *:443><br />
            SSLEngine on<br />
...<br />
...</code></div>
<li> Activer le site avec la commande suivante
<p class="spip"><code class='spip_code' dir='ltr'>a2ensite default-ssl</code></p>

<li> Activer le mod ssl d’apache avec la commande suivante
<p class="spip"><code class='spip_code' dir='ltr'>a2enmod ssl</code></p>

<li> Forcer Apache à relire son fichier de configuration
<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>

<p class="spip"><strong class="spip">contrôle :</strong> <i class="spip"> dans un navigateur verifier si apache tourne en mode  ssl  </i><a href="https://localhost/" class="spip_out">https://localhost</a><i class="spip">    </i></p>

<li> Pour créer une partie du site (chemin physique /var/www/secret) uniquement accessible en https editer le fichier /etc/apache2/sites-available/default-ssl et ajouter entre les tags VirtualHost :
<div style='text-align: left;' class='spip_code' dir='ltr'><code><VirtualHost *:443><br />
......<br />
   Alias /secret "/var/www/secret/"<br />
    Directory "/var/www/secret/"><br />
            AllowOverride None<br />
           Order deny,allow<br />
           Allow from all<br />
   </Directory><br />
...<br />
...<br />
</VirtualHost></code></div>
<li> Forcer Apache à relire son fichier de configuration
<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>

<p class="spip"><strong class="spip">contrôle :</strong> <i class="spip"> dans un navigateur verifier si   </i><a href="https://localhost/secret" class="spip_out">https://localhost/secret</a><a href="https://localhost/" class="spip_out"> </a><i class="spip">   fonctionne, et   </i><a href="http://localhost/secret" class="spip_out">http://localhost/secret</a><i class="spip">  ne fonctionne pas . </i></p>

<h3>Activation/désactivation des modules d’Apache</h3>
<li> Pour voir les modules disponibles tapez la commande
<p class="spip"><code class='spip_code' dir='ltr'>a2enmod</code></p>

<p class="spip">puis pour activer le module</p>

<p class="spip"><code class='spip_code' dir='ltr'>a2enmod <nom_module></code></p>

<li> Pour voir les modules chargés tapez la commande
<p class="spip"><code class='spip_code' dir='ltr'>a2dismod</code></p>

<p class="spip">puis pour désactiver le module</p>

<p class="spip"><code class='spip_code' dir='ltr'>a2dismod <nom_module></code></p>

<li> Forcer Apache à relire son fichier de configuration
<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>

<h3>Activation/désactivation site/répertoire virtuel</h3>
<li> Dans le répertoire /etc/apache2/sites-availables créez un fichier de configuration de site dans l’exemple suivant je créé un répertoire virtuel dans le fichier mon_repertoire_virtuel :
<div style='text-align: left;' class='spip_code' dir='ltr'><code>Alias /test/ "/var/www/test/"<br />
    <Directory "/var/www/test/"><br />
        Options Indexes MultiViews FollowSymLinks<br />
        AllowOverride None<br />
        Order deny,allow<br />
        Allow from all <br />
    </Directory></code></div>
<li> Pour activer ce répertoire virtuel tapez la commande
<p class="spip"><code class='spip_code' dir='ltr'> a2ensite  mon_repertoire_virtuel</code></p>

<p class="spip">et forcer Apache à relire son fichier de configuration</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>

<li> Pour désactiver ce répertoire virtuel tapez la commande
<p class="spip"><code class='spip_code' dir='ltr'> a2dissite  mon_repertoire_virtuel</code></p>

<p class="spip">et forcer Apache à relire son fichier de configuration</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>

<p class="spip">Les commandes a2ensite et a2dissite créent/suppriment des liens symboliques dans le répertoire /etc/apache2/sites-enabled/</p>

<h3>Configuration du mod_security d’Apache</h3>
<li> Editer le fichier /etc/apache2/httpd.conf et rajouter les lignes suivantes
<div style='text-align: left;' class='spip_code' dir='ltr'><code># Turn ModSecurity On<br />
SecFilterEngine On<br />
<br />
# Reject requests with status 403<br />
SecFilterDefaultAction "deny,log,status:403"<br />
# Some sane defaults<br />
SecFilterScanPOST On<br />
SecFilterCheckURLEncoding On<br />
SecFilterCheckUnicodeEncoding Off<br />
<br />
# Accept almost all byte values<br />
SecFilterForceByteRange 1 255<br />
<br />
#Injection SQL<br />
SecFilter "delete[[:space:]]+from"<br />
SecFilter "insert[[:space:]]+into"<br />
SecFilter "select.+from"<br />
<br />
#Attaque par chemin transversal<br />
SecFilter "\.\./"<br />
<br />
#Injection javascript<br />
SecFilter "<script"<br />
<br />
#Attaques XSS<br />
SecFilter "<.+>"<br />
SecFilter "<[[:space:]]*script"<br />
<br />
#Necessite headers HTTP_USER_AGENT ou HTTP_POST<br />
SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" <br />
<br />
# Server masking is optional<br />
# SecServerSignature "Microsoft-IIS/5.0"<br />
SecUploadDir /tmp<br />
SecUploadKeepFiles Off<br />
<br />
# Only record the interesting stuff<br />
SecAuditEngine RelevantOnly<br />
SecAuditLog logs/audit_log<br />
<br />
# You normally won't need debug logging<br />
SecFilterDebugLevel 0<br />
SecFilterDebugLog logs/modsec_debug_log<br />
<br />
# Only accept request encodings we know how to handle<br />
# we exclude GET requests from this because some (automated)<br />
# clients supply "text/html" as Content-Type<br />
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain<br />
SecFilterSelective HTTP_Content-Type \<br />
"!(^application/x-www-form-urlencoded$|^multipart/form-data;)"<br />
<br />
# Do not accept GET or HEAD requests with bodies<br />
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain<br />
SecFilterSelective HTTP_Content-Length "!^$"<br />
<br />
# Require Content-Length to be provided with<br />
# every POST request</code></div>
<p class="spip">Pour que tout fonctionne créez le répertoire <strong class="spip">logs</strong> dans <strong class="spip">/etc/apache2</strong></p>

<p class="spip">Je n’ai pas inventé ces règles le les ai pêchées dans la doc directement sur le site de mod_security.</p>

<li> Forcer Apache à relire son fichier de configuration
<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>

<p class="spip">Vérifier cycliquement ou mettre sous surveillance le fichier /etc/apache2/log/audit.log dans lequel apparaitront les tentatives d’intrusion.</p>

<h3>Configuration de AWSTATS</h3>
<p class="spip">Copier le fichier de configuration standard.de AWSTATS</p>

<p class="spip"><code class='spip_code' dir='ltr'>cp /etc/awstats/awstats.conf.local /etc/awstats.mon_serveur.conf</code></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Editer le fichier etc/awstats.mon_serveur.conf <br />
et renseigner les lignes Logfile (fichier de log<br />
 d'apache) et SiteDomain (personnalisation affichage)<br />
.......<br />
 LogFile="/var/log/apache2/access.log"<br />
......<br />
 SiteDomain="Nom de mon serveur"<br />
.......<br />
LogFormat=1</code></div>
<p class="spip">Il existe bon nombre d’autres options que je vous laisse découvrir</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Pour vérifier que tout fonctionne lancez la commande<br />
/usr/lib/cgi-bin/awstats.pl -config= mon_serveur </code></div>
<p class="spip">Vous devriez avoir une réponse de ce style</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
Update for config "/etc/awstats/awstats.mon_serveur.conf"<br />
With data in log file "/var/log/apache2/access.log"...<br />
Phase 1 : First bypass old records, searching new record...<br />
Direct access to last remembered record has fallen on another record.<br />
So searching new records from beginning of log file...<br />
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...<br />
Jumped lines in file: 0<br />
Parsed lines in file: 17400<br />
 Found 0 dropped records,<br />
 Found 0 corrupted records,<br />
 Found 0 old records,<br />
 Found 17400 new qualified records.</code></div>
<p class="spip">Il n’y a plus qu’a automatiser cette tache avec crontab</p>

<p class="spip">commande</p>

<p class="spip"><code class='spip_code' dir='ltr'>crontab -e</code></p>

<p class="spip">ajouter la ligne suivante pour une mise à jour des stats tout les jours à minuit</p>

<p class="spip"><code class='spip_code' dir='ltr'> 0 0 * * * /usr/lib/cgi-bin/awstats.pl -config=mon_site</code></p>

<p class="spip">Pour atteindre les stats depuis un butineur</p>

<p class="spip"><code class='spip_code' dir='ltr'>http://127.0.0.1/cgi-bin/awstats.pl?config=mon_site->http://127.0.0.1/cgi-bin/awstats.pl?config=mon_site</code></p>

<p class="spip">La configuration web de AWSTATS a été ajoutée au fichier
 /etc/apache2/httpd.conf</p>

<p class="spip">par mesure de sécurité restreindre l’accès web des stats en modifiant la ligne</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code><Directory "/usr/local/awstats/wwwroot"><br />
....<br />
....Allow from all<br />
....<br />
</Directory></code></div>
<p class="spip">en</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code><Directory "/usr/local/awstats/wwwroot"><br />
....<br />
....Allow from 127.0.0.1<br />
....<br />
</Directory></code></div>
<li> Forcer Apache à relire son fichier de configuration
<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache2 reload</code></p>