Linux iptables 防火牆完整教學:由零開始學識保護你部 Server

點解你要學 Linux 防火牆 iptables? 做 IT 嘅你一定聽過 iptables,但好多人對佢又愛又恨 — 功能強大但語法難記。今日就用最地道嘅粵語,帶你由零開始搞掂 iptables 基本設定,包你睇完即刻用得! iptables 基本概念:三條鏈 + 四個表 iptables 係 Linux kernel 內置嘅防火牆工具,佢嘅運作邏輯係「規則鏈」(chain)加「規則表」(tab...

點解你要學 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 漏洞資料庫