忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/05    04« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  »06

nginx に接続元制限をかける

会社で少し話題になったので nginx で接続元制限をかける手順をごりごり確認する。

接続元制限をかける

Module ngx_http_access_module に詳しく書いてあるので、こちらを読もう。試しに以下のように設定してみる。実行する前に ifconfig (Windows なら ipconfig) コマンドを実行し、自分の持っている IP アドレスを確認しておく。これを試した時点では 192.168.1.17 だった。なので、 nginx.conf に次のように記述する。

server {
        # 中略

        location /google {
                proxy_pass      https://google.com;
                allow 192.168.1.17/32;
                deny all;
        }
}

以上の設定をしたうえで nginx を再起動 (私の手元は ubuntu なので service nginx restart )。http://localhost/google に手元からつなぐと127.0.0.1 からのアクセスと見られて403 が返ってくる。
http://192.168.1.17/google に手元から繋ぐと問題なく google に転送される。ただし、手元のスマートフォンから同じところにアクセスを試みると192.168.1.17からのアクセスではないので 403 が返ってくる。なお、上の記述だと /google のみに設定しているので他には localhost からでも問題なくつなげる。

エラー画面を設定する

nginx デフォルトの 403 画面は可愛くないのでかわいいのに変更する。

server {
        # 中略
        error_page 403 /forbidden.html;
        location = /forbidden.html {
                root /tmp;
                internal;
        }

        location /google {
                proxy_pass      https://google.com;
                allow 192.168.1.17/32;
                deny all;
        }
}

さらに /tmpforbidden.html を配置し、かわいい内容を書いておく。この上でhttp://localhost/googleにアクセスを試みると /tmp/forbidden.html の内容が表示されるはずである。

internal を入れたことによってどんな影響があるのかは http://localhost/forbidden.html にアクセスしてみると分かる。/tmp/forbidden.html の内容ではなく 404 が返ってくる。詳しい話は Module ngx_http_core_module に記載されている。error_page についてはあまり説明はいらない気がするが Module ngx_http_core_module に同様に記載がある。

特定のページにアクセスしたらエラーページすら返さず切断させる

nginx には return なる機能があると Module ngx_http_rewrite_module にはある。これによると Stops processing and returns the specified code to a client. The non-standard code 444 closes a connection without sending a response header. (処理を停止し、特定の HTTP ステータスコードをクライアントに返す。HTTP ステータスコードのルールに存在しない 444 を返そうとした場合、レスポンスヘッダの返答もなく接続を断ち切る)。最初に設定した接続元制限で接続を拒絶した場合に 403 すら返さず接続を切断してみる。

server {
        # 中略
        error_page 403 =444 /forbidden.html;
        location = /forbidden.html {
                return 444;
        }

        location /google {
                proxy_pass      https://google.com;
                allow 192.168.1.17/32;
                deny all;
        }
}

もちろん、418 とか 451 とかを返すこともできる。返したいかはともかくとして。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R