WEB开发网
开发学院网络安全防火墙 关于iptables中ip_conntrack_max和hash表的关系及... 阅读

关于iptables中ip_conntrack_max和hash表的关系及调整

 2007-03-12 12:41:42 来源:WEB开发网   
核心提示: 如果netfilter的跟踪连接是编译成一个模块,哈西表的大小可以在加载模块的时候设置,关于iptables中ip_conntrack_max和hash表的关系及调整(5),使用下面的命令: # modprobe ip_conntrack hashsize=$HASHSIZE 这里$HAS

如果netfilter的跟踪连接是编译成一个模块,哈西表的大小可以在加载模块的时候设置,使用下面的命令:

# modprobe ip_conntrack hashsize=$HASHSIZE

这里$HASHSIZE是一个整数。

一个理想的例子:只做防火墙的机器

------------------------------------

在理想的例子中,你有一台机器只做包过滤和NAT(也就是说,基本上没有用户空间的使用,至少不会有象代理这样会不断的耗费内存空间的东西......)

netfilter跟踪连接使用的内核内存大小是:

size_of_mem_used_by_conntrack (以bytes记) =

CONNTRACK_MAX * sizeof(struct ip_conntrack) +

HASHSIZE * sizeof(struct list_head)

-这里:sizeof(struct ip_conntrack)可以有很大的区别,依赖于机器的体系架构,内核版本和编译时间的配置。要想知道它的大小,可以查看ip_conntrack初始化时候kenel的日志信息。sizeof(struct ip_conntrack)在i386架构、2.6.5内核上大约是300bytes,但是在2.6.10的内核上,这个值可以在352至192bytes之间变化!

-sizeof(struct list_head) = 2 * size_of_a_pointer

在i386上,size_of_a_pointer是4bytes。

因此在i386,2.6.5内核上,size_of_mem_used_by_conntrack大约是CONNTRACK_MAX * 300 + HASHSIZE * 8 (bytes)。

如果我们使HASHSIZE = CONNTRACK_MAX(如果我们将大部分的内存用来做防火墙的工作,参见“修改CONNTRACK_MAX和HASHSIZE”部分),在i386架构、2.6.5内核上,size_of_mem_used_by_conntrack大概是CONNTRACK_MAX * 308 bytes。

现在我们假定你使用512M的内存拿来做一个只做防火墙的机器,并且使用128MB以外的内存来做跟踪连接,对于使用终端模式只做防火墙来说应该是足够的大的,例如:

你可以同时设置CONNTRACK_MAX和HASHSIZE大致如下:

(512 - 128) * 1024^2 / 308 =~ 1307315 (instead of 32768 for CONNTRACK_MAX,

and 4096 for HASHSIZE by default)。

对于linux2.4.21(和linux2.6),哈西算法最好使用“2的次方”大小(之前是使用素数)。

因此在这里我们可以将CONNTRACK_MAX和HASHSIZE设置成1048576(2^20)。

这样,你可以存储默认值32倍的跟踪连接条目,而且可以得到更好的跟踪连接性能。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

修正历史:

Revision history:

0.6 Hashsize parameter can be set at boot time with Linux 2.6. Thanks to

Tobias Diedrich for pointing this out.

0.5 Added further notice about the varying length of the conntrack structure.

0.4 Since Linux 2.4.21, hash algorithm is happy with all sizes, not only

prime ones. However, power of 2 is best.

0.3 Various small precisions.

0.2 Information about Linux kernel versions and corresponding /proc entries.

(/proc/sys/net/ipv4/netfilter/ip_conntrack_{max,buckets}).

0.1 Initial writing, largely based on my discussions with Harald Welte

(netfilter maintainer) on the netfilter-devel mailing-list. Many thanks

to him!

上一页  1 2 3 4 5 

Tags:关于 iptables ip

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接