VPSをDDoS攻撃から守る方法
分散型サービス拒否(DDoS)攻撃は、サーバーやそのネットワーク回線を大量のトラフィックで溢れさせ、実際の利用者がアクセスできない状態にします。攻撃の規模がサーバー単体では処理しきれないほど大きい場合もあるため、防御は多層的に行うのが効果的です。まずネットワークのエッジでフィルタリングを行い、その後にVPS側のファイアウォールやアプリケーションの設定で対策します。ONIEはホーチミン市のクラウドサーバーでDDoS Shieldによるエッジ防御を追加料金なしで提供しており、DDoS保護付きのVPSを数分でデプロイすることもできます。
攻撃の種類
- ボリューメトリック攻撃(レイヤー3・4): ネットワーク回線を埋め尽くすパケットの大量送信です。例としてUDPフラッドがあります。
- プロトコル攻撃: 接続処理の仕組みを悪用する攻撃です。接続テーブルを埋め尽くすSYNフラッドなどが該当します。
- アプリケーション層攻撃(レイヤー7): 正規に見えるHTTPリクエストを大量に送り、Webサーバーやデータベースを疲弊させる攻撃です。
攻撃の種類ごとに必要な防御は異なります。ボリューメトリック攻撃はサーバーに届く前に遮断する必要があります。アプリケーション層の攻撃は、サーバー側で負荷を抑えることができます。
1. ネットワークのエッジでフィルタリングする
エッジでのフィルタリングは、不正なトラフィックをVPSに到達する前に破棄するため、回線が飽和するのを防ぎます。DDoS ShieldではXDP/eBPFを使ってネットワークのエッジでフィルタリングが行われ、コンソールではIPアドレスごとのトラフィックと攻撃イベントを確認できます。検討しているプロバイダーには、何が含まれるのか、どこでフィルタリングが行われるのか、追加料金がかかるのかを必ず確認してください。
2. 使わないものは閉じる
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enableデータベースや管理パネルをインターネットに公開しないでください。127.0.0.1 またはプライベートネットワークにバインドしてください。
3. SYNフラッドに備えてカーネルを調整する
多くのディストリビューションではSYNクッキーがデフォルトで有効になっています。次のコマンドで確認できます。
sysctl net.ipv4.tcp_syncookiesその他のカーネル設定の変更は最小限にとどめ、必ずテストしてください。誤った値を設定すると、通常のトラフィックに悪影響を与える場合があります。
4. Nginxでリクエストのレート制限を設定する
http ブロックに記述します。
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connperip:10m;server または location ブロックに記述します。
limit_req zone=perip burst=20 nodelay;
limit_conn connperip 20;設定を反映するには sudo nginx -t && sudo systemctl reload nginx を実行します。静的ファイルはキャッシュから配信し、WordPressではキャッシュプラグインを使うとリクエストごとの負荷を抑えられます。詳しくはNginxでWordPressをインストールするを参照してください。
5. トラフィックを監視する
ss -s
sudo ss -ntu state established | wc -l
sudo apt install -y nload && nload接続数や帯域幅が急増したり、CPU使用率は低いのにサーバーが遅くなったりする場合は、攻撃の可能性があります。早期に気づけるようアラートを設定してください。
6. インシデント対応チェックリスト
- コンソールで、トラフィックが攻撃なのか実際のアクセス増加なのかを確認します。
- 攻撃イベントと攻撃を受けているIPアドレスを確認します。
- 特定できる不正な送信元アドレスやアドレス範囲をブロックします。
- より厳しいレート制限を有効にするか、メンテナンスページを表示します。
- 発生時刻とIPアドレスを添えて、プロバイダーのサポートに連絡します。
- 事後にログを確認し、この対応計画を更新します。バックアップとスナップショットも最新の状態に保ってください。
よくある質問
VPS上のファイアウォールだけで大規模なDDoSを防げますか?
単独では防げません。トラフィックがネットワーク回線を埋め尽くしている場合、サーバー側でフィルタリングすることはできません。サーバーより上流でフィルタリングする仕組みが必要です。
CDNは効果がありますか?
Webサイトの場合、CDNやリバースプロキシがWebトラフィックを吸収できます。ただし、実際のサーバーのIPアドレスがDNSやメールヘッダーで公開されていないことが前提です。
DDoS保護のために特別なプランが必要ですか?
プロバイダーによって異なります。ご利用のプランと設置場所に何が含まれているかを確認してください。