WEBサーバーに限った話ではありませんが、ネット上にサービスを公開していると必ず攻撃を受けます。
WEBサーバーの場合は、Googleなどの検索サイトに一切インデックスされていない状態でも攻撃は受けます。
当サーバーの場合、一番多いのはxmlrpcの脆弱性を狙った攻撃ですが、既にNGINXでxmlrpc.phpへのアクセス制限を施してあり、アクセスを試みてもステータスコード444を返すように設定済みです。
しかし、それでもxmlrpc.php目当てにアクセス数が一秒間に数十回とかアクセスしてくるので、サーバーに負荷が掛かってしまうため、予期せぬサーバーダウンや他の正当なユーザーに対してのレスポンスが遅くなってしまうといった可能性もあり、決して放置して良いという訳にはいきません。
そこで今回は、この手のアクセスをすっぱり遮断してしまおうという対策を施します。
調べてみるとIPアドレスによる制限方法などが紹介されていたりしますが、正直IPアドレスなんて変えることができてしまうので、またすぐ他のIPアドレスに変更して攻撃を仕掛けてきます。
それに、今までの様に不正アクセスしてきたIPアドレスをいちいちブラックリストに追加するといったことも、正直面倒すぎてやってられませんでした。
今回行う対策は、IPアドレス直打ちでアクセスしてくるアクセスをすべて弾くという方法になります。
IP直打ちアクセスとは、ドメインではなくIPアドレスでアクセスする事ですね。
IPアドレスは数字列で意味を持たないので覚えにくく、そのためにドメインがあるわけでして、わざわざIPアドレスでアクセスするメリットなんてありません。
ですが、攻撃する側のメリットとしては使用するアドレスは数字だけなので、適当に総当たりすれば何かしらどこかのサーバーにヒットするということです。
IP直打ちのアクセス拒否には賛否両論あるかとは思いますが、当サーバーではIP直打ちのアクセスを許可する必要性はないと判断しました。
それに当サーバーは動的IPで運用してるので、何かしらのタイミングでIPアドレスが変わってしまいます。
そのためにダイレクトDNSで名前解決を施しているので、なおのことIPアドレスでアクセスする意味なんてありません。
と、いうことで、実際にNGINXでIP直打ちのアクセスを全拒否していきます。
/etc/opt/kusanagi/nginx/conf.d/プロファイル名.confを開き、serverディレクティブ内のlistenを書き換えます。
1 2 3 4 |
server { #listen 80; listen 80 default_server; #←この様に書き換え } |
同じディレクティブの最後に以下を追記します。
1 2 3 4 5 |
server { #IP直打ちアクセス拒否(444コネクション切断) server_name _; return 444; } |
これらの記述が終わったらNGINXを再起動します。
1 |
# kusanagi nginx |
これでIP直打ちでのアクセスに対して全てステータスコード444を返すようになります。
ですので、このコードを返すことにより、サーバーへの負荷を最小限に抑えることが可能となります。
当サーバーはこの設定を施してから、脆弱性スキャン系のアクセスに対してはすべて444コードを返すことができています。
そして大体のBotは、サーバーの存在確認ができなかった場合は、それ以降アクセスはしてこないようなので、これでセキュリティ面は安心できそうですね。
コメント