Paquet | Nginx | NAXSI

Compilation d’un paquet (dit Package en anglais) qui regroupe Nginx et NAXSI.

Distribution utilisé , Debian Wheezy.

Introduction sur le paquet (logiciel)

En informatique, et en particulier dans le contexte des systèmes UNIX, on appelle paquet (ou parfois paquetage, en anglais package) une archive (fichier compressé) comprenant les fichiers informatiques, les informations et procédures nécessaires à l’installation d’un logiciel sur un système d’exploitation au sein d’un agrégat logiciel, en s’assurant de la cohérence fonctionnelle du système ainsi modifié.

Dans ce tutoriel , on utilisera le paquet debian pour recompiler les sources de la dernière version de Nginx :

D’abort, créer un répertoire (sous l’utilisateur Root) qu’on va nommé compile.

mkdir compile
cd compile

Introduction sur l’installateur du paquet Debian (dit .deb) .

APT fut conçu à l’origine pour fonctionner avec des paquets .deb sur des distributions Debian, mais a depuis été adapté pour fonctionner avec des paquets Red Hat Package Manager (RPM) avec l’outil apt-rpm, et pour fonctionner sur d’autres systèmes d’exploitation tels que Mac OS X (voir Fink). Sur les systèmes avec une gestion de paquets basée sur le format .deb, comme Debian, APT est une interface à dpkg, un peu comme urpmi est l’interface de rpm.
Copier les sources de la dernière version de Nginx suivant la distribution Debian, dans notre cas , Debian Wheezy.

nano /etc/apt/sources.list
## Debian Wheezy - rétroportages
deb http://ftp.fr.debian.org/debian/ wheezy-backports main
deb-src http://ftp.fr.debian.org/debian/ wheezy-backports main

Mettez à jour votre liste des paquets :

Ensuite lancer la commande suivante pour effectuer la mise à jour des paquets (Package)

apt-get update

Télécharger les sources de nginx et les dépendances pour la re-construction du paquet :

apt-get source nginx
apt-get build-dep nginx

Voyons qu’elle version télécharger avec la commande ls -l, pour lister les fichiers :

ls -l
total 1704
drwxr-xr-x 10 root root   4096 oct 26 11:17 nginx-1.6.2
-rw-r--r--  1 root root 926638 oct 13 12:05 nginx_1.6.2-2~bpo70+1.debian.tar.gz
-rw-r--r--  1 root root   2780 oct 13 12:05 nginx_1.6.2-2~bpo70+1.dsc
-rw-r--r--  1 root root 804164 sep 17 10:34 nginx_1.6.2.orig.tar.gz

Notre version de nginx est 1.6.2.
Allons dans le répertoire debian/modules qui va nous servir à téléchargé les sources NAXSI …

cd ~/compile/nginx-1.6.2/debian/modules

… Et télécharger les sources NAXSI :

git clone https://github.com/nbs-system/naxsi
Cloning into 'naxsi'...
remote: Counting objects: 2685, done.
remote: Total 2685 (delta 0), reused 0 (delta 0)
[...]

Modifions le fichier debian/rules :

cd ..
nano rules

Dans ce fichier, ajoutés ces 2 lignes, pour que la compilation du packet soit réalisable.

#!/usr/bin/make -f
export DH_VERBOSE=1
[...]
common_configure_flags := \
			--with-cc-opt="$(debian_cflags)" \
			--with-ld-opt="$(debian_ldflags)" \
			--prefix=/usr/share/nginx \
			--conf-path=/etc/nginx/nginx.conf \
			--http-log-path=/var/log/nginx/access.log \
			--error-log-path=/var/log/nginx/error.log \
			--lock-path=/var/lock/nginx.lock \
			--pid-path=/run/nginx.pid \
			--http-client-body-temp-path=/var/lib/nginx/body \
			--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
			--http-proxy-temp-path=/var/lib/nginx/proxy \
			--http-scgi-temp-path=/var/lib/nginx/scgi \
			--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
			--with-debug \
			--with-pcre-jit \
			--with-ipv6 \
			--with-http_ssl_module \
			--with-http_stub_status_module \
			--with-http_realip_module \
			--with-http_auth_request_module 

light_configure_flags := \
			$(common_configure_flags) \
			--with-http_gzip_static_module \
			--without-http_browser_module \
			--without-http_geo_module \
			--without-http_limit_req_module \
			--without-http_limit_zone_module \
			--without-http_memcached_module \
			--without-http_referer_module \
			--without-http_scgi_module \
			--without-http_split_clients_module \
			--without-http_ssi_module \
			--without-http_userid_module \
			--without-http_uwsgi_module \
			--add-module=$(MODULESDIR)/nginx-echo \
			--add-module=$(MODULESDIR)/naxsi/naxsi_src

full_configure_flags := \
			$(common_configure_flags) \
			--with-http_addition_module \
			--with-http_dav_module \
			--with-http_geoip_module \
			--with-http_gzip_static_module \
			--with-http_image_filter_module \
			--with-http_spdy_module \
			--with-http_sub_module \
			--with-http_xslt_module \
			--with-mail \
			--with-mail_ssl_module \
			--add-module=$(MODULESDIR)/nginx-auth-pam \
			--add-module=$(MODULESDIR)/nginx-dav-ext-module \
			--add-module=$(MODULESDIR)/nginx-echo \
			--add-module=$(MODULESDIR)/nginx-upstream-fair \
			--add-module=$(MODULESDIR)/ngx_http_substitutions_filter_module \
			--add-module=$(MODULESDIR)/naxsi/naxsi_src

extras_configure_flags := \
			$(common_configure_flags) \
			--with-http_addition_module \
			--with-http_dav_module \
			--with-http_flv_module \
			--with-http_geoip_module \
			--with-http_gzip_static_module \
			--with-http_image_filter_module \
			--with-http_mp4_module \
			--with-http_perl_module \
			--with-http_random_index_module \
			--with-http_secure_link_module \
			--with-http_spdy_module \
			--with-http_sub_module \
			--with-http_xslt_module \
			--with-mail \
			--with-mail_ssl_module \
			--add-module=$(MODULESDIR)/headers-more-nginx-module \
			--add-module=$(MODULESDIR)/nginx-auth-pam \
			--add-module=$(MODULESDIR)/nginx-cache-purge \
			--add-module=$(MODULESDIR)/nginx-dav-ext-module \
			--add-module=$(MODULESDIR)/nginx-development-kit \
			--add-module=$(MODULESDIR)/nginx-echo \
			--add-module=$(MODULESDIR)/ngx-fancyindex \
			--add-module=$(MODULESDIR)/nginx-http-push \
			--add-module=$(MODULESDIR)/nginx-lua \
			--add-module=$(MODULESDIR)/nginx-upload-progress \
			--add-module=$(MODULESDIR)/nginx-upstream-fair \
			--add-module=$(MODULESDIR)/ngx_http_substitutions_filter_module \
			--add-module=$(MODULESDIR)/naxsi/naxsi_src

%:
	dh $@ --with systemd
[...]

Maintenant, nous allons construire nos nouveaux paquets Nginx :

cd ~/compile/nginx-1.6.2/ && dpkg-buildpackage -b

Ensuite, nous allons jeter un regard sur les paquets générés :

cd ~/compile
ls -l
total 15152
drwxr-xr-x  3 root root    4096 oct 26 11:31 .
drwx------  4 root root    4096 oct 26 10:32 ..
drwxr-xr-x 10 root root    4096 oct 26 11:17 nginx-1.6.2
-rw-r--r--  1 root root   71336 oct 26 11:31 nginx_1.6.2-2~bpo70+1_all.deb
-rw-r--r--  1 root root    3767 oct 26 11:31 nginx_1.6.2-2~bpo70+1_amd64.changes
-rw-r--r--  1 root root  926638 oct 13 12:05 nginx_1.6.2-2~bpo70+1.debian.tar.gz
-rw-r--r--  1 root root    2780 oct 13 12:05 nginx_1.6.2-2~bpo70+1.dsc
-rw-r--r--  1 root root  804164 sep 17 10:34 nginx_1.6.2.orig.tar.gz
-rw-r--r--  1 root root   85890 oct 26 11:31 nginx-common_1.6.2-2~bpo70+1_all.deb
-rw-r--r--  1 root root   83334 oct 26 11:31 nginx-doc_1.6.2-2~bpo70+1_all.deb
-rw-r--r--  1 root root  734824 oct 26 11:31 nginx-extras_1.6.2-2~bpo70+1_amd64.deb
-rw-r--r--  1 root root 5638176 oct 26 11:31 nginx-extras-dbg_1.6.2-2~bpo70+1_amd64.deb
-rw-r--r--  1 root root  520166 oct 26 11:31 nginx-full_1.6.2-2~bpo70+1_amd64.deb
-rw-r--r--  1 root root 3658710 oct 26 11:31 nginx-full-dbg_1.6.2-2~bpo70+1_amd64.deb
-rw-r--r--  1 root root  398630 oct 26 11:31 nginx-light_1.6.2-2~bpo70+1_amd64.deb
-rw-r--r--  1 root root 2550620 oct 26 11:31 nginx-light-dbg_1.6.2-2~bpo70+1_amd64.deb

Nous pouvons maintenant installer nginx avec NAXSI intégré ​​comme suit :

dpkg --install nginx-extras_1.6.2-2~bpo70+1_amd64.deb nginx-common_1.6.2-2~bpo70+1_all.deb nginx-doc_1.6.2-2~bpo70+1_all.deb nginx_1.6.2-2~bpo70+1_all.deb

Allons voir si le module NAXSI​​ a été construit avec succès:

nginx -V
nginx version: nginx/1.6.2
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_mp4_module --with-http_perl_module --with-http_random_index_module --with-http_secure_link_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --add-module=/root/compile/nginx-1.6.2/debian/modules/headers-more-nginx-module --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-auth-pam --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-cache-purge --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-dav-ext-module --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-development-kit --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-echo --add-module=/root/compile/nginx-1.6.2/debian/modules/ngx-fancyindex --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-http-push --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-lua --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-upload-progress --add-module=/root/compile/nginx-1.6.2/debian/modules/nginx-upstream-fair --add-module=/root/compile/nginx-1.6.2/debian/modules/ngx_http_substitutions_filter_module --add-module=/root/compile/nginx-1.6.2/debian/modules/naxsi/naxsi_src

Configuration de NAXSI

Ajouter les 2 noms de fichiers entre http {} et location / {}, location ~ \.php$ {} :

{...}
http {
    # naxsi core rules
    include       /etc/nginx/naxsi_core.rules;
{...}
}
{...}
location / {
            include    /etc/nginx/nbs.rules;
{...}
}
{...}
location ~ \.php$ {
                include /etc/nginx/nbs.rules;
{...}
}
{...}

Vérifier la configuration et redémarrer Nginx pour activé NAXSI :

nginx -t
service nginx restart

Prochain Tutoriel , Installation de ISPConfig 3 avec intégration de Nginx / NAXSI.

En informatique, et en particulier dans le contexte des systèmes UNIX, on appelle paquet (ou parfois paquetage, en anglais package) une archive (fichier compressé) comprenant les fichiers informatiques, les informations et procédures nécessaires à l'installation d'un logiciel sur un système d'exploitation au sein d'un agrégat logiciel, en s'assurant de la cohérence fonctionnelle du système ainsi modifié.

NAXSI est sous licence GPL v2 et s’utilise conjointement avec nginx. Son principal but est de bloquer de manière efficace les attaques classiques de type injection SQL, Cross‐Site Scripting, Cross‐Site Request Forgery, ou encore inclusion de sources tierces locales ou distantes.

 Nginx est un serveur HTTP libre, open-source et haute performance ; ainsi qu'un proxy inverse. Ainsi il intègre également du proxy pour l'IMAP et le POP3. Igor Sysoev a commencé le développement de Nginx en 2002, avec une première version publique en 2004.