注意开启 TCP syncookies 后,内核选项
net.ipv4.tcp_max_syn_backlog 也就无效了。可以通过下面的方式开启:
$ sysctl -w net.ipv4.tcp_syncookies=1net.ipv4.tcp_syncookies = 1
优化网络相关的内核参数
当遭遇攻击时,请求数会较大,你可能会看到大量处于TIME. WAIT状态的连接。
linux查看tcp的状态命令:
netstat -nat查看TCP各个状态的数量;
lsof -i:port可以检测到打开套接字的状况;
sar -n SOCK查看tcp创建的连接数;
tcpdump -iany tcp port 6000对tcp端口为6000的进行抓包。
[root@centos ~]# netstat -antActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 127.0.0.1:25 0.0.0.0:* LISTENtcp 0 0 192.168.10.58:22 13.136.182.140:23107 TIME_WAITtcp 0 48 192.168.10.58:22 13.136.182.140:61282 TIME_WAITtcp6 0 0 :::22 :::* LISTENtcp6 0 0 ::1:25 :::* LISTEN
TCP状态及其描述:
状态描述LISTEN等待来自远程TCP应用程序的请求SYN_SENT发送连接请求后等待来自远程端点的确认。TCP第一次握手后客户端所处的状态SYN-RECEIVED该端点已经接收到连接请求并发送确认。该端点正在等待最终确认。TCP第二次握手后服务端所处的状态ESTABLISHED代表连接已经建立起来了。这是连接数据传输阶段的正常状态FIN_WAIT_1等待来自远程TCP的终止连接请求或终止请求的确认FIN_WAIT_2在此端点发送终止连接请求后,等待来自远程TCP的连接终止请求CLOSE_WAIT该端点已经收到来自远程端点的关闭请求,此TCP正在等待本地应用程序的连接终止请求CLOSING等待来自远程TCP的连接终止请求确认LAST_ACK等待先前发送到远程TCP的连接终止请求的确认TIME_WAIT等待足够的时间来确保远程TCP接收到其连接终止请求的确认
它们会占用大量内存和端口资源。这时,我们可以优化与TIME_ WAIT状态相关的内核选项,比如采取下面几种措施:
增大处于 TIME_WAIT 状态的连接数量
net.ipv4.tcp_max_tw_buckets,并增大连接跟踪表的大小
net.netfilter.nf_conntrack_max。减小 net.ipv4.tcp_fin_timeout和
net.netfilter.nf_conntrack_tcp_timeout_time_wait,让系统尽快释放它们所占用的资源。开启端口复用 net.ipv4.tcp_tw_reuse。这样,被TIME_WAIT状态占用的端口,还能用到新建的连接中。
增大本地端口的范围
net.ipv4.ip_local_port_range。这样就可以支持更多连接,提高整体的并发能力。增加最大文件描述符的数量。你可以使用fs.nr_open和fs.file-max,分别增大进程和系统的最大文件描述符数;或在应用程序的systemd配置文件中,配置LimitNOFILE,设置应用程序的最大文件描述符数。
通过专业的流量清洗系统来防范DDOS攻击
流量清洗服务是一种针对对其发起的DOS/DDOS攻击的监控、告警和防护的一种网络安全服务。在不影响正常业务的前提下,清洗掉异常流量。它会分析和过滤异常流量,将异常的攻击流量阻挡在门外,从而为正常的请求提供服务。
一般这类系统由专门的服务商提供,大多数会提供10 Gpbs~100Gpbs 的防护能力。