【Linux】iptablesでUDPのDDoS対策をやってみる【SCP:SL】

こんにちは。なんか急にnote書く気が起きたので、書きました。

DDoSの被害を受けた話

私は去年の11/18ごろから、SCP:Secret Laboratoryというマイナーゲーのサーバー運営を始めました。そこで、一か月足らずで遭遇したのが、DDoS攻撃でした。UDPのため対策が難しく、しまいには800msで人がいなくなる始末。これのせいで2か月以上の時間を費やすことになりました。

詳細

DDoSを軽減することには成功していますが、自宅サーバーなので、800mbpsの帯域が埋められてしまうと結局ラグくなります。Linodeなどを購入すると完全に無効化できるかもしれません。

どうやってDDoSを軽減したのか

初めは、Githubに転がっていた、Yuki-Antiddosというものを使用しました。

使い方はGithubに書いてあるのでそれを見てください。
これ、実は配布されている割には高性能で、使い勝手もいいのでぜひ使ってください。
ですが、これだけだとSCP:SLサーバーはしっかりDDoSの影響を受けてしまいます。なので、さらにiptablesルールを別で作っていきます。

iptablesでは、通信量の制限を付けることができます。

# ipsetのブラックリストを作成
sudo ipset create BlackList hash:ip timeout 300

# カスタムチェーンの作成
sudo iptables -N DDoS-Block
sudo iptables -N DDoS-Detect

# ブロックチェーンにルールを追加(ブラックリストに追加してドロップ)
sudo iptables -A DDoS-Block -j SET --add-set BlackList src
sudo iptables -A DDoS-Block -j DROP

# 検出チェーンにルールを追加
# ブラックリストにあるIPをドロップ
sudo iptables -A DDoS-Detect -m set --match-set BlackList src -j DROP

# 新しい接続のレートリミットを超えた場合にブロックチェーンにジャンプ
sudo iptables -A DDoS-Detect -m state --state NEW -m hashlimit --hashlimit-above 5/s --hashlimit-mode srcip --hashlimit-name DDoS-NewLimit -j DDoS-Block

# 帯域幅のレートリミットを超えた場合にブロックチェーンにジャンプ
sudo iptables -A DDoS-Detect -m hashlimit --hashlimit-above 452kb/s --hashlimit-mode srcip --hashlimit-name DDoS-BandWidth -j DDoS-Block

# 検出チェーンのデフォルトアクションとして通常のフィルタリングに渡す
sudo iptables -A DDoS-Detect -j ACCEPT

# INPUTチェーンにルールを追加して、特定のポートへのトラフィックを検出チェーンに渡す
sudo iptables -I INPUT -p udp --dport 7777 -j DDoS-Detect

このようにすることで、通信量の制限を付けることができます
(間違えてる可能性あり)

これでDDoSが少しはマシになりました。

結論

Linodeを買いましょう!!!!!!!!!


この記事が気に入ったらサポートをしてみませんか?