遊戲伺服器面臨高並發連接、DDoS 攻擊、外掛封鎖等複雜威脅。本文提供經過生產環境驗證的 iptables 策略模板,詳細解析每條規則的防禦邏輯、參數調優依據與擴展方向,助您構建高可用、抗攻擊的遊戲伺服器防火牆體系。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:MYNET - [0:0] # 自訂主防禦鏈
# 所有入站/轉發流量導向 MYNET 鏈
-A INPUT -j MYNET
-A FORWARD -j MYNET
# 回環介面完全放行
-A MYNET -i lo -j ACCEPT
# ICMP 必要類型放行(Ping、MTU 發現等)
-A MYNET -p icmp --icmp-type any -j ACCEPT
# 內網管理網段全通(根據實際調整)
-A MYNET -s 192.168.0.0/16 -j ACCEPT
# 已建立/相關連接直接放行(狀態機制核心)
-A MYNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# 遊戲核心埠口(根據實際業務調整)
-A MYNET -m state --state NEW -m tcp -p tcp --dport 8989 -j ACCEPT # 管理/登入
-A MYNET -m state --state NEW -m tcp -p tcp --dport 30101 -j ACCEPT # 遊戲主埠
-A MYNET -m state --state NEW -m tcp -p tcp --dport 30102 -j ACCEPT # 遊戲備用埠
# 監控/管理埠
-A MYNET -p udp --dport 161 -j ACCEPT # SNMP
-A MYNET -p tcp --dport 191 -j ACCEPT # 自定義管理
# 單 IP 最大並發連接數限制(防連接耗盡攻擊)
-A MYNET -p tcp --dport 30101 -m connlimit --connlimit-above 50 -j REJECT
-A MYNET -p tcp --dport 30102 -m connlimit --connlimit-above 50 -j REJECT
# 新 TCP 連接速率限制(limit 模組)
-A MYNET -p tcp --syn -m limit --limit 15/s --limit-burst 30 -j ACCEPT
# 顯式 SYN 標記封包限制(雙重保險)
-A MYNET -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 15/sec --limit-burst 30 -j ACCEPT
# RST 封包速率限制(防 RST Flood)
-A MYNET -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 15/s --limit-burst 30 -j ACCEPT
參數調優依據:
--limit 15/s:每秒允許 15 個新連接/封包
--limit-burst 30:突發允許 30 個(吸收合法突發流量)
根據實際業務峰值調整:峰值 QPS × 1.5設為 limit,limit × 2設為 burst
# Ping 洪水防護
-A MYNET -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# 所有未匹配規則的流量拒絕(發送 icmp-host-prohibited)
-A MYNET -j REJECT --reject-with icmp-host-prohibited
COMMIT
# 安裝 xtables-addons + GeoIP 資料庫
# 封鎖特定國家(如 CN、RU、KP)
-A MYNET -m geoip --src-cc CN,RU,KP -j DROP
# 僅允許特定國家(白名單模式)
-A MYNET -m geoip --src-cc TW,US,JP -j ACCEPT
# 最近 60 秒內超過 20 次新連接則封鎖 300 秒
-A MYNET -m recent --name ATTACKER --rcheck --seconds 300 --hitcount 20 -j DROP
-A MYNET -m recent --name ATTACKER --set -j ACCEPT
# 過濾特定惡意字串(需 xt_string 模組)
-A MYNET -m string --string "malicious_payload" --algo bm -j DROP
# 先敲 1234、5678、9012 三個埠,才開放 SSH (22)
-A MYNET -m recent --name KNOCK1 --rcheck --seconds 10 -j ACCEPT
-A MYNET -p tcp --dport 9012 -m recent --name KNOCK2 --rcheck --seconds 10 -j ACCEPT
-A MYNET -p tcp --dport 5678 -m recent --name KNOCK1 --set -j DROP
-A MYNET -p tcp --dport 1234 -m recent --name KNOCK1 --set -j DROP
-A MYNET -p tcp --dport 22 -m recent --name KNOCK3 --rcheck --seconds 10 -j ACCEPT
/etc/sysctl.d/99-gameserver.conf# 連接追蹤表擴大
net.netfilter.nf_conntrack_max = 1000000
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 30
# TCP 協議棧優化
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 200000
# 緩衝區優化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 10000
net.ipv4.tcp_max_syn_backlog = 16384
# 檔案描述符限制
fs.file-max = 2000000
ulimit -n 1000000worker_rlimit_nofile 1000000SO_REUSEPORT(內核 3.9+)分發連接# 當前連接追蹤表使用率
cat /proc/sys/net/netfilter/nf_conntrack_count
# 告警閾值:> 80% nf_conntrack_max
# 當前連接狀態分佈
conntrack -L | awk '{print $4}' | sort | uniq -c
# 當前 iptables 規則計數器
iptables -nvL MYNET --line-numbers
# 連接追蹤表使用率監控腳本
#!/bin/bash
usage=$(cat /proc/sys/net/netfilter/nf_conntrack_count)
max=$(cat /proc/sys/net/netfilter/nf_conntrack_max)
pct=$((usage * 100 / max))
if [ $pct -gt 80 ]; then
echo "ALERT: conntrack usage ${pct}%" | mail -s "ALERT" admin@example.com
fi
# 為關鍵規則添加日誌(限制頻率避免日誌洪水)
-A MYNET -p tcp --dport 30101 -m limit --limit 1/min -j LOG --log-prefix "GAME_NEW_CONN: "
# 使用 ulogd2 將日誌寫入資料庫/檔案
# 配合 ELK/EFK 進行可視化分析
wrk、locust 模擬峰值流量,觀察丟包率、延遲iptables-restore < rules.bak 秒級回滾遊戲伺服器防火牆策略的核心在於:狀態檢測為基、速率限制為盾、連接限制為矛、分層鏈路為骨。本文提供的策略模板經過生產環境驗證,可直接適配大多數 MMORPG、MOBA、FPS 類遊戲伺服器。生產部署請根據實際業務峰值調整 limit/burst 參數,配合核心參數調優、GeoIP 封鎖、最近連接限制等進階模組,構建多層次立體防禦體系。建議建立 GitOps 流程,所有規則變更經代碼審查、測試環境驗證、滾動發布,確保防火牆策略與業務迭代同步演進。