介绍
本教程讲解如何通过设置基础防火墙和速率限制来保护您的游戏服务器免受 DDoS 攻击。请注意,即使进行了这些设置,您的服务器也无法完全免疫 DDoS 攻击。但是,安全的防火墙可以最大限度地减少攻击面,而速率限制规则可以帮助防止服务器过载。.
先决条件:
- 服务器运行Ubuntu系统(本教程已在Ubuntu 22.04上测试过,但也应该适用于其他版本。)
第一步 – 防火墙
出于安全考虑,您应该设置一个默认阻止所有入站流量的防火墙。然后,您可以添加例外,允许访问登录服务器(SSH)和连接游戏(TCP/UDP)所需的协议/端口。如果您想进一步加强防火墙,还可以指定仅允许访问的 IP 地址。来自任何其他 IP 地址的请求都将被自动丢弃。本教程将解释如何阻止所有入站流量,以及:
- 允许所有人访问游戏端口。.
- 只有指定的IP地址才能访问游戏端口。.
Ubuntu 的默认防火墙是 ufw。本教程使用 iptables。请确保只使用一个防火墙。不建议使用多个不同的防火墙,因为这些防火墙的规则可能会相互冲突,导致混乱。.
要检查您是否已有任何规则,可以使用以下方法:
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 # 通过指定数字删除输入规则مرحله 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 攻击的第一道防线,并可以以此为基础进行进一步的防御。.









