现在的位置: 首页 > 综合 > 正文

基于iptables的网桥防火墙的搭建

2013年08月13日 ⁄ 综合 ⁄ 共 4122字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.