Dans cet article, je vais vous expliquer comment construire une pile LEMP protégée par ModSecurity. ModSecurity est un pare-feu d'application Web open source qui est utile pour se protéger contre les injections, les attaques PHP, etc. Si vous souhaitez configurer NGINX avec ModSecurity, continuez à lire.
Toutes les étapes de cet article nécessitent un accès root.
Étape 1: installation des prérequis
Si vous n'êtes pas déjà en cours d'exécution en tant qu'utilisateur root, escaladez-vous:
/bin/su
Nous avons besoin d'un compilateur, exécutez donc ce qui suit pour vous assurer:
yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl openssl-devel httpd-devel libxml2-devel xz-devel python-devel libcurl-devel
yum groupinstall -y 'Development Tools' 
Pour installer NGINX, nous devons d'abord obtenir le package. Téléchargez le package:
cd /usr/src && wget http://nginx.org/download/nginx-1.9.9.tar.gz
Nous aurons également besoin du package PHP pour notre pile.
wget http://us2.php.net/distributions/php-5.6.16.tar.bz2
Puisque nous installons ModSecurity, nous allons récupérer la source et la télécharger:
wget https://www.modsecurity.org/tarball/2.9.0/modsecurity-2.9.0.tar.gz
Maintenant, décompressez / décompressez les fichiers.
tar xvf nginx-1.9.9.tar.gz
tar xvf php-5.6.16.tar.bz2
tar xvf modsecurity-2.9.0.tar.gz   
Ensuite, nous installerons ModSecurity.
cd /usr/src/modsecurity-2.9.0 && ./configure --enable-standalone-module --disable-mlogc
make && make install
Maintenant que nous avons obtenu toutes les conditions préalables, installons NGINX. L'ensemble de commandes suivant concerne l'installation de NGINX et ModSecurity.
cd /usr/src/nginx-1.9.9 && ./configure --add-module=../modsecurity-2.9.0/nginx/modsecurity/
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
Maintenant, installons le serveur MySQL.
yum install -y mysql-server
service mysqld start
mysql_secure_installation
Pour la mysql_secure_installationcommande:
	- Appuyez sur Entrée à la première étape de l'assistant d'installation.
- Tapez Y lorsque vous êtes invité si un nouveau mot de passe racine MySQL doit être défini.
- Tapez un nouveau mot de passe, confirmez en le tapant à nouveau.
- Appuyez sur Y pour supprimer les utilisateurs anonymes, interdisez l'accès root à distance à MySQL en appuyant à nouveau sur Y.
- Appuyez une dernière fois sur Y pour supprimer la base de données / l'utilisateur de test.
- Enfin, appuyez sur Y pour enregistrer vos modifications.
Une dernière chose à installer, c'est PHP. Dans cet article, nous allons installer PHP à partir des sources.
Entrez le répertoire source de PHP.
cd /usr/src/php-5.6.16
Maintenant, configurez PHP. Les arguments suivants de la ./configurecommande sont là pour que vous puissiez exécuter des applications comme WordPress.
 ./configure --with-pear=/usr/lib/pear --enable-libxml --with-pdo-mysql --with-mysqli --with-mysql --enable-mbstring --with-curl
 make
 make install
Installez PHP-FPM pour NGINX:
yum install -y php-fpm
Nous devons installer PHP-FPM au-dessus de PHP lui-même car NGINX lui-même ne s'intègre pas directement avec PHP. Au lieu de cela, NGINX passe le traitement PHP à PHP-FPM pour exécuter nos scripts.
Bon travail! Vous avez installé les prérequis.
Étape 2: configuration de ModSecurity / NGINX
Commençons par créer un ensemble de règles ModSecurity. ModSecurity ne fait rien par lui-même jusqu'à ce que vous le configuriez.
Récupérez l'ensemble de règles OWASP sur leur site Web:
 cd /usr/src && wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master
 tar xvf master
Après avoir téléchargé le jeu de règles, nous combinerons la configuration par défaut avec les règles de base.
cd SpiderLabs-owasp-modsecurity-crs-60c8bc9
cp /usr/src/modsecurity-2.9.0/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity-2.9.0/unicode.mapping /usr/local/nginx/conf/
cat base_rules/*.conf >> /usr/local/nginx/conf/modsecurity.conf
cp base_rules/*.data /usr/local/nginx/conf
En théorie, cela devrait protéger contre la plupart des exploits Web. Cependant, les plugins / code que vous installez doivent également être audités, car bien que ModSecurity soit une excellente mesure de sécurité, il n'est pas à l'épreuve des balles.
Créez un répertoire sur /var/www:
mkdir /var/www
Et un répertoire pour votre hôte virtuel:
mkdir /var/www/yourwebsite.com
Enfin, ajoutez ce qui suit à votre configuration NGINX située à /usr/local/nginx/conf/nginx.conf. Assurez-vous d'ajouter cette configuration avant l'occurrence du dernier }symbole.
  server {
  listen   80;
  root /var/www/yourwebsite.com;
  index index.php index.html index.htm;
  server_name yourwebsite.com www.yourwebsite.com;
  location / {
  ModSecurityEnabled on;
  ModSecurityConfig /usr/local/nginx/modsecurity.conf;
  }
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
Étape 3: Démarrage de PHP-FPM et NGINX
Cette étape est assez simple - tout ce que vous avez à faire est d'exécuter les commandes suivantes.
service php-fpm start
/usr/sbin/nginx
Toutes nos félicitations! Vous avez configuré votre premier site Web avec NGINX protégé par ModSecurity. Pour plus d'informations sur ModSecurity, visitez leur site officiel .