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

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

 

Pour bien commencer l’année j’ai décider de publié ma toute dernière procédure pour faire un serveur Web hautes-performances.

Apache est complètement délaissé au profit de Nginx et des modifications du Kernel sont incluses.

Les modifications du kernel seront inutiles si vous utilisez un vps sous technologie OpenVz mais je reviendrais là-dessus plus tard.

 

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 :

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-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 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 -y && apt-get install htop 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 :

cd /tmp
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 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 -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 automake1.9 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:

service mysql 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 =

 

 

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 :

service nginx 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

 

 

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 :

service php5-fpm restart

 

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 :

service nginx 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

 

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.

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

Bonjour et merci pour ce tuto. Actuellement en test sur mon odroid XU4. Le problème est la connexion tls par ftp, impossible de me connecter (je suis time out pour inactivité sans pour autant avoir accès a un quelconque dossier), il faut régler un range de port pour pureftpd mais niveau sécurité je sais pas ce que ça vaut d’ouvrir tous ses ports. Sinon, si tu avais un tuto pour migrer une database existante en ligne de commande(j’ai beau chercher et ya rien sachant qu’avant d’importer un site sous ce serveur, il faut crée un Bd avec ispconfig) même si… Voir plus »

Divinyles.fr
8 années plus tôt

Bonsoir, merci pour ce tuto riche en informations, je bascule sur un vps actuellement, donc votre blog direct dans les bookmarks. 😉 il y a juste le FTP, c’est dépassé et peu sécurisé. Perso je conseil d’utiliser directement une connections Ssh, ça évite l’installation ftpd, et le ssh c’est plus sûr. 😉 On peu faire la même chose pour la base de données, avec par exemple : SequelPro (sur Mac), MySQL Workbench (Mac, Wind, Linux), DBeaver (M, W, L)…. ça évite d’avoir à installer PhpMyadmin sur son serveur, qui en plus n’est pas pratique a utiliser. Sinon, encore merci pour… Voir plus »

Kaizer
Kaizer
8 années plus tôt

Salut ! J’ai un soucis d’accès FTP, ça me met « Échec de la tentative de connexion avec « ECONNREFUSED – Connexion refusée par le serveur ».  »
tu as une idée ?

yannzero
yannzero
9 années plus tôt

Hello,

Alors déjà merci pour ce petit tuto bien cool.

Mais j’ai un problème que je n’arrive pas a résoudre, je créé un nouveau site sous ISPconfig avec nginx comme serveur web mais pas moyen d’accéder à ce site via le nom de domaine, je ne peux y accéder que via l’ip du serveur, ce qui est quand même, loin d’être pratique.

Mes DNS sont configurés correctement et je vais finir par m’arracher les cheveux.

Une aide ne serait pas de refus 😉

Qwaser
9 années plus tôt

Merci pour ce tutoriel, je vais l’appliquer de suite sur mon VPS 😉

Pa contre la commande « apt-key adv –recv-keys –keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db » me retourne :
gpg : le délai d’attente du serveur de clefs a expiré
gpg : échec de réception depuis le serveur de clefs : erreur du serveur de clefs

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

Problème résolut en modifiant la commande comme ceci :

apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 0xcbcb082a1bb943db

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

De rien 😉 Bon personnellement même si le tutoriel est extrêmement bien expliqué (bravo à toi), j’ai lâché au moment d’installer ISPConfig (qui me fait penser à Webmin qu’on voit en cours ^^) xD

Je vais repartir sur quelque chose de plus simple avec juste Nginx, PHP, MariaDB, phpMyAdmin. Pour le FTP, personnellement j’utilise Fillzella en mode SSH, qu’en penses-tu ?

Je vais malgré ça parcourir ton site en quête de tutoriel sur la sécurisation d’un serveur Debian, car je souhaite sécuriser mon petit VPS malgré tout 🙂
En attendant superbe site qui restera dorénavant dans mes favoris 😉

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

D’accord 🙂 Merci pour ce logiciel qui va venir remplacer Filezilla 😉

Damien
Damien
9 années plus tôt

yop,
super le tuto merci.
pour ceux qui restent devant leur écran pendant l’installation vous avez:
« Clamav signatures not found in /var/lib/clamav … failed!
Please retrieve them using freshclam … failed!
Then run ‘/etc/init.d/clamav-daemon start’ … failed! »

et j’aime pas « failed » 🙂

Juste après l’installation de clamAv
faites un « freshclam » puis « /etc/init.d/clamav-daemon start »

merci de me corriger si il y a une erreur, en tout cas pour moi c’est ok

Kero
Kero
9 années plus tôt

Bonjour Nicolas,

Tu as oublié d’indiquer de valider les clés pour les repos suivants :
http://packages.dotdeb.org wheezy
http://packages.dotdeb.org wheezy-php56
http://ftp.igh.cnrs.fr wheezy Release 

Bonne journée !
Kéro – @je_discute

kero
kero
Reply to  Kero
9 années plus tôt

Oublie ce que j’ai écris ! J’étais sur une autre page… :/
Bref, c’était pas ma journée ^^
Salutations ! (et mes excuses surtout ! )