查看服务器是否被DDOS攻击的方法_宝塔服务器流量异常,如何查看出口ip(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

A.CPU占用很高

B.netstat –na,若观察到大量的ESTABLISHED的连接状态 单个IP高达几十条甚至上百条,属于正常。
查看TCP端口连接数

查看网络连接总数
# netstat -an |wc -l

查看某个特定ip的连接数
# netstat -an |grep 8.8.8.8 |wc -l

查看连接数等待time_wait状态连接数
# netstat -an |grep TIME\_WAIT|wc -l

查看建立稳定连接数量
# netstat -an |grep ESTABLISHED |wc -l

查看不同状态的连接数
# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

查看每个ip跟服务器建立的连接数
# netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
(PS:正则解析:显示第5列,-F : 以:分割,显示列,sort 排序,uniq -c统计排序过程中的重复行,sort -rn 按纯数字进行逆序排序)

查看每个ip建立的ESTABLISHED/TIME_OUT状态的连接数
# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

以下是我自己用VPS测试的结果:

root:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.xx
1 174.129.237.xx
1 58.60.118.xx
1 Address
1 servers)
2 118.26.131.xx
3 123.125.1.x

在这里插入图片描述
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。

上述所讲到的判断分析,让我们能准确的判断存在的问题是什么,怎么第一时间来解决问题。让我们能更好的维护我们的网站安全。

TCP洪水攻击检测

# tail -f /var/log/messages

Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies.

检查连接数增多,并且SYN_RECV 连接特别多:

检查连接数增多,并且SYN_RECV 连接特别多:
# netstat -n awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'

TIME_WAIT 16855

CLOSE_WAIT 21

SYN_SENT 99

FIN_WAIT1 229

根据经验,正常时检查连接数如下:

# netstat -n awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'

在这里插入图片描述
根据netstat查看到的对方IP特征:

# netstat -na grep SYN\_RECV more

在这里插入图片描述
以下配置,第一段参数是最重要的,第二段参数是辅助的,其余参数是其他作用的:

# vi /etc/sysctl.conf

net.ipv4.tcp_synack_retries=0

#半连接队列长度

net.ipv4.tcp_max_syn_backlog=200000

#系统允许的文件句柄的最大数目,因为连接需要占用文件句柄

fs.file-max=819200

#用来应对突发的大并发connect 请求

net.core.somaxconn=65536

#最大的TCP 数据接收缓冲(字节)

net.core.rmem_max=1024123000

#最大的TCP 数据发送缓冲(字节)

net.core.wmem_max=16777216

#网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目

net.core.netdev_max_backlog=165536

#本机主动连接其他机器时的端口分配范围

net.ipv4.ip_local_port_range=1000065535

使配置生效:

# sysctl -p

注意,以下参数面对外网时,不要打开。因为副作用很明显,具体原因请google,如果已打开请显式改为0,然后执行sysctl -p关闭。因为经过试验,大量TIME_WAIT状态的连接对系统没太大影响:

#当出现 半连接 队列溢出时向对方发送syncookies,调大 半连接 队列后没必要

net.ipv4.tcp_syncookies=0

#TIME\_WAIT状态的连接重用功能

net.ipv4.tcp_tw_reuse=0

#时间戳选项,与前面net.ipv4.tcp_tw_reuse参数配合

net.ipv4.tcp_timestamps=0

#TIME\_WAIT状态的连接回收功能

net.ipv4.tcp_tw_recycle=0

防御TCP洪水攻击方法

通过调整tcp参数来防范DDOS攻击
sysctl -a | grep syn 看到:SYN相关的配置
net.ipv4.tcp_max_syn_backlog = 1024

net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie 功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN 的重试次数。加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分 SYN攻击,降低重试次数也有一定效果。
调整上述设置的方法是:

增加SYN队列长度到2048:

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

打开SYN COOKIE功能:

sysctl -w net.ipv4.tcp_syncookies=1

降低重试次数:

sysctl -w net.ipv4.tcp_synack_retries=3

sysctl -w net.ipv4.tcp_syn_retries=3

为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。

防止同步包洪水(Sync Flood)

# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

也有人写作

#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改

防止各种端口扫描

# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Ping洪水攻击(Ping of Death)

# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

扩展

问题1:解决time_wait连接数大量问题

查询到time_wait连接数过多情况下,调整内核参数:/etc/sysctl.conf

# vim /etc/sysctl.conf
添加以下配置文件:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 300

让配置生效
# /sbin/sysctl -p

参数详解:
1.net.ipv4.tcp_syncookies = 1 表示开启 syn cookies 。当出现 syn 等待队列溢出时,启用 cookies 来处理,可防范少量 syn \*\*\*,默认为 0 ,表示关闭; 
2.net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将 time-wait sockets 重新用于新的 tcp 连接,默认为 0 ,表示关闭;
3.net.ipv4.tcp_tw_recycle = 1 表示开启 tcp 连接中 time-wait sockets 的快速回收,默认为 0 ,表示关闭。
4.net.ipv4.tcp_fin_timeout 修改系靳默认的 timeout 时间

如果以上配置调优后性能还不理想,可继续修改一下配置:

# vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200   #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000   #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192   #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000   #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
默认为180000,改为5000。
对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

问题2:ESTABLISHED连接数过大问题

怎么解决请求结束后依然存在大量ESTABLISHED没有被释放

初步推断是tomcat服务器回收session时出了问题,这个一般都跟服务器的Timeout设置有联系。

查看tomcat的配置文件 server.xml

Copy
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
\*\*\*\*\*

检查配置得出20000毫秒的时候acceptCount=”100” ,明显不合理,最大连接数也太小了吧。

所以进一步优化:



![img](https://img-blog.csdnimg.cn/img_convert/3075b7077c0845b739ae89ca249e39fa.png)
![img](https://img-blog.csdnimg.cn/img_convert/fbbccc33301d6e26c2453f79213a592e.png)
![img](https://img-blog.csdnimg.cn/img_convert/2d985c8068784202d172a45228d4e4a0.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

转存中...(img-cCUg9Gg7-1715512403530)]
[外链图片转存中...(img-KO2GAGtp-1715512403531)]
[外链图片转存中...(img-Y0K47E6j-1715512403531)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值