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 系统上应用程序 ...
随机推荐
- CSS设置浏览器滚动条样式
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 5px; height: 110px; background-color: #F5 ...
- socket详解(二)----实例和多线程,线程池使用
一般而言,Java 语言中的套接字有以下两种形式: TCP 套接字(由 Socket 类实现,) UDP 套接字(由 DatagramSocket 类实现) TCP 和 UDP 扮演相同角色,但做法不 ...
- PHP实现今天是星期几
echo "今天是星期" . mb_substr( "日一二三四五六",date("w"),1,"utf-8" );
- GetLastError获取到错误代码的含义
在写win32的时候我们会用到GetLastError()函数来获取程序错误信息,那我们如何从返回的数字得到错误信息. 这里推荐一个博客,总结了所以返回数字的错误信息: http://blog.csd ...
- [Manthan, Codefest 18][Codeforces 1037F. Maximum Reduction]
题目链接:1037F - Maximum Reduction 题目大意:给出一段代码,给你一个长度为n的数组和数字k,求程序运行结果,mod 1e9+7输出 简单翻译下代码的意思,初始定义一个空数组b ...
- webstorm安装 利用host破解
1.官网下载,一路确定(其中最近一版还下载个什么玩意,不要取消,取消后即使安装了也报错找不到jvm的环境变量), 2 打开webstorm,首次使用前accept -->dont sent - ...
- sublime3 快速生成html头文件
通过安装emmt插件老师来实现该功能(https://github.com/sergeche/emmet-sublime#readme) 1. 下载好后解压到文件夹: 2. 打开TS3,点击perfe ...
- 向comboboxEdit中动态添加数据库中保存的用户自定义单位制的名称
if (radioGroup1.SelectedIndex == 2) { bool _Flag = true; sm.SetLciVisible(lciDelete, _Flag); sm.SetL ...
- python学习之旅(四)
Python基础知识(3):基本数据类型之数字 一.基本数据类型 数字Number.字符串String.列表List.元组Tuple.集合Set.字典Dictionary 二.数字 Python3支持 ...
- Flv视频格式如何转换成MP4格式
如何将flv视频格式转换成MP4格式呢?随着现在视频格式的不断多样化,视频格式转换的问题也成了现在生活中常见的问题,那么我们应该怎样将flv视频格式转换成MP4格式呢?下面我们就一起来看一下吧. 操作 ...