Apache : Différence entre versions

De Teteve wiki
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
 
== Pré requis (installation) ==
 
== Pré requis (installation) ==
  
 +
Rien de bien compliqué :
 
  # apt-get install apache2
 
  # apt-get install apache2
  
Ligne 15 : Ligne 16 :
  
 
  # vim /etc/apache2/apache2.conf
 
  # vim /etc/apache2/apache2.conf
 +
 +
# Indique si Apache doit essayer de faire une résolution DNS inversée sur les IP des clients
 +
HostnameLookups Off
 +
 
  ServerRoot "/etc/apache2"
 
  ServerRoot "/etc/apache2"
 
  DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut
 
  DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut
 +
# Informations que renvoie Apache en cas d'erreur ou dans les headers
 +
ServerTokens Prod
 +
ServerSignature Off
 +
 +
# Config perso des pages d'erreur
 +
# Peut être défini plus précisément plus loin dans ce fichier
 +
ErrorDocument 404 /404.html
 +
 
  # Les logs d'erreur sont peu configurables, à part leur emplacement et le niveau :
 
  # Les logs d'erreur sont peu configurables, à part leur emplacement et le niveau :
  ErrorLog /var/log/apache2/error.log
+
  ErrorLog ${APACHE_LOG_DIR}/error.log
 
  # Valeurs possibles pour les niveaux de log : debug, info, notice, warn, error, crit, alert, emerg.
 
  # Valeurs possibles pour les niveaux de log : debug, info, notice, warn, error, crit, alert, emerg.
 
  LogLevel warn
 
  LogLevel warn
 
   
 
   
 +
# Modèle de sécurité par défaut des répertoires utilisés par Apache
 +
# À analyser plus finement...
 +
<Directory />
 +
        Options FollowSymLinks
 +
        AllowOverride None
 +
        Require all denied
 +
</Directory>
 +
 +
<Directory /usr/share>
 +
        AllowOverride None
 +
        Require all granted
 +
</Directory>
 +
 +
<Directory /home/www/>
 +
        Options Indexes FollowSymLinks
 +
        AllowOverride None
 +
        Require all granted
 +
</Directory>
 +
 +
#<Directory /srv/>
 +
# Options Indexes FollowSymLinks
 +
# AllowOverride None
 +
# Require all granted
 +
#</Directory>
 +
 
  # Configuration des logs :
 
  # Configuration des logs :
 
  '''# EN COURS D'APPROFONDISSEMENT...'''
 
  '''# EN COURS D'APPROFONDISSEMENT...'''
 +
 +
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
 +
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
 +
LogFormat "%h %l %u %t \"%r\" %>s %O" common
 +
LogFormat "%{Referer}i -> %U" referer
 +
LogFormat "%{User-agent}i" agent
 +
 +
Devient :
 +
 
  LogFormat "%v:%p %a %h %l %u %t \"%r\" %>s %T \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
 
  LogFormat "%v:%p %a %h %l %u %t \"%r\" %>s %T \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
 
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Ligne 31 : Ligne 78 :
 
  # Define an access log for VirtualHosts that don't define their own logfile
 
  # Define an access log for VirtualHosts that don't define their own logfile
 
  CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
 
  CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
 
# Informations que renvoie Apache en cas d'erreur ou dans les headers
 
ServerTokens Prod
 
ServerSignature Off
 
 
# Config perso des pages d'erreur
 
# Peut être défini plus précisément plus loin dans ce fichier
 
ErrorDocument 404 /404.html
 
  
 
=== Les vhosts ===
 
=== Les vhosts ===
Ligne 214 : Ligne 253 :
 
  %{Referer}i - Le contenu de "Referer": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
  %{Referer}i - Le contenu de "Referer": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
  %{User-Agent}i - Le contenu de "User-Agent": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
  %{User-Agent}i - Le contenu de "User-Agent": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
== PhpMyAdmin ==
 
 
L'installation de PhpMyAdmin se fait dans la foulée après celle de Mysql et Php :
 
 
# apt-get install phpmyadmin
 
 
Editer le fichier de configuration d'Apache :
 
 
# vim /etc/apache2/apache2.conf
 
 
Rajouter la ligne suivante :
 
 
include /etc/phpmyadmin/apache.conf
 
 
Pour accéder ensuite à l'interface de PhpMyAdmin, il suffit de se rendre sur le site web (ou en localhost si le serveur web n'est pas opérationnel) :
 
 
http://localhost/phpmyadmin
 
 
note : PhpMyAdmin utilise les identifiants de l'admin de Mysql tels que définis à l'installation de Mysql
 
 
Sécurisation :
 
 
Dans le fichier /etc/apache2/conf-available/phpmyadmin.conf
 
Modifier :
 
Alias /gestionsql /usr/share/phpmyadmin
 
Commenter :
 
# Authorize for setup
 
#<Directory /usr/share/phpmyadmin/setup>
 
/usr/share/phpmyadmin/setup
 
#    <IfModule mod_authz_core.c>
 
#        <IfModule mod_authn_file.c>
 
#            AuthType Basic
 
#            AuthName "phpMyAdmin Setup"
 
#            AuthUserFile /etc/phpmyadmin/htpasswd.setup
 
#        </IfModule>
 
#        Require valid-user
 
#    </IfModule>
 
#</Directory>
 
 
Supprimer le répertoire : /usr/share/phpmyadmin/setup
 
 
mettre en SSL : https://www.guillaume-leduc.fr/4-securiser-son-serveur-phpmyadmin.html
 
  
 
[[Catégorie:Informatique]]
 
[[Catégorie:Informatique]]

Version du 13 juin 2017 à 10:23

Pré requis (installation)

Rien de bien compliqué :

# apt-get install apache2

Configuration

Les fichiers de conf

J'indique ici quelques lignes particulière du fichier de conf d'apache sur lesquelles je me suis penché...
Le fichier envvars :

export APACHE_RUN_USER=virtual
export APACHE_RUN_GROUP=www-data

-> Modifié pour que l'utilisateur FTP et l'utilisateur d'Apache soit le même. Permet les mises à jour automatiques de Wordpress sans utiliser de login/mdp FTP
-> Vérifier si besoin / si c'est mieux de remettre www-data...

# vim /etc/apache2/apache2.conf

# Indique si Apache doit essayer de faire une résolution DNS inversée sur les IP des clients
HostnameLookups Off

ServerRoot "/etc/apache2"
DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut
# Informations que renvoie Apache en cas d'erreur ou dans les headers
ServerTokens Prod
ServerSignature Off

# Config perso des pages d'erreur
# Peut être défini plus précisément plus loin dans ce fichier
ErrorDocument 404 /404.html

# Les logs d'erreur sont peu configurables, à part leur emplacement et le niveau :
ErrorLog ${APACHE_LOG_DIR}/error.log
# Valeurs possibles pour les niveaux de log : debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

# Modèle de sécurité par défaut des répertoires utilisés par Apache
# À analyser plus finement...
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /home/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#	Options Indexes FollowSymLinks
#	AllowOverride None
#	Require all granted
#</Directory>
# Configuration des logs :
# EN COURS D'APPROFONDISSEMENT...

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Devient :

LogFormat "%v:%p %a %h %l %u %t \"%r\" %>s %T \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

Les vhosts

Voici un fichier de conf d'un Vhost :

NameVirtualHost www.toto.fr # A ne mettre que dans le fichier du vhost par défaut
<VirtualHost www.toto.fr> # Nom du virtualhost (= par là où il sera appelé...)
       ServerAdmin webmaster@localhost # Mail du webmaster (pas trop compliqué à comprendre... :p)
       ServerName www.toto.fr # Nom du serveur
       ServerAlias www2.toto.fr # Un éventuel alias
       DocumentRoot /home/www/toto/
       <Directory />
               Options FollowSymLinks # Autorise à suivre les liens symboliques
               AllowOverride None
       </Directory>
       <Directory /home/www/toto/>
               # Indexes : Ne liste pas les fichiers d'un répertoire s'il n'y a pas de fichier index.*
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
               # This directive allows us to have apache2's default start page
               # in /apache2-default/, but still have / go to the right place
               # RedirectMatch ^/$ www.toto.fr
       </Directory>
       <Directory /home/www/secure/>
               # Config du répertoire sécurisé déjà vu précédemment
       </Directory>
       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # Pour la config des scripts CGI
       <Directory "/usr/lib/cgi-bin">
               # A approfondir
       </Directory>
       ErrorLog /var/log/apache2/error.log
       # Si besoin de logs particuliers pour le vhost :
       # Valeurs possibles : debug, info, notice, warn, error, crit, alert, emerg.
       # Non utilisées actuellement
       #LogLevel warn
       #CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Ne pas oublier de rajouter le nom du vhost dans /etc/hosts

Petite astuce pour désactiver l'accès à votre serveur par son IP publique :
Dans le fichier de conf du vhost "default", rajouter ceci à la fin. Ça peut être utile pour éviter les scans de port et les bots. Totalement inutile si le DNS est public...
A éviter pour un site web souhaitant être référencé !!! :)

<VirtualHost *:80>
  ServerName VOTRE.IP.PUB.LIQUE
  <Directory />
    Deny from all
  </Directory>
</VirtualHost>

restreindre l'accès à un répertoire

Sous Apache, il existe 2 types d'authentification possible :

  • mod_auth_basic
  • mod_auth_digest

pour activer le module mod_auth_digest :

a2dismod mod_auth_basic
a2enmod mod_auth_digest
/etc/init.d/apache2 restart

L'authentification Basic envoie le couple login/password en clair sur le réseau. Elle est donc déconseillée sans être couplée avec SSL. L'authentification Digest utilise les condensés MD5. Attention : Digest est mal supporté par IE 6 et antérieur, à cause du non-respect des RFC de la part de IE (original... ^^).

Il est possible de mettre les directives d'authentification soit dans le/les fichiers(s) de configuration d'apache (typiquement apache2.conf), soit directement dans les répertoires concernés grace aux fichiers .htaccess. Il est conseillé, dans la mesure du possible, d'utiliser les directives <Directory> dans apache2.conf pour sécuriser les répertoires. Dans le cas contraire, Apache devra parcourir tous les répertoires à la recherche de fichiers .htaccess, ce qui risque d'amoindrir les performances.

<Directory /home/www/secure/>
    AuthType Digest
    AuthName "Zone securisee"
    AuthDigestDomain /secure/ http://www.teteve.fr/secure/
    AuthDigestProvider file
    AuthUserFile /etc/apache2/password
    Require valid-user
</Directory>

créer le premier couple login/password :

htdigest -c /ou/vous/voulez "Zone securisee" login1

Un prompt vous demande alors de taper le mot de passe, puis de le confirmer. Créer ensuite les couples login/password en enlevant l'option "-c" (pour "create").

 /etc/init.d/apache2 reload

Quelques tips sur Apache2

Les commandes apache2

root@test ~ # apache2 -h
Usage: apache2 [-D name] [-d directory] [-f file]
              [-C "directive"] [-c "directive"]
              [-k start|restart|graceful|graceful-stop|stop]
              [-v] [-V] [-h] [-l] [-L] [-t] [-S] [-X]
Options:
 -D name            : define a name for use in <IfDefine name> directives
 -d directory       : Spécifie un répertoire racine specify an alternate initial ServerRoot
 -f file            : specify an alternate ServerConfigFile
 -C "directive"     : process directive before reading config files
 -c "directive"     : process directive after reading config files
 -e level           : show startup errors of level (see LogLevel)
 -E file            : log startup errors to file
 -v                 : show version number
 -V                 : show compile settings
 -h                 : list available command line options (this page)
 -l                 : list compiled in modules
 -L                 : list available configuration directives
 -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
 -S                 : a synonym for -t -D DUMP_VHOSTS
 -t -D DUMP_MODULES : show all loaded modules
 -M                 : a synonym for -t -D DUMP_MODULES
 -t                 : run syntax check for config files
 -X                 : debug mode (only one worker, do not detach)

LogFormat

Directives présentes dans le fichier /etc/apache2/apache.conf d'après La documentation Ubuntu

# format des lignes contenues dans les logs
# %a 	        Adresse ip distante.
# %A 	        Adresse ip local.
# %B 	        Taille de la réponse en octets, excluant l'entête HTTP.
# %b 	        Taille de la réponse en octets, excluant l'entête HTTP au format CLF.
# %{Foobar}C 	Contenu du cookie "Foobar" de la requête envoyée au serveur.
# %D 	        Le temps mis à servir la requête .
# %{FOOBAR}e 	Contenue de la variable d'environnement "FOOBAR".
# %f 	        Nom du fichier.
# %h 	        Hôte distant.
# %H 	        Le protocole demandé.
# %{Foobar}i 	Le contenu de "Foobar": Ligne(s) d'en-tête de la requête envoyée au serveur.
# %l 	        nom du fichier de log distant (de identd, si il est fournit). Cela retournera un tiret tant que //mod_ident// n'est pas présent et //IdentityCheck// n'est pas mis à ON.
# %m 	        Méthode de la requête.
# %{Foobar}n 	Contenu de la note "Foobar" provenant d'un autre module.
# %{Foobar}o 	Le contenu de "Foobar": Ligne(s) d'entête dans la réponse.
# %p 	        Port canonique du serveur qui sert la réponse.
# %P 	        Id du processus fils qui a servi la requête.
# %{format}P 	Id du processus ou du thread fils qui a servi la requête.
# Les formats valides sont pid, tid, et hextid.
# hextid nécessite APR 1.2.0 ou supérieur.
# %q 	        Chaînes de la requête (Commençant avec un ? si une chaine de requête existe, sinon une chaîne vide)
# %r 	        Première ligne de la requête.
# %s 	        Statut. Pour les requête redirigées en interne, ceci est la requête originale --- %>s pour la dernière.
# %t 	        Heure à laquelle la requête a été reçue (format standard anglais mois jour année )
# %{format}t 	L'heure, au format précisé, qui doit être dans les formats de strftime(3). (potentiellement localisé).
# %T 	        Le temps mis pour répondre à la requête.
# %u 	        Utilisateur distant (de l'authentification; peut être faux si le  code de retour de statut (%s) est 401)
# %U 	        Url demandée, n'inclue aucune chaîne de requête.
# %v 	        Nom canonique de ServerName du serveur qui répond à la requête.
# %V 	        Nom du serveur en fonction du paramètre UseCanonicalName.
# %X 	        Statut de la connexion une fois la réponse envoyée.
#               X = connexion annulée avant la réponse complète.
#               + = la connexion peut être maintenue après l'envoi de la réponse.
#               - = la connexion sera fermée après l'envoi de la réponse.
# %I 	        Octets reçus, incluant l'entête et la requête, ne peut être nul. Vous devez activer //mod_logio// pour l'utiliser.
# %O 	        Octets envoyés, incluant l'entête, ne peut être nul. Vous devez activer //mod_logio// pour l'utiliser.
 
LogFormat "%h %l %h %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Celles que j'ai dans le mien :

LogFormat "%v %a %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %b" common
#LogFormat "%{Referer}i -> %U" referer
#LogFormat "%{User-agent}i" agent
#
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

Explications :
LogFormat "%v %a %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
%v - Nom canonique de ServerName du serveur qui répond à la requête.
%a - Adresse ip distante.
%u - Utilisateur distant (de l'authentification; peut être faux si le  code de retour de statut (%s) est 401)
%t - Heure à laquelle la requête a été reçue (format standard anglais mois jour année )
"%r" - Première ligne de la requête.
%>s - Statut. Pour les requête redirigées en interne, ceci est la requête originale --- %>s pour la dernière.
%b - Taille de la réponse en octets, excluant l'entête HTTP au format CLF. (obligatoire pour Awstats)
%{Referer}i - Le contenu de "Referer": Ligne(s) d'en-tête de la requête envoyée au serveur.
%{User-Agent}i - Le contenu de "User-Agent": Ligne(s) d'en-tête de la requête envoyée au serveur.