用 Linux 防火牆 iptables 封鎖惡意 IP 守護伺服器

# 用 Linux 防火牆 iptables 封鎖惡意 IP,守好你部伺服器 做 IT 嘅朋友,尤其係管理伺服器嘅,應該成日都會遇到呢種情況:睇返日誌(log)先發現,原來成晚有幾百個 IP 不停咁試緊 SSH 密碼,或者係亂咁掃你部機嘅 port。今日就同大家分享一個最直接、最古老但依然超實用嘅方法 —— 用 **iptables 防火牆** 去封鎖(block)呢啲惡意 IP。 ## ipta...

用 Linux 防火牆 iptables 封鎖惡意 IP 守護伺服器 - 文章重點速覽 infographic

# 用 Linux 防火牆 iptables 封鎖惡意 IP,守好你部伺服器

做 IT 嘅朋友,尤其係管理伺服器嘅,應該成日都會遇到呢種情況:睇返日誌(log)先發現,原來成晚有幾百個 IP 不停咁試緊 SSH 密碼,或者係亂咁掃你部機嘅 port。今日就同大家分享一個最直接、最古老但依然超實用嘅方法 —— 用 **iptables 防火牆** 去封鎖(block)呢啲惡意 IP。

## iptables 係咩嚟?

iptables 係 Linux 核心入面一個封包過濾嘅工具,基本上所有主流 Linux 發行版(Ubuntu、CentOS、Debian、Rocky Linux)都有內置。佢用嚟控制邊啲網絡流量可以入、邊啲要擋住,係守護伺服器嘅第一道防線。

## 基本操作:Block 一個 IP

最簡單嘅情況,就係你想封鎖一個已知嘅惡意 IP。假設個 IP 係 `203.0.113.55`,你只需要行:

sudo iptables -A INPUT -s 203.0.113.55 -j DROP

拆解一下:
– `-A INPUT`:喺 INPUT chain(入嚟嘅流量)加一條規則
– `-s 203.0.113.55`:來源 IP 係呢個
– `-j DROP`:直接丟棄,唔回覆對方

如果想完全唔俾佢掂到部機,可以加埋 OUTPUT:

sudo iptables -A OUTPUT -d 203.0.113.55 -j DROP

## Block 成段 IP 範圍

好多時攻擊者唔止一個 IP,而係成個網段(subnet)一齊嚟。你可以咁封:

sudo iptables -A INPUT -s 203.0.113.0/24 -j DROP

`/24` 就代表封曬成個 Class C 網段,一次過擋曬 256 個 IP。

## Block 特定 Port

有時你想封鎖某啲 port 唔俾人掂,例如封曬所有對 22(SSH)以外嘅嘗試,又或者係封鎖某個服務 port:

# 封鎖來源對 3306 (MySQL) port 嘅存取
sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

## 實戰:自動封鎖狂試 SSH 嘅 IP

呢個係最常用嘅場景。你可以用 `fail2ban` 呢類工具自動做,但如果你想自己控制,可以用一個簡單嘅 script 配合 iptables。邏輯係:揾出 SSH log 入面嘗試失敗太多次嘅 IP,然後自動封鎖:

# 揾出失敗超過 5 次嘅 IP
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | awk '$1 > 5 {print $2}'

揾到之後,逐個 block:

for ip in $(grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | awk '$1 > 5 {print $2}'); do
    sudo iptables -A INPUT -s $ip -j DROP
    echo "已封鎖 $ip"
done

## 睇返你 Block 咗邊啲

sudo iptables -L INPUT -n --line-numbers

咁樣就可以睇到所有 INPUT 規則,前面仲有行號(line number),方便你之後刪除。

## 刪除規則(解封)

如果你想解封某個 IP,先揾返個行號,再刪除:

sudo iptables -L INPUT -n --line-numbers
# 假設要刪嘅規則係第 3 行
sudo iptables -D INPUT 3

## 記得保存規則!

iptables 嘅規則預設係唔會自動保存嘅,一 reboot 就會消失。所以你必須手動保存:

# Debian / Ubuntu
sudo apt install iptables-persistent
sudo netfilter-persistent save

# CentOS / Rocky / RHEL
sudo service iptables save

## 小貼士

– 封鎖 IP 之前,先確認嗰個唔係你自己嘅 IP,否則你會將自己鎖喺出面!
– 用 `DROP` 好過 `REJECT`,因為 `DROP` 唔會回覆,對方唔知你有冇封佢,浪費攻擊者時間。
– 定期 review 你嘅規則,唔好積太多無用嘅規則。

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

掌握咗 iptables 嘅基本用法,你就多咗一個保護伺服器嘅強力武器。下次再見到 log 一大堆攻擊,就唔使咁慌啦!