注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

iptables的一些个性化使用(更新中)  

2014-01-03 12:31:30|  分类: netflow应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  本文开始收集一些关于iptables的个性化使用方法。

  1.使用iptables的mangle功能表的数据流标记功能,实现与路由表的联动;
   
  2.使用iptables的ulog模块将数据日志记录引入数据库mysql;
          注:也可以使用tcpdump >>/home/yourdir/access.log中来记录,然后使用日志分析工具(比如awffull或sarg或netlog进行分类展示).
  3. iptables 的ROUTE target 用 -tee参数做端口镜像。这样可以实现计算机端口上映射,有时比较有用.
     
       4.iptables实现端口转发的过程

         一台计算机安装了linux系统,有两块网卡,eth0连外网,ip为1.2.3.4;eth1连内网,ip为192.168.0.1.现在需要把发往地址1.2.3.4的81端口的ip包转发到ip地址192.168.0.2的8180端口.
iptables的一些个性化使用(更新中) - itoedr - itoedr的it学苑
 
      设置如下:
    iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81\
                                     -j DNAT --to-destination192.168.0.2:8180
   iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp \
                                    -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1

真实的传输过程如下所示:
    假设某客户机的ip地址为6.7.8.9,它使用本机的1080端口连接1.2.3.4的81端口,发出的ip包源地址为6.7.8.9,源端口为1080,目的地址为1.2.3.4,目的端口为81.
      主机1.2.3.4接收到这个包后,根据nat表的第一条规则,将该ip包的目的地址更该为192.168.0.2,目的端口更该为8180,同时在连接跟踪表中创建一个条目,(可从/proc/net/ip_conntrack文件中看到),然后发送到路由模块,通过查路由表,确定该ip包应发送到eth1接口.在向eth1接口发送该ip包之前,根据nat表的第二条规则,如果该ip包来自同一子网,则将该ip包的源地址更该为192.168.0.1,同时更新该连接跟踪表中的相应条目,然后送到eth1接口发出。

此时连接跟踪表中有一项:
     连接进入:  src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81
     连接返回:  src=192.168.0.2 dst=6.7.8.9 sport=8180 dport=1080
     是否使用:  use=1

       而从192.168.0.2发回的ip包,源端口为8180,目的地址为6.7.8.9,目的端口为1080,主机1.2.3.4的TCP/IP栈接收到该ip包后,由核心查找连接跟踪表中的连接返回栏目中是否有同样源和目的地址和端口的匹配项,找到后,根据条目中的记录将ip包的源地址由  192.168.0.2更该为1.2.3.4,源端口由8180更该为81,保持目的端口号1080不变.这样服务器的返回包就可以正确的返回发起连接的客户机,通讯就这样开始.
    还有一点, 在filter表中还应该允许从eth0连接192.168.0.2地址的8180端口:

    iptables -A INPUT -d 192.168.0.2 -p tcp -m tcp --dport 8180 -i eth0 -j ACCEPT(默认表为-t filter)

5.关于iptables与ebtables联动处理桥设备时的注意事项:
        为了让iptables的redirect在使用bridge时仍然随时可行,则必须为使能broute redirect的网卡上设置IP地址,为了不使路由冲突,考虑127.0.0.2 ......因为iptables的代码中以IP来标识接口设备.

6. ebtables与iptables的不同dnat机制

    以太网链路层的路由(报文二层机制)和IP路由(报文三层机制)的流动机制是不一样.说链路层的路由是自动学习得到的,其方式即众所周知的交换机学习机,而IP路由却是需要显式配置的,虽然有所谓的动态路由协议,但是还是需要应用层程序(如bgp工具)的帮助,对于自动学习的表项,它早晚是要收敛的,也就是说即使没有重新路由,由于链路层设备遵循要么往特定出口发,要么泛洪所以二层(mac为标识符)系统DNAT后的目的地址早晚会被桥设备学习到的,链路层的映射表永远都处于一种动态更新状态,不同于ip环境(ip为标识符)。
   
既然链路层(mac标识符工作层)可以自动学习映射表,无需人工帮助,那么在ebtable环境中BROUTPUT之后不打扰这种机制只要DNAT后的目的设备发一个包到达桥设备,就学习成功,并记入了它的缓存区待用。只有在DNAT之前和之后永久的位于不同侧的时候才会出现不通的问题,如果你的网络足够大,启用了STP(优化路由),那么不同时刻两个地址是否位于同侧是不一定的。实际上linux中的多个接口组成的桥,系统已将多个接口置成了想起同的mac标识,所以各大个端口都能获得其它端口数据备份。

    总结,这种桥情况下,即使在右侧ouput链上进行一次dnat改变了目标MAC,不主动进行重新路由,系统也会帮助我们将你修改后报文发送到你预定的接口上去。

    值得说明的是:在ip层nat(一个新的数据流出现了)之后都会再主动进行一次重新路由(因为数据流的伺服进程已经发现了新的数据流了)。

  评论这张
 
阅读(318)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017