先週末にスタバでくつろぎながらブログを更新しようとしたところ、ブログの管理画面が表示されないことに気が付きました。
管理画面へのアクセスができないと同時に公開しているブログも表示できない状況となっていたので慌てて対策を打ちました。
多分VPSでサーバを立てている方は一度は経験されているかと思いますが、これからVPSを借りてサーバを立ち上げてブログを始めて見る方向けの参考になればと思い記事にしてみました。
事象と対策
事象
今回、ブログが表示できなくなっていたのは中国のとあるサーバから断続的にアクセスが発生したことが原因でした。
攻撃といっても秒間何万回といった膨大なアクセス量ではなかったのですが、サーバのスペックを最低限に抑えていたためちょっとした連続アクセスが有るとブログで記事を表示できない状況に陥っていました。
ブログの環境
- さくらのVPS
- CentOS
- ファイアウォールにはfirewalldを利用
取った対応
とりあえず、OSのFirewallで該当のIPアドレスからのアクセスをシャットダウンしました。
# 攻撃元のIPを恒久的に遮断 firewall-cmd --zone=drop --permanent --add-source=xxx.xxx.xxx.0/24 # 遮断設定を有効化するためにサービスを再起動 systemctl restart firewalld.service # 遮断設定が有効であることを確認 firewall-cmd --get-active-zones
上記のコマンドで対象のIPアドレスを含む周辺のIPアドレスを一律で遮断しました。根本的な対策ではないですが、トラフィックは下げることができましたので、一時しのぎとしては問題ないかと思います。
ただ、上記のコマンドはサーバの管理者権限がないと実行できないので、VPSなど、OSから管理できるサービスを利用している場合に限られます。
コマンドの意味がわからずに実行すると外部からのアクセスを一切受け付けなくなるので、ある程度調べた上で対策を行ってください。
自分の場合、2つ目のサービス再起動についてはすぐに行わなかったので、攻撃が止まらず少し焦りました。ただ、これもググったらすぐに答えがわかりました。
3つ目のコマンドで有効性を確認します。
下記のように反応があれば遮断が有効になっています。
firewall-cmd --get-active-zones # コマンド実行後、dropのリストに設定した情報が含まれていることを確認する drop sources: xxx.xxx.xxx.0/24 ・・・ public interfaces: eth0
事象の時系列
なにかの参考と備忘用に時系列もまとめておきます。
時系列(2020年3月20日)
- 15:55 ブログに繋がらなくなったことを確認
- 15:56 サーバへのアクセスは可能、アカウントの乗っ取りにはあっていないことを確認
- 16:00 サーバの再起動 ブログ復旧
- 16:00 yumでインストール物の最新化
それでも攻撃が続いていることをhttpd のアクセスログを確認。特定のIPアドレスから攻撃を受けていることを確認。今回取ったのはfirewalldで対象のIPをガッツリ切断。すぐには攻撃が収まらなかったが、これはサービスの再起動が漏れていたことによるのを確認。 - 16:25 firewalldサービスを再起動。対象のIPからのアクセスを一切切り落とした。
- 16:35 管理コンソール上でも負荷が落ちたことを確認。一旦、攻撃を止めることに成功。
- 16:50 次なる攻撃への対処を考え中。←今ここ
まとめ
個人がブログ運営で借りているサーバだと乗っ取りに合うなどの被害が出ない事が重要なのです。今回もまずはそれを疑い、初動確認を行いました。
その後、攻撃を一時的にでも止めるという対策をこの記事に書いた方法で行いました。
根本的にはwordpressの脆弱性となるポイントがいくつかありますのでその穴を防ぐことも必要になります。ある程度の対策をとっていても攻撃側が新たな脆弱性をついてくるので、いたちごっこになってしまうのは受け入れています。
これが仕事でのことであったらこんな悠長なことはやっていられませんが、趣味レベルであればこの程度の対策で問題ないかなと思います。
サーバを管理される際にはくれぐれも自己責任でお願いします。乗っ取りを食らって、他に悪さをされるとことも想定した上で日々の管理を怠らないでくださいね。