WEBサーバーに限った話ではないですが、ネット上にサービスを公開していると必ず攻撃を受けます。
WEBサーバーの場合、Googleなどの検索サイトに一切インデックスされていない状態でも攻撃は受けます。
自分のサーバーの場合一番多いのは、phpmyadminの脆弱性を狙った攻撃。
攻撃と言っても、実際にphpmyadminはインストールされていないので脆弱性のスキャンで終わっていますが…
しかし、そのアクセス数が一秒間に数十回と相当大量にアクセスしてくるので、サーバーに負荷がかかってしまい、ほかの正当なユーザーに対してのレスポンスが遅くなってしまう可能性がありますし、決して良いことではありません。
そこで今回は、この手のアクセスをきっぱり遮断してしまおうという作戦。
調べてみるとIPアドレスによる制限方法などが紹介されていたりしますが、正直、IPアドレスなんて変えることができてしまうので、意味はないと思っています。
それに、いちいち不正アクセスしてきたIPアドレスを拒否リストに追加するなんて、面倒すぎてやってられません。
そこで今回行う対策は、IP直打ちでアクセスしてくるアクセスをすべて弾くという方法です。
IP直打ちアクセスとは、ドメインではなくIPアドレスでアクセスする事です。
IPアドレスは数字列で意味を持たないので覚えにくく、そのためにドメインがあるわけで、わざわざIPアドレスでアクセスするメリットなんてありません。
攻撃する側のメリットとしては数字だけなので適当に総当たりすればどこかのサーバーにヒットするということです。
IP直打ちのアクセス拒否には賛否両論あるかとは思いますが、私はIP直打ちのアクセスを許可する必要性はないと判断しました。
それにこのサーバー、実は固定IPで運用しているわけではないので、動的にIPアドレスが変わってしまいます。
なのでなおさらIPアドレスする意味なんてありません。
では、実際にNGINXでIP直打ちのアクセスを全拒否する方法です。
http{この中に記述下記を記述してください}
#IP直打ちアクセス拒否(444コネクション切断)server {listen 80 default_server;server_name _;return 444;}
これを記述したのち、サーバーを再起動もしくはリロードすればIP直打ちのアクセスに対してすべてステータスコード444を返すようになります。
444とはNGINX独自のステータスコードで、クライアントとのコネクションを即座に切断します。
なのでこのコードを返すことにより、サーバーへの負荷を最小限に抑えることが可能となります。
当サーバーはこの設定を施してから、脆弱性スキャン系のアクセスに対してはすべて444コードを返すことができています。
そして大体のBotの場合、サーバーの存在確認ができなかった場合それ以降アクセスはしてこないようです。
たまに馬鹿なBotはサーバーの存在確認ができなかったにも関わらず、そのままスキャンを続行してくるBotもいますが…
私の場合はこの方法できれいに不要なアクセスを拒否することができましたので、是非皆さんもお試しあれ。