🐷
DoSとDDoSの違いとその対策
※本記事は、ChatGPTとの対話をもとに生成AIを活用して執筆していますが、全体の構成と主張は筆者自身の考えによるものです。
こんにちは、今回はWebサービスを運用する上で避けて通れない「DoS攻撃」と「DDoS攻撃」について、基本から対策まで整理してみたいと思います。
DoS攻撃とは?
DoS(Denial of Service)攻撃は、サーバーやネットワークに対して大量のリクエストやデータを送りつけ、サービスを利用不能にする攻撃手法です。
特徴としては、
- 単一のマシンから攻撃が行われる
- 攻撃は比較的単純
- IPアドレスのブロックなどで比較的防ぎやすい
具体例
- 1秒間に数千件のHTTPリクエストを送りつける
- セッションをわざと開いたままにしてサーバーの接続数を使い切る(例:Slowloris)
DDoS攻撃とは?
DDoS(Distributed Denial of Service)攻撃は、DoS攻撃を多数の端末から同時に仕掛ける手法です。
特徴としては、
- ボットネットと呼ばれる感染端末のネットワークを使う
- 攻撃元が世界中に分散しているため、検知・防御が非常に困難
- アクセスが正規に見えるため、通常のWAFでは対処しきれないことも
具体例
- 数千〜数百万台の端末が同時にWebサイトにアクセスしてトラフィックを飽和させる
- IoT機器や家庭用PCを乗っ取って攻撃を実行する(例:Miraiボットネット)
DoSとDDoSの違いまとめ
項目 | DoS | DDoS |
---|---|---|
攻撃元 | 単一 | 複数(分散) |
攻撃規模 | 小〜中 | 大規模 |
防御の難易度 | 比較的低い | 非常に高い |
特徴 | リクエストが集中する | 正規アクセスのように見える |
対策方法まとめ
1. レートリミット
- 一定時間内のアクセス数を制限し、異常アクセスを防止
- DoSには有効。DDoSでは部分的にしか効果がない
2. IPフィルタリング / Geoブロック
- 明らかに異常なIPや、特定の国・地域をブロック
- 攻撃元が限定されている場合に有効
3. CDN(Content Delivery Network)の利用
- Cloudflare, Akamai などでアクセスを分散・バッファリング
- 大量アクセスを受けても元のサーバーを守れる
4. WAF(Web Application Firewall)
- 不正リクエストのパターンを検知して遮断
- アプリケーション層での攻撃にも対応可能
5. DDoS対策サービスの導入
- AWS Shield, Azure DDoS Protection, Google Cloud Armorなど
- 専用の大規模防御ネットワークを利用して攻撃を自動緩和
6. Anycastルーティング
- 地理的に分散した複数のデータセンターにリクエストを分散
- 単一地点へのトラフィック集中を回避
Node.jsでのレートリミット基本実装(Express)
DoS攻撃対策の第一歩として、Node.jsアプリでレートリミットを導入するのは効果的です。ここでは、Expressと express-rate-limit
を使ったシンプルな実装例を紹介します。
インストール
npm install express express-rate-limit
実装例
import express from 'express';
import rateLimit from 'express-rate-limit';
const app = express();
// IPごとに1分間に100回までのアクセスを許可
const limiter = rateLimit({
windowMs: 60 * 1000,
max: 100,
message: 'Too many requests from this IP, please try again later.',
});
app.use(limiter);
app.get('/', (req, res) => {
res.send('Hello, rate-limited world!');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
補足
- IPアドレスをもとにレートリミットをかけています。
- IPではなく、APIキーやユーザーID単位での制限をかけたい場合は、keyGenerator オプションでカスタマイズ可能です。
おわりに
DoSやDDoS攻撃は年々巧妙化しており、「うちには関係ない」と思っていると、ある日突然大規模な攻撃に見舞われることもあります。
まずはレートリミットやCDNの導入など、できるところから対策を始めてみることが大切です。
Discussion