Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

生產級 iptables 防火牆規則模板(防掃描、抗 SYN Flood、防 Ping of Death)

編輯:Linux 教學

設計原則

  • 默認拒絕輸入/轉發,僅放行業務必要端口。
  • 針對常見掃描(Nmap Xmas/Null/FIN/SYN-RST)直接丟棄。
  • 限流保護 SYN Flood、ICMP Flood。
  • 狀態檢測放行已建立/相關連接。
  • 規則持久化並支援 IPv6 (ip6tables)。

完整腳本 (IPv4)

#!/bin/bash
# iptables_hardening.sh
# 執行前請確認當前 SSH 端口已在允許列表,否則會斷開連接

IPT=/sbin/iptables

# 1. 清空現有規則
$IPT -F
$IPT -X
$IPT -Z
$IPT -t nat -F
$IPT -t mangle -F

# 2. 設定預設策略(先設 ACCEPT 避免鎖死,最後再改 DROP)
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# 3. 基礎信任鏈
$IPT -A INPUT -i lo -j ACCEPT                                    # 本地回環
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT     # 已建立/相關連接
$IPT -A OUTPUT -j ACCEPT                                         # 本機向外全放行

# 4. 防掃描規則(放在最前,匹配即丟棄)
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP         # Nmap FIN/URG/PSH (Xmas)
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP                 # Xmas Tree
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP # Another Xmas
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP                # Null Scan
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP         # SYN/RST
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP         # SYN/FIN

# 5. SYN Flood 防護(限流)
$IPT -N SYN_FLOOD
$IPT -A SYN_FLOOD -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A SYN_FLOOD -p tcp -j REJECT --reject-with tcp-reset
$IPT -A INPUT -p tcp -m state --state NEW -j SYN_FLOOD

# 6. Ping of Death / ICMP Flood 防護
$IPT -N BAD_PING
$IPT -A BAD_PING -p icmp --icmp-type echo-request -m limit --limit 1/s -j RETURN
$IPT -A BAD_PING -p icmp -j REJECT
$IPT -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j BAD_PING

# 7. 業務端口放行(按需修改)
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT        # SSH (建議改非標準端口)
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT        # HTTP
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT       # HTTPS
$IPT -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -j ACCEPT  # MySQL 僅內網
$IPT -A INPUT -p tcp --dport 6379 -s 10.0.0.0/8 -j ACCEPT  # Redis 僅內網
# 多端口合寫
$IPT -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT

# 8. 允許 DNS 回應 (UDP 53)
$IPT -A INPUT -p udp --sport 53 -j ACCEPT

# 9. 設定最終預設拒絕
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# 10. 保存規則
service iptables save  # CentOS 6/7
# 或
iptables-save > /etc/sysconfig/iptables  # 通用

echo "Rules applied. Current filter table:"
$IPT -L -n -v --line-numbers

IPv6 對應 (ip6tables)

IP6T=/sbin/ip6tables
$IP6T -F; $IP6T -X; $IP6T -Z
$IP6T -P INPUT ACCEPT; $IP6T -P OUTPUT ACCEPT; $IP6T -P FORWARD ACCEPT
$IP6T -A INPUT -i lo -j ACCEPT
$IP6T -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IP6T -A INPUT -p ipv6-icmp -j ACCEPT          # IPv6 鄰居發現等依賴 ICMPv6,建議全放行或精細放行
$IP6T -A INPUT -p tcp --dport 22 -j ACCEPT
$IP6T -A INPUT -p tcp --dport 80 -j ACCEPT
$IP6T -A INPUT -p tcp --dport 443 -j ACCEPT
$IP6T -P INPUT DROP; $IP6T -P FORWARD DROP
service ip6tables save

驗證與測試

  1. nmap -sS -p 1-65535 YOUR_IP 應只見開放端口。
  2. hping3 -S -p 80 --flood YOUR_IP 測試 SYN Flood 限流(需授權環境)。
  3. ping -f YOUR_IP 測試 ICMP 限流。

持久化最佳實踐

  • CentOS 7+:yum install iptables-services && systemctl enable --now iptables。
  • Debian/Ubuntu:apt install iptables-persistent,規則存放 /etc/iptables/rules.v4 / rules.v6。
  • 版控管理:將規則腳本納入 Git,CI/CD 流水線部署。

總結

此模板涵蓋「掃描識別、SYN Flood 限流、ICMP 限流、業務放行、默認拒絕」五大核心防護面。實際部署時請根據資產清單精細化端口與來源 IP 白名單,並定期審計規則冗餘與衝突。

Copyright © Windows教程網 All Rights Reserved