Ispconfig avec Apache, Reverse Proxy Nginx, PHP5.5-FPM et MariaDB sur Debian 7

1/52/53/54/55/5 (3 votes, moyenne: 3,67 sur 5)
Loading...
I

Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.


ultimate-web-server

Bonjour à tous,

 

J’ai refais à neuf mon infrastructure, et au passage j’en ai profiter pour mettre à jour ma procédure

 

Au programme :

  1. Installation des sources
  2. Installation des composants pour notre serveur
  3. Configuration des diffèrents composants
  4. Installation de Isp Config 3
  5. Configuration d’un nom de domaine
  6. Création d’un site web
  7. Création d’une base de données
  8. Création d’un accès FTP
  9. Fine Tuning
  10. Installation du Reverse Proxy Nginx
  11. Installation de No More DDOS
  12. Sécuriser le serveur
  13. Intégration de Memcached
  14. Liens utiles

 

Les composants de notre serveur :

  • Apache mpm worker 2.x ( Serveur Apache en version multi-thread )
  • MariaDB 10.x ( Serveur de base de données )
  • Php5-fpm 5.5.x ( pour traiter les requêtes php avec apache )
  • Apache Page Speed ( module de concaténation et de mise en cache pour apache )

 

Et les composants optionels :

  • Nginx 1.6.x ( Reverse Proxy pour apache )
  • No More DDOS 1.x ( Scripts perso contre les attaques DDOS )

 

Installation des sources :

On va commencer par éditer la liste des sources pour le gestionnaire de paquets APT :

rm /etc/apt/sources.list
nano /etc/apt/sources.list

 

Copiez les sources suivantes dans le fichier  :

deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main
deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main
deb http://ftp.fr.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
# wheezy-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free

 

Lancez maintenant une mise à jour et installez les utilitaires htop et python-software-properties en même temps :

apt-get update && apt-get upgrade && apt-get install htop python-software-properties

 

J’aime bien installer l’utilitaire htop car je le trouve plus explicite que l’utilitaire top nativement intégré, voici la comparaison en images :

TOP
TOP
HTOP
HTOP

 

 

Maintenant on va ajouter les clés de nos repository personnalisés :

cd /tmp
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main'

 

Pour finir, mettez à jour vos listes avec cette commande une fois de plus :

apt-get update

 

 

Installation des composants du serveur :

On va d’abord installer MariaDB, RKHunter, Binutils, clamAv et 2-3 accessoires :

apt-get install mariadb-server openssl rkhunter binutils clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl

 

Ensuite, on va installer Apache2 en mode Worker (multi-threadé), PHP5-FPM, FCGI, suExec, Pear, et mcrypt :

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-worker libapache2-mod-fastcgi php5-fpm apache2-utils libexpat1 ssl-cert php5 php5-common php5-gd php5-mysql php5-imap php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libruby libapache2-mod-ruby libapache2-mod-python php5-curl php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

 

On va maintenant déclarer quelques modules à apache :

a2enmod actions alias fastcgi && a2enmod fcgid && a2enmod suexec rewrite ssl actions include && a2enmod dav_fs dav auth_digest && service apache2 restart

 

Ensuite, installez Pureftpd, bind9 et fail2ban :

apt-get install pure-ftpd-common pure-ftpd-mysql bind9 dnsutils fail2ban

 

Et pour finir, on installe Jailkit :

apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper binutils-gold
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.15.tar.gz
tar xvfz jailkit-2.15.tar.gz
cd jailkit-2.15
./debian/rules binary

 

Vous pouvez maintenant installer le package .deb comme ceci :

cd ..
dpkg -i jailkit_2.15-1_*.deb
rm -rf jailkit-2.15*

 

Configuration des composants :

Si vous voulez un accès externe aux bases de données MariaDB, vous devez modifier le fichier de configuration de MariaDB :

nano /etc/mysql/my.cnf

 

Recherchez l’option bind-address à la ligne 47 et commentez la :

Avant :

bind-address            = 127.0.0.1

Après :

#bind-address            = 127.0.0.1

 

Sauvegardez en effectuant la combinaison de touches Ctrl+O et redémarrez MariaDB:

service mysql restart

 

Maintenant, téléchargez mon fichier de configuration pour php-fpm :

cd /etc/apache2/conf.d
wget https://raw.githubusercontent.com/stylersnico/debian-scripts/master/php5-fpm.conf

 

Redémarrez les services associés :

service apache2 restart && service php5-fpm restart

 

Maintenant, on va modifier la configuration de notre serveur FTP :

nano /etc/default/pure-ftpd-common

 

Vérifiez que le démarrage soit en STANDALONE et que virtualchroot soit sur TRUE

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

On va maintenant autoriser les sessions par TLS pour plus de sécurité

echo 1 > /etc/pure-ftpd/conf/TLS
mkdir -p /etc/ssl/private/

 

On va maintenant générer un certificat SSL dans le dossier que l’on vient de créer :

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

 

Changez les permissions du certificat

chmod 600 /etc/ssl/private/pure-ftpd.pem

 

Redémarrez le serveur FTP :

/etc/init.d/pure-ftpd-mysql restart

 

Pour que Fail2Ban surveille notre serveur FTP nous allons devoir créer un fichier de configuration spécifique :

nano /etc/fail2ban/jail.local

 

Remplissez le avec ceci :

[pureftpd]
enabled = true
port = ftp
filter = pureftpd
logpath = /var/log/syslog
maxretry = 3

 

On va maintenant créer un filtre :

nano /etc/fail2ban/filter.d/pureftpd.conf

 

Et le remplir avec cela :

[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =

 

On va maintenant configurer Apache PageSpeed :

 

32 bits :

cd /tmp/
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb
dpkg -i mod-pagespeed-*.deb
apt-get -f install

 

64 bits :

cd /tmp/
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
dpkg -i mod-pagespeed-*.deb
apt-get -f install

 

Maintenant, redémarrez votre serveur pour qu’il soit propre avant l’installation d’ISP Config 3 :

reboot

 

Installation d’Isp Config 3 :

Pour avoir la dernière version stable, faites ces commandes :

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/

 

lancez maintenant cette commande

php -q install.php

 

Suivez les instructions de l’installateur, mais lorsqu’il vous laissera le choix entre l’installation standard et expert, choisissez expert

Select language (en,de) [en]:
Installation mode (standard,expert) [standard]: expert

 

Lorsqu’il vous demandera pour la configuration des mails, il faudra lui répondre non, car nous n’avons pas installé postfix.

Configure Mail (y,n) [Y]: n

 

Vous pouvez laisser tous les autres paramètres par défaut

Une fois l’installation terminée, redémarrez votre serveur avec la commande

reboot

 

Votre webpanel sera ensuite accessible à cette adresse : https://[VOTREIP]:8080/

Les identifiants par défaut sont : admin/admin

créer-un-serveur-web-debian-7-x25

 

Si vous avez une erreur avec le protocole https de ce genre

107 (net::ERR_SSL_PROTOCOL_ERROR) or ssl_error_rx_record_too_long

 

Lancez cette commande

a2ensite default-ssl

 

Maintenant, redémarrez Apache :

service apache 2 restart

 

Configuration d’un nom de domaine :

Rendez vous dans la section DNS :

créer-un-serveur-web-debian-7-x26

 

Ajoutez une nouvelle zone à l’aide de l’assistant :

créer-un-serveur-web-debian-7-x27

 

 

Voici un exemple de configuration :

créer-un-serveur-web-debian-7-x28

 

Voilà, c’est tout ce qu’on doit faire pour ajouter un domaine à notre serveur.

Création d’un site :

 

Rendez vous dans la section site, et allez dans Website, ensuite cliquez sur Add new website :

créer-un-serveur-web-debian-7-x33

 

Remplissez bien le domaine, et SURTOUT choisissez bien PHP-FPM dans la version de php !

créer-un-serveur-web-debian-7-x34

 

 

Création d’une base de données :

Allez dans Site, database Users :

créer-un-serveur-web-debian-7-x29

 

Cliquez sur créer-un-serveur-web-debian-7-x30

 

Remplissez les champs et cliquez sur Save :

créer-un-serveur-web-debian-7-x31

 

 

Maintenant allez dans Databases et créez en une nouvelle :

créer-un-serveur-web-debian-7-x32

 

Remplissez les informations demandées :

créer-un-serveur-web-debian-7-x35

 

 

Création d’un accès FTP :

Allez dans Web Access, FTP-Accounts et cliquez sur Add new FTP-User :

créer-un-serveur-web-debian-7-x37

 

Remplissez les informations demandées :

créer-un-serveur-web-debian-7-x38

 

 

Installation du reverse Proxy Nginx :

Cette étape est optionnelle, si avez peur de devoir mettre les mains dans le cambouis n’hésitez pas à la passer …

 

On va commencer par installer Nginx et le module rpaf pour apache :

 apt-get install libapache2-mod-rpaf nginx

 

Maintenant on active rpaf et on redémarre apache :

a2enmod rpaf && service apache2 restart

 

Maintenant, regardez la configuration de rpaf et si cette ligne n’est pas présente, rajoutez la :

nano /etc/apache2/mods-available/rpaf.conf
RPAFproxy_ips 127.0.0.1 ::1

 

Maintenant on va modifier les ports d’écoute du serveur Apache :

nano /etc/apache2/ports.conf

 

Remplacez :

#NameVirtualHost *:80
Listen 127.0.0.1:80

 

Par :

NameVirtualHost *:82
Listen 127.0.0.1:82

 

Et on va modifier tous les virtualhost existants :

sed -ie 's/*:80/*:82/g' /etc/apache2/sites-available/*.vhost

 

Maintenant, on va créer le fichier de configuration pour notre reverse proxy nginx :

rm /etc/nginx/conf.d/default
nano /etc/nginx/conf.d/default

 

Remplissez le avec ceci :

server {
 listen 80 default;
 server_name _;
 server_name_in_redirect off;
 resolver 127.0.0.1;
 access_log /var/log/ispconfig/httpd/$host/nginx-access.log;
location ~* ^/var/www/$host/web/(wp-content|wp-includes)/(.*)\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|css|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3|mp4)$ {
 root /var/www/$host/web/(wp-content|wp-includes);
 access_log off;
 expires 30d;
 error_page 404 502 504 = @fallback;
}
location / {
 root /var/www/$host/web;
 index index.html index.htm index.php;
 access_log off;
 proxy_pass http://127.0.0.1:82;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header Host $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

 

Fine Tuning :

Si vous en êtes arriver là c’est déjà pas mal, maintenant on va modifier les configurations de Nginx et PHP-FPM pour améliorer les performances :

nano /etc/nginx/nginx.conf

 

Et remplacez le chiffre de la ligne worker_processes par le nombre de cœurs de votre processeur, par exemple pour un 2 cœurs :

worker_processes 2;

 

Ensuite éditez la configuration de php-fpm sur votre site :

vps-ovh-06

 

Voilà ce que ça donne en texte dans le fichier de configuration :

pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 10s;
pm.max_requests = 500

 

Maintenant, redémarrez les services associés :

service nginx restart && service php5-fpm restart

 

Maintenant on va modifier la configuration d’Apache PageSpeed :

nano /etc/apache2/mods-available/pagespeed.conf

 

Cherchez les ligne suivante et dé-commentez les pour interdire la retouche des images par Apache PageSpeed, c’est long et inutile :

ModPagespeedDisableFilters rewrite_images
ModPagespeedForbidFilters rewrite_images

 

Par contre, on peut activer la minification des fichiers javascript et CSS en dé-commentant les lignes suivantes :

 ModPagespeedEnableFilters rewrite_javascript,rewrite_css
 ModPagespeedEnableFilters collapse_whitespace,elide_attributes

 

Et on demande à préserver les urls avec en dé-commentant les lignes suivantes :

 ModPagespeedJsPreserveURLs on
 ModPagespeedImagePreserveURLs on
 ModPagespeedCssPreserveURLs on

 

Vous pouvez aussi modifier l’header qui renvoie par défaut la version de pagespeed en rajoutant cette ligne dans la configuration :

ModPagespeedXHeaderValue "Hidden"

 

Maintenant redémarrez apache :

service apache2 restart

 

Installation de No More DDOS :

Bon alors, pour commencer, No More DDOS est un script que j’ai créé à partir du programme DDOS Deflate.

Ce programme agit au niveau du pare-feu de votre serveur Debian, qui est soit Iptable par défaut, soit APF.

Ce programme peut vous bannir si vous faite du transfert FTP intensif alors n’hésitez pas à mettre votre adresse ip en liste blanche.

 

Pour installer le programme, lancez la commande suivante :

wget -O- https://raw.githubusercontent.com/stylersnico/nmd/master/debian/install.sh | sh

 

Une fois l’installation effectuée, lancez la commande suivante et testez le programme en choisissant l’option 1 :

/usr/local/nmd/nmd

 

Vous devriez avoir quelque chose de semblable :

no-more-ddos

 

Vous pouvez éditer la configuration de No More DDOS en modifiant le fichier de configuration :

nano /usr/local/nmd/conf.d/agent.conf

 

Sécuriser le serveur :

Il n’y a pas de secrets, mettez des mots de passe fort partout !

En plus de ça, voici 2-3 astuces pour sécuriser votre serveur.

On va commencer par utiliser l’assistance de sécurisation de MariaDB avec la commande suivante :

mysql_secure_installation

 

Ensuite, vous pouvez regarder cet article pour blinder votre accès SSH !

Pour le reste je vous laisse jeter un oeil au liens utiles 😉

 

Intégration de Memcached :

Pour finir en beauté, on va lier tous les services web de notre serveur à Memcached pour des performances maximales !

Pour cela, je vous laisse consulter mon article sur l’installation de Memcached, il y a tout ce dont vous avez besoin 😉

Cacher les versions d’apache, php et Nginx :

Pour cacher la version d’Apache, ouvrez votre fichier de configuration :

nano /etc/apache2/apache2.conf

 

Et rajoutez ces 2 lignes à la fin :

ServerTokens ProductOnly
ServerSignature Off

 

Maintenant, redémarrez Apache :

service apache2 restart

 

Pour php, ouvrez votre php.ini :

nano /etc/php5/fpm/php.ini

 

Recherchez la variable suivante et mettez la sur off :

expose_php = Off

 

Redémarrez php :

service php5-fpm restart

 

Pour nginx, ouvrez votre fichier de configuration de nginx :

nano /etc/nginx/nginx.conf

 

Dé-commentez la ligne suivante ou si elle n’est pas présente, ajoutez la :

server_tokens off;

 

Redémarrez Nginx :

service nginx restart

 

Maintenant les versions logicielles de votre serveur ne seront plus accessibles au monde 😉

root@xxx:/# curl -I http://www.abyssproject.net
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 20 Aug 2014 08:14:43 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Pingback: https://www.abyssproject.net/xmlrpc.php
Link: <http://wp.me/P2RtI7-sB>; rel=shortlink
X-Mod-Pagespeed: Web Server By Nicolas Simond <https://www.nicolas-simond.com>
Vary: Accept-Encoding
Cache-Control: max-age=0, no-cache

 

Et voilà, j’ai enfin fait ce tutoriel complet pour créer un serveur web de A à Z, j’espère qu’il vous plaît ! N’hésitez pas à me payer une bière si ça vous a été utile ou à laisser un commentaire 🙂

N’oubliez pas ! Redémarrez votre serveur à la fin de l’installation pour partir sur quelque chose de propre 😉

 

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

Subscribe
Notify of
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

7 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
Xavier
Xavier
9 années plus tôt

Bonjour,

Dans ton article, tu veux éditer le fichier de conf de Nginx sans même l’avoir installé.

Et malgré l’édition de /etc/nginx/conf.d/default, Nginx m’envoie sur son Vhost par défaut qui n’est pas le dossier /var/www/xxxx créé par ISPConfig3.

Bref, même en suivant le tuto à la ligne, ca ne fonctionne pas comme prévu!

Xavier
Xavier
Reply to  Nicolas Simond
9 années plus tôt

J’ai bien les dépôts de DotDeb dans mon sources.list.
En fait, j’ai suivi le tuto de A à Z.

Xavier
Xavier
Reply to  Xavier
9 années plus tôt

# nano /etc/nginx/conf.d/default

Après édition de /etc/nginx/sites-available/default, ca fonctionne mieux.

Xavier
Xavier
Reply to  Xavier
9 années plus tôt

Oui, il ne me reste plus qu’à trouver comment configurer Nginx pour Prestashop 1.6 pour le côté reverse proxy. 😉