在 Linux 的環境中,有時候會用到 iptables 來限制遠端連入的 ip 或 port,用過不少次不過都是直接 Google 然後複製貼上,趁最近又用到稍微把常用的幾個參數跟指令做些整理。
參數說明
新增及刪除規則參數
參數 | 說明 |
-A <規則> | 新增規則至規則清單的結尾。 |
-I <規則> | 新增規則至規則清單的開頭。 |
-D <流水號> | 刪除規則清單中第幾個規則。 |
檢視規則參數
參數 | 說明 |
-L | 檢視規則清單。 |
-L -n | 檢視規則清單,並以數字形式顯示 IP 及 Port。 |
-L -v | 檢視規則清單,並顯示所有規則詳細資訊。 |
-L -line-numbers | 檢視規則清單,並顯示清單行號(流水號)。 |
規則參數
參數 | 說明 |
-i <網路卡介面> | 針對 INPUT 或 FORWARD 使用,指定該規則限制的網路卡介面,預設為所有網路卡介面。 |
-o <網路卡介面> | 針對 OUTPUT 或 FORWARD 使用,指定該規則限制的網路卡介面,預設為所有網路卡介面。 |
-p <協定> | 指定該規則限制的協定,如 TCP、UDP 或 ICMP 等等,詳細可於 /etc/protocols 中查看,預設為所有協定。 |
-s <來源 IP 或主機名稱/網路遮罩> | 指定該規則限制的來源 IP,遮罩可輸入也可不輸入。 |
-d <來源 IP 或主機名稱/網路遮罩> | 指定該規則限制的目的 IP,遮罩可輸入也可不輸入。 |
-j <處置> | 指定該規則若符合時的處置方式,可為 ACCEPT 或 DROP。 |
擴充規則參數
參數 | 說明 |
-m tcp --sport <來源 Port> | 指定該規則限制的協定為 TCP 及來源 Port,可為單一 Port 或特定範圍 Port,如 8000:9000。 |
-m tcp --dport <目的 Port> | 指定該規則限制的協定為 TCP 及目的 Port,可為單一 Port 或特定範圍 Port,如 8000:9000。 |
-m udp --sport <來源 Port> | 指定該規則限制的協定為 UDP 及來源 Port,可為單一 Port 或特定範圍 Port,如 8000:9000。 |
-m udp --dport <目的 Port> | 指定該規則限制的協定為 UDP 及目的 Port,可為單一 Port 或特定範圍 Port,如 8000:9000。 |
-m multiport --sports <多個來源 Port> | 指定該規則限制的單一或多個來源 Port,可為分散也可為特定範圍,如 80,443,8000:9000,以分散式指定最多指定 15 個(組)。 |
-m multiport --dports <多個目的 Port> | 指定該規則限制的單一或多個目標 Port,可為分散也可為特定範圍,如 80,443,8000:9000,以分散式指定最多指定 15 個(組)。 |
-m state --statue <多個連線狀態> | 指定該規則限制的單一或多個連線狀態,可以逗號作分散式指定,共有以下五種。 NEW:新的連線。 ESTABLISHED:NEW 之後至該連線於連線追蹤資料庫中失效前。 RELATED:新的連線,但是與已存在連線相關。 INVALID:無效的連線。 UNTRACKED:未追蹤的連線。 |
常用指令
# 簡要檢視目前所有輸入規則
iptables -L INPUT -n --line-numbers
# 限制從遠端透過 TCP 的 80 及 443 Port 可以輸入
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# 限制本機可從網路介面卡 eth0 輸出至任意處
iptables -A OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
# 限制連線狀態為 ESTABLISHED 及 RELATED 可以輸入,可用於本機要呼叫遠端 Web API 時,或有與遠端資料交換時,因會有回傳資料故並非只有輸出,仍有輸入
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 禁止任何輸入,通常用於規則清單的結尾
iptables -A INPUT -j DROP
# 刪除行號(流水號)為 2 的輸入規則,切記行號為流水號,若刪除後後面的規則會往前遞補
iptables -D INPUT 2