導入
このチュートリアルでは、基本的なファイアウォールとレート制限を設定することで、ゲームサーバーをDDoS攻撃から保護する方法を説明します。これらの設定を行っても、サーバーがDDoS攻撃から完全に保護されるわけではないことにご注意ください。ただし、安全なファイアウォールは攻撃対象領域を最小限に抑えることができ、レート制限ルールはサーバーの過負荷を防ぐのに役立ちます。.
前提条件:
- Ubuntu を使用したサーバー (このチュートリアルは Ubuntu 22.04 でテストされていますが、他のバージョンでも動作するはずです。)
ステップ1 – ファイアウォール
セキュリティ上の理由から、デフォルトですべての受信トラフィックをブロックするファイアウォールを導入することをお勧めします。サーバーへのログイン(SSH)とゲームへの接続(TCP/UDP)に必要なプロトコル/ポートへのアクセスを許可する例外設定を追加できます。ファイアウォールをさらに強化したい場合は、アクセスを許可するIPアドレスを指定することもできます。それ以外のIPアドレスからのリクエストは自動的に破棄されます。このチュートリアルでは、すべての受信トラフィックをブロックする方法と、以下の手順について説明します。
- すべてのユーザーがゲーム ポートにアクセスできるようにします。.
- 選択された IP のみがゲーム ポートにアクセスできます。.
Ubuntuのデフォルトのファイアウォールはufwです。このチュートリアルではiptablesを使用します。必ず1つのファイアウォールのみを使用してください。複数の異なるファイアウォールを使用することは推奨されません。ファイアウォールのルールが互いに競合し、混乱を招く可能性があります。.
すでにルールがあるかどうかを確認するには、次のコマンドを使用します。
sudo iptables -Lاگر فایروال هنوز قوانینی ندارد، اکنون میتوانید آنها را اضافه کنید. وقتی خط مشی پیشفرض برای ترافیک ورودی را روی «DROP» تنظیم میکنید، بلافاصله تمام اتصالات پایان مییابد. به همین دلیل، ابتدا باید مطمئن شوید که اتصالات SSH را مجاز کرده اید تا همچنان بتوانید به سرور خود دسترسی داشته باشید.
اگر از پورت پیشفرض SSH استفاده نمیکنید، حتماً در دستورات زیر 22 را جایگزین کنید.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
اکنون که فایروال راه اندازی شده است، می توانید پورت بازی خود را باز کنید.فقط IP های انتخاب شده به پورت بازی دسترسی داشته باشند.اگر آیپی بازیکنانی که به بازی ملحق میشوند را میدانید و آیپیها تغییر نمیکنند، میتوانید فقط به آن IPها دسترسی داشته باشید:
sudo iptables -A INPUT -s <203.0.113.1>,<198.51.100.1> -p tcp --dport <your_game_port> -j ACCEPT
sudo iptables -A INPUT -s <203.0.113.1>,<198.51.100.1> -p udp --dport <your_game_port> -j ACCEPT 誰でもゲームポートにアクセスできるようにする このルールでは、誰でもゲームにアクセスできるようになります。
sudo iptables -A INPUT -p tcp --dport <your_game_port> -j ACCEPT sudo iptables -A INPUT -p udp --dport <your_game_port> -j ACCEPT
新しいルールが追加されました。sudo iptables -L で確認できます。ルールはデフォルトでは永続化されず、次回の再起動時に消えてしまいます。永続化するには、以下をインストールしてください。
sudo apt update && sudo apt install iptables-persistentحالا قوانین خود را ذخیره کنید:
sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6دفعه بعد که سرور خود را راه اندازی مجدد می کنید، قوانین ذخیره شده در فایل دوباره اعمال خواهند شد. هنگامی که قوانین جدید iptables را اضافه می کنید، باید دوباره دستور iptables-save را برای به روز رسانی فایل ها اجرا کنید.
sudo iptables -L --line-numbers # 番号付きのすべてのルールを一覧表示します sudo iptables -D INPUT # 番号を指定してINPUTルールを削除するمرحله 2 – محدود کردن نرخ
「ステップ1」で説明したようにファイアウォールを設定することで、セキュリティ強化は可能です。しかし、ゲームポートを公開すると、潜在的な攻撃対象領域が露呈することになります。iptablesとFail2Banを使用すると、許可するリクエスト数を制限できます。その方法については以下で説明します。
- IP ごとのリクエスト数を制限します。.
- すべての IP からのリクエスト数をまとめて制限します。.
ステップ 2.1 – IP ごとのリクエスト数を制限します。.
このステップでは、Fail2Ban を使用してリクエストを制限し、iptables を使用してリクエストをログに記録します。.
始める前に、iptablesとFail2Banの両方が利用可能であることを確認する必要があります。systemctl status fail2banを使用して、Fail2Banが動作しているかどうかを確認できます。Ubuntuへのインストール:
apt install fail2ban
systemctl enable --now fail2banبه iptables بگویید تلاش های دسترسی را ثبت کنند
sudo iptables -I INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -j LOG --log-level 6 --log-prefix "GameServerAccess: "اکنون Iptables تمام تلاشها برای دسترسی به پورت TCP <your_game_port> را در فایل /var/log/syslog ثبت میکند. وقتی فایل را مشاهده می کنید، خواهید دید که تمام تلاش ها برای دسترسی به پورت بازی پیشوند GameServerAccess داده می شود. قاعده را پایدار کنید:
sudo iptables-save | sudo tee /etc/iptables/rules.v4یک فیلتر اضافه کنید در فایل /var/log/syslog، فقط ورودیهای با پیشوند GameServerAccess: مرتبط هستند. فایل زیر را ایجاد کنید تا به Fail2Ban بگویید آن ورودی ها را فیلتر کند:
sudo nano /etc/fail2ban/filter.d/gameserveraccess.confاضافه کردن محتوا:
[Definition]
failregex = GameServerAccess: .* SRC=<HOST>
ignoreregex =به Fail2Ban بگویید تعداد درخواستهای هر IP را محدود کند و برای IPهایی که از حد مجاز فراتر میروند، زمان ممنوعیت تعیین کنید. logpath به Fail2Ban می گوید که IP ها را از کجا دریافت کنید. فیلتری که ما ایجاد کردیم به Fail2Ban میگوید فقط IPهایی را که با پیشوند GameServerAccess ثبت شدهاند نظارت کند.
sudo nano /etc/fail2ban/jail.localコンテンツを追加:
[game-server]
enabled = true
filter = gameserveraccess
logpath = /var/log/syslog
maxretry = 7
findtime = 30
bantime = 120上記の設定により、各IPアドレスは30秒間に7件のリクエストを送信できます。IPアドレスがこの制限を超えた場合、120秒間ブロックされます。異なる制限を設定する場合は、7、30、120の値をそれぞれ置き換えてください。.
すべての設定が完了したら、Fail2Ban を再起動します。
sudo systemctl restart fail2banステップ2.2 – すべてのIPからのリクエスト数をまとめて制限する
iptablesでは、limitモジュールを使用して、特定の時間内の新規接続の総数を制限できます。limitモジュールを使用する場合、–limitおよび–limit-burstオプションで時間制限と制限パラメータを指定します。.
古いファイアウォールルールを削除します。「ステップ1」でゲームポートを全員に開放している場合は、ここでルールを削除できます。以下のレート制限ルールを適用すれば、このルールは不要になります。.
sudo iptables -L --line-numbers # Get the line number of "ACCEPT anywhere tcp dpt:<your_game_port>"
sudo iptables -D INPUT <line-number> # Delete the rule that accepts all incoming requests to your game port以下のコマンドを実行して、制限パラメータを100、サイクル時間を30秒に設定する新しいルールを追加します。異なる制限を設定する場合は、100と2/minの値を適宜置き換えてください。.
sudo iptables -A INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -m limit --limit 2/min --limit-burst 100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -j DROPsudo iptables-save | sudo tee /etc/iptables/rules.v4次回サーバーを再起動すると、ファイルに保存されたルールが再適用されます。.
ステップ3 – ブロックルール
「ステップ2」のレート制限に達すると、TCPポート your_game_port には誰もアクセスできなくなります。ただし、リクエスト数が制限内であれば、すべてのリクエストはアクセスを許可されます。これには正当なリクエストと不正なリクエストが含まれます。以下のルールは、SYNフラグのない新規接続を破棄します。
sudo iptables -I INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROPすべてが完了したら、ルールを再度保存する必要があります。
sudo iptables-save | sudo tee /etc/iptables/rules.v4結果
これらの設定だけではDDoS攻撃を完全に防ぐことはできません。DDoS緩和策をさらに設定することで、セキュリティをさらに強化できる余地は常にあります。しかしながら、このチュートリアルで紹介した設定により、DDoS攻撃に対する最前線の防御策が確立され、今後の対策も強化していくことができます。.









