Skip to Content

Installation - Sécurisation Apache2 sur une Debian Sarge .

- Installation des packages :

apt-get install apache2

apt-get install openssl

apt-get install php4-cli

ap-get install php4-mysql

apt-get install libapache2-mod-security

apt-get install awstats

contrôle : dans un navigateur verifier si apache tourne (http://localhost)

Création du certificat pour le mode SSL

apache2-ssl-certificate

répondre aux questions qui sont posées

contrôle : 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.

Activation du mode SSL

  •  Editer le fichier /etc/apache2/httpd.conf et ajouter les lignes ci-dessous
    SSLProtocol -all +SSLv2
    SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
    SSLCertificateFile /etc/apache2/ssl/apache.pem
  •  Editer le fichier /etc/apache2/ports.conf et ajouter si elle n’existe pas déjà la ligne ci-dessous

    Listen 443

    Configuration des sites par défault pour fonctionner en mod ssl.

    cp /etc/apache2/sites-available/default cp /etc/apache2/sites-available/default-ssl

  •  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 * » )
    NameVirtualHost *:443

               SSLEngine on
    ...
    ...
  •  Activer le site avec la commande suivante

    a2ensite default-ssl

  •  Activer le mod ssl d’apache avec la commande suivante

    a2enmod ssl

  •  Forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

    contrôle : dans un navigateur verifier si apache tourne en mode ssl https://localhost

  •  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 :

    ......
      Alias /secret "/var/www/secret/"
       Directory "/var/www/secret/">
               AllowOverride None
              Order deny,allow
              Allow from all
     
    ...
    ...
  •  Forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

    contrôle : dans un navigateur verifier si https://localhost/secret fonctionne, et http://localhost/secret ne fonctionne pas .

    Activation/désactivation des modules d’Apache

  •  Pour voir les modules disponibles tapez la commande

    a2enmod

    puis pour activer le module

    a2enmod

  •  Pour voir les modules chargés tapez la commande

    a2dismod

    puis pour désactiver le module

    a2dismod

  •  Forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

    Activation/désactivation site/répertoire virtuel

  •  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 :
    Alias /test/ "/var/www/test/"
       
           Options Indexes MultiViews FollowSymLinks
           AllowOverride None
           Order deny,allow
           Allow from all
       
  •  Pour activer ce répertoire virtuel tapez la commande

    a2ensite  mon_repertoire_virtuel

    et forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

  •  Pour désactiver ce répertoire virtuel tapez la commande

    a2dissite  mon_repertoire_virtuel

    et forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

    Les commandes a2ensite et a2dissite créent/suppriment des liens symboliques dans le répertoire /etc/apache2/sites-enabled/

    Configuration du mod_security d’Apache

  •  Editer le fichier /etc/apache2/httpd.conf et rajouter les lignes suivantes
    # Turn ModSecurity On
    SecFilterEngine On

    # Reject requests with status 403
    SecFilterDefaultAction "deny,log,status:403"
    # Some sane defaults
    SecFilterScanPOST On
    SecFilterCheckURLEncoding On
    SecFilterCheckUnicodeEncoding Off

    # Accept almost all byte values
    SecFilterForceByteRange 1 255

    #Injection SQL
    SecFilter "delete[[:space:]]+from"
    SecFilter "insert[[:space:]]+into"
    SecFilter "select.+from"

    #Attaque par chemin transversal
    SecFilter "\.\./"

    #Injection javascript
    SecFilter "


    #Attaques XSS
    SecFilter "<.+>"
    SecFilter "<[[:space:]]*script"

    #Necessite headers HTTP_USER_AGENT ou HTTP_POST
    SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"

    # Server masking is optional
    # SecServerSignature "Microsoft-IIS/5.0"
    SecUploadDir /tmp
    SecUploadKeepFiles Off

    # Only record the interesting stuff
    SecAuditEngine RelevantOnly
    SecAuditLog logs/audit_log

    # You normally won't need debug logging
    SecFilterDebugLevel 0
    SecFilterDebugLog logs/modsec_debug_log

    # Only accept request encodings we know how to handle
    # we exclude GET requests from this because some (automated)
    # clients supply "text/html" as Content-Type
    SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
    SecFilterSelective HTTP_Content-Type \
    "!(^application/x-www-form-urlencoded$|^multipart/form-data;)"

    # Do not accept GET or HEAD requests with bodies
    SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
    SecFilterSelective HTTP_Content-Length "!^$"

    # Require Content-Length to be provided with
    # every POST request

    Pour que tout fonctionne créez le répertoire logs dans /etc/apache2

    Je n’ai pas inventé ces règles le les ai pêchées dans la doc directement sur le site de mod_security.

  •  Forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

    Vérifier cycliquement ou mettre sous surveillance le fichier /etc/apache2/log/audit.log dans lequel apparaitront les tentatives d’intrusion.

    Configuration de AWSTATS

    Copier le fichier de configuration standard.de AWSTATS

    cp /etc/awstats/awstats.conf.local /etc/awstats.mon_serveur.conf

    Editer le fichier etc/awstats.mon_serveur.conf
    et renseigner les lignes Logfile (fichier de log
    d'apache) et SiteDomain (personnalisation affichage)
    .......
    LogFile="/var/log/apache2/access.log"
    ......
    SiteDomain="Nom de mon serveur"
    .......
    LogFormat=1

    Il existe bon nombre d’autres options que je vous laisse découvrir

    Pour vérifier que tout fonctionne lancez la commande
    /usr/lib/cgi-bin/awstats.pl -config= mon_serveur

    Vous devriez avoir une réponse de ce style


    Update for config "/etc/awstats/awstats.mon_serveur.conf"
    With data in log file "/var/log/apache2/access.log"...
    Phase 1 : First bypass old records, searching new record...
    Direct access to last remembered record has fallen on another record.
    So searching new records from beginning of log file...
    Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
    Jumped lines in file: 0
    Parsed lines in file: 17400
    Found 0 dropped records,
    Found 0 corrupted records,
    Found 0 old records,
    Found 17400 new qualified records.

    Il n’y a plus qu’a automatiser cette tache avec crontab

    commande

    crontab -e

    ajouter la ligne suivante pour une mise à jour des stats tout les jours à minuit

    0 0 * * * /usr/lib/cgi-bin/awstats.pl -config=mon_site

    Pour atteindre les stats depuis un butineur

    http://127.0.0.1/cgi-bin/awstats.pl?config=mon_site->http://127.0.0.1/cgi-bin/awstats.pl?config=mon_site

    La configuration web de AWSTATS a été ajoutée au fichier /etc/apache2/httpd.conf

    par mesure de sécurité restreindre l’accès web des stats en modifiant la ligne


    ....
    ....Allow from all
    ....

    en


    ....
    ....Allow from 127.0.0.1
    ....
  •  Forcer Apache à relire son fichier de configuration

    /etc/init.d/apache2 reload

  • Commentaires

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    Ton tutorial ne marche plus du tout sous Debian Etch...
    Le package "libapache2-mod-security" n’existe plus visiblement et la commande "apache2-ssl-certificate" ne fonctionne pas non plus... J’espère qu’il y aura une nouvelle version de ton tutorial actualisée bientôt...

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    salut.
    pour tout ceux etant sous debian etch 4.0 et voulant avoir le ssl, la commande apache2-ssl-certificate n’existe pas.
    vous pouvez donc faire sa :

    openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

    puis
    chmod 600 /etc/apache2/apache.pem

    et en adaptant SSLCertificateFile /etc/apache2/ssl/apache.pem
    par SSLCertificateFile /etc/apache2/apache.pem

    voila.

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    Configuration des sites par défault pour fonctionner en mod ssl.

    cp /etc/apache2/sites-available/default cp /etc/apache2/sites-available/default-ssl

    c’est le fichier default que l’on duplique (changement de nom) donc :
    cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default-ssl

    Si je me trompe merci deme corriger

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    Petite modification pour debian sarge

    Création du certificat pour le mode SSL

    apache2-ssl-certificate

    répondre aux questions qui sont posées

    contrôle : vérifier la création du fichier /etc/apache2/ssl/apache.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.

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    Bonjour

    Dans la partie installation de awstats il ya un oubli :

    cp /etc/awstats/awstats.local.conf /etc/mon_sites.conf

    qui doit etre

    cp /etc/awstats/awstats.local.conf /etc/awstats/mon_sites.conf

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    Bonjour,

    1 - C’est que le répertoire secret est dans le repertoire par défaut du serveur web.
    2 - pour SSL il faut parametrer le navigateur web pour fonctionner en SSL2
    Outils > Options > Avancé décoché SSL3

    @+

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    Bonjour,

    http://localhost/secret/
    et
    https://localhost/secret/

    fonctionne, je ne comprend pas !
    peut-on m’expliquer d’ou cela vient ?

    Par ailleurs, firefox, me dit que c’est une ancienne version de ssl et ne veut pas se connecter, avez-vous une solution ?

    Merci

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    il manque un ’<’ dans :

    ......
    Alias /secret "/var/www/secret/"
    Directory "/var/www/secret/">
    AllowOverride None
    Order deny,allow
    Allow from all

    ...
    ...

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    J’ai remarqué le problème, après un upgrade de la distro , mod_security ne faisait plus parti de la distribution debian.

    Installation - Sécurisation Apache2 sur une Debian Sarge .

    slt après avoir fait la modification du fichier httpd.conf pr la configuration du mod_security, le reload ne fonctionne pas. j’ai comme message d’erreur :

    Reloading web server config...Syntax error on line 11 of /etc/apache2/httpd.conf :
    Invalid command ’SecFilterEngine’, perhaps mis-spelled or defined by a module not included in the server configuration

    ... jvoi s vraiment pas ...