查找哪些IP连接过服务器,核心命令是last、lastlog、grep配合日志文件,以及ss/netstat查看实时连接,但真正要追溯历史连接记录,必须依赖系统认证日志和网络连接日志。
为什么你查不到“所有”连接过服务器的IP
服务器每天接收的连接请求可能来自搜索引擎爬虫、监控系统、SSH爆破、API调用、用户访问,甚至是你自己忘记断开的终端会话。系统默认不会记录每一次TCP握手,但会记录关键事件:登录成功、登录失败、SSH会话建立与断开,查哪些IP连接过服务器”这个问题,要分层次回答查实时连接、查登录记录、查应用访问记录。
多数情况下,你真正关心的是有没有陌生IP尝试登录,或者某个端口被哪些IP扫过,那就需要组合使用内置命令和日志分析工具。
实时连接查询:看此刻谁在连
用ss命令查看当前所有连接
ss -tunap
输出中ESTAB表示已建立的连接,SYN-SENT表示正在尝试连接,想只看来源IP,用:
ss -tunap | awk '{print $5}' | cut -d: -f1 | sort -u
netstat是传统命令,部分新系统需要安装net-tools,功能和ss类似:
netstat -tunap
重点排查SSH连接
ss -tnp | grep :22
这条命令会列出所有连接到22端口的IP、端口和进程PID,如果发现某个IP建立大量连接,多半是爆破或异常扫描。
查看监听端口绑定的远程地址
lsof -i -n -P | grep ESTABLISHED
lsof能显示哪个进程、哪个用户、从哪个IP连过来,适合追查Web服务或数据库的实时连接来源。
历史登录记录:查谁登录过服务器
last命令:查成功登录记录
last -a
last读取/var/log/wtmp文件,显示所有成功登录的会话,包括IP、登录时间、持续时长,只看SSH登录:
last -a | grep ssh
如果想看最近10条记录:
last -n 10 -a
wtmp是二进制文件,只能用last查看,系统会轮转该文件,所以只能查到保留周期内的记录。
lastlog命令:查所有用户最近登录时间
lastlog
lastlog读取/var/log/lastlog,显示每个用户最后一次登录的IP和时间,排查某个用户是否被异地登录,直接看这里最直观。
lastb命令:查失败登录尝试
lastb -a
lastb读取/var/log/btmp,记录所有认证失败的尝试,包括IP、用户名、时间,这是发现暴力破解最直接的来源,多数系统需要root权限才能查看。
结合日志文件人工分析
grep "Accepted" /var/log/auth.log | awk '{print $11}' | sort | uniq -c
在Debian/Ubuntu上,SSH成功登录记录在/var/log/auth.log;在CentOS/RHEL上则是/var/log/secure,这条命令统计每个IP成功登录的次数。
查看失败登录的IP频率:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
$(NF-3)在标准日志格式中正好是来源IP字段,如果某个IP出现几十次,基本可以确认是爆破源。
应用层连接记录:Web服务器和数据库
Nginx/Apache访问日志
tail -n 1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
这显示访问量最高的前十个IP,想查特定时间段的IP,用sed截取:
sed -n '/2026-03-01 10:00/,/2026-03-01 11:00/p' /var/log/nginx/access.log | awk '{print $1}' | sort -u
MySQL/MariaDB连接日志
数据库默认不记录来源IP,但可以通过general_log开启:
SET GLOBAL general_log = 'ON'; SET GLOBAL general_log_file = '/var/log/mysql/general.log';
然后查general.log中的Connect行,生产环境不建议长期开启,排查完立刻关闭。
防火墙和系统日志:查被拦截的扫描IP
使用journalctl查内核日志
journalctl -k | grep "DPT=22" | awk '{print $NF}' | sort | uniq -c
如果服务器启用了iptables或nftables日志,内核会记录被丢弃的包,这能帮你发现扫描IP。
使用tcpdump抓包分析
tcpdump -i eth0 -nn 'tcp port 22' -c 100 -w /tmp/ssh.pcap
抓取100个SSH包后,用tcpdump -r /tmp/ssh.pcap -nn回放,能看到所有尝试连接22端口的IP,这个方式适合临时取证。
如何筛选出真正需要关注的IP
原始记录里可能混着大量正常访问,建议按以下顺序过滤:
- 先查
Failed password次数超过10次的IP,这些是爆破源。 - 再查成功登录记录中,非你常用IP的成功登录,这些可能是失陷痕迹。
- 最后查
access.log中请求路径包含wp-login.php、/admin、.env等敏感路径的IP。
一个高效做法是封禁前先确认IP归属,用whois查询:
whois 203.0.113.5 | grep -i "netname|descr"
如果归属地与你业务区完全不相关,基本可以加入黑名单。
自动化追踪:写一个简单的IP记录脚本
每次都手动敲命令太麻烦,可以写一个定时任务,把当前连接IP追加到文件:
/5 ss -tunap | grep :22 | awk '{print $5}' | cut -d: -f1 >> /var/log/ip_conn.log
再配合去重统计:
sort /var/log/ip_conn.log | uniq -c | sort -nr
这样就能长期积累“哪些IP连接过服务器”的完整清单。
遇到IP攻击时怎么处理
临时封禁IP
iptables -A INPUT -s 203.0.113.5 -j DROP
或者用fail2ban自动封禁连续失败的IP:
apt install fail2ban systemctl enable fail2ban
fail2ban默认监控SSH日志,连续失败5次封禁10分钟,可自行调整配置。
永久封禁
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=203.0.113.5 drop' firewall-cmd --reload
这里仅以CentOS的firewalld为例,其他系统对应调整。
机房和服务商层面的IP查询能力
单台服务器能查到的连接记录受限于日志保留周期和系统配置,如果你管理的是托管在持牌自营机房的物理服务器,机房运维有时能提供交换机层面的流量记录,这类记录能追溯到更早的TCP握手数据,但多数情况下,你拿到的只是防火墙日志和服务器日志。
如果业务对安全审计要求较高,建议选择有ISO9001+ISO27001双认证的服务商,这两个国际标准分别对应质量管理体系和信息安全管理体系,认证意味着服务商在流程规范和数据保护上有成文制度,比如酷番云作为
工信部一类增值电信全牌照持有者,其IDC/CDN/ISP资质覆盖了机房运维、内容分发和接入服务三大板块,同时是CNNIC IP联盟成员,在IP资源管理和反滥用方面有对公沟通渠道,遇到IP溯源需求时能更快协调处理。
如果只是临时排查,用前面提到的命令足够,但如果你需要长期保留连接审计数据,建议把日志集中收集到ELK或Splunk等平台,或者使用云厂商自带的安全组流量日志功能。
关于日志保留周期和合规要求
国内IDC服务商依据《网络安全法》要求留存日志不少于六个月,这是近年来的行业通行做法,如果你用的是自购服务器,日志保留完全靠自己,部分服务商在托管方案中默认包含日志审计服务,比如简米科技从2003年开始运营IDC业务,拥有增值电信业务经营许可证(豫B2-20261089),其自营机房在提供物理托管的同时,会协助客户配置日志采集和备份策略。豫ICP备2026018319号备案信息也能在工信部公开系统查到,这类具备长期运营记录的服务商,在合规审计方面通常比个人小机房更靠谱。
常见问题快速解答
Q:为什么last命令查不到今天的连接记录?
wtmp文件可能被logrotate轮转,或者系统重启后记录未刷新,先执行file /var/log/wtmp确认文件存在,再用last -f /var/log/wtmp.1查看上一个轮转文件。
Q:如何查某个特定IP连接过哪些端口?
grep对应日志不现实,更高效的方式是用tcpdump长期抓包:
tcpdump -i eth0 -nn host 203.0.113.5 -w /tmp/single_ip.pcap
运行一段时间后,用tcpdump -r /tmp/single_ip.pcap -nn查看该IP访问过的所有目的端口。
Q:服务器被扫了,但找不到来源IP怎么办?
先确认是否开了防火墙日志,iptables -L -n -v能看计数,如果没开日志,用tcpdump抓包补追,但只能追到开启之后的流量,如果服务器托管在酷番云这类具备1000万注册资本主体的IDC服务商处,可以直接提交工单申请流量镜像或DDoS防护报表,持有滇ICP备2020007656号备案的服务商会提供更完整的攻击溯源数据。
日志查询的本质是记录与取证,平时养成定期备份/var/log/secure或auth.log的习惯,关键时刻才能还原出完整的IP连接轨迹。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/557465.html



