Rusonixチーム
ただし、不足していることが1つあります。実際の実装です。
したがって、この投稿の目標:
- Nginxの記事に記載されているスキームの実装のスケッチ+ php形式の小さなバックエンド。
- よりきれいなソリューションを見つける
興味があれば、私はhabrakatを求めます。
念のため、戦いの目標を繰り返しましょう。
- CMS管理者へのアクセスを制限して、大量ボットによるパスワードのクラッキングを防止します
- インターネットユーザーの最愛の
生きている人々に不便はありません - 解決策は普遍的かつ質量でなければなりません
ロジック:
0. Nginxは最も一般的なフロントのように機能します。 Apacheと他のすべてが背後にあります。
1.特定の制限を超えた場合、ユーザーに何かをする必要があるフォームを表示し(私の場合は、ボタンをクリックするだけ)、それによってユーザーであることを証明します。
2.将来的には、人を遅滞なく通過させます。
決定は単純で、すべてのコメントが途中にあることが判明しました。
# . limit_req_zone $binary_remote_addr zone=one:10m rate=5r/m; server { # ... root /var/wl-web; recursive_error_pages on; # error_page @limit -> @wlgui; location / { #... } # . location @wlgui { # fpm, . internal; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root/wlgui.php; fastcgi_intercept_errors on; include fastcgi_params; } # . "" location ~* /(i|i2)\.html$ { # "" 503 (c 1.3.15 ) #limit_req_status 516; error_page 503 = @limit; # . @limit limit_req zone=one nodelay; # , . # . URI, . proxy_pass http://127.0.0.1:8080$request_uri; proxy_set_header Host $host; # } # location @limit { internal; # , . if ($cookie_wlsid ~* [^af\d]) { return 503; } # , =( #error_page 516 @backend; #try_files /wl/$cookie_wlsid.cookie /wl/$remote_addr.ip /wl/$remote_addr-$host.iph @wlgui; #if ($uri ~* /wl/[az\d]+\.cookie ) {return 516;} # .. "". # (. ), . If is Evil, i know.... error_page 516 = @wlgui; if ( !-f $document_root/wl/$cookie_wlsid.cookie) {return 516;} # ! . proxy_pass http://127.0.0.1:8080$request_uri; proxy_set_header Host $host; # } }
Cookieの値と同じ名前の空のファイルを作成して、Cookieを「承認」する非常に単純なwlgui.php。
(/ var / wl-webにwlフォルダを作成し、それに適切な権限を設定することを忘れないことが重要です)
<?php if (!empty($_POST['wlsec'])){ # , . $cookie=md5(uniqid()); setcookie('wlsid',$cookie,time()+3600*24*90/*90d*/); touch ('/var/wl-web/wl/'.$cookie.'.cookie'); echo "Done! Please, refresh the page! (setting {$cookie})"; } else { ?> <form method="POST"> <input name="wlsec" value="GetAccess" type="submit"> </form> <?php echo "<br> Your cookie:".(isset($_COOKIE['wlsid'])?htmlspecialchars($_COOKIE['wlsid']):'(not set)'); }
可能な改善:
- 解決策は曲がっています、私はまだカットすることがまだあると確信しています
- GETにこれらの制限を適用しないでください(物議を醸す)
- 王冠で、古い認可されたクッキーでフォルダをきれいにします
- 許可されたCookieを含むフォルダーには多くのファイルが含まれます。FSサーバーの場合、これはあまり良くありません。 rozhikの ソリューション 、
- 私の承認者は非常にシンプルで、キャプチャ、SMS、メールなどを(必要に応じて)追加できます。
- ifIsEvil 、それなしで試す必要があります(まだ解決策はありません)
- 認証ページを無視することを禁止します。 (最も簡単なことは、ログに書き込み、それらのボットを殺すことです、カットの支持者| uniq |ソートは非常に幸せになります)
まあ、いつものように:PMのタイプミス、コメントの質問/追加/改善。
リンク: Nginx limit_req_module 、 カーネルとプロキシに関する基本的なこと。
最後まで読んでくれてありがとう!
-よろしく、
ラズトフアレクサンダー
PS
アクティビティの種類ごとに、サーバーソフトウェアやその他のシステム管理の設定にあまり深く関わっていないため、このソリューションはドラフトと見なしますが、運用環境ではしばらく機能していました(その後、管理パネルの名前を変更しました)。