基於iptables的橋接器防火牆的搭建
目標: 在不改變網路拓補結構的前提下,實現一個防火牆,對經過該防火牆的資料進行過濾。在此,我們主要是想對所有與伺服器進行通訊的資料進行過濾。結構圖如下:
伺服器和左邊的Internet可以處於同一個區域網路,比如網段都為: 192.168.1.0。另外可以增加一個網卡作為管理,這個管理的口可以不必接入Internet中,這樣可以達到無法對橋接器進行攻擊的目的。由可以看出我們使用了三塊網卡,其實只用兩塊網卡也可以實現,只是需要給橋接器設定一個IP,然後通過這個IP登入。
實現這個系統的環境:
系統: ubuntu9.04 核心版本:2.6.28
防火牆: iptables,版本:1.4.16.3 (用1.4.13的時候出過問題)
編譯器:4.3.3
原理簡介:在linux 2.6的核心中已經內建有netfilter可以對網路資料包進行過濾,只是如果要設定過濾規則,那必須安裝使用者端管理軟體,這就是ebtables和iptables,其中ebtables工作於資料連結層,而iptables既可以工作於資料連結層也能工作於網路層,如果同時使用了ebtables和iptables那ebtables的過濾總是在iptables的過濾之前執行。
具體原理可以參考:http://bbs.kylin-linux.com/htm_data/55/1012/716.html(差不多是官方文檔來源於http://www.linuxsecurity.com/)
Linux核心bridge淺析:http://www.360doc.com/content/11/0211/12/5708196_92110977.shtml
iptables 原理及應用詳解: http://xuev.blogbus.com/logs/37627772.html
linux透明防火牆(橋接器模式):
http://blog.chinaunix.net/uid-13377701-id-2896026.html
首先搭建橋接器,在我們的裝置中有三塊網卡,其中eth0用於管理,eth1和eth2添加到橋接器中。命令如下:
ifconfig eth2 down # 先把這eth2口關閉, 這兩個命令可以不用,但最好是執行下。
ifconfig eth1 down
ifconfig eth2 0.0.0.0 up #啟動eth2, 並把IP設為0.0.0.0(資料連結層不需要IP)
ifconfig eth1 0.0.0.0 up
brctl addbr br0 #添加橋接器
brctl addif br0 eth2 #把eth2添加到橋接器中
brctl addif br0 eth1
ifconfig br0 0.0.0.0 up #這裡沒有給橋接器設定IP,如果是兩塊網卡,那可以設個IP
OK,接下來就是設定檔了,這個還是比較重要的,要不下次開機,橋接器會不好使的。設定檔/etc/network/interfaces內容如下:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet manual
# address 0.0.0.0
# network 0.0.0.0
# netmask 255.255.255.0
# broadcast 255.255.255.255
# gateway 0.0.0.0
auto eth2
iface eth2 inet manual
# address 0.0.0.0
# network 0.0.0.0
# netmask 255.255.255.0
# broadcast 255.255.255.255
# gateway 0.0.0.0
auto br0
iface br0 inet dhcp
# address 10.65.160.104
# network 10.65.128.0
# netmask 255.255.128.0
# broadcast 10.65.255.255
# gateway 10.65.156.27
#下面這一行必須要!即是把eth1和eth2添加到橋接器中
bridge_ports eth1 eth2
# bridge_fd 9
# bridge_hello 2
# bridge_maxage 12
# bridge_stp off
修改完之後通過執行: /etc/init.d/networking restart 重啟網路服務,各網卡的配置資訊可以通過ifconfig命令查看。
經過上面這些,開機後如果正常的話,橋接器是好使了的,另外eth1和eth2沒有IP資訊,其它的三個口(eth0, br0, lo)都有IP地址的。
上面的設定檔,如果不好使,那可以把dhcp換為manual或者把manual換為dhcp試試,注釋掉的部分是可選項,可以參考:
http://manpages.ubuntu.com/manpages/precise/en/man5/interfaces.5.html
http://manpages.ubuntu.com/manpages/lucid/man5/bridge-utils-interfaces.5.html
上面這些實現了橋接器,但該橋接器還不能轉寄資料,因為在預設情況下,linux系統是不能轉寄資料的,我們可以通過修改設定檔/etc/sysctl.conf來實現轉寄,修改地方如下:
# Uncomment the next line to enable packetforwarding for IPv4
net.ipv4.ip_forward=1 #去掉這一行最前面的注釋(#號)
# Uncomment the next line to enable packetforwarding for IPv6
net.ipv6.conf.all.forwarding=1 #去掉這一行最前面的注釋(#號)
修改完之後執行:/etc/init.d/procps restart 重啟服務
這個可以參考:http://www.ducea.com/2006/08/01/how-to-enable-ip-forwarding-in-linux/
OK,橋接器基本上沒有問題了,接下來就是安裝iptables和編寫過濾規則了。過程如下:
命令:apt-get installiptables
如果這樣安裝的iptables版本不對或者使用時有問題,那可以google搜尋iptables或者直接去http://www.netfilter.org/projects/下載源碼,然後自己編譯安裝。
安裝命令如下:
tar xvf iptables-1.4.16.3.tar.gz
cd iptables-1.4.16.3
./configure
make && make install
預設的安裝路徑為/usr/local 如果不懂可以通過./configure --help查看,安裝過程如果許可權有問題,那請切換到root使用者下執行或用sudo如 sudo make install
OK,iptables安裝好了,之後切換到root就可以執行iptables命令了。ebtables安不安裝就隨便了,一般可以不用安裝的。
接下來就是編寫過濾規則了:
iptables -A INPUT -s www.baidu.com -p tcp --sport 80 -j DROP
iptables -A INPUT -s 119.75.217.109 -p tcp --sport 80 -j DROP
iptables -A INPUT -m string --algo bm --hex-string "www.baidu.com|2e 62 61 69 64 75 2e|" -j DROP
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j NFLOG
iptables -A OUTPUT -j NFLOG --nflog-prefix "北京歡迎您"
詳細iptables過慮規則可以參考:
http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html
http://linux.die.net/man/8/iptables
編寫的過濾規則我們肯定想儲存到一個檔案中,開機的時候自動載入過濾規則,要不過濾只是儲存在記憶體中,下次開機後就沒有了。
儲存命令: iptables-save –c > /etc/iptables-ruleset #檔案名稱可以自己定
自動載入: 在/etc/rc.local檔案中(exit 0之前)加入如下一行:
iptables-restore < /etc/iptables-ruleset
這裡需要注意的就是儲存的檔案,和載入的必須是同一個檔案,所以如果不能自動載入,那一定先檢查下,這兩個檔案是否一致!!另外可能就是由於iptables這個命令的路徑造成的,那就用絕對路徑,如: /usr/local/sbin/iptables-restore < /etc/iptables-ruleset , iptables命令的具體路徑可以通過whereis iptables命令來查看!
到此,橋接器防火牆的搭建搞定,後面要做的就是想把攔截的日誌記錄到mysql或者記錄檔中,如果是記錄到mysql中,那還可以弄一個web端來進行訪問。
附iptables過濾流程圖(:http://download.csdn.net/detail/dlutxie/4949368)如下: