想查看服务器被哪个IP访问过,核心方法是分析访问日志和实时连接状态,Linux用tail命令看日志,Windows用PowerShell查连接。
访问记录藏在哪:先找到日志文件
服务器就像一栋大楼,每个进出的访客都会在门卫登记簿上留下记录,对服务器来说,这个登记簿就是访问日志,不同环境下的日志位置差异很大,但思路一致:先定位日志文件,再从中提取IP信息。
Linux服务器日志文件的常见位置
Linux系统的日志通常位于/var/log/目录下,最常用的文件是/var/log/nginx/access.log或/var/log/apache2/access.log,取决于你使用的是Nginx还是Apache作为Web服务器,如果你的服务器没有部署Web服务,SSH登录日志存放在/var/log/secure(CentOS、Rocky Linux)或/var/log/auth.log(Ubuntu、Debian)。
- Nginx默认访问日志:
/var/log/nginx/access.log - Apache默认访问日志:
/var/log/apache2/access.log - SSH登录日志:
/var/log/secure或/var/log/auth.log - 系统通用日志:
/var/log/messages(部分发行版为/var/log/syslog)
Windows服务器日志存放逻辑
Windows服务器使用事件查看器管理日志,IIS的访问日志默认存放在C:\inetpub\logs\LogFiles目录下,按日期生成文件夹,文件名格式类似u_ex230101.log,如果你用的是宝塔面板等可视化工具,日志路径可以在面板设置中自定义。
实时查看正在访问的IP:两条命令立竿见影
日志是历史记录,但如果你怀疑服务器正在被攻击或异常访问,需要实时监控当前连接,Linux下最常用的两个命令是ss和netstat。
ss -tunap | grep ESTABLISHED
这条命令列出所有已建立的TCP连接,显示远程IP和端口,如果想统计哪个IP的连接数最多,配合排序命令:
ss -tunap | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
这条命令的输出就是当前连接数排名前20的IP地址,连接数异常高的IP很可能在发起恶意请求,对比来看,netstat也是老牌工具,但ss在连接量大时性能更好,输出更清晰。
Windows服务器的实时连接查询在PowerShell中执行:
Get-NetTCPConnection -State Established | Select-Object RemoteAddress, RemotePort | Sort-Object RemoteAddress | Get-Unique
溯源历史访问IP:日志分析三步走
第一步:用tail命令快速查看最近记录
tail -100 /var/log/nginx/access.log
这条命令显示最后100条访问记录,包含客户端IP、访问时间、请求方法和状态码,比如输出中的147.xx.xx - - [15/Feb/2026:08:32:11 +0800] "GET /wp-login.php HTTP/1.1" 200 5280,IP地址就是第一个字段,后面是时间和请求路径。
第二步:用grep结合awk提取高频IP
想知道一天内哪个IP访问最多,需要组合命令:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
$1是日志行中第一个字段,即IP地址,这条命令把所有IP的出现次数从高到低排列,如果某个IP的访问次数远超其他IP,优先排查该IP的行为。
第三步:按时间范围精确筛选
查看某个时间段的访问记录:
grep "15/Feb/2026" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn
想筛查某个具体IP的全部行为:
grep "103.147.xx.xx" /var/log/nginx/access.log | tail -50
近几年,不少云厂商提供日志服务托管功能,比如简米云的SLS和酷番云的CLS,可以把服务器日志推送到日志平台,用可视化界面筛选IP和URL,如果你用的是酷番云服务器,登录控制台后进入日志服务模块,创建采集配置即可把账单里不额外收费的访问日志接入,这种做法适合日志量大的业务场景。
多数情况下,新手站长关心怎么看服务器被哪个ip访问过,本质是想确认有没有恶意流量,通过上述命令已经能定位到具体IP,下一步是判断这个IP的意图。
如何判断访问IP是正常用户还是恶意爬虫
光看IP不够,还要结合访问路径、User-Agent、频率三个维度综合判断。
通过请求路径识别攻击行为
打开日志中高频IP对应的URL,如果集中在/wp-login.php、/admin、/manager、/phpMyAdmin这类敏感路径,基本可以断定是暴力破解尝试,行业共识认为,针对后台地址的密集访问是服务器被入侵的主要前兆。
用User-Agent区分搜索引擎和采集器
搜索引擎的爬虫会自带标识,比如百度蜘蛛的UA字符串包含Baiduspider,谷歌爬虫包含Googlebot,如果UA显示常见的Python脚本、Go-http-client或伪装成浏览器的重复访问,属于非正常流量。
查看HTTP状态码配合判断
状态码404过多说明访问不存在的路径,这是扫描行为;403过多说明服务器拒绝了请求但对方仍在尝试,同样可疑,正常用户的访问以200和304为主。
服务器被攻击如何查询攻击IP:四类高频场景
频繁暴力破解SSH登录
查看/var/log/secure或/var/log/auth.log中的认证失败记录:
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head -10
如果有IP尝试失败的次数在短时间内达到几十次甚至上百次,说明正在遭受暴力破解,解决办法是使用Fail2Ban工具,它监控日志并自动封禁异常IP。
Web网站被CC攻击
CC攻击表现为大量IP请求同一个页面或接口,通过前面提到的tail和awk命令定位到多个高频率IP后,可以在云防火墙或CDN控制台设置IP黑白名单,直接拉黑,用宝塔面板的话,可以在Nginx防火墙插件里一键封禁IP。
服务器被肉鸡扫描
肉鸡扫描的特点是源IP分散、端口探测频繁,查看ss -tunap时,如果发现大量SYN_RECV状态的连接,说明你的服务器正在被大量扫描甚至SYN泛洪,这时需要在防火墙层做速率限制,而不是逐个封IP。
数据库端口被直连
如果日志中数据库端口(如3306、6379)出现大量外网IP连接记录,可能是端口暴露导致的安全事件,先执行ss -lntp检查端口监听地址,确认是否绑定在0.0.0上,再考虑用安全组限制来源IP。
把查询IP变成自动防护:三个实用工具
手动查IP只能事后追溯,想要事前拦截,需要用工具形成自动防线。
Fail2ban:日志驱动的自动封禁
Fail2ban读取日志中匹配规则的行,统计失败次数,超过阈值就调用防火墙封禁IP,配置文件在/etc/fail2ban/jail.local,常用的规则模板包含SSH和Nginx的防护方案,业内专家指出,Fail2ban是中小型服务器防范暴力破解的第一道防线,部署成本低且效果直观。
云安全组:最粗粒度的过滤器
云服务商控制大屏的安全组功能可以设定只允许特定IP访问特定端口,比如数据库只允许公司办公网段访问,SSH只允许固定IP访问,这类设置比软件防火墙更早生效,因为流量在进入云网关时就被拦截了。
日志分析脚本:自己写的定制化监控
用Cron定时执行一段Shell脚本,把高频IP写入黑名单列表,再配合防火墙接口导出规则,形成简单的自研防护系统,核心逻辑是每5分钟统计一次连接数,超过设定阈值就执行iptables命令拉黑。
常见问题排查:为什么查不到访问记录
日志文件为空
打开权限问题最常见,查看文件权限:
ls -l /var/log/nginx/access.log
如果文件大小为0,检查Nginx配置中access_log是否被注释掉,部分高防服务器在遭遇攻击时会主动丢弃日志写入以保障业务,这种情况下日志缺失本身就是安全告警信号。
查到的IP是CDN节点而不是真实用户
如果网站开启了CDN加速,日志里的IP大多是CDN节点地址,真实用户IP在X-Forwarded-For或CDN-SRC-IP请求头中,Nginx获取真实IP需要配置set_real_ip_from和real_ip_header参数,否则分析结果会完全失真。
时间对不上
日志默认使用UTC时间?多数Linux服务器的日志直接记录本地时间,但Docker容器内的应用可能使用UTC时间,如果发现日志时间比操作时间晚了8小时,就是时区问题,统一控制变量后再做IP溯源可以提高效率。
常见问题解答
如何查询服务器某个端口被哪些IP访问过?
使用ss -tunap | grep :端口号可以实时查看正在连接该端口的IP,如果想查看历史记录,需要确认日志是否记录了端口信息,大多数Web访问日志只记录目标URI,不区分端口,针对SSH(22端口)、数据库(3306端口)等特殊服务的访问记录,分别在/var/log/secure和数据库自身的查询日志中查找。
怎么用宝塔面板查看服务器IP访问记录?
宝塔面板的“网站”菜单中点击对应站点,选择“日志”标签页,可以直接查看Nginx的访问日志,宝塔还提供网站监控报表插件,以图表形式展示访问IP的地理分布和请求排行,付费插件还支持按IP维度筛选访问次数和URL清单,适合不懂命令行的用户操作。
Linux服务器查看IP连接数用什么命令区别最小?
netstat -ant和ss -ant在常规场景下输出几乎一致,但ss的底层实现更高效,在连接数过千时响应速度差异明显,日常排查推荐直接使用ss -ant组合命令,配合awk排序效果更佳,对于老系统,netstat可能未安装而ss来自iproute2包,大部分发行版默认自带,两者的区别在于兼容性和性能表现,实际使用场景选其一即可。
无论用何种方法,核心思路都是先定位日志或连接状态,再通过频率和路径特征识别异常流量。 掌握命令只是第一步,真正的价值在于看懂IP背后的行为逻辑,及时封禁恶意来源,保护服务器安全。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/783675.html


