前言
购买的服务器难免会遇到被攻击的情况,当我们发现服务器状态异常时,可以通过连接当前服务器的ip排查一下,并对可疑ip进行封锁禁止。我们可以通过路由跟踪来查看可疑ip。以下是两种解决方案。
解决方案
iptables
netstat是一个用于监视网络连接和网络统计信息的命令行工具。通过ChatGPT我们可以了解到它有以下功能:
- 显示网络连接:netstat可以列出当前系统上的所有活动网络连接,包括TCP、UDP和UNIX域套接字。它显示本地地址和端口以及远程地址和端口之间的连接状态。
- 显示网络接口统计信息:netstat可以显示每个网络接口的统计信息,如接收和发送的数据包数量、错误数量、丢弃的数据包数量等。这对于监视网络接口的活动和性能非常有用。
- 显示路由表信息:netstat可以显示系统的IP路由表,包括目标网络、下一跳和接口之间的映射。这对于检查系统的路由配置和网络流量转发非常有用。
- 显示多播组信息:netstat可以显示系统上的多播组信息,包括多播组的成员和接口之间的映射关系。这对于监视和管理多播传输非常有用。
- 显示网络连接的PID和程序信息:netstat可以显示与网络连接相关的进程ID和程序名称。这对于确定哪个进程在使用特定的网络连接非常有用。
那么本次我们需要用到iptables的功能主要是1、2、3。
# 查看连接当前服务器的所有ip
netstat -nat
这样我们可以排查到连接到当前服务器的所有ip。攻击者往往通过击垮服务器的某些服务来达到数据破坏,并以此为要挟的目的。当然,MySQL服务便是这一现象的重灾区。所以,我们需要排查服务对应的端口连接数,查看连接是否异常。
假设我们的MySQL服务对应的端口是3306
netstat -nat|grep -i '3306'|wc -l
此时会返回当前端口的连接数:
更详细的数据可以使用命令:
netstat -nat|grep -i '3306'
查看那些ip正在访问指定端口:
netstat -tn | grep ':3306' | awk '{print $5}'
接下来可以通过统计nginx的数据访问量和数据访问次数来判断访问ip是否攻击ip。
请参考:
通过nginx日志统计一段时间内ip的访问次数进行排序&访问量统计
以上命令较多,我更建议使用可视化图形,即NextTrace工具
NextTrace
安装:
# Linux 一键安装脚本
bash <(curl -Ls https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh)# GHPROXY 镜像(国内使用)
bash <(curl -Ls https://ghproxy.com/https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh)# macOS brew 安装命令
brew tap xgadget-lab/nexttrace && brew install nexttrace
使用手册:
NextTrace How to Use
开始执行:
nexttrace 1.0.0.1
可以看到有一些境外ip在访问,我的服务器一般是作为我的开发环境来用,所以一般不会出现有境外ip访问的情况。那么我可以把这些ip视为攻击ip。
执行命令后,我们可以通过工具返回的MapTrace URL可视化的看到ip信息,点击访问即可。
找到攻击ip后,可以通过以下命令来禁止该ip的访问:
iptables -I INPUT -s ***.***.***.*** -j DROP
当需要解封ip时,需要使用:
iptables -D INPUT -s ***.***.***.*** -j DROP
再次查看访问当前服务器的ip:
nexttrace 1.0.0.1
可以看到境外ip已经消失不见了。