修改内核参数有3种办法:一种临时修改,两种永久修改。

  临时修改是使用sysctl [选项] [参数名=值]命令;永久修改是修改/etc/sysctl.conf文件或修改/proc/sys/目录下的对应文件(例如,修改net.ipv4.tcp_synack_retries=0,即echo 0 > /proc/sys/net/ipv4/tcp_synack_retries)。

  最常见的内核参数调优就是为了防止DoS(拒绝服务攻击)和DDoS(分布式拒绝服务攻击)。其中SYN Flood是当前最流行的DoS与DDoS的方式之一,这是种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来的海量请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。

  解决办法就是配置相关参数,可以添加到/etc/sysctl.conf文件中,也可以直接修改/proc/sys/目录下的对应文件。

[root@youxi1 ~]# vim /etc/sysctl.conf  //添加或修改参数
net.ipv4.tcp_synack_retries = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_max_syn_backlog = 20480
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
fs.file-max = 819200
net.core.somaxconn = 65535
net.core.rmem_max = 1024123000
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 165536
net.ipv4.ip_local_port_range = 10000 65535

参数说明:

 1)主要参数

  net.ipv4.tcp_synack_retries  表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包),进行重试的次数(默认为5)。修改这个参数为0,可以加快回收半连接,减少资源消耗,但是有一个副作用:网络状况很差时,如果对方没收到第二个握手包,可能连接服务器失败,但对于一般网站,用户刷新一次页面即可。根据抓包经验,这种情况很少,但为了保险起见,可以只在被tcp洪水攻击时临时启用这个参数。之所以可以把tcp_synack_retries改为0,因为客户端还有tcp_syn_retries参数,默认是5,即使服务器端没有重发SYN+ACK包,客户端也会重发SYN握手包。
  net.ipv4.tcp_syn_retries  表示当没有收到服务器端的SYN+ACK包时,客户端重发SYN握手包的次数(默认为5)。
  net.ipv4.tcp_max_syn_backlog  半连接队列长度(默认为1024),加大SYN队列长度可以容纳更多等待连接的网络连接数,具体多少数值受限于内存

 2)辅助参数
  fs.file-max  系统允许的文件句柄的最大数目(也就是能打开文件的最大数量),因为连接需要占用文件句柄。注意:/etc/security/limits.conf文件内对nofile的配置(使用ulimit -n查看),还有/etc/security/limits.d/20-nproc.conf文件内对nproc的配置(使用ulimit -u查看),最好配置玩这两个参数重启下系统。
  net.core.somaxconn  用来应对突发的大并发connect 请求
  net.core.rmem_max  最大的TCP 数据接收缓冲(字节)
  net.core.wmem_max  最大的TCP 数据发送缓冲(字节)
  net.core.netdev_max_backlog  网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
  net.ipv4.ip_local_port_range  本机主动连接其他机器时的端口分配范围,比如说,在vsftpd主动模式会用到

 3)次级辅助参数

  注意:以下参数面对外网时,不要打开。因为副作用很明显。

  net.ipv4.tcp_syncookies  当出现半连接队列溢出时是否向对方发送syncookies(默认为0),1表示启用cookies来处理,可防范少量SYN攻击;0表示关闭。调大半连接队列后没必要
  net.ipv4.tcp_tw_reuse  TIME_WAIT状态的连接重用功能是否开启(默认为0),1表示允许将TIME-WAIT sockets重新用于新的TCP连接;0表示关闭。
  net.ipv4.tcp_tw_recycle  时间戳选项,与前面net.ipv4.tcp_tw_reuse参数配合,1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout  TIME_WAIT状态的连接回收功能,默认值是 60,对于本端断开的socket连接,TCP保持在FIN_WAIT_2状态的时间

扩展:TCP三次握手

Client-------------------------Server

SYN  ------------------------->

<------------------------SYN+ACK

ACK  ------------------------->    (SYN Flood就是这一步不回)

参考:Linux下防御DDOS攻击的操作梳理

   Linux系统内核参数优化

Linux系统调优——内核相关参数(五)的更多相关文章

  1. Linux系统调优相关工具

    一.系统调优概述 系统的运行状况: CPU -> MEM -> DISK*-> NETWORK -> 应用程序调优 分析是否有瓶颈(依据当前应用需求) 调优(把错误的调正确) ...

  2. linux系统调优工具

    系统调优思路 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对 OS 各子系统达到一种平衡的定义.具体步骤如下: 1. 系统的运行状况: CPU -> MEM -> D ...

  3. Linux系统调优1

    Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬 ...

  4. Linux系统调优权威指南

    1.关闭SELINUX功能1.1 修改配置文件,使关闭SELINUX永久生效sed 's#SELINUX=enforcing#SELINUX=disables#g' /etc/selinux/conf ...

  5. Linux系统调优——CPU(一)

    (1).系统调优思路 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对OS 各子系统达到一种平衡的定义.具体步骤如下: 1. 系统的运行状况:  CPU -> MEM  -& ...

  6. Linux系统调优——网络(四)

    (1).查看网络(Network)运行状态相关工具 1)nload监控总体带宽使用情况 nload需要自己安装,而且在安装前需要安装epel-release [root@youxi1 ~]# yum ...

  7. Linux系统调优

    Linux核心参数都是放置在/proc下面:系统的参数都是放置在/proc/sys swap最好放置在运行最快的硬盘上面,但是swap并能取代ram,因为并有I/O上面的损耗,所以优先考虑检验内存没有 ...

  8. Linux系统调优及安全设置

    1.关闭SELinux #临时关闭 setenforce 0 #永久关闭 vim /etc/selinux/config SELINUX=disabled 2.设定运行级别为3 #设定运行级别 vim ...

  9. Linux系统调优——磁盘I/O(三)

    (1).查看I/O运行状态相关工具 1)查看文件系统块大小 对于ext4文件系统,查看文件系统块大小 [root@CentOS6 ~]# tune2fs -l /dev/sda1 | grep siz ...

随机推荐

  1. 结构型模式(六) 享元模式(Flyweight)

    一.动机(Motivate) 在软件系统中,采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价--主要指内存需求方面的代价.如何在避免大量细粒度对象问题的同时,让外 ...

  2. postgresql分布式集群之citus简介(转载)

    一.Citus是什么 citus是PG的一个sharding插件,可以把PG变成一个分布式数据库.目前在苏宁有大量的生产应用跑在citus+pg的环境中.大家可以看it大咖视频. citus是一款基于 ...

  3. CF446C DZY Loves Fibonacci Numbers 线段树 + 数学

    有两个性质需要知道: $1.$ 对于任意的 $f[i]=f[i-1]+f[i-2]$ 的数列,都有 $f[i]=fib[i-2]\times f[1]+fib[i-1]\times f[2]$ 其中 ...

  4. HTML5类操作

    一.获取DOM的方式 ①通过类名获取元素,以伪数组形式存在 document.getElementsByClassName("class"); ②通过css选择器获取元素,符合匹配 ...

  5. leetcode解题报告(27):Reverse Linked List

    描述 Reverse a singly linked list. 分析 一开始写的时候总感觉没抓到要点,然后想起上数据结构课的教材上有这道题,翻开书一看完就回忆起来了,感觉解法挺巧妙的,不比讨论区的答 ...

  6. lixuxmint系统定制与配置(5)-效率配置

    小书匠Linux 目录: 1.zsh安装与配置 1.1 安装 1.1.1 检查当前的终端类型 1.1.2 安装zsh 1.2 美化zsh 1.3 配置zsh 1.3.1 别名设置 2.自动登录服务器 ...

  7. fgets()函数

    声明: char *fgets(char *str,int n,FILE* stream) 参数: str—这是指向一个字符数组的指针,该数组存储了要读取的字符串 n – 这是要读取的最大字符数(包括 ...

  8. js off 缓动动画

    动画也有很多种,一起来学习,缓动动画吧 缓动动画 1.缓动动画原理=盒子位置+(目标盒子位置-现在盒子位置)/10 2.步长越来越小 3.让步长越来越小的公式      步长=(目标位置-本身位置)/ ...

  9. Hadoop hadoop balancer配置

    hadoop版本:2.9.2 1.带宽的设置参数: dfs.datanode.balance.bandwidthPerSec   默认值 10m 2.datanode之间数据块的传输线程大小:dfs. ...

  10. 怎么将输出的字符串换行输出,replace

    var getAllData="我是第一行,我是第二行,我是第三行" var toBreak=getAllData.replace(/,/g, "\n") // ...