點解你要學 Linux 防火牆 iptables?
做 IT 嘅你一定聽過 iptables,但好多人對佢又愛又恨 — 功能強大但語法難記。今日就用最地道嘅粵語,帶你由零開始搞掂 iptables 基本設定,包你睇完即刻用得!
iptables 基本概念:三條鏈 + 四個表
iptables 係 Linux kernel 內置嘅防火牆工具,佢嘅運作邏輯係「規則鏈」(chain)加「規則表」(table)。最常用嘅三條鏈:
- INPUT — 處理入站流量(外面想入嚟你部機)
- OUTPUT — 處理出站流量(你部機想出街)
- FORWARD — 處理轉發流量(你部機做 router 嗰陣)
四個常用表:filter(預設,做基本過濾)、nat(做地址轉換)、mangle(改封包 header)、raw(跳過 connection tracking)。初學者搞掂 filter 表已經夠用。
實戰:用 iptables 保護你部 Linux Server
假設你有一部 Ubuntu server,對外只開放 SSH(port 22)、HTTP(80)同 HTTPS(443),其他全部 block 晒。以下係完整嘅 iptables 設定步驟:
Step 1:檢查現有規則
sudo iptables -L -n -v
呢個 command 會列出所有現有規則,-n 係唔做 DNS reverse lookup(快好多),-v 係顯示詳細資訊包括 packet 同 byte count。
Step 2:設定預設政策(Default Policy)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
呢度嘅邏輯係:預設全部入站流量都 DROP,然後再逐個開你需要嘅 port。OUTPUT 預設 ACCEPT 因為 server 通常要出街攞 update。
Step 3:允許基本必要流量
# 允許 loopback(本地通訊,好多 service 靠佢)
sudo iptables -A INPUT -i lo -j ACCEPT
# 允許已建立嘅連線繼續(好重要!)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ESTABLISHED,RELATED 呢條規則係關鍵 — 冇佢嘅話你 SSH 入咗去之後所有 return traffic 都會俾 DROP 擋住。
Step 4:開放特定服務 Port
# SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
如果你想限制 SSH 只俾特定 IP 入,可以加 -s 參數:
sudo iptables -A INPUT -p tcp -s 203.0.113.50 --dport 22 -j ACCEPT
Step 5:保存規則(唔 save 會 reboot 後消失)
# Ubuntu/Debian
sudo apt install iptables-persistent
sudo netfilter-persistent save
# CentOS/RHEL
sudo service iptables save
iptables 常見 troubleshooting 技巧
設定完 iptables 之後發現某啲 service 唔 work?以下係幾個常用 debug 方法:
- 睇 rule counter:
sudo iptables -L -n -v會顯示每條 rule hit 咗幾多次,如果某條 rule 嘅 counter 係 0,即係佢根本冇被觸發 - 加 LOG rule 做 debug:
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "然後tail -f /var/log/syslog睇咩 traffic 被 drop - 臨時 flush 所有 rules 測試:
sudo iptables -F(小心!會清空所有規則,只適合 troubleshooting 時用) - Rule 順序好重要:iptables 係 first-match 機制,第一條 match 嘅 rule 就會執行,之後嘅唔會再睇
進階:用 iptables 防 DDoS 攻擊
iptables 內置咗 rate limiting 功能,可以有效防禦簡單嘅 DDoS 或者 brute force 攻擊:
# 限制 SSH 連線速度:每分鐘最多 3 個新連線
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# 限制 HTTP 連線速度:每秒最多 25 個新連線
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/second --limit-burst 50 -j ACCEPT
呢個設定可以有效擋住自動化掃描工具同簡單嘅 brute force attack,係每個 Linux server 管理員必學嘅基本功。
總結:iptables 唔可怕,最緊要係理解邏輯
iptables 嘅核心邏輯就係「預設拒絕,按需開放」。只要你理解咗 chain → table → rule 呢個層級關係,再加埋 first-match 嘅執行順序,基本上已經可以應付 90% 嘅日常場景。下次有人問你點樣用 iptables 保護 Linux server,你就可以自信咁答:「好簡單啫,幾行 command 搞掂!」
想學更多 Linux 安全管理技巧?記得 bookmark 我哋嘅知識分享專欄,每個星期都有新內容!
#Server #IT教學 #防火牆 #技術分享 #自動化
🔗 參考資料:NVD NIST 漏洞資料庫



