Linux 防火牆 iptables 新手教學:由零開始鎖好你部伺服器

Linux 防火牆 iptables 新手教學:由零開始鎖好你部伺服器 好多朋友第一次自己起部 VPS 或者裸機伺服器,最驚嘅就係俾人暴力掃 port、SSH 撞密碼。其實 Linux 本身已經內置咗一個好強勁嘅防火牆工具叫 iptables,你唔使裝任何額外軟件,只要識幾句指令,就可以幫部機加上第一道防線。今日我就用最貼地嘅方式,step-by-step 帶你由零開始設定 iptables。 咩...

Linux 防火牆 iptables 新手教學:由零開始鎖好你部伺服器

好多朋友第一次自己起部 VPS 或者裸機伺服器,最驚嘅就係俾人暴力掃 port、SSH 撞密碼。其實 Linux 本身已經內置咗一個好強勁嘅防火牆工具叫 iptables,你唔使裝任何額外軟件,只要識幾句指令,就可以幫部機加上第一道防線。今日我就用最貼地嘅方式,step-by-step 帶你由零開始設定 iptables。

咩係 iptables?

iptables 係 Linux kernel 入面 netfilter 框架嘅用户端工具,用嚟管理網絡封包嘅過濾規則。簡單講,每一個入嚟或者出嘅網絡連線,都會經過一系列嘅「鏈」(chain),入面有唔同嘅「規則」(rule)去決定放行定係丟棄。

主要有三條預設鏈:

– INPUT — 所有進入本機嘅封包
– OUTPUT — 所有由本機發出嘅封包
– FORWARD — 所有經過本機轉發嘅封包(例如做 router 或者 NAT)

第一步:睇下而家有咩規則

登入你部 Linux 機之後,先睇下現時嘅規則。用 root 或者 sudo 執行:

sudo iptables -L -n -v

`-L` 係列出(List),`-n` 係唔好做 DNS 反解(會快好多),`-v` 係顯示詳細資訊(verbose)。如果你係全新安裝,通常會見到三條鏈都係空嘅,而 policy 係 `ACCEPT`,即係乜都放行。

第二步:設定預設政策

呢一步好關鍵,我哋要反過嚟諗:預設全部拒絕,淨係放行我哋需要嘅服務。呢個叫做「白名單」策略,比「黑名單」安全得多。

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

– `INPUT DROP`:所有入嚟嘅封包,除非有規則明確放行,否則一律丟棄
– `FORWARD DROP`:部機唔做 router 嘅話,直接丟棄轉發封包
– `OUTPUT ACCEPT`:出去嘅封包一般唔使限制,保持放行

⚠️ 重要警告:執行咗 `INPUT DROP` 之後,如果你而家係透過 SSH 連住部機,一定要立即加返 SSH 放行規則,否則下一秒你就會斷線,要行去機房先救得返!

第三步:放行 SSH(保命規則)

假設你 SSH 用預設 port 22:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

拆解一下:

– `-A INPUT`:喺 INPUT 鏈「附加」(Append)一條規則
– `-p tcp`:指定協議係 TCP
– `–dport 22`:目標 port 係 22
– `-j ACCEPT`:跳去(Jump)ACCEPT,即係放行

如果你改咗 SSH 做其他 port(例如 2222),記得將 `22` 換成你實際用緊嘅 port。

第四步:放行本機同已建立連線

有啲基本流量一定要放行,否則會出問題:

# 放行 loopback(本機自己同自己通訊)
sudo iptables -A INPUT -i lo -j ACCEPT

放行已經建立嘅連線(例如你主動連出去,對方回覆返你)

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

`-m state –state ESTABLISHED,RELATED` 係用 conntrack 狀態追蹤,放行所有「已經建立」或者「相關」嘅連線,呢條規則非常重要,唔加嘅話好多正常回覆都會被丟棄。

第五步:放行 HTTP/HTTPS(如果做 Web Server)

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

第六步:保存規則

iptables 規則喺記憶體入面,重開機就會消失。要永久保存,用以下指令:

Debian / Ubuntu:

sudo apt install iptables-persistent
sudo netfilter-persistent save

CentOS / RHEL:

sudo service iptables save

最後:再確認一次規則

sudo iptables -L -n -v

🔗 參考資料:NVD NIST 漏洞資料庫

你應該會見到類似以下輸出:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source    destination
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0 0.0.0.0/0
  150 12000 ACCEPT     all  --  *      *       0.0.0.0/0 0.0.0.0/0  state RELATED,ESTABLISHED
    5   300 ACCEPT     tcp  --  *      *       0.0.0.0/0 0.0.0.0/0  tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0 0.0.0.0/0  tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0 0.0.0.0/0  tcp dpt:443

總結

學識咗以上幾招,你部 Linux 伺服器已經有基本防護,唔會再裸奔任人掃。記得幾個重點:預設 DROP、SSH 一定要放行、保存規則唔好漏。之後你想再進階,可以研究嚇 `–limit` 做速率限制、`REJECT` 同 `DROP` 嘅分別、甚至用 `fail2ban` 配合自動封鎖暴力破解。防火牆係第一道防線,打好個底,之後先談得上更深入嘅安全配置。

#IT教學 #Linux #技術分享 #防火牆 #SSH

Linux 防火牆 iptables 新手教學:由零開始鎖好你部伺服器 - 文章重點速覽 infographic