TCP连接参数优化
什么是SYN攻击?
SYN攻击最直接的方式就是把TCP半连接队列打满,这样当TCP半连接队列满了,后续再收到SYN报文就会丢失,导致客户端无法和服务端建立连接。
如何避免SYN攻击?
避免SYN攻击可以有以下四种方法:
-
调大netdev_max_backlog
-
增大TCP半连接队列
-
开启tcp_syncookies
-
减少SYN+ACK重传次数
1. 调大netdev_max_backlog
当网卡接受数据包的速度大于内核处理速度时,会有一个队列保存这些数据包。控制该队列的最大值默认是1000,可以适当调整
net.core.netdev_max_backlog = 10000
2. 增大TCP半连接队列
-
增大net.ipv4.tcp_max_syn_backlog
-
增大listen()函数中的backlog
-
增大net.core.somaxconn
3. 开启tcp_syncookies
开启syncookies功能就可以在不使用SYN半连接队列的情况下成功建立连接,相当于绕过了SYN半链接来建立连接。
net.ipv4.tcp_syncookies参数有以下三个值:
-
0值,表示关闭该功能
-
1值,表示仅当SYN半连接队列放不下时,再启用它
-
2值,表示无条件开启功能
$ echo 1 > /proc/sys/net/ipv4/tcp_syncookies
4. 减少SYN+ACK重传次数
SYN-ACK报文的最大重传次数由tcp_synack_retries内核参数决定(默认是5次)
$ echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
本文来自博客园,作者:夜尽天明bylaw,转载请注明原文链接:https://www.cnblogs.com/llwhrbust/p/18859976