Table des matières

Nginx

Évaluer la sécurité et les bonnes pratiques sur le serveur:

Sécuriser une page avec un htpasswd

Source

Installer le paquet apache2-utils.

Créer le fichier .htpasswd et créer l'utilisateur voulu:

htpasswd -c /var/www/.htpasswd login

Le paramètre -c permet de créer le fichier.

Modifier le fichier de configuration du domaine Nginx en conséquence:

/etc/nginx/conf.d/domain.conf
location / {
    index index.html index.htm;
    auth_basic "Login";
    auth_basic_user_file /var/www/.htpasswd;
}
 
# Protect hidden file to read/write access
location ~ /\. {
    deny all;
}

Relancer Nginx.

Il est possible de désactiver l'authentification pour une page en particulier :

location /une/url/bien/precise/ {
    auth_basic off;
}

Ce bloc location doit être situé au même niveau que l'autre bloc qui contient l'instruction d'authentification, et doit aussi contenir les instructions pour traiter la requête (proxy_pass, etc).

Autoriser le listing d'un dossier

Source

/etc/nginx/conf.d/domain.conf
location /somedir {
    autoindex on;
}

Lister les modules de Nginx

Source

2>&1 nginx -V | tr ' ' '\n'

Fancy Index

https://github.com/Naereen/Nginx-Fancyindex-Theme

Ne pas mettre audoindex on; en même temps que fancyindex on; !


Cacher qu'il s'agit de Nginx

server_tokens off; # cache la version de Nginx
more_set_headers "Server: Unknown"; # modifie l'en-tête Server

Ne pas logger certaines requêtes

location ~* (/favicon.ico|/apple-touch-icon-precomposed.png|/apple-touch-icon.png|/robots.txt) {
    access_log off;
    log_not_found off;
}

Selon le user-agent

Pour ne pas logger les requêtes faites par les User-Agents commençant par HetrixTools :

# en-dehors du bloc server :
map $http_user_agent $loggable {
    ~^HetrixTools 0;
    default 1;
}
 
# dans le bloc server :
access_log /var/log/nginx/access.log combined if=$loggable;

Refuser certains User Agents

Dans le bloc http du fichier /etc/nginx/nginx.conf:

include /etc/nginx/blacklist;

Dans le fichier /etc/nginx/blacklist:

map $http_user_agent $block_ua {
        default           0;
        ~*profound        1;
        ~*scrapyproject   1;
        ~*netcrawler      1;
        ~*nmap            1;
	~*sqlmap	  1;
	~*slowhttptest	  1;
	~*nikto		  1;
	"~*jersey avec espace"	  1;
	~*brandwatch	  1;
	~*magpie-crawler  1;
	~*mechanize	  1;
	~*python-requests 1;
	~*redback	  1;
}

Dans les virtual hosts (section http):

if ($block_ua) {
        return 444;
}

Les erreurs 444 sont logguées dans /var/log/nginx/access.log.