严学军
摘要:介绍Linux下的iptables的基本原理,结合虚拟机阐述了如何使用IPtables在网络中实现内外网的访问控制,并实现了典型的访问控制案例。
关键词:虚拟机;iptables ;防火墙
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)02-0208-02
由于LINUX是源代码开放的免费软件,现在使用LINUX的人越来越多。同时LINUX又具有比WINDOWS更加强大的稳定性和安全性,特别是网络服务这个部分,LINUX具有和兼容几乎所有WINDOWS的网络服务,所以现在在互联网上出现的LINUX服务器所占比例也逐渐增加,基于LINUX的使用越来越广泛,很多学校都开设了LINUX课程。本文主要对LINUX服务器上常用的iptables防火墙的使用如何在虚拟机中实现进行讨论。
1 iptables工作原理
IPTables包含3个表,分别是Filter、NAT、Manage表,通过这几个表可以设置对数据包进行过滤和筛选。具体来说,Filter表可以实现数据包过滤,NAT表可以实现地址转换,Manage表主要用来对数据包进行处理。在每个表中又包含若干链,每个链都可以设置一些规则,通过使用链中的规则以对流进的数据包做出判断。根据表和链的结合情况,下面几种是经常碰到的情况。当INPUT链位于 filter 表,匹配目的 IP 是本机的数据包;FORWARD链位于 filter 表,匹配穿过本机的数据包;PREROUTING链位于 nat 表,用于修改目的地址(DNAT);POSTROUTING链位于 nat 表,用于修改源地址(SNAT)。
2 iptables的过滤规则
IPtables命令由六个基本部分构成,下面分别介绍。
1)要操作的表:主要有三个分别是filter实现数据报过滤;nat实现网络地址转换;Mangle实现数据报处理。
2)操作命令:主要有-A、-I、-D、-R、-F等单字符命令,表示添加、插入、删除、替代、清空等等操作。
3)要操作的链:INPUT链位于filter表,匹配目的 IP 是本机的数据包,FORWARD链位于filter表,匹配穿过本机的数据包,PREROUTING链位于 nat 表,用于修改目的地址(DNAT),POSTROUTING:位于 nat 表,用于修改源地址(SNAT)。
4)规则号码:表示规则的位次。
5)匹配条件:按照进出的端口、地址、接口和协议类型来进行匹配。
6)匹配以后的动作:主要有接受、丢弃、地址转换(SNAT和DNAT)、动态源地址转换。
3 在虚拟机中配置LINUX的iptables工作环境
拓扑结构如下所示,中间为LINUX服务器,左右两端分别模拟内网和外网计算机及网段,总共使用两个WINDOWSSERVER2003主机。分别使用不同的VMNET进行网络隔离,下面用了两个VMNET虚拟交换机进行隔离,其中内网使用VMNET3,而外网使用VMNET5。
CCC10.0.0.6(VNET3)(gw:10.0.0.1)----10.0.0.1(eth1--vnet 3)LINUX192.168.100.1(eth0--vnet5)----BBB192.168.100.42(VNET5)
CCC和BBB 为WINDOWSSERVER2003主机并且都配置了IIS以便于测试。
4 在虚拟机中的配置和测试
4.1数据转发配置和测试
由于要测试数据的转发,所以需要打开IP转发功能,可以修改/etc/sysctl.conf文件,將net.ipv4.ip_forward = 0修改为:net.ipv4.ip_forward = 1保存并退出,同时执行如下命令使之生效。
[root@localhost ~]# cd /etc
[root@localhost etc]# sysctl -p
下面是一些常见的配置案例
[root@localhost /]#iptables -L /查看默认情况下的规则
[root@localhost /]# iptables -F /清除表中内容
[root@localhost /]# iptables -I INPUT -p icmp -j DROP /禁止PING本地
[root@localhost /]# iptables -D INPUT -p icmp -j DROP /删除INPUT链中的ICMP规则
[root@localhost /]# iptables -I FORWARD -p icmp -j DROP /禁止转发PING
[root@localhost /]# iptables -D FORWARD -p icmp -j DROP /转发PING
4.2地址转换配置和测试
1)SNAT :如果没有NAT,在企业中,内网用户要访问外部网站需要配置单独的公网IP,基于成本,这几乎不可能。通常的做法是将内网用户访问请求做地址转换,将用户的内部地址从内网进入公网的时候进行SNAT转换,并由转换设备记住转换的过程以后便于把应答的数据发送给正确的内网计算机。转换设备通常使用路由器或者防护墙,以将内网私有IP转换为公网IP。
[root@localhost /]# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to 192.168.100.1
安装WIRESHARK 找到光盤-SERVER---图形界面下点右键安装如下4个RPM包(在ISO文件中可以找到,位于/Server目录中)即可,分别是lm_sensors-2.10.0-3.1.i386.rpm、
net-snmp-5.3.1-19.e15.i386.rpm、wireshark-0.99.6-1.el5.i386.rpm、wireshark-gnome-0.99.6-1.el5.i386.rpm。
可以看到源地址被转换成对外接口IP而不是CCC上的10.0.0.6 访问外网HTTP也没问题,可以在LINUX计算机的ETH0接口抓包验证,如图1所示发现抓包图上看见源地址已经被转换为外部地址
2)DNAT :当企业需要对外发布自己的各项服务,比如WEB服务、FTP服务、邮件服务等等,而发布的服务器可以使用内网IP,外网用户如果想访问这些服务,那么必须在内外网的关联设备上做DNAT以实现目标地主转换,访问者只需要访问DNAT对应的IP地址就可以通过DNAT设备把请求转发到内服服务器,同样DNAT转换过程也会被记录以把应答数据顺利送出去。
[root@localhost /]# iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.100.1 -i eth0 -j DNAT --to 10.0.0.6
实际测试后在LINUX计算机的ETH0接口抓包验证,结果如图2。虽然外部计算机最终访问到内网发布的WEB服务,但是访问时可以看到三次握手发生在两个外部地址之间,一个是访问者IP,另外一个是LINUX服务器对外接口IP。
4.3访问控制
以下可以通过iptable命令实现对访问的精细控制。
[root@localhost /]# iptables -t nat -A PREROUTING -d 192.168.100.42 -j DROP(禁止访问某个站点)
4.4保存规则
规则在配置完成后需要手工使用命令进行保存。
[root@localhost /]# iptables-save >/etc/iptables-script
5 结束语
在LINUX教学实践中,因为实验室经常都不会去做LINUX系统,所以在教学中使用虚拟机是非常好的一种方式,通过VMWARE软件的强大的网络虚拟功能可以自由搭建各种各样的网络环境,以实现各种常见的配置。
参考文献:
[1] 王卫星,李斌.基于Netfilter的Linux防火墙[J].福建电脑,2009(3).
[2] 林天峰,谭志彬.LINUX服务器架设指南[M].北京:清华大学出版社,2014.
[3] 张勤,杨章明.LINUX服务器配置全程实录[M].北京:人民邮电出版社,2010.