我的服务器居然变巨慢?


  • 今天在使用自己的网页时,忽然发现自己的服务器访问网页资源变得极其之慢,以致于不能正常使用。于是便开始排查原因。结果就是多数时候遇到的“就这?”

首先,我需要确定是网络问题还是CPU负载问题,于是我通过netstat和top命令进行了确认。发现了大量来自全国各地的不明链接,故知道问题出在网络方面,而不是CPU被占满所导致的。

1. 排查n2n

接着,我考虑了一下是不是n2n虚拟局域网占用了我服务器的带宽,于是我停止了我的n2n访问,但问题并未得到解决。

2. 重启大法

我随后重启了整个服务器,发现对服务器的访问流畅了很多。但是我发现有一些服务没有配置自启动,因此我需要一个一个手动启动服务。

最终,我发现一个代理服务占用了网速,于是我开始定位问题所在,并找到了解决该问题的方法。

3. 关闭局域网连接

但是在完成这些工作之后,我面临着一个新问题,就是其他人正在利用我的服务。因此我需要关闭来自局域网的连接,以拒绝其他人的访问。在拒绝来自局域网的连接之后,我自己某个docker容器内部的另一个服务需要使用到这个服务器,因为对于docker容器的宿主机来说,docker容器内的服务是通过局域网连接过来的,所以我docker容器内的服务也无法走代理。该当如何解决呢?

4. 排查防火墙

我的服务器是开启了防火墙的,正常来说,即便我允许来自局域网的连接,在我关闭对应端口的情况下,其他人也无法通过这个端口来访问我的服务。

  1. 我通过宝塔面板加了一条规则,阻止了来自对应端口的所有互联网连接,发现没有生效,这个端口依旧畅通无阻。

  2. 手动通过iptables查询所有防火墙规则。

iptables -L

当然如果需要知道规则的编号则可以用如下命令。

iptables -v --line-numbers -L

通过查询规则,并未发现有什么异常的地方。一方面是自己看,另一方面我也把我查询到的输出交给了chatgpt,让它来帮我分析是否这个端口能通过这一系列防火墙,chatgpt告诉我是不能通过的。而实际情况是通过了,那么问题出在哪里呢?

  1. 发现预留端口。

后来我回到宝塔面板,发现了预留端口,当时我为了方便,设置了一条规则统一将7000-8000的端口全部说放行,导致最后无论我如何增加规则,7000-8000端口依旧畅通无阻。这件事说明了留这种绿色通道还是要小心谨慎,不然时间过得久了就容易被自己忽视,留下安全隐患。

5. 调整防火墙

最后一步,我先删除了宝塔那边放行的一条规则。经过测试,7000-8000端口无法连通,再在服务层面允许来自局域网的连接。但是此时来自局域网的连接同样会被防火墙阻拦,所以其他人依旧无法使用我的服务。

然后我手动通过iptables来调整了防火墙,删除了某些规则,比如说入流量的第31条规则,用的是这个命令。

iptables -D INPUT 31

6.放行指定ip

当然只禁止肯定是不行的,因此需要放行自己的服务。因为docker容器的访问宿主机的原理是通过一个虚拟局域网来访问的,docker容器和宿主机均处于同一虚拟局域网,对此只需要找到对应容器的ip,对该ip添加规则放行即可。

iptables -A INPUT -p tcp --dport 7890 -s 172.17.0.2 -j ACCEPT

总结

简单总结一下就是,不要给自己的服务器留绿色通道,可能会造成意想不到的错误,第一时间应该尽可能关闭对外通道。虽然表面看起来比较简单,实际调试的过程更加复杂和曲折。

流量恢复正常


文章作者: 青椒
版权声明: 本笔记所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 青椒 !
 上一篇
war3小助手 war3小助手
前段时间在09平台打dota omg,被平台的匹配机制搞到了。我一个胜率50不到的菜鸡,经常给我在对面匹配几个70+,80+胜率大佬,自己这边又都是50不到。这种局实在不想打了,就想做一个工具来检测这种情况,在进入房间时发现高胜率的时候就
2024-01-17 青椒
下一篇 
浅探C++返回局部对象的过程 浅探C++返回局部对象的过程
之前学习到过在返回值的时候,c++会在返回局部对象的时候进行返回值优化,现在想通过实践来一谈究竟。 右值引用(第一层)C++11新增了一种引用,可以引用右值,又称右值引用。这也为函数返回值的优化提供了条件。先看这样一段代码。 #inc
2022-09-15 青椒
  目录