在前面的文章中我们主要讲解了Linux防火墙iptables的原理及配置规则,大家都知道iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。以基于网络层的数据包过滤机制为主,同时提供少量的传输层、数据链路层的过滤功能。难以判断数据包对应于何种应用程序(如:QQ、迅雷等)
安装netfilter-layer7补丁包的作用是为Linux内核、iptables添加相应的补丁文件,重新编译安装后提供基于应用层(第7层)的扩展功能。通过独立的l7-protocols协议包提供对各种应用层协议的特征识别与定义,便于更新
一、编译内核,使之防火墙支持7层过滤
本实验采用的安装包
#netfilter-layer7-v2.23.tar.bz2 //netfilter-layer7补丁包 #iptables-1.4.20.tar.bz2 //iptables包 #l7-protocols-2009-05-28.tar.gz //iptables支持的应用层协议包
1、获取并编译内核
[root@station34 ~]# useradd mockbuild //添加安装src格式的软件包需要的用户 [root@station34 ~]# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm [root@station34 ~]# cd rpmbuild/SOURCES [root@station34 SOURCES]# tar linux-2.6.32-*.tar.gz -C /usr/src [root@station34 SOURCES]# cd /usr/src [root@station34 src]# ln -sv linux-2.6.32-431.5.1.el6 linux
2、给内核打补丁
[root@station34 ~]# tar xf netfilter-layer7-v2.23.tar.bz2 [root@station34 ~]# cd /usr/src/linux [root@station34 linux]# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch //为内核打补丁 [root@station34 linux]# cp /boot/config-* .config //拷贝当前系统的config编译配置文件为模板编译内核 [root@station34 linux]# make menuconfig //配置内核参数
配置内核参数步骤图
3、编译并安装内核
[root@station34 linux]# make [root@station34 linux]# make modules_install [root@station34 linux]# make install
4、重启系统,启用新内核
编辑/boot/grub/grub.conf
把default修改成0,重新启动
5、重新编译iptables
[root@station34 ~]# tar xf iptables-1.4.20.tar.gz [root@station34 ~]# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/ [root@station34 ~]# cp /etc/rc.d/init.d/iptales /root [root@station34 ~]# cp /etc/sysconfig/iptables-config /root [root@station34 ~]# rpm -e iptables iptables-ipv6 --nodeps //卸载原来的iptables [root@station34 iptables-1.4.20]# ./configure --prefix=/usr --with-ksource=/usr/src/linux [root@station34 iptables-1.4.20]# make && make install [root@station34 iptables-1.4.20]# cp /root/iptables /etc/rc.d/init.d [root@station34 iptables-1.4.20]# cp /root/iptables-config /etc/sysconfig
6、为layer7模块提供其所识别的协议的特征码
[root@station34 ~]# tar xf l7-protocols-2009-05-28.tar.gz [root@station34 ~]# cd l7-protocols-2009-05-28 [root@station34 l7-protocols-2009-05-28]# make install
二、使用layer7模块,实现七层访问过滤
此时整个内核编译就成功安装升级完成了,现在只需要编写iptables规则就可以对7层协议做相应的限制和过滤了
支持的layer7应用层协议
匹配格式:iptables [-t 表名] -m layer7 --l7proto 协议名
支持以下常见应用层协议:
QQ:腾讯公司QQ程序的通讯协议
msnmessenger:微软公司MSN程序的通讯协议
msn-filetransfer:MSN程序的文件传输协议
xunlei:迅雷下载工具使用的协议
本实验目的在Iptables服务器上面做7层防火墙过虑限制客户端不能上QQ,
实验环境:准备4台主机分别当作iptables服务器,内网服务器(2台),外网服务器
需求:让内网上的主机不能通过外网上QQ(SNAT+iptables),外网上的主机可以访问内网上的网站服务器(DNAT)
主机服务名 | 网卡ip | 系统版本 |
iptables服务器 | 网卡1:172.16.251.34(连接外网) 网卡2:192.168.10.1(连接内网) |
centos6.4 |
内网普通用户 | 网卡1:192.168.10.10 | windows xp |
内网httpd服务器 DNS服务器 |
网卡1:192.168.10.11 | centos6.5 |
外网服务器 | 网卡1:172.16.254.58 | windows 7 |
1、iptables服务器的配置
在iptables上配置2块网卡,
网卡1地址为172.16.251.34,用来连接外网
网卡2地址为192.168.10.1 ,用来连接内网
1.1 在Iptables Server上开启路由转发功能:
[root@localhost ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@localhost ~]# sysctl -p #执行此命令让其生效
1.2 启用内核连接追踪功能(ACCT):首先装载nf_conntrack模块
[root@localhost ~]# modprobe nf_conntrack [root@localhost ~]# sysctl -w net.netfilter.nf_conntrack_acct = 1 //立即生效 永久生效,打开下面文件加入如下命令 [root@localhost ~]# vim /etc/sysctl.conf net.netfilter.nf_conntrack_acct = 1 //添加这条命令 [root@localhost ~]# sysctl -p
1.3 添加一条SNAT规则参实现让内网访问外部网络:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.251.34
1.4 设置规则:拒绝QQ登录
[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto qq -j DROP
2、内网普通用户的配置
配置网卡ip为192.168.10.10
如图配置:
可以浏览网页等上网活动,但不能登录QQ
3、DNAT的实现
因为在iptables服务器上没有web服务,当外网用户要访问内网web服务时,外网用户只知道iptables服务器的地址,而不知道内网web服务器的地址,因此需要iptables服务器设置DNAT,来使外网用户可以访问内网web服务
1、在iptables服务器上添加DNAT规则
[root@station34 ~]# iptables -t nat -I PREROUTING 1 -d 172.16.251.34 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.11
内网web服务器的网卡配置为
#ifconfig eth0 192.168.10.11 #route add default gw 192.168.10.1
在站点目录编辑个网页文件:
#vim /usr/local/apache/htdocs/index.html #Hello god
在外网主机上输入iptables的外网地址172.16.251.34
从上图看出DNAT设置成功!
4、DNS视图功能实现
DNS视图功能可以自动识别访问的地址是内网地址还是外网地址
在web服务器上搭建DNS服务器
先设置web服务器的网关,使之指向iptables服务器的内网网卡地址192.168.10.1
[root@station160 ~]# route add -net 172.16.0.0/16 gw 192.168.10.1
这样web服务器也实现了SNAT,可以上外网了
安装Bind
[root@station160 ~]# yum -y install bind
修改/etc/named.conf配置文件,使之支持Acl控制
配置内网区域文件/etc/named.in.zones
zone "." IN { //根要包含在view中 type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "gulong.com" IN { //添加这条记录 type master; file "in.gulong.com.zone"; };
配置外网区域文件/etc/named.rfc1912.zones
zone "." IN { type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "gulong.com" IN { //添加这条记录 type master; file "out.gulong.com.zone"; };
创建内网记录文件/var/named/in.gulong.com.zone
$TTL 600 @ IN SOA dns.gulong.com dnsadmin.gulong.com ( 2014033001 6H 30M 15D 3D ) IN NS dns dns IN A 192.168.10.11 www IN A 192.168.10.11 //内网用户访问是这个地址
创建外网记录文件/var/named/out.gulong.com.zone
$TTL 600 @ IN SOA dns.gulong.com dnsadmin.gulong.com ( 2014033001 6H 30M 15D 3D ) IN NS dns dns IN A 192.168.10.11 www IN A 172.16.251.34 //外网用户访问时是这个地址
重启服务
#service named restart
在web服务器上测试www.gulong.com
外网用户上测试
到此为止,iptables的相关内容已经差不多介绍完了,本人初学iptables,不足之处,请各位大牛多多指正!!