服务器排查并封禁ip访问

前言

购买的服务器难免会遇到被攻击的情况,当我们发现服务器状态异常时,可以通过连接当前服务器的ip排查一下,并对可疑ip进行封锁禁止。我们可以通过路由跟踪来查看可疑ip。以下是两种解决方案。

解决方案

iptables

netstat是一个用于监视网络连接和网络统计信息的命令行工具。通过ChatGPT我们可以了解到它有以下功能:

  1. 显示网络连接:netstat可以列出当前系统上的所有活动网络连接,包括TCP、UDP和UNIX域套接字。它显示本地地址和端口以及远程地址和端口之间的连接状态。
  2. 显示网络接口统计信息:netstat可以显示每个网络接口的统计信息,如接收和发送的数据包数量、错误数量、丢弃的数据包数量等。这对于监视网络接口的活动和性能非常有用。
  3. 显示路由表信息:netstat可以显示系统的IP路由表,包括目标网络、下一跳和接口之间的映射。这对于检查系统的路由配置和网络流量转发非常有用。
  4. 显示多播组信息:netstat可以显示系统上的多播组信息,包括多播组的成员和接口之间的映射关系。这对于监视和管理多播传输非常有用。
  5. 显示网络连接的PID和程序信息:netstat可以显示与网络连接相关的进程ID和程序名称。这对于确定哪个进程在使用特定的网络连接非常有用。

那么本次我们需要用到iptables的功能主要是1、2、3。

# 查看连接当前服务器的所有ip
netstat -nat
服务器排查并封禁ip访问_第1张图片

这样我们可以排查到连接到当前服务器的所有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访问_第2张图片

可以看到有一些境外ip在访问,我的服务器一般是作为我的开发环境来用,所以一般不会出现有境外ip访问的情况。那么我可以把这些ip视为攻击ip。

执行命令后,我们可以通过工具返回的MapTrace URL可视化的看到ip信息,点击访问即可。

服务器排查并封禁ip访问_第3张图片

找到攻击ip后,可以通过以下命令来禁止该ip的访问:

iptables -I INPUT -s ***.***.***.*** -j DROP

当需要解封ip时,需要使用:

iptables -D INPUT -s ***.***.***.*** -j DROP

再次查看访问当前服务器的ip:

nexttrace 1.0.0.1

服务器排查并封禁ip访问_第4张图片

可以看到境外ip已经消失不见了。

你可能感兴趣的:(思考,笔记,服务器,tcp/ip,运维)