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

Linux iptables 防火牆配置實戰:從入門到安全強化

編輯:關於 Linux

iptables 是 Linux 核心網路封包過濾框架 Netfilter 的用戶空間管理工具,功能強大且靈活,是伺服器安全防線的核心組件。本文將以 filter 表為例,帶你從零構建一套生產級防火牆規則集,涵蓋規則查看、清理、預設策略、常見服務放行、持久化與遠程管理避坑指南。

前置警示:遠程操作的生死關鍵

⚠️ 關鍵提醒:若你正在通過 SSH 遠程管理伺服器,務必先在本地機器或具備 OOB(帶外管理)權限的情況下操作。錯誤的 INPUT DROP 規則會瞬間切斷你的連線,導致無法挽回的停機事故。

核心概念速覽

  • 表:filter(預設,過濾), nat(地址轉換), mangle(修改封包標記), raw(繞過連線追蹤)。
  • 鏈:INPUT(進站), OUTPUT(出站), FORWARD(轉發), PREROUTING, POSTROUTING。
  • 動作:ACCEPT(允許), DROP(丟棄無回應), REJECT(拒絕並回應), LOG(記錄)。
  • 匹配順序:規則自上而下匹配,首次匹配生效,未匹配則執行鏈預設策略。

實戰步驟:構建安全基線規則集

1. 環境檢查與備份

# 查看現有規則(含行號)
iptables -L -n -v --line-numbers

# 備份現有規則
iptables-save > /root/iptables_bak_$(date +%F).rules

2. 清空現有規則與自定義鏈

iptables -F        # 清空預設表所有鏈的規則
iptables -X        # 刪除所有用戶自定義鏈
# 驗證
iptables -L -n

3. 設定預設策略(預設拒絕原則)

# 輸入/轉發預設丟棄,輸出預設允許
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

原則解讀:INPUT/FORWARD 採用「白名單機制」(明確允許其餘拒絕),OUTPUT 採用「黑名單機制」(預設信任本機發出流量)。若極高安全需求,三鏈皆可設 DROP,但規則維護成本指數級上升。

4. 核心基礎規則(必加順序敏感)

# 1. 允許本地回環介面(關鍵!許多本地服務依賴 lo)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 2. 允許已建立/相關連線的返回流量(狀態檢測核心)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 3. 允許 ICMP(ping, traceroute, MTU 發現等網路診斷必需)
iptables -A INPUT -p icmp -j ACCEPT

# 4. 防禦常見掃描/攻擊(可選,建議開啟)
# 限制新連線速率防 SYN Flood
iptables -A INPUT -p tcp --syn -m limit --limit 5/s --limit-burst 10 -j ACCEPT
# 記錄並丟棄無效封包
iptables -A INPUT -m state --state INVALID -j DROP

5. 業務服務放行規則(按需添加)

# SSH (預設 22,強烈建議修改非標準埠並限制來源 IP)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
# 生產環境建議:
# iptables -A INPUT -p tcp --dport 2222 -s 203.0.113.0/24 -m state --state NEW -j ACCEPT

# HTTP/HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT

# MySQL (僅內網存取)
iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -m state --state NEW -j ACCEPT

# 自訂應用埠
# iptables -A INPUT -p tcp --dport 8080 -m state --state NEW -j ACCEPT

6. 記錄被拒絕流量(審計與調試)

# 記錄被 DROP 的封包(限制頻率避免日誌洪水)
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-DROPPED: " --log-level 4

7. 保存規則並驗證

# 方法一:service 指令 (RHEL/CentOS 6/7, 部分舊版)
service iptables save
service iptables restart

# 方法二:iptables-save 重導向 (通用, 需配合啟動腳本/systemd)
iptables-save > /etc/sysconfig/iptables  # RHEL 系
# 或
iptables-save > /etc/iptables/rules.v4   # Debian/Ubuntu 系 (需安裝 iptables-persistent)

# 驗證生效規則
iptables -L -n -v --line-numbers

遠程 SSH 管理防鎖死黃金法則

  1. 先加 SSH 允許規則,再設 INPUT DROP:操作順序決定生死。
  2. 設定安全緊急入口:在執行危險操作前,開啟一個 screen/tmux 會話或第二個 SSH 連線備用。
  3. 利用 at/cron 定時回滾:
    # 5 分鐘後自動恢復預設允許策略(測試新規則時的安全網)
    echo "iptables -P INPUT ACCEPT; iptables -F" | at now + 5 minutes
    
  4. 測試新規則用 -I 插入頂部:iptables -I INPUT ... 臨時插入測試,確認無誤再 -A 固化。

常見問題排查

現象可能原因排查指令
SSH 連不上缺少 ESTABLISHED,RELATED 規則或 SSH 埠未放行本地主機檢查 iptables -L -n -v
網頁打不開80/443 埠未放行或 OUTPUT 鏈限制iptables -L OUTPUT -n -v
Docker/容器網路不通FORWARD 鏈 DROP 或缺少 Docker 所需規則檢查 DOCKER-USER 鏈
規則重啟失效未持久化或持久化路徑錯誤確認 iptables-save 輸出檔案位置

iptables配置示意圖

現代替代方案提示

  • nftables:Linux 3.13+ 核心內建,語法更統一、效能更好,為 iptables 繼任者。iptables-nft 兼容層可平滑遷移。
  • firewalld:RHEL/CentOS 7+ 預設高層管理工具,支援區域、服務、運行時/永久配置分離,適合動態環境。
  • ufw:Ubuntu 推薦的簡易前端,語法極簡(ufw allow 22/tcp)。

掌握 iptables 底層邏輯,無論遷移至何種上層工具,皆能游刃有餘。安全無絕對,唯有持續審計、最小權限、纵深防禦,方能築牢防線。

Copyright © Windows教程網 All Rights Reserved