Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 防火牆 iptables 與 firewalld 核心架構與實戰配置指南

編輯:Linux 系統常見問題解答

防火牆是伺服器安全的第一道防線。本文系統解析 Linux 防火牆核心概念、Netfilter/iptables 架構 (table/chain/rule)、流量處理流程、TCP Wrappers 應用層過濾、firewalld 區域模型與實戰規則配置範例。

一、防火牆核心概念與功能

  • 功能:依規則過濾封包、限制服務存取、阻擋特定 IP/MAC/連線狀態、NAT 轉換
  • 限制:無法防禦內部攻擊、非防毒軟體、無法保證絕對安全
  • 分類:硬體防火牆 (專用裝置) vs 軟體防火牆 (主機型 iptables/firewalld、TCP Wrappers)

二、TCP Wrappers (應用層存取控制)

適用於支援 libwrap.so 的服務 (xinetd 管理服務、sshd、vsftpd 等)。

判斷邏輯

  1. 檢查 /etc/hosts.allow:符合 → 允許
  2. 檢查 /etc/hosts.deny:符合 → 拒絕
  3. 以上皆無 → 允許

配置範例

# /etc/hosts.allow
ALL: 127.0.0.1                    # 本機所有服務
sshd: 192.168.1.0/255.255.255.0   # SSH 僅允許內網
vsftpd: 10.0.0.50                 # FTP 僅允許特定 IP

# /etc/hosts.deny
sshd: ALL                         # SSH 預設拒絕所有 (配合 allow 白名單)
vsftpd: ALL

檢測服務是否支援:ldd $(which sshd) | grep libwrap 有輸出即支援。

三、Netfilter/iptables 核心架構

四表五鏈

表用途鏈
filter封包過濾 (最常用)INPUT、OUTPUT、FORWARD
nat網址轉換 (SNAT/DNAT/REDIRECT/MASQUERADE)PREROUTING、POSTROUTING、OUTPUT
mangle封包標記/修改 (QoS、策略路由)PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
raw連線追蹤豁免 (NOTRACK)PREROUTING、OUTPUT

封包流向與鏈觸發順序

  1. 入站封包:PREROUTING (nat/mangle) → 路由判斷 → INPUT (filter) → 本機進程
  2. 轉發封包:PREROUTING → 路由判斷 → FORWARD (filter) → POSTROUTING (nat/mangle) → 出站
  3. 出站封包:本機進程 → OUTPUT (filter/nat/mangle) → 路由判斷 → POSTROUTING → 出站

四、iptables 實戰語法與常用規則

查看規則

iptables -L -n -v --line-numbers
iptables -t nat -L -n -v --line-numbers

基礎規則範本 (預設拒絕策略)

# 1. 設定預設策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 2. 允許本機回環
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 3. 允許已建立/相關連線
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 4. 允許 ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT

# 5. 開放特定服務埠
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT   # SSH
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT   # HTTP
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT  # HTTPS

# 6. 拒絕其他並回應 icmp-host-prohibited
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited

NAT 規則範例

# SNAT (固定公網 IP)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.10

# MASQUERADE (動態公網 IP,如 ADSL)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# DNAT (埠轉發:公網 8080 → 內網 192.168.1.10:80)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
# 需配合 FORWARD 允許
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

儲存與恢復規則

# 儲存
iptables-save > /etc/sysconfig/iptables  # CentOS/RHEL
iptables-save > /etc/iptables/rules.v4   # Debian/Ubuntu

# 恢復
iptables-restore < /etc/sysconfig/iptables

五、firewalld (動態區域防火牆 - CentOS 7/RHEL 7+ 預設)

核心概念

  • Zone (區域):預定義信任等級 (drop、block、public、external、internal、dmz、work、home、trusted)
  • Service (服務):預定義埠/協定組合 (ssh、http、https、dns 等)
  • Runtime vs Permanent:運行時即時生效 vs 永久配置 (需 --permanent 並 --reload)

常用操作

firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
firewall-cmd --reload
firewall-cmd --list-all

六、部署架構建議

  • 邊界防火牆:路由器/專用裝置保護整個 LAN
  • DMZ 區隔:公開服務 (Web、Mail) 置於 DMZ,內網再由第二層防火牆保護
  • 主機型防火牆:每台伺服器啟用 iptables/firewalld 深度防禦
Copyright © Windows教程網 All Rights Reserved