Add: oldier article nginx perishablepress
parent
0b6a32a84c
commit
4876234f0a
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: "PHP5|7 : un fichier sitemap.xml, ou sitemap.xml.gz"
|
||||
date: 2020-04-20T19:10:51+02:00
|
||||
date: 2018-11-13T19:10:51+02:00
|
||||
description: "Générer un fichier sitemap et sa version compressée en PHP 5 et 7"
|
||||
draft: false
|
||||
tags: ['PHP5', 'PHP7', 'sitemap']
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
---
|
||||
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 : <br>
|
||||
`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 : <br>
|
||||
`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 : <br>
|
||||
`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
|
||||
|
||||
---
|
|
@ -0,0 +1,92 @@
|
|||
---
|
||||
title: "PerishablePress : Blackhole pour les mauvais robots"
|
||||
date: 2017-07-23T21:42:02+02:00
|
||||
draft: false
|
||||
lastmod: 2017-07-29T22:17:58+02:00
|
||||
tags: ['nginx', 'PerishablePress', 'Blackhole', 'block']
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Jeff Starr de PersishablePress vient de publier son [plugin de sécurité pour WP][1],
|
||||
nommé <span lang="en">[Blackhole for BadBots][2]</span>.
|
||||
|
||||
L'idée de départ intéressante est, dû au fait que les robots scrutateurs
|
||||
du web ne respectent pas tous la déclaration du fichier `robots.txt`…
|
||||
|
||||
C'est d'ailleurs pour cette raison qu'ils sont appelés "<span lang="en">BadBots</span>"
|
||||
ou "mauvais robots".
|
||||
|
||||
Puisque ces mauvais robots ne respectent rien, on va les piéger, puis bloquer
|
||||
leurs adresses IP !
|
||||
|
||||
## Installation
|
||||
|
||||
Commençons par télécharger la dernière mouture des scripts PHP : <br>
|
||||
https://perishablepress.com/blackhole-bad-bots/#blackhole-download
|
||||
|
||||
Une fois l'archive décompressée, ouvrez le script `index.php`, et remplissez/modifiez
|
||||
correctement les valeurs des variables `$from`, `$recip`… <br>
|
||||
enregistrez la modification.
|
||||
|
||||
Pensez à modifiez l'url de contact, en lignes 206 et 229 ; et, idem pour
|
||||
le script `blackhole.php` en ligne 56.
|
||||
|
||||
Dans votre site, créez un répertoire `blackhole`, dans lequel vous déposerez
|
||||
les fichiers blackhole, précédemment téléchargés - <br>
|
||||
*bien sûr, pas besoin du fichier `.htaccess`*
|
||||
|
||||
Mettez des droits 0600 sur le fichier `blackhole.dat`, si votre serveur
|
||||
permet cette gestion fine…
|
||||
|
||||
## Configuration
|
||||
|
||||
Ensuite, modifiez vos scripts PHP de cette manière - *oui, là, c'est un peu la contrainte !* :
|
||||
|
||||
* Dans votre code source PHP, rajoutez cette déclaration suivante - *si possible,
|
||||
avant tout code html… voire tout autre code PHP* : <br>
|
||||
`include(realpath(getenv('DOCUMENT_ROOT')) .'/blackhole/blackhole.php');`
|
||||
* Toujours dans le code source PHP, rajoutez la suivante, où vous voulez,
|
||||
mais le plus probablement dans ce qu'on appelle le 'footer' : <br>
|
||||
`<a rel="nofollow" style="display:none;" href="http://votre-ndd.tld/blackhole/">NE PAS Suivre ce lien où vous serez bannis - interdits d'accès - à ce site !</a>`
|
||||
* Puis, terminez par rajouter cette déclaration dans votre fichier `robots.txt` : <br>
|
||||
`Disallow: /blackhole/`
|
||||
|
||||
Maintenant, modifions le fichier de configuration de votre serveur nginx
|
||||
pour ajouter cette déclaration `location` :
|
||||
|
||||
{{< code "web-nginx-perishable-press-blackhole-location" nginx >}}
|
||||
|
||||
Puis, pensez à tester votre configuration nginx, et redémarrez votre serveur !
|
||||
|
||||
Vous obtiendrez ainsi une belle erreur 404, si le fichier est appelé…
|
||||
|
||||
---
|
||||
|
||||
À partir de maintenant, quand un mauvais robot, ou quelqu'un cherchera à
|
||||
pointer sur le répertoire `blackhole`, et/ou un de ses fichiers, il sera
|
||||
blacklisté, puis quand il reviendra, il ne lui sera pas permis d'avoir
|
||||
accès au site web…
|
||||
|
||||
Le script vous enverra un mail ; si vous ne voulez pas en recevoir, éditez
|
||||
le script `index.php`, et mettez en commentaire PHP la ligne 226, commençant ainsi : <br>
|
||||
`//mail($recip, $subject, $message, 'From: '. $from);`
|
||||
|
||||
Il existe d'autres options modifiables ; là, je vous renvoie au site [PerishablePress][2] !
|
||||
|
||||
---
|
||||
|
||||
**Version modifiée**
|
||||
|
||||
Retrouvez la [version modifiée sur mon espace git][3], ainsi que l'[archive ZIP correspondante][4] !
|
||||
|
||||
L'auteur est informé ; j'espère qu'il intégrera mes modifications ;-)
|
||||
|
||||
---
|
||||
|
||||
[1]: https://perishablepress.com/new-plugin-blackhole-bad-bots/
|
||||
[2]: https://perishablepress.com/blackhole-bad-bots/
|
||||
[3]: https://framagit.org/hucste/tools/tree/master/blackhole
|
||||
[4]: https://framagit.org/hucste/tools/raw/master/blackhole/blackhole.modified.zip
|
||||
|
||||
---
|
|
@ -0,0 +1,13 @@
|
|||
# 6G Perishable Press: Queries String
|
||||
# @ https://perishablepress.com/6g/
|
||||
location ~* "(eval\()" { return 444; }
|
||||
location ~* "(127\.0\.0\.1)" { return 444; }
|
||||
location ~* "([a-z0-9]{2000})" { return 444; }
|
||||
location ~* "(javascript\:)(.*)(\;)" { return 444; }
|
||||
location ~* "(base64_encode)(.*)(\()" { return 444; }
|
||||
location ~* "(GLOBALS|REQUEST)(=|\[|%)" { return 444; }
|
||||
location ~* "(<|%3C).*script.*(>|%3)" { return 444; }
|
||||
location ~* "(\|\.\.\.|\.\./|~|`|<|>|\|)" { return 444; }
|
||||
location ~* "(boot\.ini|etc/passwd|self/environ)" { return 444; }
|
||||
location ~* "(thumbs?(_editor|open)?|tim(thumb)?)\.php" { return 444; }
|
||||
location ~* "(\'|\")(.*)(drop|insert|md5|select|union)" { return 444; }
|
|
@ -0,0 +1 @@
|
|||
if ($bad_referer) { return 444; }
|
|
@ -0,0 +1,6 @@
|
|||
# @ https://perishablepress.com/6g/
|
||||
map $http_referer $bad_referer {
|
||||
default 0;
|
||||
~*\{.*\: 1; # ShellShock
|
||||
#~([a-z0-9]{2000}) 1;
|
||||
~(?i)(semalt.com|todaperfeita) 1;
|
|
@ -0,0 +1 @@
|
|||
if ($request_method !~ ^(GET|HEAD)$ ) { return 444; }
|
|
@ -0,0 +1,11 @@
|
|||
# 6G Perishable Press : Request String
|
||||
# @ https://perishablepress.com/6g/
|
||||
location ~* "(https?|ftp|php):/" { return 444; }
|
||||
location ~* "(=\\'|=\%27|/\\'/?)\." { return 444; }
|
||||
location ~* "/(\$(\&)?|\*|\"|\.|,|&|&amp;?)/?$" { return 444; }
|
||||
location ~* "(\{0\}|\(/\(|\.\.\.|\+\+\+|\\"\\")" { return 444; }
|
||||
location ~* "(~|`|<|>|:|;|,|%|\|\s|\{|\}|\[|\]|\|)" { return 444; }
|
||||
location ~* "/(=|\$&|_mm|(wp-)?config\.|cgi-|etc/passwd|muieblack)" { return 444; }
|
||||
location ~* "(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)" { return 444; }
|
||||
location ~* "\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$" { return 444; }
|
||||
location ~* "/(^$|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php" { return 444; }
|
|
@ -0,0 +1 @@
|
|||
if ($bad_bot) { return 444; }
|
|
@ -0,0 +1,6 @@
|
|||
# @ https://perishablepress.com/6g/
|
||||
map $http_user_agent $bad_bot {
|
||||
default 0;
|
||||
~*\{.*\: 1; # ShellShock
|
||||
#~(?i)([a-z0-9]{2000}) 1;
|
||||
~(?i)(archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) 2;
|
|
@ -0,0 +1,4 @@
|
|||
location /blackhole/blackhole.dat {
|
||||
satisfy any;
|
||||
deny all;
|
||||
}
|
|
@ -10,20 +10,25 @@ Header set "Content-Security-Policy" "upgrade-insecure-requests"
|
|||
Redirect "/fr/blog/urbackup_client_gui_debian" "/fr/sys/debian/urbackup-client-gui/"
|
||||
Redirect "/fr/?post/Du-bon-usage-sécurisé-de-GPG" "/fr/sec/ssh/configuration-securisee/"
|
||||
|
||||
Redirect "fr/dev/php/sitemap_gz" "fr/dev/php/sitemap-gz/"
|
||||
Redirect "/fr/dev/php/sitemap_gz" "/fr/dev/php/sitemap-gz/"
|
||||
|
||||
Redirect "/fr/securite/gpg/gpg_errors" "/fr/sec/gpg/gpg-erreurs/"
|
||||
RewriteRule "^/fr/securite/(.*)" "/fr/sec/$1" [R]
|
||||
Redirect "/fr/securite/" "/fr/sec/"
|
||||
|
||||
Redirect "/fr/sys/debian/urbackup_client_gui" "/fr/sys/debian/urbackup-client-gui/"
|
||||
|
||||
Redirect "/fr/systeme/android/flash-rockchip-4.4" "/fr/sys/android/flash-rockchip/"
|
||||
Redirect "/fr/systeme/android/synchronisation-xiaomi-nextcloud" "/fr/sys/android/synchronisation-xiaomi-nextcloud/"
|
||||
Redirect "/fr/systeme/debian/urbackup_client_gui" "/fr/sys/debian/urbackup-client-gui/"
|
||||
Redirect "/fr/systeme/openbsd/config-smtpd" "/fr/sys/openbsd/smtpd-config-auth/"
|
||||
Redirect "/fr/systeme/openbsd/mount_crypt_hd" "/fr/sys/openbsd/mount-crypt-hd//"
|
||||
Redirect "/fr/systeme/openbsd/vm-debian" "/fr/sys/openbsd/vm-debian-stretch/"
|
||||
RewriteRule "^/fr/systeme/(.*)" "/fr/sys/$1" [R]
|
||||
Redirect "/fr/systeme/" "/fr/sys/"
|
||||
|
||||
Redirect "/fr/web/perishablepress-6g-pour-nginx" "/fr/web/nginx/perishablepress-6g/"
|
||||
Redirect "/fr/web/perishablepress-blackhole-pour-les-mauvais-robots" "/fr/web/nginx/perishablepress-blackhole/"
|
||||
RewriteRule "^/web/(.*)" "/fr/web/$1" [R]
|
||||
|
||||
# Brotli
|
||||
|
|
Loading…
Reference in New Issue