CMSへの分散ブルートフォースアクセスから保護する簡単な方法

すべての良い一日。

Rusonixチームは電気に関する問題を解決し、 「ホストの観点からのCMSへの分散ブルートフォース攻撃」についての美しい写真を掲載しすばらしい投稿を書きました。

ただし、不足していることが1つあります。実際の実装です。



したがって、この投稿の目標:



興味があれば、私はhabrakatを求めます。



念のため、戦いの目標を繰り返しましょう。





ロジック:

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)'); }
      
      







可能な改善:





まあ、いつものように:PMのタイプミス、コメントの質問/追加/改善。

リンク: Nginx limit_req_moduleカーネルプロキシに関する基本的なこと。



最後まで読んでくれてありがとう!

-よろしく、

ラズトフアレクサンダー



PS

アクティビティの種類ごとに、サーバーソフトウェアやその他のシステム管理の設定にあまり深く関わっていないため、このソリューションはドラフトと見なしますが、運用環境ではしばらく機能していました(その後、管理パネルの名前を変更しました)。



All Articles