Vous êtes ici : Accueil Debian GNU/Linux Serveurs HTTP Installer et configurer Apache 2 sur Debian

Installer et configurer Apache 2 sur Debian

Par Pierre-Yves Landuré Dernière modification 15/03/2012 10:25

Apache est un serveur HTTP très répandu. Il est reconnu pour sa modularité et le grand nombre de ses configurations possibles. Cet article à pour but de vous présenter la mise en place d'un serveur Apache 2 sur la distribution Debian GNU/Linux. Il propose aussi d'accélérer la mise en place de quelques configurations basiques.

Ce guide est testé sur:

  • Debian 5.0 Lenny
  • Debian 6.0 Squeeze

Prérequis

Ce guide recommande la mise en place des règles de blocage de DFind décrites dans l'article Bloquer le scanner de vulnérabilités DFind.

Installation

Installez le serveur avec support du PHP 5 (utilisez le paquet apache2 si vous ne souhaitez pas disposer de PHP sur votre serveur):

command apt-get install libapache2-mod-php5

Activez les modules rewrite et php5 :

command a2enmod rewrite php5

Activez les hôtes virtuels nommés (NameVirtualHost) permettant d'héberger plusieurs noms de domaines sur une même adresse IP :

if [ -z "$(command grep 'NameVirtualHost.*:80' /etc/apache2/ports.conf)" ]; then
command sed -i -e '/Listen[\t ]*80/i\
NameVirtualHost *:80' '/etc/apache2/ports.conf'
fi
if [ -z "$(command grep 'VirtualHost[ \t]*\*:80' /etc/apache2/sites-available/default)" ]; then
command sed -i -e 's/\(VirtualHost[ \t]*\*\)>/\1:80>/g' \
-e 's/^\(NameVirtualHost.*\)$/#\1/g' \
'/etc/apache2/sites-available/default'
fi

Rechargez la configuration :

/etc/init.d/apache2 force-reload

L'outil en ligne de commande a2tools simplifie l'administration d'Apache 2. Les guides présents sur ce site l'utilisent intensivement. Mettez en place l'outil:

command wget "http://howto.biapy.com/fr/debian-gnu-linux/serveurs/http/installer-et-configurer-apache-2-sur-debian/a2tools/at_download/file" \
    --output-document="/usr/bin/a2tools"
command chmod +x "/usr/bin/a2tools"

Affichez l'aide de ce script:

command a2tools --help

Des exemples d'utilisation de cet outil sont disponibles dans la suite de cet article.

Durcir la sécurité du serveur

Appliquez quelque règles durcissant la sécurité du serveur:

echo '# Hardened security configurations.

#
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of: Full | OS | Minimal | Minor | Major | Prod
# where Full conveys the most information, and Prod the least.
#
ServerTokens Prod

#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of: On | Off | EMail
#
ServerSignature Off

#
# Limit access to SVN informations.
#
<DirectoryMatch ".*\.svn"> Order allow,deny Deny from all Satisfy All </DirectoryMatch>

#
# Block bad user agents.
#
<Directory />
<IfModule mod_rewrite.c> SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT Deny from env=HTTP_SAFE_BADBOT </ifModule>
</Directory>
' > '/etc/apache2/conf.d/security-hardened'

Rechargez la configuration du serveur:

/etc/init.d/apache2 reload

Protection à l'aide de fail2ban

Installez fail2ban :

command apt-get install fail2ban

Activez les protections spécifiques à Apache :

if [ ! -e '/etc/fail2ban/jail.local' ]; then
command touch '/etc/fail2ban/jail.local'
fi
if [ -z "$(command grep "[apache]" '/etc/fail2ban/jail.local')" ]; then
echo "[apache]
enabled = true

[apache-noscript]
enabled = true

[apache-overflows]
enabled = true
" >> '/etc/fail2ban/jail.local'
fi

Rechargez la configuration :

/etc/init.d/fail2ban restart

Configuration de PHP 5

Ajustez la configuration de PHP 5 pour en améliorer la sécurité:

if [ -d '/etc/php5/conf.d' ]; then
echo '; Harden PHP5 security

; Disable PHP exposure
expose_php = Off

;Dangerous : disable system functions. This can break some administration softwares.
;disable_functions = symlink,shell_exec,exec,proc_close,proc_open,popen,system,dl,passthru,escapeshellarg,escapeshellcmd
' > '/etc/php5/conf.d/security-hardened.ini'

echo '; Set mbstring defaults to UTF-8
mbstring.language=UTF-8
mbstring.internal_encoding=UTF-8
mbstring.http_input=UTF-8
mbstring.http_output=UTF-8
mbstring.detect_order=auto' \
> '/etc/php5/conf.d/mbstring.ini'
fi

Rechargez la configuration:

/etc/init.d/apache2 force-reload

Désactivation du dossier cgi-bin

Le dossier cgi-bin est de moins en moins utilisé et peut éventuellement présenter un risque. Désactivez-le :

command sed -i \
-e 's|^.*ScriptAlias.*/cgi-bin/.*$|#\0|' \
-e '/Directory.*cgi-bin/,/\/Directory/s/^.*/#\0/' \
"/etc/apache2/sites-available/default"{,-ssl}

Rechargez la configuration :

/etc/init.d/apache2 force-reload

Activation de HTTPS

Renseignez l'interface réseau de la connexion HTTPS:

SSL_NET="eth0"

Obtenez l'adresse IP de l'interface réseau (utilisez-la par la suite pour créer les VirtualHost):

SSL_IP="$(command ifconfig ${SSL_NET} \
  | command grep "inet adr" \
| command sed -e 's/^.*inet adr:\([^ ]*\) .*$/\1/')"

Configurez le serveur pour écouter sur le port 443:

if [ -z "$(/bin/grep 'Listen.*443' /etc/apache2/ports.conf)" ]; then
/bin/echo "# Listen on the HTTPS port if the needed module is available.
<IfModule mod_ssl.c>
  Listen 443
</IfModule>" | /usr/bin/tee -a /etc/apache2/ports.conf
fi

Activez les hôtes virtuels pour l'interface réseau:

if [ -z "$(command grep "NameVirtualHost.*${SSL_IP}:443" '/etc/apache2/ports.conf')" ]; then
  command sed -i -e "/Listen[\t ]*443/a\\
    NameVirtualHost ${SSL_IP}:443" '/etc/apache2/ports.conf'
fi

Activez le module SSL:

command a2enmod ssl

Rechargez la configuration du serveur:

/etc/init.d/apache2 force-reload

Statistiques de fréquentation

Pour disposer de statistiques de fréquentation, reportez-vous à ces articles:

Administration simplifiée avec a2tools

Mise en place d'un hôte virtuel

Pour mettre en place un hôte virtuel servant un dossier, utilisez cette commande (adaptez les valeurs graissées à vos besoins):

command a2tools "www.mon-domaine-exemple.com" "/opt/mon-dossier"

Mise en place d'une redirection

Pour mettre en place un hôte virtuel redirigeant un domaine et tous ses sous-domaines vers un autre site, utilisez cette commande (adaptez les valeurs graissées à vos besoins):

command a2tools --template=redirect \
--alias="*.mon-domaine-exemple.com" \
"mon-domaine-exemple.com" "http://www.domaine-cible.com/"

Mise en place d'un "reverse proxy"

Pour mettre en place un hôte virtuel mettant à disposition un site hébergé sur un autre serveur (en reverse proxy), utilisez cette commande (adaptez les valeurs graissées à vos besoins):

command a2tools --template=reverse-proxy "www.mon-domaine-exemple.com" "http://www.mon-autre-serveur.com/"

Remarque : Sur le serveur "www.mon-autre-serveur.com", un hôte virtuel "www.mon-domaine-exemple.com" doit être présent. Si le serveur "www.mon-autre-serveur.com" utilise Apache 2, paramétrez-le à l'aide du guide Obtenir l'adresse IP réelle d'un visiteur accédant à un serveur Apache 2 à travers un reverse proxy.

Suppression d'un domaine

Pour retirer tous les hôtes virtuels d'un domaine, utilisez :

command a2tools --remove "www.mon-domaine-exemple.com"

Mise en place de sites sur HTTPS

Pour créer un hôte virtuel en HTTPS avec a2tools, ajoutez l'option --ssl à votre commande. Fournissez les clefs privées et publiques de votre certificat HTTPS à l'aide des options --private-key et --public-key. Si vous ne disposez pas d'un certificat SSL pour votre domaine, créez en un. Une procédure de création est disponible dans le guide Créer un certificat SSL / TLS sur Debian.

Si votre certificat SSL nécessite un certificat intermédiaire, précisez le avec l'option --chain-ca. Précisez le certificat racine de l'autorité de certification ayant signé votre certificat avec l'option --root-ca.

command a2tools --ssl \
--private-key="/etc/ssl/private/www.mon-domaine-exemple.com.key" \
--public-key="/etc/ssl/certificates/www.mon-domaine-exemple.com.crt" \
--root-ca="/etc/ssl/roots/www.mon-domaine-exemple.com-root.ca" \
--chain-ca="/etc/ssl/chains/www.mon-domaine-exemple.com.ca" \
 "www.mon-domaine-exemple.com" "/opt/mon-dossier"

Avec le mod_ssl, un seul certificat SSL peut être utilisé pour une adresse IP donnée. Pour héberger plusieurs sous-domaines sur un même serveur, utilisez des certificats "wildcard" (cad. "*.exemple.com"). Pour héberger plusieurs domaines sur un serveur, vous devez utilisez le module gnutls, ou assigner plusieurs adresses IP au serveur (si vous utilisez un serveur OVH, assignez une IP failover au serveur). Vous pouvez spécifier l'adresse IP de l'hôte virtuel avec l'option --bind-ip de a2tools.

Obtenir la liste des modules Apache 2 activés

Listez les modules Apache 2 activés :

command apache2ctl -t -D DUMP_MODULES 

Références

Ces livres peuvent vous aider:

Remerciements

Pièces jointes

Merci d'aider à faire vivre ce site.

Assistance téléphonique

08 99 19 80 13

du lundi au samedi, de 10h à 18h

1,34€ ttc/appel + 0,34€ ttc/minute.