内核优化

cat /etc/sysctl.conf

默认推荐设置是 htcp

net.ipv4.tcp_congestion_control = bic

忽略icmp ping广播包,应开启,避免放大攻击 1开启0关闭

net.ipv4.icmp_echo_ignore_broadcasts = 1

开启恶意icmp错误消息保护 1开启0关闭

net.ipv4.icmp_ignore_bogus_error_responses = 1

开启SYN洪水攻击保护,表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭 1为开启

net.ipv4.tcp_syncookies = 1

开启并记录欺骗,源路由和重定向包

net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

处理无源路由的包

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

0:关闭反向路由校验

1:开启严格的反向路由校验。对每个进来的数据包,校验其反向路由是否是最佳路由。如果反向路由不是最佳路由,则 直接丢弃该数据包。

2:开启松散的反向路由校验。对每个进来的数据包,校验其源地址是否可达,即反向路由是否能通(通过任意网口), 如果反向路径不通,则直接丢弃该数据包。

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

恶意用户可以使用IP重定向来修改远程主机中的路由表,在设计良好的网络中,末端的重定向设置是不需要的,发送和接受重定向信息包都要关闭。

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

禁止数据包转发,不做路由器功能。所谓转发即当主机拥有多网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。IP转发功能,做NAT服务或者路由时才会用到。

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.ip_forward = 0

开启execshield,execshield主要用于随机化堆栈地址,避免被exploit程序修改恶意地址,而导致执行攻击程序。

kernel.exec-shield = 1
kernel.randomize_va_space = 1

增加系统文件描述符限制,系统所有进程一共可以打开的文件数量

fs.file-max = 65535

系统默认的pid_max值为32768,正常情况下是够用的,当我们跑重量任务时,会不够用,最终导致内存无法分配的错误

kernel.pid_max = 65536

接收套接字缓冲区大小的默认值(以字节为单位)。

net.core.rmem_default = 262144

接收套接字缓冲区大小的最大值(以字节为单位)。

net.core.rmem_max = 16777216

定义默认的发送窗口大小;对于更大的 BDP 来说,这个大小也应该更大。

net.core.wmem_default = 262144

定义发送窗口的最大大小;对于更大的 BDP 来说,这个大小也应该更大。

net.core.wmem_max = 16777216

用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。

net.core.somaxconn = 262144

当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。

net.core.netdev_max_backlog = 4096

该参数指定了每个套接字所允许的最大缓冲区的大小

net.core.optmem_max = 10000000

启用 RFC 1323 定义的 window scaling;要支持超过 64KB 的窗口,必须启用该值。

net.ipv4.tcp_window_scaling = 1

表示SYN队列长度,默认1024,改成8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_syn_backlog = 4096

表示系统同时保持TIME_WAIT套接字的最大数量

net.ipv4.tcp_max_tw_buckets = 4096

表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为30分钟。

net.ipv4.tcp_keepalive_time = 20

keepalive探测包的发送间隔

net.ipv4.tcp_keepalive_intvl = 5

IP转发功能,做NAT服务或者路由时才会用到。

net.ipv4.ip_forward = 0

为自动调优定义每个 socket 使用的内存。

第一个值是为 socket 的发送缓冲区分配的最少字节数。

第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。

第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。

net.ipv4.tcp_mem = 192000 300000 732000

与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。

net.ipv4.tcp_rmem = 51200 131072 204800

为自动调优定义每个 socket 使用的内存。

第一个值是为 socket 的发送缓冲区分配的最少字节数。

第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。

第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。

net.ipv4.tcp_wmem = 51200 131072 204800

keepalive探测包的发送间隔

net.ipv4.tcp_keepalive_intvl = 5

如果对方不予应答,探测包的发送次数

net.ipv4.tcp_keepalive_probes = 2

设置较小的数值,可以有效降低orphans的数量

net.ipv4.tcp_orphan_retries = 3

在内核放弃建立连接之前发送SYN包的数量。

net.ipv4.tcp_syn_retries = 3

对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。(可以根据上面的 tcp_syn_retries 来决定这个值)

net.ipv4.tcp_synack_retries = 3

在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)

net.ipv4.tcp_retries2 = 5

表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

net.ipv4.tcp_fin_timeout = 30

系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)

net.ipv4.tcp_max_orphans = 2000

表示系统同时保持TIME_WAIT套接字的最大数量

net.ipv4.tcp_max_tw_buckets = 10000

表示SYN队列长度,默认1024,改成8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_syn_backlog = 8192

表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1

表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_tw_recycle = 1

开启TCP时间戳,以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。

net.ipv4.tcp_timestamps = 1

关闭tcp_sack

启用有选择的应答(Selective Acknowledgment),

这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);

(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。

net.ipv4.tcp_sack = 1

表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.ip_local_port_range = 1024 65000

设置系统对最大跟踪的TCP连接数的限制

net.ipv4.netfilter.ip_conntrack_max=204800

关闭tcp的连接传输的慢启动,即先休止一段时间,再初始化拥塞窗口。

net.ipv4.tcp_slow_start_after_idle = 0

路由缓存刷新频率,当一个路由失败后多长时间跳到另一个路由,默认是300。

net.ipv4.route.gc_timeout = 100

允许 TCP/IP 协议栈适应在高吞吐量情况下低延时的情况;这个选项应该禁用。

net.ipv4.tcp_low_latency = 0

一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh,拥塞窗口snd_cwnd 还有srtt等信息保存到dst_entry中, 只要dst_entry 没有失效,下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接.tcp_no_metrics_save 设置为1就是不保持这些参数(经验值),每次建立连接后都重新摸索一次. 我觉得没什么好处. 所以系统默认把它设为0。

net.ipv4.tcp_no_metrics_save = 0

打开了TCP内存自动调整功能(1为打开、0为禁止)

net.ipv4.tcp_moderate_rcvbuf = 1

单个TSO段可消耗拥塞窗口的比例,默认值为3。

net.ipv4.tcp_tso_win_divisor = 3

分组层路径MTU发现(MTU探测)中使用的search_low的初始值。如果允许MTU探测,这个初始值就是连接使用的初始MSS值。

net.ipv4.tcp_base_mss= 512

慢启动阶段,就是当前拥塞窗口值比慢启动阈值(snd_ssthresh)小的时候,所处的阶段就叫做慢启动阶段。当我们收到一个新的ACK时,则会调用tcp_slow_start()这个函数,并且为拥塞窗口增加1.(Linux中拥塞窗口的值表数据包的个数,而不是实际的发送字节数目。实际可以发送的字节数等于可以发送的数据包个数*MSS。)直到慢启动阶段出现数据包的丢失。而引入了tcp_max_ssthresh 这个参数后,则可以控制在慢启动阶段拥塞窗口增加的频度。默认这个参数不打开,如果这个参数的值设置为1000,则当拥塞窗口值大于1000时,则没收到一个ACK,并不再增加拥塞窗口一个单位了,而是约收到2个ACK才增加一个窗口单位。收到2ACK并不是决定值!!需要根据当前的拥塞窗口值,tcp_max_ssthresh值进行判断。

net.ipv4.tcp_max_ssthresh= 0

这个函数RTO超时的处理函数。如果是thin流,则不要新设RTO是原先的2倍。

net.ipv4.tcp_thin_linear_timeouts= 0

与tcp_thin_linear_timeouts同为快速重传算法参数

net.ipv4.tcp_thin_dupack= 0

在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)another

net.ipv4.ip_conntrack_max = 655360

运行sysctl -p 启用内核配置

参考文档

http://blog.chinaunix.net/uid-20646942-id-5593630.html https://www.cnblogs.com/klcf0220/p/6003222.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容