TCP连接参数优化

什么是SYN攻击?

SYN攻击最直接的方式就是把TCP半连接队列打满,这样当TCP半连接队列满了,后续再收到SYN报文就会丢失,导致客户端无法和服务端建立连接。

如何避免SYN攻击?

避免SYN攻击可以有以下四种方法:

  1. 调大netdev_max_backlog

  2. 增大TCP半连接队列

  3. 开启tcp_syncookies

  4. 减少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
posted @ 2025-05-05 11:29  夜尽天明bylaw  阅读(60)  评论(0)    收藏  举报