Installation de IspConfig, Nginx, PHP-FPM 5.6 et MariaDB sur Ubuntu 14.10

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.


Bonjour à tous,

 

Aujourd’hui je vous propose un article pour la configuration d’un serveur Web sous Ubuntu 14.10 « Utopic Unicorn ».

 

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 :

Lancez 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 pour MariaDB :

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
add-apt-repository 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/ubuntu utopic 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

 

Si des informations vous sont demandées par rapport à PostFix choisissez « pas de configuration« .

 

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:

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.

0 Commentaires
Inline Feedbacks
View all comments