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




