サーバーセキュリティについて
# 不正アクセスのIPアドレス拒否について
2006年からエンジニアの仕事をしておりますが、以前に比べてボットなどによる悪意のあるアクセスが急増したように思います。
さらに難しいことに、不正アクセス自体は昔からあったのですが、ログを確認する限り、多くの不正アクセスはAWSやGoogle Cloudなどのクラウドサービスを使ってのアクセスとなるため、IPアドレスを拒否したところですぐにIPアドレスを変更することができ、かつ拒否したIPはなんの関係もない別のユーザーのサーバーに割り当てられる可能性があります。
このため、私の場合は(手間ではありますが)IPアドレスを拒否する際に毎回IPアドレスを逆引きしてホスト名を確認してからIPアドレスを拒否するようにしています。
いずれにせよ、IPアドレスの拒否は補助にしかならないというのが個人的な実感です。
# 不正なURLへのアクセスについて
IPアドレスの拒否に続いて、不正アクセス対策として必須なのはURLベースの設定です。
いくつかの種類に分けて説明します。
# WordPress関係のURL
WEBサーバーに対する攻撃の多くは基本的な攻撃となります。
WordPress
の脆弱性を狙った不正アクセスというのは非常に多いのですが、これはおそらくWordPressのシェアが大きいこと、完全にオープンソースであることに加えて、セキュリティに無頓着な初心者ユーザーも多く使っているのが理由なのではないかと思います。WordPressの脆弱性を狙った多くの攻撃はWordPressを常に最新版に保つことに加えて、基本的な対策を行うことでかなりの部分、防御することが可能です。
さらにWordPressを利用していない場合はこれらのパスは無条件にアクセス禁止とすることも検討しても良いかもしれません。
実際には私自身はWordPressを使わないケースも多いので、そのような場合はWordPress関係のURLはできる限りすべて拒否するようにしています。
具体的には下記のようなものとなります。
/wp-content/
/wp-includes/
/wp-admin/
wp-*
xmlrpc.php
wlwmanifest.xml
もちろん、WordPressを利用しているサーバーであれば適宜、設定を調整する必要がありますが、wp-config.php
やxmlrpc.php
(使わない場合)に関してはやはりサーバー側のレイヤーでアクセス拒否すべきかと思います。
# 使っていない拡張子
使っていない拡張子も拒否すべきです。特に不正アクセスの場合、拡張子がphpのファイルが狙われやすい気がします。
私の場合は php
, cgi
, asp
, aspx
を拒否しています。
# ドットファイル
.git
、.env
はとてもよく狙われますので、これらのアクセス拒否は必須です。
私の場合、.git
,.htaccess
,.htpasswd
,.env
,.svn
,.aws
を拒否しています。
# その他
他にもアクセスログを見て適宜調整していますが、例として下記の文字を含むURLは基本的にすべて拒否しています。
fapi
bapi
aws
api/v
(api/v1/...など)phpmyadmin
mysql
shell
admin
# セキュリティに強い設計
セキュリティ対策はサーバーのみではなく、アプリケーション側でも積極的に行うべきだと思います。
WordPressなど何らかのアプリケーションを利用している場合は極力、常に最新のものを使うべきです。また、不正アクセスの大半は基本的な対策のみで回避することが可能です。どのようなアプリケーション構成にするにせよ、SQLインジェクション
、OSコマンドインジェクション
、パスワードクラック
などの基本的な知識は常に考慮してプログラムを組むべきだと思います。