想知道服务器哪个IP访问过,核心就是查访问日志,Nginx、Apache、IIS等Web服务器以及Linux/Windows系统都会留下IP记录,用命令或日志分析工具就能快速提取。
服务器怎么查看访问过的IP?先分清你用的是哪种环境
不同服务器类型和操作系统,查IP的方式差别很大,先确认自己托管的是什么服务,再选对应方法。
Linux服务器:三行命令找出IP
绝大多数生产环境跑在Linux上,以Nginx和Apache最常见,访问日志默认路径如下:
- Nginx:
/var/log/nginx/access.log - Apache:
/var/log/apache2/access.log或/var/log/httpd/access.log
直接看最近100条访问记录:
tail -100 /var/log/nginx/access.log
想看哪个IP最频繁,用awk提取并用sort排序:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
这条命令的思路是:先取每行第一个字段(即客户端IP),排序后统计重复次数,再按次数降序排列,结果第一列是访问次数,第二列是IP。次数最高的IP就是访问你的主力来源,可能是真实用户,也可能是爬虫或攻击者。
想筛出某个具体IP的全部记录:
grep "1.2.3.4" /var/log/nginx/access.log
如果日志被切割过,比如有access.log.1、access.log.2.gz,需要用zcat查看压缩包:
zcat /var/log/nginx/access.log.2.gz | grep "1.2.3.4"
Windows服务器:PowerShell两句话搞定
IIS日志默认存放在C:inetpublogsLogFilesW3SVC文件夹,用PowerShell读取:
Get-Content C:inetpublogsLogFilesW3SVC1u_ex.log | Select-Object -Last 100
提取所有IP并统计次数:
Get-Content C:inetpublogsLogFilesW3SVC1u_ex.log | ForEach-Object { ($_ -split ' ')[0] } | Group-Object | Sort-Object Count -Descending | Select-Object -First 20

这里[0]代表每一行的第一个字段,IIS日志里第一个字段就是客户端IP。
服务器IP访问记录怎么查?按场景吃透各类日志
除了Web访问日志,你还需要关注系统登录日志和防火墙日志,很多攻击是绕过了Web层直接打系统层面的。
查SSH登录你服务器的IP
Linux下用last命令,直接列出所有成功登录记录:
last
只看IP不显示主机名:
last -i
查失败的登录尝试:
lastb -i
lastb需要root权限,如果没有输出,说明没有记录过失败的登录。大量失败登录的IP基本可以判定为扫描器,建议立刻用防火墙封禁。
查Web应用攻击来源IP
当发现了可疑请求,比如wp-login.php被暴力破解,可以这样定位来源:
grep "wp-login.php" /var/log/nginx/access.log | grep "POST" | awk '{print $1}' | sort | uniq -c | sort -rn
这一步把针对特定URL的POST请求IP统计出来,攻击者通常会连续换IP,但总有几个高频出现。
查防火墙拦截记录
如果你用了firewalld或iptables,拦截日志通常存在/var/log/messages或/var/log/kern.log。
grep "DROP" /var/log/messages | awk '{print $10}' | sort | uniq -c | sort -rn | head
如果用了云厂商的安全组或DDoS防护,直接去控制台看“安全日志”或“攻击记录”,那里会直接列出攻击源IP和流量大小,比服务器本地日志更直观。
服务器日志分析工具有哪些?选对工具省一半力气
手动敲命令适合临时查,但长期运营需要工具,业内专家指出,中小站长优先用开源方案,成本低且可控。
| 工具 | 适用场景 | 特点 | 上手难度 |
|---|---|---|---|
| GoAccess | 实时分析Nginx/Apache日志 | 终端可视化,支持导出HTML报告 | 低 |
| WebLog Expert | Windows环境,IIS日志分析 | 图形界面,统计访客IP、页面、状态码 | 低 |
| ELK/Elastic Stack | 海量日志汇聚搜索 | 分布式,查询快,可做长期归档 | 高 |
| 宝塔面板 | 国内站长常用 | 自带访问日志报表,可视化IP排行 | 极低 |
GoAccess安装后一条命令就能出报表:
goaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html
打开生成的report.html,左侧就有“访客主机”列表,直接展示每个IP的访问次数、占比和访问时段。
宝塔面板则在“网站”->“日志”里直接展示最近访问IP榜,点一下就能看到某个IP具体请求了哪些URL。
什么时候必须用专业工具?
当你的服务器日访问量超过10万条日志,或者需要回溯三个月前的访问记录,手动grep会慢到让人崩溃,现阶段合理做法是部署一套轻量级日志采集,把每天的访问日志自动轮转压缩,再用GoAccess生成月度报告,行业共识认为,日志留存时间至少180天,以备安全审计和溯源需求。
查到了IP之后,怎么判断它是否正常?
拿到IP列表,不能只看数量,要结合上下文判断。
第一步:看User-Agent
如果同一个IP大量请求,但User-Agent是空、乱码或常见的爬虫标识(如python-requests、curl、Scrapy),基本可以断定是自动化程序。
grep "1.2.3.4" /var/log/nginx/access.log | awk '{print $12}' | sort | uniq -c
第二步:看请求路径
正常用户访问的是首页、文章详情、商品页,如果某个IP集中请求/admin、/wp-login.php、/.env、/phpmyadmin,这就不对劲了,把这类路径单独拎出来统计:
awk '{print $7}' /var/log/nginx/access.log | grep -E "(admin|login|env|config)" | sort | uniq -c

配合IP一起看,就能锁定目标。
第三步:查IP归属地和风险标签
国内场景下,常见需求是判断IP来自哪个城市哪家运营商,线上工具如ip138、ip.sb,或直接用Linux命令:
curl ip.sb < /pre>
如果返回的是美国或欧洲机房,但你的网站只服务国内用户,那这个IP大概率是代理或VPS,需要警惕。
对于可疑IP,可以进一步用免费的威胁情报接口查询历史记录,例如让IP查询是否出现在公开的恶意IP库中,不过这类数据更新有延迟,不能作为唯一依据,只能做辅助参考。
第四步:处理恶意IP
确认异常后,直接封禁:
iptables -A INPUT -s 1.2.3.4 -j DROP
或者用fail2ban自动封禁:
fail2ban-client set sshd banip 1.2.3.4
对于Nginx级封禁,在server块里加入:
deny 1.2.3.4;
封禁IP只是临时手段,攻击者会换IP,要根治,需要补上漏洞或限制频率。
Q&A:服务器IP访问记录常见问题
服务器IP访问记录能保存多久?
默认情况下,Nginx和Apache不做日志切割,会一直写入同一个文件,可以用logrotate按天或按周切分,保存周期由你的配置决定,Linux系统默认会保留四周的轮转日志,更长时间的归档需要自己写脚本或使用日志服务。
为什么服务器日志里出现大量不认识的IP?
这是正常现象,互联网上扫描器无时无刻不在探测SSH端口和Web路径,尤其是有公网IP的服务器,每天收到几百次扫描非常普遍,只要没有产生业务影响,不用过度紧张,重点筛选那些访问特定敏感路径或尝试登录的IP。
查IP访问记录会不会影响服务器性能?
直接对几十GB的日志文件执行grep确实会占用CPU和磁盘IO,高峰期可能导致请求变慢,建议在低峰期操作,或者先把日志复制到临时目录再用工具分析,更稳妥的做法是启用日志分析服务,让服务器只负责写入,查询交给专门的平台。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/891173.html

