查看登陆过服务器的IP地址,核心方法是读取系统登录日志文件,主要利用last、lastb等命令,并结合wtmp、btmp日志文件进行分析。
查看服务器登录记录的日志文件在哪
服务器不会主动把“谁登录过”写成一个表格给你看,它只负责记录流水账,Linux系统把登录动作写在三个核心文件里,搞清楚它们的位置,你才明白后续的命令在读取什么。
/var/log/wtmp:记录所有成功登录的会话历史,这是查“谁登录成功了”的一手资料,last命令读的就是它。/var/log/btmp:记录所有失败登录的尝试,暴力破解的IP都会躺在这里,lastb命令专门翻它。/var/log/secure(CentOS/RHEL)或/var/log/auth.log(Debian/Ubuntu):记录SSH认证的详细过程,包括用户、来源IP、认证结果。
这三个文件是二进制格式,不能直接用cat查看,必须通过命令工具去解析。
用last命令查成功登录的IP和登录时间
last命令是最常用的工具,它按时间倒序输出wtmp里记录的登录会话,直接在终端输入last,会看到类似下面的输出,输出会列出用户名、登录终端(pts/0代表SSH远程登录)、来源IP,以及登录和退出时间,如果想只显示IP和登录时间,过滤掉主机名,可以加参数。
last -n 10:只看最近10条记录,适合快速确认有没有陌生IP溜进来。last -i:把域名解析成纯IP地址显示,避免看到一堆乱七八糟的主机名,这一步很实用。last -f /var/log/wtmp.1:读取轮转(历史归档)的日志文件,日志文件会按周轮转,老记录会被压缩成.gz格式或者命名为.1后缀,如果翻完当前文件没发现异常,记得去翻历史文件。
root pts/1 123.45.67.89 Mon Jun 3 10:24 仍然登录
root pts/0 223.4.5.6 Mon Jun 3 09:12 - 09:30
用lastlog看所有用户的最近登录IP
last命令看的是“所有会话记录”,而lastlog命令看的是“每一个账号最后一次登录的时间和IP”,这个命令适合排查“某个不常用的账号是不是被登录过”,直接输入lastlog,输出会按UID排序,显示每个用户最后一次登录的IP和时间,看到某个从未被使用过的系统账户,突然出现了一个新的登录IP,那基本可以断定该账号已被利用。
用lastb命令查登录失败的IP和暴力破解源头
如果怀疑服务器被爆破,看一眼lastb命令,它专门读取btmp文件,帮你揪出那些反复尝试密码登录的IP,运行lastb -n 20可以看到最近20条失败的尝试记录,这些IP不一定都是坏人,但那种在短时间内疯狂尝试的IP,多数是扫描机器人在撞库。
注意权限问题:btmp文件默认只有root能读,普通用户执行lastb会提示/var/log/btmp: Permission denied,这是正常的,你们用root权限执行或者用sudo lastb。
用lastb统计Top攻击IP
配合awk命令,可以把失败记录里边的IP提取出来,排序并统计重复次数,这个操作在处理大量日志时非常有用:
sudo lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -20
执行后,你会看到类似“45 218.92.0.10”的输出,最前面的数字代表该IP尝试了多少次,如果某个IP的尝试次数达到几百上千,建议直接封禁它。
怎么实时查看正在登录和已登录的IP
日志是历史数据,如果服务器正被入侵,你需要看的是当前在线的登录会话。who命令显示当前登录到系统的所有用户、终端、来源IP和登录时间。w命令输出内容更多,还会附带每个用户当前执行的命令、CPU占用等信息。如果发现某个陌生IP正在以root身份登录,并执行了你没见过的命令,直接断网或者踢掉会话,比看任何日志都管用。
这两个命令查的都是/var/run/utmp文件,只反映当下的登录状态,不保留历史。
服务器被人登录了怎么查:结合日志还原现场
知道了基础命令还不够,遇到真实的入侵事件,你需要把碎片拼起来,这个思路是:先看成功登录,确认入侵窗口期;再看失败记录,判断是否有预攻击;最后看认证日志,还原完整时间线。
第一步:确认入侵时间点
运行last -n 20,找到那个可疑IP首次出现的时间。确认入侵时间点是还原现场的地基,后续的分析都要围绕这个时间线展开。
第二步:追踪该IP的所有行为
把可疑IP当关键词,在认证日志里搜索,以CentOS为例,用grep过滤掉密码错误记录和接受记录:
grep "223.4.5.6" /var/log/secure
你会看到该IP尝试了哪些用户名,是密码错误还是连接超时,这些信息直接反映攻击者的手法,如果日志里显示用的是
root用户名反复尝试,这属于盲扫,如果直接用了你的某个业务账号名且密码猜对了,那就不是扫描器干的,而是内部泄露,排查范围要缩小到知道这个账号的人。
第三步:检查登录后干了什么
登录成功只是起点,真正可怕的是后续操作,Linux的history命令默认只记录当前shell的命令历史,不会记录别人的会话操作,除非配置了全局的history记录,这里给一个行业共识性的排查路径:查看/root/.bash_history文件,同时检查/etc/profile和~/.bashrc里有没有被追加可疑的别名或持久化后门,攻击者如果偷懒,会直接在这里留下痕迹,如果清理了历史,这里就是干净的,那就需要重点检查计划任务,用crontab -l和查看/etc/cron.d/目录,这个路径是很多攻击者用来维持权限的常见落脚点。
linux服务器登录日志在哪个目录:常见问题定位
如果环境比较复杂,可能是多用户服务器或者用了堡垒机,查日志的路径会有细微差别。
- Web服务器(Nginx/Apache):登录日志在
/var/log/nginx/access.log或/var/log/apache2/access.log,这种日志记录的是HTTP请求,不是SSH登录,如果网站被刷,需要看这个文件,里面的IP才是真实用户IP(前提是没开CDN),如果开了CDN,所有IP都会显示为CDN节点IP,此时需要看X-Forwarded-For头来获取真实IP。 - 云服务器厂商控制台:简米云、酷番云、华为云的控制台里都有一个“运维审计”或“会话管理”模块,有些时候,你在VNC里登录,或者通过网页版终端管理服务器,这些IP可能不会出现在
last命令里。这类登录走的是厂商的WebSocket长连接协议,不经过SSHd服务,所以系统日志里查不到,如果排查时发现last输出里没有异常,但服务器被人动了,大概率是从控制台进来的,赶紧去控制台的安全中心看登录记录。
怎么通过登录IP判断异常并做防御
单纯会看IP还不够,得能判断IP是不是异常的,以下经验是行业共识:大部分管理员在面对“查看到陌生IP”时的第一反应是“是不是被盗号了”,其实大多数情况是扫描器随机探测,不是针对你的精准攻击。
- 登录时间对不上:你习惯早上9点登录,日志里显示凌晨3点有登录记录,这肯定反常。
- 登录地点离奇:国内服务器,登录IP全是国外地址,且你没有海外业务,直接判定为异常。
- 登录账号冷门:你用
root,日志里却用test或oracle登录成功了,这是高危信号。
防御动作清单
看到异常IP后,防御动作建议按顺序执行:
- 立即用
passwd命令修改受影响账号的密码,密码强度建议16位以上混合字符。 - 用
iptables或firewall-cmd封禁该IP:iptables -A INPUT -s 223.4.5.6 -j DROP。 - 启用
fail2ban服务,它会自动监控btmp文件,识别到连续密码错误后,自动封禁该IP,封禁时间可自定义。 - 修改SSH默认端口(22改高位端口),并禁用
root直接登录,在/etc/ssh/sshd_config里设置PermitRootLogin no,这能挡住一大批直接扫22端口的脚本。
防御要从端口暴露面和密码强度双管齐下,即使IP查明白了,源头不堵,后续还会被扫。
怎么看登陆过服务器的ip地址:常见疑问速答
用last查到的IP和我当前实际IP不符,是怎么回事?
把服务器所有用户都列出后,发现有个IP不是自己的。先确认是否使用了代理、堡垒机、跳板机或云控制台登录,跳板机和堡垒机会替换掉你的原始IP,家庭宽带和公司出口IP经常是动态的,你之前拨号上网用过的IP段,联通和电信会循环分配给其他用户,也会造成“看起来异常但实际是自己人”的误判。
lastb里全是扫描记录,怎么筛出真正有用的?
lastb默认全量输出,几分钟就会被刷屏。主要看尝试次数和是否成功了,只尝试了1-2次的IP是正常网络噪声,直接忽略。重点关注尝试次数大于20次,并且尝试了不存在的账号名的IP,这种IP属于定向爆破,需要封禁,另外配合grep "Accepted password" /var/log/secure命令,查看所有密码成功的认证记录,即使lastb里爆破失败,只要有一次Accepted出现,都要重新审视该IP。
修改了SSH端口后,last还能查到新的登录IP吗?
能。last记录的是登录会话本身,与端口无关,修改SSH端口只影响新连接的建立,不影响日志系统工作,更改端口后,wtmp文件照常写入新IP,last照常显示。只需要把连接地址从ssh user@IP改成ssh -p 新端口 user@IP即可,日志记录方式和规则完全不变。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/682065.html





