基於iptables的橋接器防火牆的搭建

來源:互聯網
上載者:User

基於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)如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.