對于普通的Linux防火墻來說,其往往采用的是路由模式。即在Linux防火墻主機上設置兩塊網卡,分別擁有獨立的IP,用來連接內網和外網。因此,黑客在對其進行攻擊時,就有了明確的目標。
另外,在企業網絡環境中,有時可能根據需要對防火墻設備進行調整(例如添加新的防火墻,連接VLAN等),這就必然涉及到對相關的網絡配置進行更改,調整防火墻規則,修改與IP設置相關的參數等,在實際工作中操作起來是很繁瑣的。如果使用透明式防火墻,就可以輕松解決以上問題。
將Linux主機配置為網橋設備,并配合防火墻模塊,就可以將其變成透明式防火墻。其使用的不是路由模式而是橋接模式,屬于OSI網絡層級中的第二層的網絡設備,因此不必在網絡接口上設置IP。對于以太網來說,網橋設備不會隔斷廣播數據包發送。例如網橋設備連接了三個實體網段,對于某個網段實體內的兩臺主機之間的單播數據傳輸來說,網橋設備禁止其傳送給別的實體網段。當一個實體網段中的主機向另一個實體網段中的某臺主機進行單播數據傳輸時,網橋設備不會將數據包傳輸到其他的實體網段中。透明式防火墻可以在不改變原有網絡環境配置的情況下,輕松部署到網絡中的任何位置。
因為透明式防火墻無需設置IP,所以擁有了很好的隱蔽性。對于黑客來說,無法感覺到透明式防火墻的存在,造成了黑客無法確定需要攻擊的目標究竟存在何處。在Linux中已經引入了網橋機制,執行“yum install bridge-utils”命令,安裝網橋管理工具。例如,在Linux網橋主機上設置兩塊網卡,分別連接IP為 10.0.1.10的 PC1,IP為10.0.10.20的 PC2。 這 樣,雖然兩臺主機處于同一實體網段,但是因為被Linux網橋主機隔離,是無法直接通訊的。只有將Linux網橋主機配置為網橋設備,才可以正常通訊。使用VI命令,打開“/etc/sysconfig/network-scripts/ifconfig-eth0”文 件,在其 中 設 置“DEVICE=eth0”、“ONBOOT=yes”、“BOOTPROTO=static”、“HWADDR=xx.xx.xx.xx.xx.xx”。
對 應 的,打 開“/etc/sysconfig/networkscripts/ifconfigeth1”文 件,在 其 中 設置“DEVICE=eth1”、“ONBOOT=yes”、“BOOTPROTO=static”、“HWADDR=xx.xx.xx.xx.xx.xx”。其中的“HWADDR”參數分別設置兩塊網卡的MAC地址。執行“echo 1 > /proc/sys/net/ipv4/ip_forward”命令,啟用數據包轉發功能,允許數據包在eth0和eth1接口之間傳送。執行“brctl addbr br0”命令,添加一個名為“br0”的虛擬網橋接口。執行“brctl addif br0 eth0”和“brctl addif br0 eth1”命令,將eth0和eth1兩個網絡接口合并為一個網橋設備。執行“ifconfig br0 up”命令,啟動名為“br0”的虛擬網橋接口。這樣,該Linux網橋主機配置為網橋設備,兩邊的主機PC1和PC2就可以正常通訊了。為了避免出現廣播風暴導致網絡擁堵,可以執行“brctl stp br0 on”命令,啟用網橋設備的STP(Spanning Tree Protoco,生成樹協議)機制,來有效解決廣播風暴問題。
在網橋設備上配合NetFilter防火墻模塊,才可以構建透明防火墻。在OSI網絡層級中,NetFilter不僅可以工作在第三層,其實也可以運行在第二層。在主流的Linux中,是無需進行額外配置的。注意,對網橋設備中NetFilter防火墻來說,其只能識別網橋接口,而無法識別以太網接口的。例如,如果想攔截PC2對PC1的PING探測,執行“iptables-A FORWARD -i eth1 -o eth0 -p icmp -j DROP”,在“Filter”表中的“FORWARD”鏈中添加一條攔截規則,假設PC1連接到eth0接口,PC2連接到eth1接口。但是,該規則是無效的,因為網橋設備上的NetFilter是無法識別以太網接口的。只有執行“iptanles -A FORWARD-m physdev --physdev-in eth1 -p icmp -j DROP”命令,添加一條規則,才可以禁止ICMP數據包從eth1接口進入。其中的“-m physdev”參數表示使用“physdev”模塊,“--physdev-in”參數表示匹配進入網橋實際接口的數據包,對應的“--physdevout”參數表示匹配從網橋實際接口發出的數據包。
例如,在某企業網擁有 61.xxx.xxx.10,61.xxx.xxx.20,61.xxx.xxx.30 三個公網IP,NAT主機使用的IP為 61.xxx.xxx.10,企 業 內網通過多對一的映射機制,通過該NAT設備訪問外網,該企業的Web和FTP服務器分別使用的IP為61.xxx.xxx.20 和 61.xxx.xxx.30。為了控制對Web和FTP服務器的訪問,在其和NAT主機之間設置一臺Linux主機作為透明防火墻。我們只允許來自NAT主機的數據包通過透明防火墻訪問Web和FTP服務器。為此可以在Linux透明防火墻上執行“iptables -t filter -F”命令,清除Filter表中的所有規則。
執 行“iptables –A FORWARD -m physdev--physdev-ineth0-mstate --state ESTABLISHED,RELATED –J ACCEPT”命令,在“Filter”表中的“FORWARD”鏈中創建一條規則,允許已經建立的以及由其產生和關聯的網絡連接通過透防火墻的eth0接口進入,來訪問Web和FTP服務器。這里假設透明防火墻的eth0接口連接NAT主機,eth1接 口 連 接 Web和FTP服務器。
其 中 的“-m state”參數表示使用State模塊,用來檢測數據包的狀態。“ESTABLISHED” 參 數表示對已經建立的連接放行,“RELATED”參 數 對 相關聯的網絡連接放行。執行“iptable -A FORWARD-m physdev --physdev-in eth0 -m mac -mac-source xx:xx:xx:xx:xx:xx –j ACCEPT”命令,創建一條規則,允許來自NAT主機的數據包通過該透明防火墻。其中的“-m mac”參數表示使用MAC地址檢測模塊,“–macsource xx:xx:xx:xx:xx:xx”參數表示只針對NAT主機的MAC地址產生的網絡連接 放 行。 執 行“iptable-A FORWARD -m physdev--physdev-in eth0 –p tcp-syn -d 61.xxx.xxx.20 -m multiport -dports 80,443-m state –state NEW –j ACCEPT”命令,創建一條規則。
該規則對于訪問目的IP為 61.xxx.xxx.20,目 標端口為80和443的第一條TCP網絡連接放行,其中的“-p tcp -syn”參數表示針對的是TCP的首條網絡連接,“-state NEW”參數表示連接狀態為新的連接。因為Web服務器可以提供普通的80端口,還可提供用于加密連接的443端口。所以對這兩個端口的訪問都需要放行。
執 行“iptable –A FORWARD -m physdev--physdev-in eth0 –p tcp–syn –d 61.xxx.xxx.30-m multiport -dports 21.22,989,990 -m state-state NEW -j ACCEPT”命令,創建一條規則,對于訪問目 的 IP為 61.xxx.xxx.30,目標端口為 21、22、989、990的第一條TCP網絡連接放行,因為FTP連接包括普通連接和加密連接,可能使用到這些端口。執行“iptable-A FORWARD -m physdev--physdev-in eth0 -j DROP”命令,創建一條規則,對其余的網絡連接進行攔截。