Skip to content

Commit

Permalink
Update for Apache and PHP 7 on Debian 11 (Bullseye)
Browse files Browse the repository at this point in the history
  • Loading branch information
Devenet authored Nov 20, 2021
1 parent 94068d5 commit 92fbb10
Showing 1 changed file with 65 additions and 57 deletions.
122 changes: 65 additions & 57 deletions apache.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Installation et configuration d'Apache 2 et PHP 7
# Installation et configuration dApache 2 et PHP 7

Ce guide permet d'installer et configurer un serveur Apache avec PHP pour servir plusieurs sites web.
Ce guide permet dinstaller et configurer un serveur Apache avec PHP pour servir plusieurs sites web.

* [Installation](#installation)
* [Configuration](#configuration)
Expand All @@ -27,10 +27,16 @@ Ce guide permet d'installer et configurer un serveur Apache avec PHP pour servir

## Installation

Il suffit d'installer les paquages suivants :
Il suffit dinstaller les paquages suivants :


apt-get install apache2 php7.0 php7.0-mbstring php7.0-xml php7.0-sqlite memcached php7.0-memcached php7.0-curl php7.0-zip php-imagick imagemagick
apt-get install apache2 php php-common php-cli php-fpm php-json php-pdo php-sqlite3 php-zip php-gd php-mbstring php-curl php-xml memcached php-memcached php-imagick imagemagick

On peut aussi installer d’autres extensions selon les besoins, par exemple `php-pear`, `php-bcmath`.

Pour utiliser PHP avec Apache (ce qui est un peu le but), on installe :

apt-get install libapache2-mod-php


## Configuration
Expand All @@ -43,18 +49,18 @@ Dans le fichier `/etc/apache2/conf-available/security.conf`, on vérifie que les
ServerSignature Off
TraceEnable Off

On décommente (début du fichier normalement) et ajoute le paramétrage pour désactiver le listage des dossiers sans fichier d'index :
On décommente (début du fichier normalement) et ajoute le paramétrage pour désactiver le listage des dossiers sans fichier dindex :

<Directory />
Options -Indexes
AllowOverride None
# Require all denied
Require all denied
</Directory>

#### Git et SVN

S'il vous arrive de cloner un dépôt et de l'utiliser, il faut veuiller à ce que les répertoires `.git` ne soient pas accessibles.
Pour cela, on modifie le fichier `/etc/apache2/conf-available/security.conf`en décommantant la partie `svn` et en ajoutant une directive pour la partie `git` :
Sil vous arrive de cloner un dépôt et de lutiliser, il faut veuiller à ce que les répertoires `.git` ne soient pas accessibles.
Pour cela, on modifie le fichier précédent `security.conf`en décommantant la partie `svn` puis en ajoutant une directive pour la partie `git` :

<DirectoryMatch "/\.svn">
Require all denied
Expand All @@ -71,7 +77,7 @@ Si vous stockez des infos SSH de déploiement dans `/var/www/.ssh` par exemple,

### Format des logs

Comme on va utiliser plusieurs vhosts pour nos sites web, et pour un meilleur affichage dans certains reports (logwatch par exemple), il faut modifier le format de log `vhost_combined` dans le fichier `/etc/apache2/apache2.conf`.
Comme on va utiliser plusieurs _vhosts_ pour nos sites web, et pour un meilleur affichage dans certains reports (logwatch par exemple), il faut modifier le format de log `vhost_combined` dans le fichier `/etc/apache2/apache2.conf`.

LogFormat "%V:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined

Expand Down Expand Up @@ -104,37 +110,37 @@ On va activer les modules suivants :
a2enmod rewrite
a2enmod headers
a2enmod deflate
a2enmod http2

On peut aussi en profiter pour modifier le paramètre `DirectoryIndex` (ordre de préférence des fichiers) dans le fichier `/etc/apache2/mods-available/dir.conf` :

DirectoryIndex index.html index.htm index.php


### Envoi d'e-mails
### Envoi de-mails

Penser à modifier le fichier `/etc/passwd` pour mettre à jour l'utilisateur `www-data` avec quelque chose de plus friendly si Apache est amené à envoyer des e-mails :
Penser à modifier le fichier `/etc/passwd` pour mettre à jour lutilisateur `www-data` avec quelque chose de plus friendly si Apache est amené à envoyer des e-mails :

www-data:x:33:33:Server Name:/var/www:/bin/sh
www-data:x:33:33:Servername:/var/www:/bin/sh

## Virtual hosts

Pour servir plusieurs sites web avec des noms de domaines différents, on va utiliser les vhosts d'Apache.
Pour servir plusieurs sites web avec des noms de domaines différents, on va utiliser les vhosts dApache.

Il suffit de créer un fichier de configuration dans `/etc/apache2/sites-available` et de l'activer ou désactiver selon ses besoins.
Il suffit de créer un fichier de configuration dans `/etc/apache2/sites-available` et de lactiver ou désactiver selon ses besoins.

a2ensite nom_vhost_file.conf
a2dissite nom_vhost_file.conf

Il faut aussi s'assurer que dans `/etc/apache2/ports.conf` on a bien la directive :
Il faut aussi sassurer que dans `/etc/apache2/ports.conf` on a bien la directive :

NameVirtualHost *:80

### Default vhost

On va modifier le vhost par défaut. Comme on écoute sur le port 80 quelque soit l'IP ou DNS demandée, il faut filtrer un peu et refuser de répondre aux requêtes non attendues.
On va modifier le vhost par défaut. Comme on écoute sur le port 80 quelque soit lIP ou DNS demandée, il faut filtrer un peu et refuser de répondre aux requêtes non attendues.

On désactive le vhost par défaut avec `a2endissite 000-default.conf` puis on modifie le fichier `/etc/apache2/sites-available/00_ default.conf`.
_Personnellement, pour mieux me répérer, je préfixe tous mes fichiers vhost de 2 chiffres, je modifierai donc `00_default` ou `xx_vhost`._
On désactive le vhost par défaut avec `a2endissite 000-default` puis on modifie le fichier `/etc/apache2/sites-available/000_default.conf`.

<VirtualHost _default_:80>
ServerName default.local
Expand All @@ -145,20 +151,21 @@ _Personnellement, pour mieux me répérer, je préfixe tous mes fichiers vhost d
CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName default.local
DocumentRoot /dev/null

SSLEngine on
SSLVerifyClient none
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
</VirtualHost>

La particularité de ce vhost est qu'il redirige toute requête entrante vers un autre serveur (example.net en l'occurence). Pour quelqu'un qui essayerait d'obtenir une réponse HTTP en tapant sur une IP ou un NDD que l'on a pas configuré, il est redirigé plutôt que d'obtenir des infos sur le serveur alors qu'il ne devrait pas se trouver là.
</IfModule>

_On voit qu'on a aussi ajouté le comportement par défaut pour un vhost SSL qui n'existe pas ; voir le parapgraphe sur l'activitation du SSL._

Expand All @@ -180,7 +187,7 @@ On va ensuite créer le vhost « localhost » pour qu'Apache accepte les requêt

### Generic vhosts

Une fois que les deux précédents vhosts sont configurés, on peut maintenant créer les vhosts qui nous intéressent sur le modèle suivant, à adapter !
Une fois que les deux précédents _vhosts_ sont configurés, on peut maintenant créer les _vhosts_ qui nous intéressent sur le modèle suivant, à adapter !

<VirtualHost *:80>
ServerName domain.tld
Expand All @@ -204,8 +211,8 @@ Une fois que les deux précédents vhosts sont configurés, on peut maintenant c

### Proxy vhost

Apache permet de configurer un virtual host pour l'utiliser comme un proxy et accéder à un élément de réseau interne qui n'est (directement) pas accessible depuis l'extérieur.
Par exemple si l'on souhaite pouvoir accéder au site web hébergé sur `192.168.1.1` (l'administration de votre box par exemple) qui n'est pas accessible depuis Internet, on peut configuer un vhost pour qu'il fasse le relais.
Apache permet de configurer un _virtual host_ pour lutiliser comme un proxy et accéder à un élément de réseau interne qui nest (directement) pas accessible depuis lextérieur.
Par exemple si lon souhaite pouvoir accéder au site web hébergé sur `192.168.1.1` (ladministration de votre box par exemple) qui nest pas accessible depuis Internet, on peut configuer un vhost pour quil fasse le relais.

__Notez bien que cela peut faciliter le piratage de votre réseau, à faire en connaissance de cause !__

Expand All @@ -214,7 +221,7 @@ On commence par installer et activer les modules nécessaires :
a2enmod proxy
a2enmod proxy_http

Puis on configure le vhost :
Puis on configure le _vhost_ :

<VirtualHost *:80>
ServerName something.domain.tld
Expand All @@ -237,28 +244,28 @@ Puis on configure le vhost :
CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
</VirtualHost>

Il suffit d'activer le vhost et de relancer Apache.
Il suffit dactiver le _vhost_ et de relancer Apache.

Voir la section [Authentification](#authentification) pour que tout le monde ne puisse pas y accéder.

## Authentification

Il faut activer le module suivant pour supporter l'authentification par groupes d'utilisateurs :
Il faut activer le module suivant pour supporter lauthentification par groupes d'utilisateurs :

a2enmod authz_groupfile

Dans la configuration du vhost précédent, on a inclus le fichier de configuration `auth_server.conf` (permet de l'inclure depuis plusieurs vhosts) :
Dans la configuration du _vhost_ précédent, on a inclus le fichier de configuration `auth_server.conf` (permet de linclure depuis plusieurs vhosts) :

AuthType Basic
AuthName "Beta area"
AuthUserFile /data/apache/auth/users
AuthGroupFile /data/apache/auth/groups
AuthUserFile /data/apache/credentials/users
AuthGroupFile /data/apache/credentials/groups

Pour créer un utilisateur et l'ajouter à un fichier non encore existant :
Pour créer un utilisateur et lajouter à un fichier non encore existant :

htpasswd -c users username

Si le fichier existe déjà et que l'on veut ajouter un autre utilisateur :
Si le fichier existe déjà et que lon veut ajouter un autre utilisateur :

htpasswd users otherusername

Expand All @@ -271,70 +278,71 @@ Pour le fichier des groupes utilisateur, il faut juste respecter la syntaxe suiv
## Activation du SSL (HTTPS)

Pour servir tout ou partie des sites web en HTTPS, il faut quelques étapes supplémentaires.
On suppose que l'on a déjà les certificats qui seront utilisés, hormis le certificat auto-signé.
On suppose que lon a déjà les certificats qui seront utilisés, hormis le certificat auto-signé.

### Certificat auto-signé

Ce certificat est utilisé pour le vhost SSL par « défaut ».
Il suffit de taper la commande suivante et d'y entrer les informations nécessaires (dans mon cas, comme je souhaite donner le moins d'informations, je ne renseigne que les champs obligatoires) :
Il suffit de taper la commande suivante et dy entrer les informations nécessaires (dans mon cas, comme je souhaite donner le moins dinformations, je ne renseigne que les champs obligatoires : le pays (EU), la province (Europe) et l’organisation (Domain)) :

openssl req -x509 -newkey rsa:4096 -nodes -days 3650 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem
openssl req -x509 -newkey rsa:2048 -nodes -days 365 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem

_On peut aussi changer la durée de la validité du certificat (`-days 3650`) voire diminuer ou augmenter la taille du chiffrement de la clef (`rsa:4096`)._
_On peut aussi changer la durée de la validité du certificat (`-days 365`) voire diminuer ou augmenter la taille du chiffrement de la clef (`rsa:4096`)._

Pour éviter que n'importe qui puisse aller voir nos clefs privées, on fait un `chmod 400 ssl-cert-*.key` sur chaque de nos clefs privées !
Pour éviter que nimporte qui puisse aller voir nos clefs privées, on fait un `chmod 400 ssl-cert-*.key` sur chaque de nos clefs privées !
On peut aussi faire un `chown :ssl-cert ssl-cert-*.key` pour leur attribuer comme groupe « ssl-cert ».

Pour les certificats signés, je les stocke dans `/etc/ssl/public` et `/etc/ssl/private`.


### Écoute sur le port 443

On commence par activer le module SSL :

a2enmode ssl
a2enmod ssl

Ensuite on s'assure qu'on écoute sur le port 443 pour les vhosts à vérifier dans le fichier `/etc/apache2/ports.conf` :

NameVirtualHost *:443
Listen 443
Ensuite on s’assure qu’on écoute bien sur le port 443 pour les _vhosts_ à vérifier dans le fichier `/etc/apache2/ports.conf`.

### Configuration des vhost SSL

Pour faciliter la navigation, on ajoute dans le vhost SSL générique un vhost sur le port 80 pour une redirection en HTTPS, à adapter selon ;-)
Pour faciliter la navigation, on ajoute dans le _vhost_ SSL générique un _vhost_ sur le port 443.

# Pour forcer la redirection de http vers https
<VirtualHost *:80>
ServerName sub.domain.tld

ServerName domain.tld
ServerAlias www.domain.tld

RewriteEngine on
RewriteRule ^/(.*) https://sub.domain.tld/$1 [NC,R,L]
RewriteRule ^/(.*) https://www.domain.tld/$1 [NC,R,L]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName sub.domain.tld
ServerAdmin you@domain.tld
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /data/www/sub.domain.tld
<Directory /data/www/sub.domain.tld>
ErrorDocument 403 /403.html
DocumentRoot /data/www/domain.tld
<Directory /data/www/domain.tld>
ErrorDocument 404 /404.html
</Directory>
<Directory /data/www/domain.tld/beta>
Options +Indexes
Include /data/apache/conf/auth_server.conf
Require group developers
</Directory>

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

SSLCertificateFile /etc/ssl/public/ssl-vhost.crt
SSLCertificateKeyFile /etc/ssl/private/ssl-vhost.key
SSLCertificateChainFile /etc/ssl/public/sub.class1.server.ca.pem
SSLCACertificateFile /etc/ssl/public/ca.pem
SSLCertificateFile /etc/letsencrypt/live/domain.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
</VirtualHost>
</IfModule>

Vous pouvez regarder du côté de Let’s Encrypt, une autorité de certification gratuite.
Pour générer vos certificats SSL gratuitement, vous pouvez regarder du côté de Let’s Encrypt, une autorité de certification.


## Application des paramètres
Expand Down

0 comments on commit 92fbb10

Please sign in to comment.