--- 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 ---