日本国外からのPOSTを拒否するNginx設定
自動でPOSTするスパムボットの対象になってしまったので対応したときの覚書。 WEBサーバーは海外からのアクセスのうちPOSTだけ拒否する方針でその方法を調査。 環境: CentOS Stream 9, Nginx 1.20.1 既に日本のIPアドレスの一覧はファイル化してある。 参考: nginxで国単位のIPアドレス制限 1. limit_except でHTTPメソッド制限 limit_exceptディレクティブ(directive=指示を与えるための要素)を使用すると、指定したHTTPメソッド以外のリクエストに対してアクセス制御ルールを適用できる。 参考: Module ngx_http_core_module Nginxのconf設定に追記する。 location / { ... # Deny POST method limit_except GET { # Include the list of Japanese IP addresses. # If the client's IP/CIDR matches an entry in this list, access is allowed. include conf.d/include/allow/JP.inc; deny all; } ... } Nginx再読み込み。 # nginx -t # systemctl reload nginx この手法のデメリットはIPアドレスの一覧をメンテナンスしないといけないこと。 geoモジュールも検討したけど、Nginxをコンパイルしないといけないので諦めた(パッケージマネージャーの利便性を失いたくない)。 2. 国外からPOSTして動作確認 まず思いついたのはCloud Shellを使う方法。 参考: SSHクライアントとしてのCloud Shell Cloud ...