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 :


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
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 :
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 :
Ajoutez une nouvelle zone à l’aide de l’assistant :
Voici un exemple de configuration :
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 :
Remplissez bien le domaine, et SURTOUT choisissez bien PHP-FPM dans la version de php !
Création d’une base de données :
Allez dans Site, database Users :
Cliquez sur
Remplissez les champs et cliquez sur Save :
Maintenant allez dans Databases et créez en une nouvelle :
Remplissez les informations demandées :
Création d’un accès FTP :
Allez dans Web Access, FTP-Accounts et cliquez sur Add new FTP-User :
Remplissez les informations demandées :
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 :
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 🙂