Outils pour utilisateurs

Outils du site


linux:apache

APACHE : Serveur HTTP & modules


Apache 2



Configuration Apache

  • Les fichiers de conf Apache :

Les modules sont chargés à partir du Directory /etc/apache/mods-enabled/
Les sites sont chargés à partir du Directory /etc/apache2/sites-enablad/
Le fichier httpd.conf est appellé mais ne contient pas de directives (ancien Apache)
Le fichier ports.conf définit les ports d'écoute d'Apache
Le Directory conf.d contient des fichiers de conf annexes (ex:phpmyadmin)

Apache include conf

  • Désactiver le listing (actif par défaut):

vi /etc/apache/apache.conf
<Location />
Options -Indexes
</Location>

  • Désactiver la signature Web :

ServerSignature Off
ServerTokens Prod

Configuration Apache pour l'hébergement mutualisé

Afin d'obtenir différents sites sur votre serveur Web (hébergement mutualisé),
plusieurs techniques s'offre à nous.

VirtualHosting par PORT

  • Déclaration du VirtualHost sur le port 81:

vi /etc/apache2/sites-available/test
<VirtualHost *:81>
        ServerAdmin     admin@test.local   # adresse mail postmaster
        DocumentRoot    /var/www/test/     # emplacement des sources
        DirectoryIndex  index.html         # page par défaut
        CustomLog       /var/log/apache2/www.test.local-access.log combined  # log d'accès
        ErrorLog        /var/log/apache2/www.test.local-error.log            # log d'erreur
</VirtualHost>

  • Demander à Apache d'écouter en + sur le port 81 :

vi /etc/apache2/ports.conf
NameVirtualHost *:80
NameVirtualHost *:81
Listen 80
Listen 81

  • Activer le site et relancer le service :

a2ensite test
apache2ctl configtest
apache2ctl graceful

Cette technique est peu utilisée du fait que le protocole HTTP est définit par défaut sur le 80.
Il faut attaquer le nom ou l'ip en précisant le port :

VirtualHosting par IP

  • Définition du VirtualHost sur une l'IP 192.168.1.100 :

vi /etc/apache2/sites-available/test
<VirtualHost 192.168.1.100:80>
        ServerAdmin     admin@test.local   # adresse mail postmaster
        DocumentRoot    /var/www/test/     # emplacement des sources
        DirectoryIndex  index.html         # page par défaut
        CustomLog       /var/log/apache2/www.test.local-access.log combined  # log d'accès
        ErrorLog        /var/log/apache2/www.test.local-error.log            # log d'erreur
</VirtualHost>

  • Définition d'une interface réseau virtuelle :

vi /etc/network/interfaces
# INTERFACE VIRTUELLE
auto eth0:0
iface eth0:0 inet static
address         192.168.1.100
netmask         255.255.255.0
network         192.168.1.0
broadcast       192.168.1.255
gateway         192.168.1.254

  • Activer le site et relancer le service :

a2ensite test
apache2ctl configtest
apache2ctl graceful

Cette technique repose donc sur l'interface d'écoute. Cette option peut s'avérer utile pour des restrictions d'accès comme un intranet.

VirtualHosting par NOM

vi /etc/apache2/sites-available/test
<VirtualHost *:80>
        ServerAdmin     admin@test.local   # adresse mail postmaster
        ServerName      www.test.local     # résolution interne
        ServerAlias     www.test.com       # résolution externe
        DocumentRoot    /var/www/test/     # emplacement des sources
        DirectoryIndex  index.html         # page par défaut
        CustomLog       /var/log/apache2/www.test.local-access.log combined  # log d'accès
        ErrorLog        /var/log/apache2/www.test.local-error.log            # log d'erreur
</VirtualHost>

  • Déclaration du CNAME www dans votre DNS interne :

vi /var/cache/bind/test.local.db
srv-web    IN     A       192.168.1.1
www        IN     CNAME   srv-web.test.local.

  • Activer le site et relancer le service :

a2ensite test
apache2ctl configtest
apache2ctl graceful

Cette technique est basé sur la résolution DNS. Vous faites pointer les alias (souvent www) vers le site web qui les héberge.

Les commandes d'administration d'Apache

  • Connaître la version Apache utilisée:

apache2ctl -V

  • Activer un module (exemple suphp):

a2enmod suphp
/etc/init.d/apache2 reload

  • Désactiver un module:

a2dismod rewrite
/etc/init.d/apache2 reload

  • Activer un site après avoir créer le Vhost dans “sites-available”:

a2ensite www.truc.fr
service apache2 reload

  • Désactiver un site (supprime le lien symbolique de sites-enabled vers sites-available):

a2dissite www.machin.com
service apache2 reload

  • Tester la configuration de Apache2:

apache2ctl configtest

  • Recharger la configuration Apache sans coupure du service:

apache2ctl graceful

  • Lister les modules actuellement chargés:

apache2ctl -t -D DUMP_MODULES
ou
apache2ctl -M

  • Lister les sites actuellement accessibles en détails:

apache2ctl -S

  • Lister les modules PHP :

php -m

Le module Authentification d'Apache

Le module auth_basic permet d'utiliser l'authentification basique HTTP pour restreindre l'accès en recherchant les utilisateurs dans les fournisseurs d'authentification spécifiés.

  • Authentification Apache sauf pour les réseaux précisés :

<Directory /var/www/site/public/>
AuthUserFile /etc/apache2/users.pwd
AuthName "Authentification requise"
AuthType Basic
Require user admin

Order Deny,Allow
Deny from all
Allow from 172.10.1 172.20.1
Satisfy any
</Directory>

Le module Rewrite d'Apache

Le module Rewrite est un mécanisme de manipulation d'URL particulièrement souple et puissant en supportant un nombre illimité de règles et de conditions attachées à chaque règle. Les manipulations d'URLs peuvent dépendre de tests variés : les URLs peuvent être finement caractérisées en fonction de variables du serveur, de variables d'environnement, d'en-têtes HTTP, de repères temporels, de recherches dans des bases de données externes, ou même de requêtes vers des bases de données externes et de différents gestionnaires ou programmes externes.

Activer le module

a2enmod rewrite
echo "Rewrite Engine On" >> /etc/apache2/apache.conf

Blacklister une IP

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^84\.7\.10\.124
RewriteRule ^.*$   -   [R=403]

Réécriture des ServerAlias

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.artduweb\.com$ [NC]
RewriteRule ^(.*) http://www.artduweb.com$1 [R=301;L]

  • Redirection vers une page spécifique :

 # Redirections des domaines optionnels vers la page specifique
  
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\.newdomaine\.com$ [NC]
  RewriteRule ^/(.*) http://www.existdomaine.fr/truc/machin.html [R=301,L]

  • Redirection en http au lieu de https si fichiers swp ou flv :

   # Redirections si flv ou swp de https vers http
   
   RewriteEngine On
   RewriteCond %{REQUEST_URI} \.(?:flv|swf)$
   RewriteCond %{SERVER_PORT} ^443$
   RewriteRule (.*) http://www.mydomain.com/$1 [R=301,L]

  • Redirection d'une page d'admin en https :

RedirectMatch ^/admin https://www.domain.com/admin

Le module SSL d'Apache

Mod_ssl permet l'hébergement http avec le support SSL. Ce protocole permet à deux machines de communiquer de manière sécurisée. Les informations échangées entre les deux machines sont de ce fait inviolables. Le protocole SSL se traduit par la combinaison de deux protocoles bien distincts (Handshake et Record) qui permettent la négociation entre les deux machines et le chiffrement des données échangées.

Sécuriser Apache2 avec certificat SSL

  • Les modules Apaches nécessaires :

a2enmod ssl
/etc/init.d/apache2 reload

  • Le package OpenSSL pour la création des certificats :

aptitude install openssl

  • Génération d'un certificat auto-signé :

(Détails)

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
mkdir /etc/apache2/certficate
cp server.crt server.key /etc/apache2/certificate

  • Modification du VirtualHost pour l'écoute sur le 80 et 443 avec Rewrite et déclaration des certificats :

<VirtualHost *:80 *:443>
    ServerAdmin         root@artduweb.com
    ServerName          test.artduweb.com
    DocumentRoot        /var/www/test/
    ErrorLog            /var/logs/apache2/test.artduweb.com-error_log
    TransferLog         /var/logs/apache2/test.artduweb.com-access_log
 
        SSLEngine on
        SSLCertificateFile /etc/apache2/certificate/server.crt
        SSLCertificateKeyFile /etc/apache2/certificate/server.key
        SSLProxyEngine On
        RewriteEngine On
        
        RewriteEngine   on
        RewriteCond     %{HTTPS} !=on
        RewriteRule     ^(.*)$ https://%{SERVER_NAME}$1 [L,R=301]
</VirtualHost>

  • N'oubliez pas de faire un reload sur Apache:

apache2ctl configtest
apache2ctl graceful

Le module Evasive d'Apache

Mod_evasive est un module pour contrer les attaques DOS. Il est capable de détecter lorsqu'un utilisateur demande un trop grand nombre de pages sur un site web, sur un délai de temps très court. Il blackliste par IP en renvoyant une erreur 403 et peut-être couplé à IPTABLES.

  • Installer le module :

aptitude install libapache2-mod-evasive

  • Configuration du mod-evasive.conf:

vi /etc/apache2/mods-available/mod-evasive.conf

<IfModule mod_evasive20.c>
           # taille de la table de surveillance, a augmenter pour les DDoS
           DOSHashTableSize 2048
           # Pas plus de 5 pages par seconde
           # Nb max de refresh d'une uri par periode
           DOSPageCount 5
           # Duree de la periode pour la uri (en secondes)
           DOSPageInterval 1
           # Nb max de requetes sur le site par periode
           DOSSiteCount 150
           # Duree de la periode pour le site (en secondes)
           DOSSiteInterval 1
           # Duree du blacklistage de l'IP en secondes (sans iptables)
           DOSBlockingPeriod 10
           # envoi de mail quand une IP est bloquee
           DOSEmailNotify admin@exemple.com
           # Execute une action quand une IP est bloquee
           DOSSystemCommand "su - root -c /sbin/iptables -I INPUT -s %s -j DROP"
           # repertoire des logs
           DOSLogDir "/var/log/apache2/lock/"
           # Whitelist non surveillee
           DOSWhiteList 127.0.0.1
           DOSWhitelist 192.168.1.*
</IfModule>

  • Paramétrage pour le fonctionnement avec Iptables et Mail :

aptitude install postfix
ln -s /usr/bin/mail /bin/mail
chmod 755 /bin/mail
mkdir /var/log/apache2/lock/
chown -R www-data:www-data /var/log/apache2/lock/

  • Activer le module evasive :

a2enmod mod-evasive

  • Relancer Apache 2:

/etc/init.d/apache2 restart

  • Tester le module avec ApacheBench :

ab -n 1000 -c 100 http://$IP_SERVER_WEB/

Les modules status et info d'Apache

  • Ouverture d'une page de statut/info pour supervision (uniquement pour le réseau précisé):

<VirtualHost _default_:80>
        ServerAdmin root@domaine.fr
        ServerName  hostname.domaine.fr
              
         <IfModule mod_status.c>
                <Location /server-status>
                        SetHandler server-status
                        Order deny,allow
                        Deny from all
                        Allow from 192.168.1
                </Location>
        </IfModule>

        <IfModule mod_info.c>
                <Location /server-info>
                        SetHandler server-info
                        Order deny,allow
                        Deny from all
                        Allow from 192.168.1
                </Location>
        </IfModule>
</VirtualHost>

Compilation d'Apache

linux/apache.txt · Dernière modification: 15/04/2016 à 21:15 (modification externe)

Outils de la page