はじめに
Nginxを初期状態でインストールするとドメイン名でもIPアドレスでもアクセスができます。
しかしIPアドレスでアクセスができる状態で放置しておくと、
IPアドレスで総当りで「なにか」を調べようとしているのか、
ありえないような国からのアクセスがやたらきます。
まあ、サーバを公開している人なら誰しもが経験するかと思います。
ロ○アとか中○人民共和国とかはザラで、ブ○ジル、ウ○ライナなどなど。
Seychelles(セーシェルと呼ぶらしい)という聞いたことないところのアクセスログもありました。
踏み台にでもされているんですかね。単にIPがそこのというだけでしょうか。
cat /var/log/nginx/access.log
xx.yy.77.139 - - [25/Aug/2019:14:59:58 +0900] "GET /robots.txt HTTP/1.1" 404 169 "-" "-" "-"
xx.yy.77.139 - - [25/Aug/2019:14:59:58 +0900] "GET /sitemap.xml HTTP/1.1" 404 169 "-" "-" "-"
xx.yy.77.139 - - [25/Aug/2019:14:59:59 +0900] "GET /.well-known/security.txt HTTP/1.1" 404 169 "-" "-" "-"
xx.yy.77.139 - - [25/Aug/2019:15:00:00 +0900] "GET /favicon.ico HTTP/1.1" 404 169 "-" "python-requests/2.13.0" "-"
xx.yy.53.14 - - [25/Aug/2019:15:29:33 +0900] "GET / HTTP/1.1" 403 571 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" "-"
Google先生に聞いてみるといくつか方法が出てきますが、
私が実際に使って動いたものをメモしておきます。
方法1
よくあるシンプルなやつ(だと思う)
/etc/nginx/nginx.confの最後に
server {
listen 80 default_server;
server_name 8.8.8.8;
return 444;
}
を追加する。
8.8.8.8
はNginxを起動しているサーバのIPアドレス。
これが一番シンプル(と思う)
方法2
参考:http://beniyama.hatenablog.jp/entry/2015/04/05/100000
IF文でドメイン以外を444へ (例:google.com以外へのアクセス拒否)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name google.com;
if ($host != "google.com"){
return 444;
}
とあるプロジェクトに関わったときに使用されていたのはこれに近かった。
こちらのほうがわかりやすかったので参考元のを記載。
参考元の方も言及されていますが
server_name を指定しているのにもう一度チェックしていて若干冗長な感じ
が否めないですね。