Linux防火墙透明模式

一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则在两个接口之间转发数据包,或者拒绝、丢弃数据包。实际上,防火墙不单单是访问控制的功能,而且还充当了路由器的角色。当然,这并非有什么不妥当的地方,但是当你企图把你配置好的防火墙放入运行网络,来保护现有系统安全的时候,你不得不重新考虑和更改你的网络架构。另外一个可能的麻烦是,当防火墙发生意外时,如果没有防火墙的硬件备份的话,那么你将面临巨大的心理压力,因为防火墙的故障,整个网络瘫痪了。假如你把防火墙配置成透明模式(可称为伪网桥),就无需更改网络架构,即使是防火墙不能工作了,要做的仅仅是拔出网线,把网线直接插在路由器的内部接口就可以让网络正常工作,然后你就有时间慢慢恢复发生故障的防火墙。
为了实现高效的防火墙和网络检测,系统CPU必须足够的强大和快速。系统需要三块网卡,其中两块网卡支持网桥的实现,另外一块用来实现对防火墙的管理。(至少2块网卡,可以把管理IP配置在桥接设备上)。
*/
#!/bin/bash
# BY kerryhu
# QQ:263205768
# MAIL:king_819@163.com
# BLOG:http://kerry.blog.51cto.com
#要让Linux实现网桥功能除了编译支持网桥的内核之外(802.1d Ethernet Bridging),还需要应用软件的支持, 这个软件就是bridge-utils
cd /opt
wget http://ncu.dl.sourceforge.net/project/bridge/bridge/bridge-utils-1.4/bridge-utils-1.4.tar.gz
tar zxvf bridge-utils-1.4.tar.gz
cd bridge-utils-1.4
./configure –prefix=/usr
make;make install #brctl该命令的帮助
#1.创建网桥设备:
brctl addbr br0
#2.向br0中添加网卡eth0和eth1
brctl addif eth0
brctl addif eth1
#3.从网桥中删除网卡eth0 和eth1
brctl delif eth0
brctl delif eth1
#4.删除网桥br0
brctl delbr br0
#网关:
172.16.16.254
#Web服务器(80、443)
172.16.16.172
#ftp服务器(21、20)
172.16.16.173
#MySQL服务器(3306)
172.16.16.174
#配置网桥接口
ifconfig br0 172.16.16.171 netmask 255.255.255.0 broadcast 172.16.16.255
#配置防火墙策略
# Create the interface br0
/usr/sbin/brctl addbr br0
# Add the Ethernet interface to use with the bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
# Start up the Ethernet interface
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
# Configure the bridge ethernet
/sbin/ifconfig br0 172.16.16.171 netmask 255.255.252.0 broadcast 172.16.16.255
# I have added this internal IP to create my NAT
# ip addr add 192.168.0.1/24 dev br0
/sbin/route add default gw 172.16.16.254
iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state –state INVALID -j DROP
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
# Limit ICMP
iptables -A FORWARD -p icmp -m limit –limit 4/s -j ACCEPT
# Match string, a good simple method to block some VIRUS very quickly
#iptables -I FORWARD -j DROP -p tcp -s 0.0.0.0/0 -m string –string “cmd.exe”
# Allow the 222.11.22.33 connection MySQL server
iptables -A FORWARD -p tcp -s 222.11.22.33 -d 172.16.16.174 –dport 3306 -j ACCEPT
# Allow HTTP ( 80 ) connections with the WWW server
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 172.16.16.172 –dport 80 -j ACCEPT
# Allow HTTPS ( 443 ) connections with the WWW server
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 172.16.16.172 –dport 443 -j ACCEPT
# Allow the WWW server to go out
iptables -A FORWARD -s 172.16.16.172 -d 0/0 -j ACCEPT
# ftp Server Rules
iptables -A FORWARD -p tcp -s 0/0 -d 172.16.16.173 –dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -s 0/0 -d 172.16.16.173 –dport 20 -j ACCEPT
# Allow the NTP server to go out
iptables -A FORWARD -s 172.16.16.173 -d 0/0 -j ACCEPT
#关于内核2.6,2.6的内核默认已经打上了bridge-nf,我已经在2.6.12上测试通过,任何使用2.6内核的发行版应该都支持bridge-nf