---
title: "PerishablePress 6G pour nginx"
date: 2017-07-29T10:52:11+02:00
description: "Comment paramétrer les règles de blocage d'adresses IP du projet 'Perishable Press 6G' avec nginx"
draft: false
tags: ['nginx', 'block', 'PerishablePress', '6G']
---
## Description
Le projet **[Perishable Press 6G][1]** est un projet de règles de filtrage
pour le serveur Apache, version 2 de préférence, à utiliser dans le
fichier `.htaccess`.
Personnellement, j'avoue préférer nginx.
Je rappelle que les règles .htaccess n'existent pas pour nginx, même si
on peut recréer le principe, de manière différente !
Donc, j'ai eu l'idée de convertir ces règles de filtrage et autres blacklistages
pour l'intégrer à l'usage que j'ai de nginx.
À moins que je ne me trompe, cela devrait donner ce qui suit ci-dessous :
## Configuration
### 6G:[QUERY STRINGS]
Dans le fichier de configuration du domaine à gérer, contexte `server` :
{{< code "web-nginx-perishable-press-6g-queries" nginx >}}
#### WordPress: plugin TimThumb
Si jamais vous utilisez le plugin TimTumb, il vous faudra commenter la ligne
suivante :
`location ~* "(thumbs?(_editor|open)?|tim(thumb)?)\.php" { return 444; }`
### 6G:[REQUEST METHOD]
Toujours dans le contexte `server`, utilisons la capacité native de nginx,
si la connexion n'est pas de type GET, ou HEAD, alors bloquons le flux :
{{< code "web-nginx-perishable-press-6g-request-method" nginx >}}
### Nuage informatique
Pour ceux qui utilisent un serveur de nuage informatique, tel que Nextcloud,
ajoutez au moins la méthode `PUT`, tel que :
`if ($request_method !~ ^(GET|HEAD|PUT)$ ) { return 444; }`
### Formulaires
Si vous avez dans votre site, des pages qui ont des formulaires qui envoient
les données par la requête POST, ajoutez la dans la déclaration ci-dessus,
tel que :
`if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }`
### 6G:[REFERRERS]
Pour ce filtrage, utilisons la déclaration `map`, dans le contexte `http`
du serveur :
{{< code "web-nginx-perishable-press-6g-referrers-map" nginx >}}
La règle `~([a-z0-9]{2000}) 1;` est mis en commentaire - je n'ai pas encore
trouvé comment faire pour l'inclure sans retour d'erreur !
Puis, rajouter dans le contexte `server` ladite déclaration :
{{< code "web-nginx-perishable-press-6g-referrers-context-server" nginx >}}
### 6G:[REQUEST STRINGS]
Les filtres sur les requêtes sont toutes aussi simples que celles sur les
{{< anchor "queries" "6gquery-strings" >}}… de type `location`, dans le
contexte `server` :
{{< code "web-nginx-perishable-press-6g-request-strings" nginx >}}
#### CGI
Pour ceux qui utilisent un service CGI, supprimez la mention `cgi-|` de la
ligne suivante :
`location ~* "/(=|\$&|_mm|(wp-)?config\.|cgi-|etc/passwd|muieblack)" { return 444; }`
### 6G:[USER AGENTS]
Là encore, utilisons l'astuce de la déclaration `map`, dans le contexte `http` :
{{< code "web-nginx-perishable-press-6g-ua-map" nginx >}}
Puis écrivons dans le contexte `server` :
{{< code "web-nginx-perishable-press-6g-ua-context-server" nginx >}}
---
Et, voilà !
PS : Pensez à redémarrer le serveur nginx, après avoir lancé le test de la config !
---
[1]: https://perishablepress.com/6g
---