自前のサーバーでブログを開設した途端、世界中から怪しい攻撃が来た話にもあるように、EC2インスタンスは常時攻撃にさらされます。
tl; dr
- 攻撃試行は回避できないが、導入されていないツールへの試行はさほど害はない。(ログが見づらくなるくらい)
- たとえばブログサイトを開設する場合、まずS3, GCSなどサーバを構築しないサービス(はやりの言葉だとサーバレスですね)で提供できないか検討する
- サーバを構築する場合、構築中はSecurity Group, Firewall rulesなどで自分以外からのアクセスをブロックし、公式ドキュメントにのっとって安全な設定ができてから一般公開しましょう
そもそも攻撃試行が来ないようにしたい
無理です。インターネット上では常時大量のbotたちが脆弱性を探しています。IPアドレスで総当たりで攻撃していると思われるので、インターネット上にサーバがある以上どうしても避けられないと考えるべきです。
攻撃の試行があるのはしょうがないとして、ここではブログを開設するとして、どのように対策したら攻撃が成功しないか考えてみます。いくら攻撃試行があっても、成功しなければログが汚くなるくらいしか影響がありません。
攻撃が成功すると何がよくないのか
先述の通り、導入されていないツールやミドルウェアへの攻撃は過度に恐れる心配はありません。では、実際に攻撃が成功してしまった場合どんな悪影響があるのでしょうか。以下に代表的な例を挙げてみます。
- ページの改ざん:たとえばCMSへの不正ログインが成功してしまった場合、ページが改ざんされる可能性が高いでしょう。そこでウィルス配信などが行われると目も当てられないことになります。
- 攻撃の踏み台になる:攻撃された場合でも、見た目ではなにも変わらないものの、他のサーバやシステムに侵入するための足場にされることがあります。これをやられると、あたかも自分のサーバが伏せアクセスしていることになってしまい、あらぬ疑いをかけられてしまいます。
まずサーバなしでなんとかならないか
サーバを立てること自体が主目的でなければ、サーバを立てずになんとかすることを検討しましょう。サーバを立てなければ、攻撃を受ける面も少なくなります。
サーバを立てる場合でも、PHP, Rubyなどを有効化しなければ、攻撃を受けるリスクを軽減できます。サーバ上で動かすプログラムはなるべく最小限にしましょう。
ブログを開設するとして、サーバ上で動かすシステムではなく、hugoなどのように、ローカルで静的なHTMLを生成してサーバは静的なファイル送信だけというブログシステムもあります。
静的なファイルの配信だけで完結するのであれば、AWSならS3、GCPならGCSなどで十分かもしれません。
サーバを立てる場合にどうしよう
検討した上でサーバが必要ということになった場合、何に気をつけたらよいでしょうか。
まず、構築途中のサーバに注意しましょう。構築中のサーバは設定やパスワードがデフォルトのままだったりするので、攻撃が成功しやすい状態といえます。実際攻撃のログを見てみると、不適切な設定になっているサーバからデータを抜き出そうとするような攻撃が多いです。
設定方法はツールの提供元サイトにベストプラクティスが書かれているはずなので、それを参考にしてください。(先人たちのブログはもしかしたら古い情報かもしれません)
ちょっとの間だけなら大丈夫、と思っても人間の「ちょっとの間」はコンピューターにとっては十分長い時間です。
構築中はSecurity Groupで一時的にアクセス元IPアドレス制限をかける(作業途中にIPアドレスが変わったら少し面倒ですが、都度変更します)など、グローバルに接続できないようにするのが安全です。その上でOSのパッケージ更新や設定修正などを行い、一通りの設定ができた段階で一般公開します。
お金がある人はApplication Load BalancerやCloudFrontにAWS WAFとマネージドルールを導入することで、よく知られた攻撃はブロックできますが、結構高いので個人だと難しいかもしれません。
まとめ
ウェブサーバが攻撃試行を受けるのは、規模にかかわらずインターネットに公開している以上避けられません。
まず自分でサーバを立てないという選択肢を選べないか考えましょう。その上でサーバを構築するのであれば、インターネットに公開できる準備ができるまでは外からアクセスできないようにしておきましょう。
サーバ上でブログツールなどのプログラムを動かすのであれば、公式ドキュメントを参考に構築しましょう。
Note
気をつけるべきことは他にもあるのですが、全部網羅するのは難しいので概要の紹介だけになります。
思い出したら追記するかもしれません。こういうことを書いてほしいとかあれば、コメントください。