04
2016
12

Ne申博网上代理开户tfilter衔接追踪状况剖析

时间:2016-12-04 01:48栏目:申博138在线 点击: 147 次
IT168 技巧Netfilter是Linux防水墙内核局部的完成,其对应的用户空间东西即赫赫有名的iptables。 因为Netfilter代码及框架存在十分好的扩大性,因而良多中小公司皆是基于Netfilter举行两次开拓,即便其机能没有是特殊幻想——那是由 Netfilter本身的设想决议的。

衔接追踪是状况防水墙或许七层网闭的基本。那即将供对Netfilter衔接追踪模块要比拟熟习,才干做好两次开拓。本文重要剖析了Netfilter衔接追踪状况,更正确的道是skb数据包的衔接状况。

本文是基于Linux 3.3.8内核代码举行剖析的申博网上代理开户

衔接追踪状况

上面代码是Netfilter界说的各类衔接状况:

enum ip_conntrack_info

/* Part of an established connection (either direction). */

IP_CT_ESTABLISHED,

/* Like NEW, but related to an existing connection, or ICMP error

(in either direction). */

IP_CT_RELATED,

/* Started a new connection to track (only

IP_CT_DIR_ORIGINAL); may be a retransmission. */

IP_CT_NEW,

/* = this indicates reply direction */

IP_CT_IS_REPLY,

IP_CT_ESTABLISHED_REPLY = IP_CT_ESTABLISHED + IP_CT_IS_REPLY,

IP_CT_RELATED_REPLY = IP_CT_RELATED + IP_CT_IS_REPLY,

IP_CT_NEW_REPLY = IP_CT_NEW + IP_CT_IS_REPLY,

/* Number of distinct IP_CT types (no NEW in reply dirn). */

IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1

;

接下去将对每种详细状况举行剖析申博网上代理开户

IP_CT_ESTABLISHED

毫无疑难,表现衔接树立申博网上代理开户。请留神没有要取TCP衔接搞混,此地的衔接是狭义的衔接。 甚么时辰内核断定为衔接曾经树立了呢烦忙正在衔接相称函数resolve_normal_ct中:

/* It exists; we have (non-exclusive) reference. */

if (NF_CT_DIRECTION(h)

IP_CT_DIR_REPLY)

*ctinfo = IP_CT_ESTABLISHED_REPLY;

*set_reply = 1;

else

/* Once weve had two way comms, always ESTABLISHED. */

if (test_bit(IPS_SEEN_REPLY_BIT, status))

pr_debug(nf_conntrack_in: normal packet for %p\n, ct);

*ctinfo = IP_CT_ESTABLISHED;

...... ......

从上里的代码中,能够当做,正在内核支到ORIGINAL标的目的的数据包,而且安设了IPS_SEEN_REPLY_BIT(看到过REPLY标的目的的数据包)时,便将衔接状况安设为IP_CT_ESTABLISHED。也即使道,正在内核支到两方背数据包后,并再次支到ORIGINAL标的目的数据包时,即视衔接曾经树立。

那末IPS_SEEN_REPLY_BIT甚么时辰被安设上的呢烦忙上里的代码中能够看到*set_reply被安设为1。正在nf_conntrack_in中,

if (set_reply && !test_and_set_bit(IPS_SEEN_REPLY_BIT, status))

nf_conntrack_event_cache(IPCT_REPLY, ct);

假如发明set_reply被赋值为1,则安设IPS_SEEN_REPLY_BIT标记位。

IP_CT_RELATED

表现一个取别的衔接关系的修建衔接。

1)正在icmp_error_message中,假如支到的是ICMP报文,而且依据其payload找到了已有衔接,则将衔接状况安设为IP_CT_RELATED。

2)正在init_conntrack中修建衔接时,发明其相称一个expect衔接,则将其安设上IPS_EXPECTED_BIT标记。正在resolve_normal_ct中发明数据包是ORIGINAL标的目的而且不支到过REPLY标的目的的数据包,而且衔接安设了IPS_EXPECTED_BIT标记,则该数据包的衔接状况则安设为IP_CT_RELATED。

if (test_bit(IPS_SEEN_REPLY_BIT, status))

...... ......

else if (test_bit(IPS_EXPECTED_BIT, status))

pr_debug(nf_conntrack_in: related packet for %p\n,

ct);

*ctinfo = IP_CT_RELATED;

else

pr_debug(nf_conntrack_in: new packet for %p\n, ct);

*ctinfo = IP_CT_NEW;

表现一个修建衔接. 取IP_CT_RELATED类似,只不外正在修建衔接时不相称中expect衔接,从而不安设上EXPECTED标记。这么当支到ORIGINAL标的目的的数据包,而且不支到过REPLY标的目的数据包,衔接又不EXPECTED标记,则数据包的衔接状况为IP_CT_NEW。

IP_CT_IS_REPLY

那其实不是一个唯一状况,更像一个标记位感化。眼前只有正在icmp_error_message中应用:

if (NF_CT_DIRECTION(h)

IP_CT_DIR_REPLY)

*ctinfo += IP_CT_IS_REPLY;

当发明关系的tuple是REPLY标的目的,则给数据包的衔接状况安设上IP_CT_IS_REPLY状况。

IP_CT_ESTABLISHED_REPLY

正在resolve_normal_ct中,只有支到REPLY标的目的的数据包便安设为IP_CT_ESTABLISHED_REPLY。

IP_CT_NEW_REPLY

从字里上看是一个REPLY标的目的的修建衔接状况。自身那即使一个抵触,或许道不成能存留的状况。对Netfilter来讲,发动衔接的标的目的,被以为是ORIGINAL标的目的。那末便不成能存留REPLY标的目的上的修建衔接。眼前正在内核代码中也不应用那个状况。

本文地点:http://blog.chinaunix.net/uid-23629988-id-5165391.html

标签:linux

同享到:

0 一己感到赞好文章 面个赞你曾经赞过了+1



察看更多抢手产物 年夜教死分期购物销量榜
当前网址:http://www.1111tyc.com/sb138zx/36851.html
相关内容
热点内容

Powered by 申博网上代理开户 @2014 RSS

Copyright © 2002-2015 申博66tyc直营网 版权所有 ;