26
1 Linux Kernel 2.4.* Linux Kernel 2.4.* conntrack conntrack 中中中中中 中中中中中 张张张 张张张张张张张张张张张张张张 james @ ustc . edu . cn

Linux Kernel 2.4.* 中 conntrack 原理和应用

  • Upload
    liseli

  • View
    327

  • Download
    0

Embed Size (px)

DESCRIPTION

Linux Kernel 2.4.* 中 conntrack 原理和应用. 张焕杰 中国科学技术大学网络信息中心 [email protected]. 内容. 简单理解 Linux kernel 2.4.* 中的 netfilter/iptables 框架 2.4.* 中 conntrack 原理 扩展应用. Netfilter/iptables. Netfilter 是 Linux kernel 中对数据包进行处理的框架 定义了5个 HOOK 位置 NF_IP_PRE_ROUTING NF_IP_LOCAL_IN NF_IP_FORWARD - PowerPoint PPT Presentation

Citation preview

1

Linux Kernel 2.4.*Linux Kernel 2.4.*中中 conntrackconntrack 原理和应用原理和应用

张焕杰中国科学技术大学网络信息中心

[email protected]

2

内容内容

简单理解 Linux kernel 2.4.*中的 netfilter/iptables框架

2.4.* 中 conntrack原理扩展应用

3

Netfilter/iptablesNetfilter/iptables

Netfilter 是 Linux kernel 中对数据包进行处理的框架

定义了 5 个 HOOK位置– NF_IP_PRE_ROUTING – NF_IP_LOCAL_IN – NF_IP_FORWARD – NF_IP_POST_ROUTING – NF_IP_LOCAL_OUT

4

55 个个 HOOKHOOK 位置位置

5

netfilternetfilter 结果结果

NF_ACCEPT: continue traversal as normal. NF_DROP: drop the packet; don't continue

traversal. NF_STOLEN: I've taken over the packet;

don't continue traversal. NF_QUEUE: queue the packet (usually for

userspace handling). NF_REPEAT: call this hook again.

6

NetfilterNetfilter

Iptables 是 netfilter上的应用 nat mangle filter

Conntrack实现连接跟踪

7

Netfilter/iptablesNetfilter/iptables

可以实现完整的基于连接跟踪的包过滤防火墙

支持包过滤,双向地址转换连接跟踪的处理与 NAT处理分离,更加模块化

8

Connection trackConnection track 原理原理

根据数据包的内容,记录各个连接的状态是状态包过滤防火墙和 NAT必需的功能状态表

超时 协议 SRC Sport DST Dport state

9

2.42.4 中的中的 conntrackconntrack

10

关键数据结构关键数据结构 Tuple

– Proto 、 srcip 、 dstip、协议特定信息 TCP 、 UDP: sport 、 dport ICMP: type code

– 原方向的 tuple、应答方向的 tuple(reply tuple)– 生成 Reply tuple的过程 (Invert tuple)

调换 srcip 、 dstip 调用协议相关的 inver_tuple处理

– TCP 、 UDP是调换 sport 、 dport

– ICMP是对 type code处理,如 8/0(ech request) 的 invert是 0/0

11

关键数据结构关键数据结构

Conntrack– 引用计数– 原方向的 tuple、应答方向的 tuple– 状态– 超时时间– 其他信息

12

HASHHASH

Conntrack中 2个方向的 tuple 被 hash后,根据 hash结果放到对应的链表中

方便快速查找– 查找 tuple是否存在,只要对 tuple 做 hash,到对应的链表中查找, O(1)复杂度

– 如果构造 tuple使得 hash冲突,查找最坏变成 O(N)复杂度,可以用来 DOS攻击

13

ConntrackConntrack 处理过程处理过程对进入包处理系统的

packet(PRE_ROUTING 、 LOCAL_OUT)– 根据 packet内容生成 tuple– 查找系统中是否有该 tuple的记录– 如果不存在

新建立一个 conntrack记录,生成反向的 tuple记录– 调用对应的协议的数据包处理程序

TCP:状态跟踪 UDP:延长超时时间 ICMP : 2个方向的 icmp包相等,直接删除 conntrack信息

14

ConntrackConntrack 处理过程处理过程对从离开包处理系统的

packet(POST_ROUTING 、 LOCAL_IN)– 如果 conntrack中的 2 个 tuple不在链表中,增加到链表中

– 整个处理过程中被 DROP的包,不会走到这里,对应的 conntrack的引用数为 0 时conntrack信息被删除

超时处理– 删除 conntrack记录

15

其他过程其他过程

Alter_reply_tuple修改反方向包– NAT处理代码通知 conntrack处理代码,将来应答的 tuple会改变

Helper程序– 对特定应用数据的特殊处理

Ftp等Expect相关连接处理

– Ftp 的 cmd 和 data连接是相关的

16

ConntrackConntrack 的问题的问题 HASH性能问题

– 可能会造成 DoS攻击总的 conntrack数量有限,遭到 DoS攻击

– 每个 conntrack大约占用 400byte– Icmp 、 TCP SYN 、 UDP超时 60秒– 10kpps , 60秒 600k conntrack 240M 内存

DROP包时性能问题– 每个包都要产生一个 conntrack记录,在数据包被

DROP时释放 conntrack记录,浪费 CPU时间

17

ConntrackConntrack 扩展扩展Conntrack日志

– 发送一个连接的如下信息到日志服务器 Start_time 、 end_time Proto 、 srcip 、 dstip 、 sport 、 dport 、 pkts 、 byt

s Nsrcip 、 ndstip 、 nsport 、 ndport 、 rpkts 、 rbyts State

连接数限制– 限制一个 IP占用的 conntrack数量

18

ConntrackConntrack 日志日志

Conntrack增加一些信息– Start_time , end_time,统计数据

在 conntrack的超时处理过程中,使用udp协议把这些信息发送给日志服务器

Conntrack的处理中增加对以上信息的修改– 新的 conntrack设置 start_time– 每个数据包修改统计数据和 end_time

19

URLURL 记录记录

增加一个对 tcp 80端口处理的 helper程序对 tcp的数据包进行处理,恢复其中的

URL如果特意将 URL分到不同的包中,或者使用 keep-alive,记录不全

20

性能性能

内存占用– 每个 conntrack多占用了大约 24byte,增加 1

0%的内存处理

– O(1)复杂度– DROP的数据包不会引发超时过程,因此

DROP的包没有日志– 可以考虑限制不确认的 conntrack的发送速率

21

连接数限制连接数限制简单限制

– 限制一个 IP占用的总数和最多处理确认状态的总数

– 仅仅对出去的连接限制Struct Iplimit

– Maxtotal 最多总数– Total 当前总数– MaxAssure 最多确认的连接数– Assure 当前确认的连接数

22

数据结构数据结构

– LocalNetwork Netaddr Netmask Limit * iplimit 根据 netmask动态分配的内存

– LocalNetwork 202.38.64.0 255.255.224.0 Limit (8192*sizeof(iplimit))

– LocalNetwork用数组存放,限制在 10个左右

23

增加的处理增加的处理生成一个新 conntrack时,增加 total,如果

total=maxtotal,丢弃数据包释放 conntrack时,减少 total,如果有 assure标记,减少 assure

对 tcp数据包– 首次进入 established状态时,增加 assure,设置

assure标记,如果 assure=maxassure,丢弃数据包– 离开 established状态时,减少 assure,清除 assure标志

24

控制控制 kernelkernel

/proc/iplimit/control写

– A 202.38.64.0 255.255.255.0 100 100– C 202.38.64.1 100 200– F 202.38.64.1– D 202.38.64.0 255.255.255.0

读– 202.38.64.0 202.38.64.39 100 0 100 0– 202.38.64.40 202.38.64.40 100 1 100 1– 202.38.64.41 202.38.64.166 100 0 100 0

25

性能分析性能分析

占用内存– 每个 IP地址占用 16字节, 1 个 B地址占用

1M字节– 每个 conntrack多占用 1个字节 (assure标记 )

处理– O(1)

26

连接限制问题连接限制问题

可以伪造别的 IP地址发送数据包,耗尽连接数