知識鏈接:linux平台下防火牆iptables原理
一、 OpenWrt 內置防火牆介紹
Openwrt 是一個 GNU/Linux 的發行版, 和其他大多數的發行版一樣,Openwrt 的防火牆同樣也是基於 iptables。 在 OpenWRT 下防火牆的默認行為已經可以滿足路由器的需要,一般情況下也無需修改。OpenWrt 關於 NAT、 DMZ、防火牆規則等等都是由配置文件 /etc/config/firewall 文件進行控制的,有關於什么是 NAT 或者 DMZ 等內容,下文會講到。對於防火牆的修改工作,我們采用 vi 進行直接的文件編輯完成。防火牆文件總會在/etc/init.d/firewall 啟動的時候由 UCI 進行解碼並且生成 iptables規則生效。因此使用者不需要了解 iptables 即可通過配置文件實現防火牆控制。
二、防火牆指令
防火牆的修改生效,需要重啟防火牆執行以下指令:
1、重載防火牆配置
/etc/init.d/firewall reload
2、重啟防火牆
/etc/init.d/firewall restart
三、防火牆配置文件解釋
/etc/config/firewall
配置文件內容解釋:
1、防火牆的第一個內容
- syn_flood :是否啟用防洪水攻擊。可選值: 0 關閉,1 啟用。
- input :設置 INPUT 鏈(chain)的過濾策略,可選值: ACCEPT 允許, REJECT拒絕。
- output:設置 OUTPUT 鏈(chain)的過濾策略,可選值: ACCEPT 允許,REJECT 拒絕。
- forward : 設置 FORWARD 鏈(chain)的過濾策略,可選值: ACCEPT 允許,REJECT 拒絕。
- disable_ipv6: 設置關閉掉 IPv6 的防火牆策略,可選值: 0 忽略,1 關閉
這部分參考值既是系統默認的即可,無需修改。
2、防火牆的第二個內容(域):
- config 后面是表示配置項的名稱,這里”zone”為域的意思。
- name 表示域的名字,必須是唯一值,可選值: wan, lan
- network 表示網絡列表,用來指示哪些接口被捆綁到這個域中,可選接口的名稱,比如: lan,
- wan, wan6
- input :ACCEP 允許 INPUT 鏈(chain)的過濾策略
- output: ACCEPT 允許 OUTPUT 鏈(chain)的過濾策略
- forward: ACCEPT 允許 FORWARD 鏈(chain)的過濾策略
- masq:設置傳輸偽裝,如果是 WAN 口必須為 1
- mtu_fix :設置 MTU 的 MSS 鉗制,如果是 WAN 口請為 1
簡單來說:
- mtu:是網絡傳輸最大報文包。
- mss: 是網絡傳輸數據最大值。
- mss :加包頭數據就等於 mtu.
3、防火牆的第三部分內容(轉發)
- src : 是 設置轉發來源
- dest:是 設置轉發目標
4、防火牆的第四部分內容(規則)
這里只是羅列出了幾個防火牆的規則,其實防火牆規則在/etc/config/firewall 中可以有任意數量的規則,這些規則定義了數據傳輸的動作和行為是被允許還是拒絕。
- name:設置當前這個 rule 的名稱
- target :設置防火牆動作,可選值: ACCEPT 許可, REJECT 拒絕, DROP 拋棄
- src: 數據源的 zone 域是哪個。可選值: wan / lan
- src_ip :數據源的 IP 地址是哪個。
- src_mac:數據源的 MAC 地址是哪個。
- src_port:數據源的端口,可以是一個端口,或一個端口范圍,但是必須
同時指定了協議類型
- proto: 數據源的協議類型, 可選值: tcp, udp, tcpudp, udplit, icmp, esp, ah, sctp,或 all 表示全部
- dest :數據目標的 zone 域是哪個。可選值: wan / landest_ip 表示:數據目標的 IP 地址。
- dest_port :數據目標的端口,可以是一個端口,或一個端口范圍,但是必須同時指定了協議類型
- family :數據的協議族,可選值: ipv4, ipv6, any
5、防火牆的第五部分內容
OpenWrt 防火牆允許使用者通過 WAN 口訪問特定的端口重定向給局域網的一台電腦設備(比如 WAN 口訪問 80 端口(HTTP)將重定向給局域網某台網站服務器)。 端口重定向是在防火牆配置/etc/config/firewall 中定義 redirect 段策略實現的。所有匹配的來源數據將根據目標設置轉發到目標主機上。 firewall 配置中可以有多個 redirect 策略,默認是沒有開放任何重定向的,如果你需要重定向請使用 vi 或 UCI 進行配置。
- name :設置當前這個 redirect 的名稱
- src :轉發源的 zone 域,一般轉發都是轉發從 wan 過來的訪問
- src_ip :轉發源的 IP 地址指定
- src_mac:轉發源的 MAC 地址指定
- src_port :轉發源的端口指定
- proto : 轉發源的協議類型, 可選值: tcp, udp, tcpudp, udplit, icmp, esp, ah, sctp, 或all 表示全部
- dest :轉發目標的 zone 域dest_ip 表示:轉發目標的 IP 地址指定
- dest_mac :轉發目標的 MAC 地址指定
- dest_port :轉發目標的端口指定
端口重定向的可配置性很靈活。比如我們將 9020 這個端口轉發給內網一台服務器的 80 端口,如下:
config redirect option name '9020-80' option proto 'tcp' option src 'wan' option src_dport '9020' option dest 'lan' option dest_ip '192.168.1.100' option dest_port '80'
四、DMZ 介紹
DMZ 是英文“ demilitarized zone”的縮寫,中文名稱為“隔離區”,也稱“非軍事化區”。它是為了解決安裝防火牆后外部網絡不能訪問內部網絡服務器的問題,而設立的一個非安全系統與安全系統之間的緩沖區,這個緩沖區位於企業內部網絡和外部網絡之間的小網絡區域內,在這個小網絡區域內可以放置一些必須公開的服務器設施,如企業 Web 服務器、FTP 服務器和論壇等。另一方面,通過這樣一個 DMZ 區域,更加有效地保護了內部網絡,因為這種網絡部署,比起一般的防火牆方案,對攻擊者來說又多了一道關卡。端口映射與 DMZ 的區別在於:端口映射只是映射指定的端口,DMZ 相當於映射所有的端口,並且直接把主機暴露在網關中,比端口映射方便但是不安全。
下面是關於 dmz 的一個示意圖:
好的,結合之前簡單的規則部分,這里我們給出一個將電腦 192.168.1.2 設置 DMZ 隔離區的例子:
Simple DMZ rule
The following rule redirects all WAN ports for all protocols to the internal host
192.168.1.2. config redirect option src wan option proto all option dest_ip 192.168.1.2