Linux 跟踪连接netfilter 调优
Netfilter介绍
linux内核中的netfilter是一款强大的基于状态的防火墙,具有连接跟踪(conntrack)的实现。conntrack是netfilter的核心,许多增强的功能,例如,地址转换(NAT),基于内容的业务识别(l7, layer-7 module)都是基于连接跟踪。
nf_conntrack模块在kernel 2.6.15(2006-01-03发布) 被引入,支持ipv4和ipv6,取代只支持ipv4的ip_connktrack,用于跟踪连接的状态,供其他模块使用。
主要参数介绍
# 哈希表大小(只读)(64位系统、8G内存默认 65536,16G翻倍,如此类推)
net.netfilter.nf_conntrack_buckets # 最大跟踪连接数,默认 nf_conntrack_buckets * 4
net.netfilter.nf_conntrack_max
net.nf_conntrack_max
- 注:跟踪的连接用哈希表存储,每个桶(bucket)里都是1个链表,默认长度为4KB
- 注:netfilter的哈希表存储在内核空间,这部分内存不能swap
- 注:哈希表大小 64位 最大连接数/8 32 最大连接数/4
- 注:32位系统一条跟踪几率约为300字节。
- 注:在64位下,当CONNTRACK_MAX为 1048576,HASHSIZE 为 262144 时,最多占350多MB
状态查看
1、查找:buckets哈希表大小,max最大几率的连接条数
# netfilter模块加载时的bucket和max配置:
sudo dmesg | grep conntrack
[6010550.921211] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
结果
2、查找:哈希表使用情况
# 前4个数字分别为:当前活动对象数、可用对象总数、每个对象的大小(字节)、包含至少1个活动对象的分页数
grep conntrack /proc/slabinfo
nf_conntrack_ffffffff81ad9d40 865 918 320 51 4 : tunables 0 0 0 : slabdata 18 18 0
结果
3、查找:当前跟踪的连接数
sudo sysctl net.netfilter.nf_conntrack_count
cat /proc/net/nf_conntrack | wc -l
4、跟踪连接详细信息
cat /proc/net/nf_conntrack
ipv4 2 tcp 6 2 CLOSE src=100.116.203.128 dst=172.16.105.212 sport=62226 dport=8080 src=172.16.105.212 dst=100.116.203.128 sport=8080 dport=62226 [ASSURED] mark=0 zone=0 use=2 ------------------------------------------------------ # 记录格式
# 网络层协议名、网络层协议编号、传输层协议名、传输层协议编号、记录失效前剩余秒数、连接状态(不是所有协议都有) ------------------------------------------------------ # 之后都是key=value或flag格式,1行里最多2个同名key(如 src 和 dst),第1次出现的来自请求,第2次出现的来自响应 ------------------------------------------------------
结果说明
连接跟踪调优
- 计算公式
- CONNTRACK_MAX(最大几率的连接条数) = 内存个数*1024*1024*1024/16384/2 = ***
- Buckets(哈希表大小) = CONNTRACK_MAX/4 = ***(Byte字节)
- 跟踪数暂用最内存大小 = CONNTRACK_MAX * 300(Byte字节)= ***(Byte字节)
注:如果不能关掉防火墙,基本思路就是,调大nf_conntrack_buckets和nf_conntrack_max,调小超时时间。
注:除了有关联的参数,尽量一次只改一处,记下默认值,效果不明显或更差就还原。
1、哈希表桶大小 调优
注:net.netfilter.nf_conntrack_buckets 不能直接改(报错)
# 临时生效
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
------------------------------------------------------
# 重启永久生效
新建文件:/etc/modprobe.d/iptables.conf
options nf_conntrack hashsize = 32768
2、最大追踪连接数修改 调优
# 临时生效
sudo sysctl -w net.netfilter.nf_conntrack_max=1048576
suod sysctl -w net.nf_conntrack_max=1048576 ------------------------------------------------------ # 永久生效
# 添加修改内核配置文件(/etc/sysctl.conf)
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576 # 如果要马上应用配置文件里的设置:
sudo sysctl -p /etc/sysctl.conf
3、响应时间 调优
# 临时生效 # 主动方的最后1个状态。默认120秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 # CLOSE_WAIT是被动方收到FIN发ACK,然后会转到LAST_ACK发FIN,除非程序写得有问题,正常来说这状态持续时间很短。#默认 60 秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=15 # 理论上不用这么长,不小于 net.ipv4.tcp_keepalive_time 就行了。默认 432000 秒(5天)
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300 ----------------------------------------------------- # 永久生效
# 修改内核配置文件(/etc/sysctl.conf)
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300 # 如果要马上应用配置文件里的设置:
sudo sysctl -p /etc/sysctl.conf
禁用连接跟踪模块
注:只要iptables还有规则用到nat和state模块,就不适合关掉netfilter,否则这些规则会失效。
# 条件举例
# 关掉netfilter会拿不到状态,导致每个请求都要从头到尾检查一次,影响性能:
# 例如这条默认规则(通常写在第1条或很靠前的位置):
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
禁用步骤
1、整理确认关闭该模块后不会影响功能
#
# 查找相关模块
sudo lsmod | egrep "ip_table|iptable|nat|conntrack" #
# 把带 -t nat 、-m state 的规则都干掉
# 或删掉 /etc/sysconfig/iptables 里相应内容
# 查看iptables规则
sudo iptables-save #
# 编辑 iptables 配置文件
# 找到 IPTABLES_MODULES ,删掉跟conntrack有关的模块(如果有)
sudo vim /etc/sysconfig/iptables-config #
# 停掉iptables
# Centos 6
sudo service iptables stop
# Centos 7
sudo systemctl stop iptables
2、移除相关模块
sudo rmmod iptable_nat
sudo rmmod ip6table_nat
sudo rmmod nf_defrag_ipv4
sudo rmmod nf_defrag_ipv6
# 移除相关模块
sudo rmmod nf_nat
sudo rmmod nf_nat_ipv4
sudo rmmod nf_nat_ipv6
sudo rmmod nf_conntrack
sudo rmmod nf_conntrack_ipv4
sudo rmmod nf_conntrack_ipv6
sudo rmmod xt_conntrack -------------------------- # 开启相关模块
sudo modprobe iptable_nat
sudo modprobe ip6table_nat
sudo modprobe nf_defrag_ipv4
sudo modprobe nf_defrag_ipv6
sudo modprobe nf_nat
sudo modprobe nf_nat_ipv4
sudo modprobe nf_nat_ipv6
sudo modprobe nf_conntrack
sudo modprobe nf_conntrack_ipv4
sudo modprobe nf_conntrack_ipv6
sudo modprobe xt_conntrack
Linux 跟踪连接netfilter 调优的更多相关文章
- linux概念之性能调优
目前,对系统进行性能调试的工具有很多,这些可以两大类:一类是标准的分析工具,即所有的UNIX都会带的分析工具: 另一类是不同厂商的UNIX所特有的性能分析工具,比如HP-UX就有自己的增值性能分析工具 ...
- linux 内核参数VM调优 之 参数调节和场景分析
1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...
- (转)linux IO 内核参数调优 之 参数调节和场景分析
1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...
- Perf -- Linux下的系统性能调优工具,第 1 部分 应用程序调优的使用和示例 Tracepoint 是散落在内核源代码中的一些 hook,一旦使能,它们便可以在特定的代码被运行到时被触发,这一特性可以被各种 trace/debug 工具所使用。Perf 就是该特性的用户之一。
Perf -- Linux下的系统性能调优工具,第 1 部分 应用程序调优的使用和示例 https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/i ...
- Perf Event :Linux下的系统性能调优工具
Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能 ...
- 基于Linux的WebSphere性能调优与故障诊断
一.关于was数据源等问题的配置 (1)关于was数据源连接池的最大.最小配置多大合适?怎样去计算? (2)关于JVM的配置,64位系统,64位WAS,最值小和最大配置多大最优?怎样去计算? (3)应 ...
- linux性能分析及调优
第一节:cpu 性能瓶颈 计算机中,cpu是最重要的一个子系统,负责所有计算任务: 基于摩尔定律的发展,cpu是发展最快的一个硬件,所以瓶颈很少出现在cpu上: 我们线上环境的cpu都是多核的,并且基 ...
- Linux内核Socket参数调优
可调优的内核变量存在两种主要接口:sysctl命令和/proc文件系统,proc中与进程无关的所有信息都被移植到sysfs中.IPV4协议栈的sysctl参数主要是sysctl.net.core.sy ...
- Perf -- Linux下的系统性能调优工具,第 2 部分 特殊用法以及内核调优示例
https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/ 本文内容简介 之前介绍了 perf 最常见的一些用法,关注于 Linux 系统上应用程序 ...
随机推荐
- 二、Sql Server 基础培训《进度2-关于主键(知识点学习)》
学习作业2: 问题1:主键都有哪些方式? 问题2:本次实战案例建立的主键采用哪种方式? 问题3:猜猜金蝶K3WISE建立的主键采用哪种方式? 问题4:谈谈手工主键增长设置具体实现思路?(选 ...
- 【CF660E】Different Subsets For All Tuples 结论题
[CF660E]Different Subsets For All Tuples 题意:对于所有长度为n,每个数为1,2...m的序列,求出每个序列的本质不同的子序列的数目之和.(多个原序列可以有相同 ...
- PL/SQL控制结构
顺序结构 按先后顺序 分支判断结构 IF语句 IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statem ...
- 4.express 框架
express express 官网:http://expressjs.com/ 中文:http://www.expressjs.com.cn/ 库:jquery 一堆 的属性和方法 框架:expre ...
- vue 中的数据绑定
vue当中有个v-model, 是怎么实现的呢?其实是利用了$event. <div id="app"> <!-- 输入什么,就输出什么 --> <i ...
- ArcEngine临时数据存储 创建内存工作空间
参考网址,这里 工作中有时候需要使用临时数据,以前都是创建一个默认的shapefile或者gdb,今天发现esri官方帮助文档给出了一个方法,可以创建内存工作空间,代码如下: public stati ...
- nginx配置框架问题
1.框架源文件没有引入 2.nginx fastcgi.conf配置允许访问上级目录地址 3.使用autoindex on;参数
- Appium下载安装及环境配置
下载地址:https://bitbucket.org/appium/appium.app/downloads/ windows安装: 下载 AppiumForWindows.zip 解压 Appium ...
- 解决web资源跨域请求问题
参考地址: http://my.oschina.net/lichaoqiang/blog/317823 在浏览器请求中,出现跨域访问资源的问题,我们肯定会遇到.如果跨域请求被阻止,有可能导致css.j ...
- windows 2008R2部署网站后出现 ‘PageHandlerFactory-Integrated’ 的解决办法
原因:运行4.0的网站,需要用aspnet_regiis注册4.0框架,然后用4.0的Class池,就可以运行4.0的web项目了. 解决方法:1.在cmd中切换到4.0所在的目录,命令如下:cd C ...