Available Commands: completion Generate the autocompletion script for the specified shell debug 调试命令 get 获取指定文件 help Help about any command list 列出指定目录下的文件 put 上传文件
Flags: -h, --help help for this command
Use " [command] --help" for more information about a command.
Linux 下默认会进行 5 次重发 SYN-ACK 包,总共耗时大概一分钟。由于
SYN-ACK 超时需要 63
秒,那么就给攻击者一个攻击服务器的机会,攻击者在短时间内发送大量的 SYN
包给服务端,用于耗尽服务端的 SYN 队列。为了应对 SYN 攻击的问题,linux
提供了几个 TCP
参数:tcp_syncookies、tcp_synack_retries、tcp_max_syn_backlog、tcp_abort_on_overflow
syn cookie
Linux 实现了一种称为 SYN cookie 的机制,通过
net.ipv4.tcp_syncookies 控制,设置为 1 表示开启。简单说
SYNcookie
就是将连接信息编码在ISN(initialsequencenumber)中返回给客户端,这时服务端不需要将半连接保存在队列中,而是利用客户端随后发送的
ACK 带回的 ISN 还原连接信息,以完成连接的建立,避免了半连接队列被攻击
SYN 包填满。
SYN 半连接队列的大小是由
/proc/sys/net/ipv4/tcp_max_syn_backlog
这个内核参数控制的,有些内核似乎也受 listen 的 backlog
参数影响,取的是两个值的最小值。当这个队列满了,不开启 syncookies
的时候,服务端会丢弃新来的 SYN 包,而客户端在多次重发 SYN
包得不到响应而返回(connection timeout)错误。但是,当服务端开启了
syncookies=1,那么 SYN 半连接队列就没有逻辑上的最大值了,并且
/proc/sys/net/ipv4/tcp_max_syn_backlog
设置的值也会被忽略。