作者:吳阿亭 一: 操作環境 Redhat 7.X, iptables, iproute2 二: 為什麼需要Proxy ARP? 目前而言,為了添加防火牆,重新布署網絡結構主要有如下方法: a. 防火牆兩端分別使用真實地址和私有地址,用NAT或者端口轉發實現對外服務,缺點是不能支持所有協議。 b. 把現有從ISP得到的IP地址分段成兩個子網在防火牆兩端使用,缺點是需要更改服務器默認網關及子網掩碼等設置 c. 用代理ARP技術構建透明防火牆,可以Linux 2.4內核中輕易實現,它能保持現有的IP地址、 網關和子網掩碼設置,加上使用真實IP地址,所以支持所有協議。 三: 典型應用圖例 下面我們來考慮一個典型的小型企業網絡環境: 1> 公司有專線連結互聯網,為了保護DMZ區內的服務器,我們想架設一台防火牆直接連接路由器,下面再連結所有向外提供服務的各種WEB,Mail,DNS服務器,如下圖: Internet DDN ________ Router _________e0: a.b.c.1 ____ eth0: a.b.c.2 F 用Proxy ARP技術的透明防火牆 (gw: a.b.c.1) _____ eth1: a.b.c.2 (兩邊可以用同一個IP,節省IP地址) _________________________ ____ __ __ mail relay A ip:a.b.c.3 B C web proxy gw:a.b.c.1 ___ ___ _____ WEB DNS ip:a.b.c.4 IP:a.b.c.5 __ Intranet_____ _ gw:a.b.c.1 gw:a.b.c.1 192.168.1.0/24 ____ D Mail _____ 注: 1. 一台防火牆F保護整個DMZ區和內部網絡,兩邊可以用同一個IP地址a.b.c.2 。 2. 透明防火牆F兩邊在同一網段,且被保護的機器的IP和網關設置與同沒有透明防火牆時一樣,對被保護的服務器和外部用戶而言都是透明的。當拿掉防火牆F時整個網絡仍然能工作。 3. 服務器A連結內部網絡作代理服務器共享上網,且配置Sendmail為內部網上的郵件服務器D作郵件relay。 4. 服務器A也可以直接連接到Router,和服務器F一樣,這樣要單獨為服務器A設置防火牆規則。 5. 如果只有服務器F連接路由器,則只需用一個交叉電纜連結即可,不用HUB或者Switch 。 6. 你也可以合並A到F中,這樣需要在F上有三塊網卡同時連結DMZ和內部網絡。 四: 如何設置Proxy ARP? Redhat 7.2已經帶有iproute2,用 #ip route命令而不是以前用的#route命令 假定從ISP得到的IP地址為a.b.c.0/28 即可有a.b.c.0-15 共16個IP可用,但a.b.c.0(網絡地址)和a.b.c.15(廣播地址)不可用,故實際可用IP為a.b.c.1-14共14個IP地址。 a. 安裝時先設置eth0和eth1的IP地址都是a.b.c.2,且默認網關為a.b.c.1 。 b. 啟動後運行下面的命令或者放入/etc/rc.d/rc.local ip route del a.b.c.0/28 dev eth0 ip route add a.b.c.1 dev eth0 echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp echo 1 > /proc/sys/net/ipv4/ip_forward 最後當你運行ip route命令時你應該看到類似下面的輸出。 a.b.c.1 dev eth0 scope link a.b.c.0/28 dev eth1 proto kernel scope link src a.b.c.2 127.0.0.0/8 dev lo scope link default via a.b.c.1 dev eth0 c. 我從防火牆F ping DMZ區的所有機器和路由器,再確保你能從web,DNS上能夠ping路由器, 如果你是後來添加的透明防火牆,你可能要等一段長的時間讓路由器知道現在你在用代理ARP, 最終路由器會清除自身的ARP cache的,如果可能,關掉路由器電源再打開以使更快地清除ARP cache. d. 不同的Linux 內核響應新的ARP cache的時間不同,用Linux 2.4內核比較快。 e. 當然你也可以在透明防火牆F兩端用不同的IP地址。 五: 其它應用 下面是另一種情況的代理ARP應用。 在公司局域網上,有兩台數據庫服務器你需要單獨保護,你可以添加一個透明防火牆,同樣不需要改動任何現有的IP地址設置,類似上面的道理,如下圖。 ip:192.168.1.201 gw:192.168.1.1 database1 ____ ___ __________eth1 F2 eth0____________F1 公司防火牆 ____ ___ 192.168.1.1 database2 內部代理ARP防火牆 ip:192.168.1.202 gw:192.168.1.1 設置步驟如下: 1. 為F2兩端設置相同的IP為192.168.1.200,默認網關為192.168.1.1 2. 啟動後運行 ip route del 192.168.1.0/24 dev eth1 ip route add 192.168.1.201 dev eth1 ip route add 192.168.1.202 dev eth1 echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp echo 1 > /proc/sys/net/ipv4/ip_forward 3. 保證從database服務器能ping通代理ARP防火牆另一端的服務器,然後開始在F2上設置具體的防火牆規則。