文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>IPTABLES发布内网服务器之故障解析

IPTABLES发布内网服务器之故障解析

时间:2010-11-29  来源:wildlee

IPTABLES发布内网服务器之故障解析  原创:wildlee

今天又是星期五,呵呵!心情很愉快,明天休息.今天与五月雪在谈论防火墙技术时,他说到对于公司内部的WEB服务器无法通过IPTABLES发布到公网上,郁闷之极!如果在做了正确配置的情况下,哪有不成功这一说,以下是这次故障分析全过程.

 

环境是这样的:在内部网络中网络内的主机通过NAT技术连接公网,内部有一WEB服务器通过端口80对外提供服务,其在内部正确访问没有任何问题,证明服务器正常.不过在检测服务器的时候还是发现了一个小问题,服务器居然没有配置网关,这样内部其它主机由于在同一个网段中可以直接访问,但是对于外部的访问,由于WEB服务器没有网关,会造成单向通信情况,所以这步要考虑.

 

我们知道,对于只有一个公网IP的网络,要想对外提供服务,我们就得做端口映射也叫端口转发,说白就是把对于公网IP特定端口的数据,通通发送给内部某个主机.好,我们继续,我们在IPTABLES上做规则.情况如下:

iptables -t nat -I PREROUTING  -s x.x.x.x -p tcp –dport 80 -i ppp0 -j  DNAT –to-destination 192.168.1.175

iptables -I FORWARD -d x.x.x.x -p tcp –dport 80 -j ACCETP

注:x.x.x.x是公网IP;192.168.1.175是内部的服务器,当我们在IPTABLES发布这两条规则,应该可以了吧!但现实很残酷,居然不行!

 

故障深入分析:

 

1. 我们来说下解决思路,其实有了解决思想就好办.我们知道网络中的数据流在穿越网络时,要通过种种关卡,来实现一个双向通信.我们就从数据目的地分析到源,看看是哪的问题.访问服务器要与服务器通信吧!那我们看看服务器能不能收到我们访问的数据包.我让五月雪在服务器上开启了抓包工具,然后wildlee 从本地网络通过ip访问目标服务器,结果是在服务器上没有收到任何源地址为wildleeIP的数据包.

就此证明:数据流根本没有达到目标服务器,数据中断处还在前方,所以对于服务器问题中断还有数据回去的数据中断,我们还无法判断.因为数据流还没有到,何谈返回数据流有问题.

 

2. 我们知道,数据流在达到目标服务器上一站是防火墙,难道墙有问题?在此我们先抛开IPTABLES的raw表与mangle表不说,就拿NETFILTER/IPTABLES架构来说,当有数据进入网络时,我们根据表与链的优先级情况可详细拓扑出,然后明确数据流在整个防火墙中的流向与变化.进站流向:nat[PREROUTING]>filter[FORWARD]>nat[POSTROUTING];当有数据流进入防火墙时,首先是PREROUTING出马,看有没有必要做目标IP,然后交给FORWARD表过滤,在经过POSTROUTING链检测,看有没有必要做源IP转换,然后发送目标主机.分析:数据是让FORWARD链上的规则给杀年了吗?我知道刚了解到,在数据进入FORWARD链时,我们要做端口与IP的转发,所以必定有映射记录.好!测试一下,wildlee在本地访问目标服务器,然后快速在目标网络上查看映射记录.

vim  /proc/net/ip_conntrack或cat /proc/net/ip_conntrack,如果数据太多,可用grep做下过滤,发现并没有发现有什么映射情况,悲剧!

就此证明:数据中断非FORWARD链,还在数据进入的前方,FORWARD链有无问题,无法判断.

 

3. 难道是NAT映射出了问题?我们知道要对数据做转换时,必需要有数据,难道是数据根本没有流入防火墙内部?还是数据进入了防火墙,没有进行端口与IP的转发,我们如果判断?抓包了tcpdump,从来没有用过这个工具,唉!现学现用吧!

命令:tcpdump -i ppp0 src host y.y.y.y and port not ssh

由于用SSH连接对方防火墙,SSH包太多,所以过滤掉.好!ping几个包试试一切ok.正常抓包.随后我试着用hping测试对方80端口:hping -S -p 80 x.x.x.x .怪异,一个包没有收到???随后我又用扫描了连续的几个端口:hping –scan 79-81 x.x.x.x ;79与81都可以收到数据包,当时我那个恍然大悟,随后又悲哀至极.原来ISP的防火墙给抹杀了.实在可恶,以前只听说有封客户80的地,没有想到五月雪遇到的就是这种问题.后将服务端口改为8080,成功实现访问.

就此证明:此处不关NAT链的事.问题就此解决.y.y.y.y为wildlee 公网IP.

 

后续:

通过此问题,我们更重要的是学会解决问题的思想,技术是其次.我们可以通过对数据流跟踪与分析,并学会逆流与顺流去判断情况.最终找到罪魁祸首,解决问题并不难.上面我们没有去想raw表与mangle表,如果你在这些表上加过规则,在实际应用中,要按自身的环境去考虑问题.如还有服务器防火墙,等等...其次,我越来越喜欢linux下的工具,短小精捍,使用灵活.功能强大.hping .sing.nmap,tcpdump….今天先说这么多,下次和大家一起分享网络扫描与探测,还有防火墙的故事.嘿嘿!

标签分类:

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载