Nginxを使用して紹介スパムをブロックする方法は?
-
19-08-2019 - |
質問
Nginxサーバーの下で2つのmongrelsを実行しています。存在しないファイルの要求を取得し続けます。 IPアドレスは頻繁に変更されますが、参照URLは変わりません。これを解決したい。
解決
https://calomel.org/nginx.html
ほとんどの<!> quot;リファラースパム<!> quot; -<!> quot;問題よりも厄介なこと<!> quot;
nginx.conf
## Deny certain Referers (case insensitive)
## The ~* makes it case insensitive as opposed to just a ~
if ($http_referer ~* (babes|click|diamond|forsale|girl|jewelry|love|nudit|organic|poker|porn|poweroversoftware|sex|teen|video|webcam|zippo))
{ return 403; }
他のヒント
Nginxの使用マップモジュールは、リストが長くなるにつれて、もう少し効率的で管理しやすくなります。
これをhttp {}ブロックに追加します:
map $http_referer $bad_referer {
hostnames;
default 0;
# Put regexes for undesired referers here
"~social-buttons.com" 1;
"~semalt.com" 1;
"~kambasoft.com" 1;
"~savetubevideo.com" 1;
"~descargar-musica-gratis.net" 1;
"~7makemoneyonline.com" 1;
"~baixar-musicas-gratis.com" 1;
"~iloveitaly.com" 1;
"~ilovevitaly.ru" 1;
"~fbdownloader.com" 1;
"~econom.co" 1;
"~buttons-for-website.com" 1;
"~buttons-for-your-website.com" 1;
"~srecorder.co" 1;
"~darodar.com" 1;
"~priceg.com" 1;
"~blackhatworth.com" 1;
"~adviceforum.info" 1;
"~hulfingtonpost.com" 1;
"~best-seo-solution.com" 1;
"~googlsucks.com" 1;
"~theguardlan.com" 1;
"~i-x.wiki" 1;
"~buy-cheap-online.info" 1;
"~Get-Free-Traffic-Now.com" 1;
}
これをサーバーの{}ブロックに追加:
if ($bad_referer) {
return 444; # emtpy response
}
それは私のために働いた。
以前は、ファイアウォールが単独で解決できる他のarbitrary意的なルールの代わりに、行動に基づいて人々をブロックする必要があった同じような状況にありました。
この問題を回避する方法は、私のロジック(あなたの場合はRails)にブロッキングを行わせることでした...しかし、長い道のり:
- ロジックでブロックリストを改行で区切られたプレーンテキストファイルとして維持します。
- ルートとしてbash(または他の)スクリプトを作成してこのファイルを読み取り、そのリストをファイアウォールのブロックリストに追加します
- 再度、rootとしてスクリプトを呼び出すcronジョブを作成します
(ファイアウォール設定を変更するためのDjangoパーミッションを単に与えるのではなく)このように私がそれを行う理由は、単にセキュリティです。私のアプリケーションがハッキングされた場合、他の何かを傷つけたくありません。
bashスクリプトは次のようなものです:
exec < /path/to/my/djago-maintained/block-list
while read line
do
iptables -A INPUT --source $line/32 -j DROP
done
ブラックリストの着信IPをチェックするためのモジュールを作成しました https://github.com/oneumyvakin/ngx_http_blacklist_lookup_module
は、projecthoneypot.org、blocklist.de、およびuceprotect.netのブラックリストを使用しています