什么原因导致服务器阻止互联网访问

什么原因导致服务器阻止互联网访问

我在服务器上运行 API。客户每秒轮询服务器 8-10 次 API 请求。我知道这是不好的做法,我正在努力让客户改变。但与此同时,过了一段时间,服务器阻止了互联网访问。我无法看到内部局域网之外,也无法从外部看到它。它正在运行,我可以从内部网络上的另一台服务器 ssh 进入。我重新启动了 apache,但这没有用。重新启动总是可以解决问题,所以我认为不是防火墙的问题。看起来好像有什么东西检测到了 DDOS 攻击尝试并关闭了互联网外部访问。

服务器运行的是 Centos 7,并安装了所有最新补丁和升级。我通过限制 API 访问来正确修复此问题,但我想了解内部发生了什么。是否有作为 Centos 默认程序的一部分运行的实用程序可以执行此操作?

感谢您的见解。这是我的访问日志的片段...您可以看到他每秒访问我们 8 次。

xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:47:59 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /pwi HTTP/1.0" 200 165 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:00 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:01 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:01 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:01 -0700] "POST /measurements HTTP/1.0" 200 67 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:01 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:01 -0700] "POST /auth HTTP/1.0" 200 215 "-" "Java/11.0.3"
xx.73.83.167 - - [25/Jun/2019:13:48:01 -0700] "POST /pwi HTTP/1.0" 200 165 "-" "Java/11.0.3"

谢谢!

更新:

这种情况已经发生了三次。当我尝试使用浏览器访问服务器时,出现服务器未找到错误。我可以通过内部网络进入服务器。一切都在运行。firewalld 中的端口已打开。我重新启动了 apache,没有帮助。我重新启动了 firewalld,也没有帮助。我重新启动,一切都修好了。某个地方的某个进程阻止了外部互联网访问。我假设由于重新启动工作,所以不可能是外部交换机或防火墙的问题?虚拟机是 VMware,因此它们正在运行 NIC 池,因此如果是 NIC 问题,其他系统也会遇到这种情况?我还可以检查哪些其他日志?有人建议使用 dmesg,但输出很冗长且带有编码。我不知道要查找什么。有什么想法下一步要检查什么?我正在构建一个新的虚拟机并将迁移到该虚拟机,但我真的想知道是什么原因导致这种情况的。还有一件事......这台机器已经运行良好三年了。我已经应用了所有更新,因此服务器是最新的。

答案1

如果可以的话,我建议用小型 SOHO 路由器进行测试,或者从路由器中删除 DPI。

由于它在 LAN 中工作而不是通过 WAN,请注意一些企业级路由器会执行 DPI、深度数据包检查,并且在大量流量通过时会遇到困难。

我在使用旧的 Cisco ASA 和客户的邮件服务器时也遇到过类似的问题,即随机丢弃一些收到的电子邮件。

重新启动后问题消失的事实很容易解释,因为服务器不再接受任何东西,它间接地卸载了路由器

答案2

解决问题的步骤:

  • 运行tcpdump并检查流量。

  • 您看到传入TCP-SYN数据包了吗?如果没有看到,或者您看到传入TCP-SYN数据包并重复发送TCP-SYN-ACK- 请检查服务器前的网络设备。

  • 您看到传入的TCP-SYN数据包,但没有看到任何回复。使用 检查防火墙iptables-save -c。规则的顺序非常重要。您使用 fail2ban 吗?还使用ip route get <server-ip> from <client-ip> iif <iface>ip route get <dst> from <server-ip>命令检查路由。它必须显示有效路由。

  • 问题可能是由 conntrack 表溢出引起的。检查dmesg和的输出conntrack -S

  • 问题可能是由于超出打开套接字的限制(通常是半关闭套接字)造成的。使用ssnstat检查。

  • 仔细调查nstat -az命令的输出。它列出了大量的指标和错误计数器。

  • 增加服务器的日志记录。检查错误日志。故障排除的下一步是使用该strace工具跟踪系统调用的执行。

答案3

一些有关故障排除的说明:

跑步网络状态查看连接到每个套接字的连接和进程:

sudo netstat -nlpt

检查该进程是否符合您认为应该监听和服务的进程(Apache)

使用 ulimit 检查系统限制,查看是否已达到最大进程数:

ulimit -a

尝试从本地主机(你的 ssh 会话)访问 Web 服务器,使用获得或卷曲。

检查内存、CPU 和系统日志。使用顶部 第一个和最后一个命令为 -f /var/log/syslog 或系统中的相应命令。在重启后并访问 Web 服务器时执行此操作。

相关内容