Installation de IspConfig, Nginx, PHP-FPM 5.6 et MariaDB sur Debian 8

1/52/53/54/55/5 (6 votes, moyenne: 4,17 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.


Bonjour à tous,

 

Aujourd’hui je vous propose un article pour la configuration d’un serveur Web sous Debian 8 « Jessie ». Cet article arrive tôt car Debian 8 n’est pas encore au stade final, je mettrais donc cet article à jour dans le temps.

 

Les composants de notre serveur :

  • Nginx 1.6.x (Serveur Web hautes performances)
  • MariaDB 10.x (Serveur de base de données)
  • Php5-fpm 5.6.x (Pour traiter les requêtes php avec Nginx)

 

Installation des sources :

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

nano /etc/apt/sources.list

 

Rajoutez contrib non-free  à la fin de chaque ligne du fichier :

deb http://mirrors.kernel.org/debian/ jessie main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
deb http://mirrors.kernel.org/debian/ jessie-updates main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie-updates main contrib non-free
deb http://mirrors.kernel.org/debian/ jessie-backports main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie-backports 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 -y && apt-get install htop software-properties-common python-software-properties -y

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 :

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 sid 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 -y

 

Ensuite, on va installer Nginx, PHP-FPM, memcached et les différents modules php :

apt-get install nginx php5-fpm php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-memcached php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl fcgiwrap memcached -y

 

Ensuite, installez Pureftpd, bind9 et fail2ban :

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

 

Et pour finir, on installe Jailkit :

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

 

Vous pouvez maintenant installer le package .deb comme ceci :

cd ..
dpkg -i jailkit_2.17-1_*.deb
rm -rf jailkit-2.17*

 

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:

systemctl restart mysql

 

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 =

 

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

 

Intégration de HSTS et de SPDY :

Éditez le template des Vhosts de Nginx :

nano /usr/local/ispconfig/server/conf/nginx_vhost.conf.master

 

Remplacez les 2 premiers :443 ssl par :443 ssl spdy :

spdy-nginx-ispconfig

 

Maintenant lancez la ligne de commande suivante pour éditer la configuration de Nginx :

nano /etc/nginx/nginx.conf

 

Recherchez l’ouverture de la balise http { et mettez les lignes suivantes en dessous :

 #HSTS
 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

 

Pour information, cette commande envoie l’entête HSTS à vos visiteurs en indiquant une durée de 1 an et en incluant les sous domaines.

 

Pendant que vous êtes dans ce fichier, adaptez le worker_processes en fonction de votre nombre de cœurs cpu :

worker_processes 8;

Sauvegardez avec un petit Ctrl + O et redémarrez Nginx :

systemctl restart nginx

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

 

 

Tuning PHP-FPM :

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

Éditez la configuration de php-fpm sur votre site pour qu’elle corresponde à ceci au niveaux des valeurs PHP-FPM :

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 :

systemctl restart php5-fpm

 

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 😉

 

Cacher les versions de Nginx et PHP:

Pour cacher la version de Nginx, ouvrez votre fichier de configuration :

nano /etc/nginx/nginx.conf

 

Et rajoutez cette ligne au début de la section http { :

server_tokens off;

 

Maintenant, redémarrez Nginx :

systemctl restart nginx

 

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 :

systemctl restart php5-fpm

 

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: http://www.abyssproject.net/xmlrpc.php
Link: <http://wp.me/P2RtI7-sB>; rel=shortlink
Vary: Accept-Encoding
Cache-Control: max-age=0, no-cache

 

Tuning du kernel :

Cette partie est inutile si vous utilisez un VPS qui utilise la technologie OpenVZ. Vous devez avoir un kernel personnalisable, c’est à dire un serveur dédié ou une machine virtuelle sous Vmware, Hyper-V, KVM …

 

Ouvrez le fichier sysctl :

nano /etc/sysctl.conf

 

Rajoutez la configuration suivante à la fin du fichier :

#PERSO

# Recycle Zombie connections
net.inet.tcp.fast_finwait2_recycle=1
net.inet.tcp.maxtcptw=200000

# Increase number of files
kern.maxfiles=65535
kern.maxfilesperproc=16384

# Increase page share factor per process
vm.pmap.pv_entry_max=54272521
vm.pmap.shpgperproc=20000

# Increase number of connections
vfs.vmiodirenable=1
kern.ipc.somaxconn=3240000
net.inet.tcp.rfc1323=1
net.inet.tcp.delayed_ack=0
net.inet.tcp.restrict_rst=1
kern.ipc.maxsockbuf=2097152
kern.ipc.shmmax=268435456

# Host cache
net.inet.tcp.hostcache.hashsize=4096
net.inet.tcp.hostcache.cachelimit=131072
net.inet.tcp.hostcache.bucketlimit=120

# Increase number of ports
net.inet.ip.portrange.first=2000
net.inet.ip.portrange.last=100000
net.inet.ip.portrange.hifirst=2000
net.inet.ip.portrange.hilast=100000
kern.ipc.semvmx=131068

# Disable Ping-flood attacks
net.inet.tcp.msl=2000
net.inet.icmp.bmcastecho=1
net.inet.icmp.icmplim=1
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1

# Increase maximum amount of memory allocated to shm

kernel.shmmax = 1073741824

# This will increase the amount of memory available for socket input/output queues
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824
net.core.rmem_default = 25165824
net.ipv4.tcp_wmem = 4096 65536 25165824
net.core.wmem_max = 25165824
net.core.wmem_default = 65536
net.core.optmem_max = 25165824

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# you shouldn't be using conntrack on a heavily loaded server anyway, but these are
# suitably high for our uses, insuring that if conntrack gets turned on, the box doesn't die
# net.ipv4.netfilter.ip_conntrack_max = 1048576
#  net.nf_conntrack_max = 1048576

# For Large File Hosting Servers
net.core.wmem_max = 1048576
net.ipv4.tcp_wmem = 4096 87380 524288

# Use swap when we have less than 10% of the physical memory available
vm.swappiness=10

 

Ensuite, redémarrez votre serveur pour que les changements soit prit en compte.

 

 

N’hésitez pas à me payer une bière si ça vous a été utile ou à laisser un commentaire 🙂

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.

25 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
Amandine
Amandine
8 années plus tôt

Salut,
merci pour ce tuto.
Par contre, je ne comprends pas où utilisons-nous MariaDB…?
Sur le tuto, il semble qu’on utilise toujours MySQL.
Notamment avec les commandes suivantes :

nano /etc/mysql/my.cnf
systemctl restart mysql

Où configure t-on ce serveur de BDD MariaDB ?

Nico
Nico
8 années plus tôt

Super Tuto.

J’ai juste un soucis avec joomla 3, lorsque le site joomla est en mode hors ligne, j’ai une erreur 503 ! Sur le front office, mais j’ai accès à l’administration complète. Par contre lorsque le site est en ligne, aucun soucis….. Juste sur les rewrite, mais après quelques modifications dans le vhost, pas de soucis.

Donc je sèche sur cette erreur 503. J’ai le site sur apache logiquement et pas ce soucis. J’ai effectué un transfert complet du site.

xhark
8 années plus tôt

Nickel ce tuto 🙂

allan84
allan84
8 années plus tôt

hello, j’ai tout installé sans problème, mais maintenant je voudrais installer mon forum vbulletin, dans quel répertoire je dois l’envoyer? merci beaucoup

allan84
allan84
Reply to  allan84
8 années plus tôt

Bjr Nicolas, j’ai suivi ton tuto à la lettre si je puis dire, j’ai crée et accéder au ftp, j’ai fais un compte user pour mon sql et de la une base de données, mais chaque fois j’ai une page 403 forbidden, ca fait quelques années que j’installe des forums mais la 1ere fois avec ispconfig, excellent d’ailleurs! en tapant l’ip j’avais bien la page de bienvenue nginx, j’ai supprimé ce fichier html et mis mon forum à la place. ça doit pas être grand chose mais la je cale. Dans tous les cas tes tutos sont vraiment bien réalisés,… Voir plus »

allan84
allan84
Reply to  allan84
8 années plus tôt

bjr, j’ai crée une base de données, mais comment se fait la gestion pour restaurer une de mes bases? y a t-il une ligne php a taper dans le browser? merci

allan84
allan84
Reply to  allan84
8 années plus tôt

hello Nicolas je suis assez novice, qu’entends tu par ligne de commande? peux tu m’expliquer? Merci
(désolé pour le délai de réponse!)

allan84
allan84
Reply to  allan84
8 années plus tôt

je suis désolé mais je laisse tomber, je comprends pas. Merci pour le temps passé

allan84
allan84
Reply to  allan84
8 années plus tôt

je regarderai de plus près pendant mes congés!
Pour info lors de cette commande :

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

ceci apparait:
Le fichier « Release » pour http://ftp.proxad.net/mirrors/ftp.debian.org/dists/jessie-updates/InRelease a expiré (plus valable depuis 1d 9h 28min 40s). Les mises à jour depuis ce dépôt ne s’effectueront pas.

Je me doute que tu y es réfractaraire, mais activer phpmyadmin serait bien pour les personnes comme moi, et cela à mes risques.

voila, merci encore à toi

yaba
yaba
8 années plus tôt

Bonjour Nicolas, merci pour ce tutoriel, je l’ai suivi jusqu’au moment où on doit se connecter au webpanel et là en tapant sur le navigateur: https://adresse_ip-de_mon_serveur:8080 j’ai eu la page suivante:
Page Web inaccessible

ERR_CONNECTION_REFUSED
pouvez vous m’aider s’il vous plait?

Amlil71
Amlil71
8 années plus tôt

Merci. Comment faites-vous pour accéder au panneau d’administration des bases de données créées sous ispconfig ? Merci.

amlil71
amlil71
Reply to  Amlil71
8 années plus tôt

Bonjour et merci pour tout. Grace à votre tutoriel j’ai enfin pu installer nginx sur mon serveur kimsufi. Un grand merci. Il me reste juste à installer roundcube ou une autre solution de messagerie.

amlil71
amlil71
Reply to  Amlil71
8 années plus tôt

Bonjour, j’utilise un autre serveur pour recevoir les mails. Mais tel qu’est configuré le serveur sous nginx , ispconfig 3 et debian 8, nous ne pouvons pas envoyer de message. Est-ce problématique d’installer postfix ? Dans le tutoriel nous faisons le choix de ne pas l’installer : « 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 » . Merci.

amlil71
amlil71
Reply to  Amlil71
8 années plus tôt

Re bonjour,

j’ai installé postfix et l’envoi de mail fonctionne bien.

Commandes utilisées : apt-get install postfix postfix-mysql postfix-doc

Mercà vous et bonne journée 🙂

Amlil71
Amlil71
8 années plus tôt

Bonjour, merci pour ce tutoriel. J’ai tenté de le suivre mais j’ai 1 souci pour accéder à phpmyadmin. Quand installe-t-on phpmyadmin dans votre tuto? Lors de l’installation de ispconfig on installe aussi mysql server non ? Merci.

Jeff
Jeff
Reply to  Nicolas Simond
4 années plus tôt

Je déterre le commentaire, mais bon, Si on change le port de connexion ainsi que l’URL d’accès de phpmyadmin, le tout avec un mot de passe costaud, le risque est proche de zero, quand meme.. Et phpmyadmin reste très pratique pour ceux qui ne maitrisent pas la ligne sql comme un dieu …