您的位置:首页 > 其它

iptables实现七层访问过滤,SNAT与DNAT,DNS-View的实现

2014-03-29 20:20 411 查看
在前面的文章中我们主要讲解了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.10windows xp
内网httpd服务器
DNS服务器
网卡1:192.168.10.11centos6.5
外网服务器网卡1:172.16.254.58windows 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
#<h1>Hello god </h1>


在外网主机上输入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,不足之处,请各位大牛多多指正!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息