• iptables问题


    我配置了一条NAT规则实现端口转换, 进行测试。 每次测试后,用iptables -t nat -nvL 进行查看时, 发现pkts每次只加1, 但抓包时发现有6个包都进行了端口转换。 请问其余的5个包是何时进行端口转换的?

    解决问题过程, 添加打印, 抓包。

    (1) 在NF_HOOK, POST_ROUTING前加打印信息。

     (2) ChinaUnix论坛中, 瀚海书香的回复:

             NAT表只对NEW状态的数据包操作,之后的数据包直接根据conntrack信息进行相应的sip,dip等的替换

     (3)数据包状态研究:

             http://blog.chinaunix.net/uid-384966-id-2411274.html

             1: 概述

             1.a: 状态机制是iptables的一部分, 其实它只是一种连接跟踪机制。

             1.b: 运行连接跟踪的防火墙称为状态防火墙。

             1.c: 在iptables里, 包是和被跟踪连接的四种不同状态有关的。它们是NEWESTABLISHEDRELATEDINVALID。后面我们会深入地讨论每一个状态。使用--state匹配操作,我们能很容易地控制

                   “谁或什么能发起新的会话”。

             1.d: 在内核中在内核中由Netfilter的特定框架做的连接跟踪称作conntrack(connection tracking). conntrack 可以作为模块安装, 也可以作为内核的一部分。这些模块从数据包中提取详细的唯一的信息,

                    因此能保持对每一个数据流的跟踪。这些信息也告知conntrack流当前的状态。例如,UDP流一般由他们的目的地址、源地址、目的端口和源端口唯一确定。

             1.e:除了本地产生的包由OUTPUT链处理外,所有连接跟踪都是在PREROUTING链里进行处理的,意思就是, iptables会在PREROUTING链里从新计算所有的状态。如果我们发送一个流的初始化包,状态就会

                  在OUTPUT链里被设置为NEW,当我们收到回应的包时,状态就会在PREROUTING链里被设置为ESTABLISHED。如果第一个包不是本地产生的,那就会在PREROUTING链里被设置为NEW状态。综上,

                  所有状态的改变和计算都是在nat表中的PREROUTING链和OUTPUT链里完成的。

            2:conntrack 记录

                tcp 6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22  dport=32775 use=2

            2.a  十进制6, tcp协议号(17, udp协议号);

                  117, 生存时间,它会有规律地被消耗,直到收到这个连接的更多的包。那时,这个值就会被设为当时那个状态的缺省值;

                  SYN_SENT , TCP连接只在一个方向发了SYN包。

                  源地址, 目的地址, 源端口, 目的端口。

                  UNREPLIED: 这个连接没有收到任何回应。当一个连接在两个方向上都有传输时, conntrack记录就删除[UNREPLIED]标志, 然后重置。

                  期望得到的包的源地址, 目的地址, 源端口, 目的端口。

                  末尾有 ASSURED的记录表明两个方向已没有流量,  这样的记录是确定的, 在conntrack表满时时速不会被删除的, 没有ASSURED就要被删除。

                 对于7620 抓到的相应记录是:

     ipv4 2 tcp 6 431997 ESTABLISHED src=192.168.1.18 dst=192.168.1.1 sport=50071 dport=80 src=10.10.10.10 dst=10.10.10.14 sport=80 dport=50071 [ASSURED] mark=0 use=2

    ipv4 2 tcp 6 431997 ESTABLISHED src=192.168.1.18 dst=192.168.1.1 sport=50070 dport=80 src=10.10.10.10 dst=10.10.10.14 sport=80 dport=50070 [ASSURED] mark=0 use=2

              对于Miiicasa 抓到的相应记录如下, 记录正常:

    pv4 2 tcp 6 418 ESTABLISHED src=192.168.1.18 dst=192.168.1.1 sport=52047 dport=80 src=10.10.10.10 dst=10.10.10.14 sport=80 dport=52047 [ASSURED] mark=0 use=1
    ipv4 2 tcp 6 418 ESTABLISHED src=192.168.1.18 dst=192.168.1.1 sport=52045 dport=80 src=10.10.10.10 dst=10.10.10.14 sport=80 dport=52045 [ASSURED] mark=0 use=1

            2.b  

                  

  • 相关阅读:
    【mysql】添加对emoji的支持
    【mysql】关于innodb中MVCC的一些理解
    【mysql】关于硬件方面的一些优化
    关于php中的spl_autoload_register
    【mysql】高可用集群之MMM
    【mysql】数据库使用的一些规范
    使用sysbench进行压力测试
    【mysql】关于乐观锁
    【linux】spinlock 的实现
    【mysql】关于悲观锁
  • 原文地址:https://www.cnblogs.com/gavinwu/p/3706059.html
Copyright © 2020-2023  润新知