【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を買いましょう!!!!!!!!!
この記事が気に入ったらサポートをしてみませんか?