跳至主要内容

防火牆設定

使用此資訊設定防火牆的配置。

設定預設防火牆

此預設區段宣告不屬於特定區域的全域防火牆設定。

表 1. 設定預設防火牆
語法
  • sudo uci set firewall.@defaults[0].input=<input>
  • sudo uci set firewall.@defaults[0].output=<output>
  • sudo uci set firewall.@defaults[0].forward=<forward>
  • sudo uci set firewall.@defaults[0].syn_flood=<syn_flood>
  • sudo uci set firewall.@defaults[0].drop_invalid=<drop_invalid>
表 2. 參數
名稱類型必要預設值說明

input

字串

REJECT

為過濾器表的 INPUT 鏈設定原則。

output

字串

REJECT

為過濾器表的 OUTPUT 鏈設定原則。

forward

字串

REJECT

為過濾器表的 FORWARD 鏈設定原則。

syn_flood

布林值

0

啟用 SYN 泛洪保護(已由 synflood_protect 設定淘汰)。

drop_invalid

布林值

0

丟棄無效的封包(例如,與任何作用中連線都不相符的封包)。

指令範例:

表 3. 指令範例
  • sudo uci set firewall.@defaults[0].input=ACCEPT
  • sudo uci set firewall.@defaults[0].output= ACCEPT
  • sudo uci set firewall.@defaults[0].forward= ACCEPT
  • sudo uci set firewall.@defaults[0].syn_flood=1
  • sudo uci set firewall.@defaults[0].drop_invalid=1
  • sudo uci commit firewall
  • sudo /etc/init.d/firewall restart

新增區域

本節定義了測試的通用屬性。輸入和輸出選項為進出此區域的流量設定預設原則,轉遞選項則描述在區域內不同網路間轉遞流量的原則。涵蓋的網路指明了哪些可用網路是此區域的成員。

表 4. 新增區域
語法
  • sudo uci add firewall zone
  • sudo uci set firewall.@zone[-1].name=<name>
  • sudo uci set firewall.@zone[-1].input=<input>
  • sudo uci set firewall.@zone[-1].output=<output>
  • sudo uci set firewall.@zone[-1].forward=<forward>
  • sudo uci set firewall.@zone[-1].masq=<masq>
  • sudo uci set firewall.@zone[-1].mtu_fix=<mtu_fix>
  • sudo uci set firewall.@zone[-1].network=<network>
  • sudo uci set firewall.@zone[-1].family=<family>
  • sudo uci set firewall.@zone[-1].masq_src=<masq_src>
  • sudo uci set firewall.@zone[-1].masq_dest=<masq_dest>
  • sudo uci set firewall.@zone[-1].conntrack=<conntrack>
  • sudo uci set firewall.@zone[-1].log=<log>
  • sudo uci set firewall.@zone[-1].log_limit=<log_limit>
  • udo uci commit firewall
表 5. 參數

參數

類型

必要

預設值

說明

name

區域名稱

唯一區域名稱。工作防火牆區域名稱的最大長度為 11 個字元。

input

字串

REJECT

為過濾器表的 INPUT 鏈設定原則。

output

字串

REJECT

為過濾器表的 OUTPUT 鏈設定原則。

forward

字串

REJECT

為過濾器表的 FORWARD 鏈設定原則。

masq

布林值

0

指定是否應偽裝傳出區域的流量,在 WAN 區域通常會啟用此功能。

mtu_fix

布林值

0

為傳出區域的流量啟用 MSS 箝制。

network

清單

附加到該區域的介面列表。如果省略而且未提供額外* 選項、子網路或裝置,則預設使用 name 的值。網路配置中定義的別名介面不能用做有效的「獨立」網路。使用 uci 中說明的清單語法。

family

字串

0

要產生 iptables 規則的通訊協定系列(ipv4、ipv6 或任何通訊協定)。

masq_src

子網路清單

0.0.0.0/0

限制對給定來源子網路的偽裝。可在子網路前加上 ! 字首以取反;允許使用多個子網路。

masq_dest

子網路清單

0.0.0.0/0

限制對給定目的地子網路的偽裝。可在子網路前加上 ! 字首以取反;允許使用多個子網路。

conntrack

布林值

如果使用偽裝,值為 1,否則為 0

強制對此區域進行連線追蹤(請參閱連線追蹤的附註)。

log

布林值

0

為此區域中遭拒絕和遭丟棄的流量建立日誌規則。

log_limit

字串

10/分鐘

限制每個間隔的日誌訊息量。

指令範例:

表 6. 指令範例
  • sudo uci add firewall zone
  • sudo uci set firewall.@zone[-1].name=test
  • sudo uci set firewall.@zone[-1].input=ACCEPT
  • sudo uci set firewall.@zone[-1].output= ACCEPT
  • sudo uci set firewall.@zone[-1].forward= ACCEPT
  • sudo uci set firewall.@zone[-1].masq=<masq>
  • sudo uci set firewall.@zone[-1].mtu_fix=<mtu_fix>
  • sudo uci set firewall.@zone[-1].network=<network>
  • sudo uci set firewall.@zone[-1].family=<family>
  • sudo uci set firewall.@zone[-1].masq_src=<masq_src>
  • sudo uci set firewall.@zone[-1].masq_dest=<masq_dest>
  • sudo uci set firewall.@zone[-1].conntrack=<conntrack>
  • sudo uci set firewall.@zone[-1].log=<log>
  • sudo uci set firewall.@zone[-1].log_limit=<log_limit>
  • sudo uci commit firewall
  • sudo /etc/init.d/firewall restart

新增轉遞

轉遞區段控制著區域之間流量的流動,而且可以為特定方向啟用 MSS 箝制。一個轉遞規則僅涵蓋一個方向。若要允許兩個區域之間的雙向流量流動,需要兩個轉遞,而且各轉遞的 src 和 dest 恰好相反。

表 7. 新增轉遞
語法
  • sudo uci set firewall.@zone[-1].src=<src>
  • sudo uci set firewall.@zone[-1].dest=<dest>
  • sudo uci commit firewall
表 8. 參數
參數類型必要預設值說明

src

區域名稱

指定流量來源區域。必須引用其中一個已定義的區域名稱。

dest

區域名稱

指定流量目的地區域。必須引用其中一個已定義的區域名稱。

指令範例:

表 9. 指令範例
  • sudo uci set firewall.@zone[-1].src=test
  • sudo uci set firewall.@zone[-1].dest=lan
  • sudo uci commit firewall
  • sudo /etc/init.d/firewall restart

新增埠轉遞

埠轉遞 (DNAT) 由重新導向區段定義。指定來源區域上與給定規則相符合的所有傳入流量都將導向至指定的內部主機。重新導向通常也稱為「埠轉遞」和「虛擬伺服器」。埠範圍的指定方式為 start:stop,例如 6666:6670。這類似於 iptables 語法。

表 10. 新增埠轉遞
語法
  • sudo uci add firewall redirect
  • sudo uci set firewall.@redirect[-1].enabled=<enabled>
  • sudo uci set firewall.@redirect[-1].name=<name>
  • sudo uci set firewall.@redirect[-1].proto=<proto>
  • sudo uci set firewall.@redirect[-1].src=<src>
  • sudo uci set firewall.@redirect[-1].src_mac=<src_mac>
  • sudo uci set firewall.@redirect[-1].src_ip=<src_ip>
  • sudo uci set firewall.@redirect[-1].src_port=<src_port>
  • sudo uci set firewall.@redirect[-1].src_dip=<src_dip>
  • sudo uci set firewall.@redirect[-1].src_dport=<src_dport>
  • sudo uci set firewall.@redirect[-1].dest=<dest>
  • sudo uci set firewall.@redirect[-1].dest_ip=<dest_ip>
  • sudo uci set firewall.@redirect[-1].dest_port=<dest_port>
  • sudo uci set firewall.@redirect[-1].reflection=<reflection>
  • sudo uci commit firewall
表 11. 參數
參數類型必要預設值說明

enabled

字串

1 或 yes

是否啟用重新導向規則。

name

字串

唯一重新導向名稱。

proto

通訊協定名稱或數字

tcp udp

使用給定的通訊協定比對傳入流量。

src

區域名稱

yes(用於 DNAT 目標)

指定流量來源區域。必須引用其中一個已定義的區域名稱。在典型的埠轉遞中,這通常是 wan。

src_mac

MAC 位址

比對來自指定 MAC 位址的傳入流量。

src_ip

IP 位址

比對來自指定來源 IP 位址的傳入流量。

src_port

埠或範圍

比對來自用戶端主機上給定來源埠或埠範圍(例如:「5000-5100」)的傳入流量。

src_dip

IP 位址

是(用於 SNAT 目標)

對於 DNAT,比對在給定目的地 IP 位址導向的傳入流量。對於 SNAT,將來源位址重寫為給定位址。

src_dport

埠或範圍

對於 DNAT,比對在此主機上的給定目的地埠或埠範圍(例如:「5000-5100」)導向的傳入流量。對於 SNAT,將來源埠重寫為給定值。

dest

區域名稱

是(用於 SNAT 目標)

指定流量目的地區域。必須引用其中一個已定義的區域名稱。對於 Attitude Adjustment 上的 DNAT 目標,NAT 反射僅在此值等於 lan 時有效。

dest_ip

IP 位址

yes(用於 DNAT 目標)

對於 DNAT,將相符的傳入流量重新導向至指定的內部主機。對於 SNAT,比對在給定位址導向的流量。對於 DNAT,如果 dest_ip 值與路由器的本端 IP 位址相符,如 ifconfig 中所示,則該規則將轉換為 DNAT + input「accept」規則。否則,即是 DNAT + forward 規則。

dest_port

埠或範圍

對於 DNAT,將相符的傳入流量重新導向至內部主機上的給定埠。對於 SNAT,比對在給定埠導向的流量。只能指定一個埠或範圍(例如:「5000-5100」),而不能像「規則」(如下所述)中所示的那樣指定多個不同埠。

reflection

布林值

1

為此重新導向啟動 NAT 反射,適用於 DNAT 目標。

指令範例:

表 12. 將 http(而非 HTTPS)流量轉遞至執行於 192.168.1.10 的網路伺服器:
  • sudo uci add firewall redirect
  • sudo uci set firewall.@redirect[-1].enabled=1
  • sudo uci set firewall.@redirect[-1].proto=tcp
  • sudo uci set firewall.@redirect[-1].src=wan
  • sudo uci set firewall.@redirect[-1].src_dport=80
  • sudo uci set firewall.@redirect[-1].dest=lan
  • sudo uci set firewall.@redirect[-1].dest_ip=192.168.1.10
  • sudo uci commit firewall
  • sudo /etc/init.d/firewall restart

新增流量規則

埠轉遞 (DNAT) 由重新導向區段定義。指定來源區域上與給定規則相符合的所有傳入流量都將導向至指定的內部主機。重新導向通常也稱為埠轉遞虛擬伺服器。埠範圍的指定方式為 start:stop,例如 6666:6670。這類似於 iptables 語法。

表 13. 新增流量規則
語法
  • sudo uci add firewall rule
  • sudo uci set firewall.@rule[-1].enabled=<enabled>
  • sudo uci set firewall.@rule[-1].name=<name>
  • sudo uci set firewall.@rule[-1].family=<family>
  • sudo uci set firewall.@rule[-1].proto=<proto>
  • sudo uci set firewall.@rule[-1].src=<src>
  • sudo uci set firewall.@rule[-1].src_mac=<src_mac>
  • sudo uci set firewall.@rule[-1].src_ip=<src_ip>
  • sudo uci set firewall.@rule[-1].src_port=<src_port>
  • sudo uci set firewall.@rule[-1].dest=<dest>
  • sudo uci set firewall.@rule[-1].dest_ip=<dest_ip>
  • sudo uci set firewall.@rule[-1].dest_port=<dest_port>
  • sudo uci set firewall.@rule[-1].target=<target>
  • sudo uci set firewall.@rule[-1].weekdays=<weekdays>
  • sudo uci set firewall.@rule[-1].monthdays=<monthdays>
  • sudo uci set firewall.@rule[-1].start_time=<start_time>
  • sudo uci set firewall.@rule[-1].stop_time=<stop_time>
  • sudo uci set firewall.@rule[-1].start_date=<start_date>
  • sudo uci set firewall.@rule[-1].stop_date=<stop_date>
  • sudo uci set firewall.@rule[-1].utc_time=<utc_time>
  • uci commit firewall
表 14. 參數
參數類型必要預設值說明

enabled

布林值

啟用或停用規則。

name

字串

唯一規則名稱。

family

字串

any

要產生 iptables 規則的通訊協定系列(ipv4、ipv6 或任何通訊協定)。

proto

通訊協定名稱或數字

tcp udp

使用給定的通訊協定比對傳入流量。可以是 tcp、udp、tcpudp、udplite、icmp、esp、ah、sctp 中的一個或全部,也可以是代表這些通訊協定之一或其他不同通訊協定的數值。也允許使用來自 /etc/protocols 的通訊協定名稱。數字 0 相當於全部。

src

區域名稱

是(從 Firewall v2 版本 58 和更高版本開始為選用)

指定流量來源區域。必須引用其中一個已定義的區域名稱。

src_mac

MAC 位址

比對來自指定 MAC 位址的傳入流量。

src_ip

IP 位址

比對來自指定來源 IP 位址的傳入流量。

src_port

埠或範圍

如果指定了相關通訊協定,則比對來自指定來源埠或埠範圍(例如:「5000:5100」,埠範圍不適用於所有通訊協定)的傳入流量。可以指定多個埠,例如「80 443 465」1。

dest

區域名稱

指定流量目的地區域。必須引用其中一個已定義的區域名稱,或用 * 表示任何區域。如果指定,則該規則適用於轉遞的流量;否則,將其視為輸入規則。

dest_ip

IP 位址

比對導向至指定目的地 IP 位址的傳入流量。若無目的地區域,則將其視為輸入規則!

dest_port

埠或範圍

如果指定了相關通訊協定,則比對在給定目的地埠或埠範圍(例如:「5000:5100」,埠範圍不適用於所有通訊協定)導向的傳入流量。可以指定多個埠,例如「80 443 465」1。

target

字串

DROP

為此重新導向啟動 NAT 反射,適用於 DNAT 目標。

weekdays

工作日清單

(始終)

如果指定,則僅在給定的工作日比對流量,例如 sun mon thu fri 表示僅在星期日、星期一、星期四和星期五進行比對。可以在清單前加上驚嘆號來取反,例如 ! sat sun 表示星期六和星期日除外,其他時間始終進行比對。

monthdays

日期清單

(始終)

如果指定,則僅在當月的給定日期比對流量,例如 2 5 30 表示僅在當月的 2 日、5 日和 30 日比對流量。可以在清單前加上驚嘆號來取反,例如 !31 表示當月 31 日除外,其他時間始終進行比對。

start_time

時間 (hh:mm:ss)

(始終)

如果指定,則僅在一天的給定時間(含)之後比對流量。

stop_time

時間 (hh:mm:ss)

(始終)

如果指定,則僅在一天的給定時間(含)之前比對流量。

start_date

日期 (yyyy-mm-dd)

(始終)

如果指定,則僅在給定日期(含)之後比對流量。

stop_date

日期 (yyyy-mm-dd)

(始終)

如果指定,則僅在給定日期(含)之前比對流量。

utc_time

布林值

0

將所有給定的時間值視為 UTC 時間,而不是本地時間。

指令範例:

表 15. 阻止所有嘗試與指定主機位址連接的連線嘗試。
  • sudo uci add firewall rule
  • sudo uci set firewall.@rule[-1].enabled=1
  • sudo uci set firewall.@rule[-1].src=lan
  • sudo uci set firewall.@rule[-1].dest=wan
  • sudo uci set firewall.@rule[-1].dest_ip=123.45.67.89
  • sudo uci set firewall.@rule[-1].target=REJECT
  • sudo uci commit firewall
  • sudo /etc/init.d/firewall restart

新增來源 NAT

來源 NAT 會變更傳出封包,使其看起來好像嵌入式交換器系統是封包的來源。

指令範例:
表 16. 為 UDP 和 TCP 流量定義來源 NAT

為導向至埠 123(源自 IP 位址為 10.55.34.85 的主機)的 UDP 和 TCP 流量定義來源 NAT。

來源位址重寫為 63.240.161.99:

  • sudo uci add firewall redirect
  • sudo uci set firewall.@redirect[-1].enabled=1
  • sudo uci set firewall.@redirect[-1].src=lan
  • sudo uci set firewall.@redirect[-1].src_ip=10.55.34.85
  • sudo uci set firewall.@redirect[-1].src_dip=63.240.161.99
  • sudo uci set firewall.@redirect[-1].dest=wan
  • sudo uci set firewall.@redirect[-1].dest_port=123
  • sudo uci set firewall.@redirect[-1].target=SNAT
  • sudo uci commit firewall
  • sudo /etc/init.d/firewall restart