专栏首页YP小站Linux系统日志报Possible SYN flooding处理方法

Linux系统日志报Possible SYN flooding处理方法

前提

当你在 Linux 服务器上运行 dmesg -T 命令,看到下面输出,可能会猜测遭受到 SYN 洪水攻击。

上图只是可能遭受到 SYN 洪水攻击,但不一定是被攻击了。后面讲述如何判定这个问题?

简述 TCP SYN flood 攻击原理

TCP 协议要经过三次握手才能建立连接:

于是出现了对于握手过程进行的攻击。攻击者发送大量的 SYN 包,服务器回应 (SYN+ACK) 包,但是攻击者不回应 ACK 包,这样的话,服务器不知道 (SYN+ACK) 是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。见下图:

判断方法

  • 查看所有TCP连接数,按状态统计并排序
$ netstat -ant | awk '/^tcp/{print $NF}' | sort -n | uniq -c  | sort -nr

4913 TIME_WAIT
1726 ESTABLISHED
  87 FIN_WAIT2
  23 LISTEN
  23 FIN_WAIT1
   7 LAST_ACK
   3 SYN_SENT
   1 CLOSING

从上面看,SYN_SENT 数值很小,排除洪水攻击,可能是 并发连接过多

  • 查看网络连接打开的文件数
$ lsof -ni | wc -l

2207
  • 查看 SOCKET 状态,以及数量
$ cat /proc/net/sockstat

sockets: used 2273
TCP: inuse 1636 orphan 1039 tw 8795 alloc 3115 mem 873
UDP: inuse 2 mem 2
  • 查看内核参数 net.ipv4.tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog 半连接队列长度(默认为1024),加大SYN队列长度可以容纳更多等待连接的网络连接数,具体多少数值受限于内存

$ sysctl -a | grep tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog = 2048

查看内核参数 net.ipv4.tcp_synack_retries

net.ipv4.tcp_synack_retries 表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包),进行重试的次数(默认为5)。

$ sysctl -a | grep tcp_synack_retries

net.ipv4.tcp_synack_retries = 5

结论:tcp_max_syn_backlog(2048) 小于 2207(lsof -ni | wc -l),可能网络连接数不够了。

优化方法

# 编辑 /etc/sysctl.conf 配置文件,修改参数
$ vim /etc/sysctl.conf

# 当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0
net.ipv4.tcp_syncookies = 1

# SYN队列的长度,默认为1024
net.ipv4.tcp_max_syn_backlog = 4096

# 允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 0

# 开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1

# 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认60
net.ipv4.tcp_fin_timeout = 30

# 当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时(7200)
net.ipv4.tcp_keepalive_time = 1200

# 用于向外连接的端口范围。缺省情况下很小:32768到61000
net.ipv4.ip_local_port_range = 1024 65000

# 同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000
net.ipv4.tcp_max_tw_buckets = 5000

# 生效配置
$ sysctl -p

TCP SYN flood 攻击防御方法

下面列举部分方法,方法可以同时使用,也可以单独使用:

  • 方法一:限制 SYN 并发数 $ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s
  • 方法二:优化系统内核参数,具体可以参考上面 优化方法
  • 方法三:网站上 CDN,隐藏源站 IP,让 CDN 抵抗攻击
  • 方法四:购买 高防IP

参考链接

  • https://www.cnblogs.com/sunsky303/p/11811097.html
  • https://blog.csdn.net/gaojinshan/article/details/40895767

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

本文分享自微信公众号 - YP小站(ypxiaozhan),作者:YP小站

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Asciinema:Linux操作命令录制神器

    Asciinema 是一款开源免费的终端录制工具,它可以将命令行输入输出的任何内容加上时间保存在文件中,同时还提供方法在终端或者web浏览器中进行回放。在播放过...

    YP小站
  • 小白都会设置的K8S RBAC

    对于K8S新手来说,K8S RBAC 不能很好的掌握,今天推荐一款非常不错的 K8S RBAC 配置工具 permission-manager,小白都能配置,并...

    YP小站
  • Docker 必修课程 Dockerfile

    Dockfile 是一种被Docker程序解释的脚本文件,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令,Docker程序将这些...

    YP小站
  • 再回顾几个内核参数

    老七Linux
  • 基于 Nginx 实现 10万+ 并发,Linux 内核优化

    由于默认的Linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的...

    芋道源码
  • 【2015-9-6学习笔记】贝叶斯统计和金融市场

    上午上了四节课,全是《贝叶斯统计》,贝叶斯学派和频率学派一直论战不断,焦点就在于先验分布的问题,百度百科有云:先验分布是总体分布参数θ的一个概率分布。贝叶斯学派...

    统计学家
  • 从SAP最佳业务实践看企业管理(158)-WM-126序列号管理

    WM 126序列号管理 本文档的目的是详细解释业务流程。目标群体都是后勤人员。 使用此组件可以识别和区分物料的个别项目。因此,此组件可以补充物料主记录,其中可能...

    SAP最佳业务实践
  • 如何写好css系列之button

          现代前端行业的发展,如果你在css的时候,还没有利用一些预编译工具,是否觉得自己太low了。但你是否考虑过搭建一套自己前端框架。可能你会想这是否有必...

    sam dragon
  • Python 中关于文件操作的注意事项

    此种方法可以不用在文件操作后,写关闭文件代码f.close()。代码执行完毕后,自动关闭。

    py3study
  • 文件操作练习.

    py3study

扫码关注云+社区

领取腾讯云代金券