阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux系统安全日志详解

296次阅读
没有评论

共计 8232 个字符,预计需要花费 21 分钟才能阅读完成。

导读 只要将我们的服务器在公网环境公开,提供服务。就避免不了来自全球互联网上的各种攻击。大部分的攻击都是一些泛攻击,利用程序自动扫描并发起攻击而已。

Linux 系统安全日志详解

1、介绍

Linux 系统提供了全方位的日志记录。我们登录 Linux 系统之后做的事情 Linux 都有相应的日志记录。整个日志系统比较多。这里只介绍和登录比较密切相关的三个日志。

secure,btmp 和 wtmp 这三个日志文件。

2、wtmp 日志

首先,介绍 wtmp 日志文件,该文件记录了所有的登录过系统的用户信息。(PS:只记录了正确登录的用户。密码错误等在 btmp 文件和 secure 文件中)

该文件的地址路径为:var/log/wtmp。wtmp 文件是一个二进制文件,无法通过 cat 或者 vim 进行阅读。需要通过命令 last 进行阅读。

示例如下:

[root@iZuf /]# last -F
root     pts/0        我的 IP 地址   Wed Nov 23 08:43:28 2022   still logged in
...
root     pts/0        我的 IP 地址   Wed Oct 19 16:00:28 2022 - Wed Oct 19 18:16:46 2022  (02:16)
root     pts/0        我的 IP 地址   Wed Oct 19 09:51:51 2022 - Wed Oct 19 10:42:08 2022  (00:50)
...

last 命名会默认从 wtmp 文件中读取数据。所以我们可以不用添加 wtmp 文件路径,但是如果使用 last -f 就需要我们主动添加 wtmp 路径了。

上面的数据分别是:

    登录名:root。
    打开的终端:pts/0
    访问者 IP:我的 ip 地址(PS:实际 ip 是显示 111,111,111,111 格式的)
    登录时间:Tue Nov 15 11:17:40 2022
    退出时间:Tue Nov 15 13:14:02 2022
    耗时:(01:56) 如果显示 still logged in。表示当前仍然属于登录状态。

如果我们觉得日期显示阅读不直观,可以通过命令 last –time-format 进行日期格式化。示例如下:

[root@iZuf /]# last --time-format iso
...
root     pts/0        我的 IP 地址     2020-08-07T17:05:19+08:00 - 2020-08-07T17:06:39+08:00  (00:01)

时间将会变成我们能够直接阅读的格式。(PS:+08:00 只是说明当前日期进行了时区添加,并不代表我们还需要在显示的时间中添加 8 小时哦)

–time-format 后面的可选参数为:

    notime:不显示时间。示例:(13:34)。只显示登录时长。不显示时间段
    short:短时间显示。示例:Fri Nov 4 17:53 – 18:03 (00:09)
    full:按照默认格式显示全部时间。示例:Tue Nov 22 13:48:22 2022 – Tue Nov 22 17:23:19 2022 (03:34)
    iso:按照 iso 时间格式显示全部时间。示例:2020-08-07T17:05:19+08:00 – 2020-08-07T17:06:39+08:00 (00:01)

这个文件将会记录全部的登录记录。如果中间出现了不属于我们熟悉的 ip 登录。那么说明账户密码有泄漏。或者其他非法登录产生。

PS:-F 命令不能和 --time-format 一起使用,因为它们两者都对输出的时间格式有影响。
3、btmp 日志

如果说 wtmp 是记录登录成功的日志。那么 btmp 就是记录所有尝试登录,但是登录失败的日志。它存储的路径和 wtmp 文件在同一目录下:/var/log/btmp

同样 btmp 也是属于二进制文件。无法通过 cat 或者 vim 进行阅读。需要通过命令 lastb 进行阅读。

last:阅读的 wtmp 文件
lastb:阅读的 btmp 文件
这两个指令是有一个字母的区别。千万不要弄混了 

这两个命令的 参数可以说是完全一样。可以用于 last 的也可以用于 lastb。

lastb 的命令参数如下:

    –:要显示多少行
    -a, –hostlast:在最后一列中显示主机名
    -d, –dns:将 IP 地址转换回主机名
    -f:使用特定文件而不是 /var/log/btmp
    -F, –fulltimes:打印完整的登录和注销时间和日期
    -i, –ip:以数字和点表示法显示 IP 号码
    -n, –limit:要显示多少行
    -R, –nohostname:不显示主机名字段
    -s, –since《time》:显示指定时间之后的行(查询指定时间之后的记录)
    -t, –until《time》:显示指定时间之前的行(查询指定时间之前的记录)
    -p, –present《time》:显示在指定时间内在场的账户
    -w, –fullnames:显示完整的用户名和域名
    -x, –system:显示系统关闭条目和运行级别更改
    –time-format:显示指定格式的时间戳 : notime|short|full|iso
PS:-F 命令不能和 --time-format 一起使用,因为它们两者都对输出的时间格式有影响。

具体使用示例:(PS:由于内容比较多,就先显示 10 条记录了)

[root@iZuf /]# lastb -10
liu      ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
sine     ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
ftpUser  ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
sine     ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
liu      ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
chenms   ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
mingjian ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
liu      ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
sine     ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)
ftpUser  ssh:notty    170.64.132.128   Wed Nov 23 07:40 - 07:40  (00:00)

格式表现为:

第一列显示登录名,第二列显示登录 ssh 方式很明显 ssh:notty 是在使用暴力破解 ssh 密码。(这也是为什么 Linux 建议一段时间内跟换密码的原因,当然使用秘钥的安全性要比密码高不少。),第三列显示的就是访问者 IP 地址了。之后的就是时间和耗费时长了。

示例, 将时间戳进行序列化后显示如下:

[root@iZuf /]# lastb -10 --time-format iso
liu      ssh:notty    170.64.132.128   2022-11-23T07:40:24+08:00 - 2022-11-23T07:40:24+08:00  (00:00)
sine     ssh:notty    170.64.132.128   2022-11-23T07:40:24+08:00 - 2022-11-23T07:40:24+08:00  (00:00)
ftpUser  ssh:notty    170.64.132.128   2022-11-23T07:40:23+08:00 - 2022-11-23T07:40:23+08:00  (00:00)
sine     ssh:notty    170.64.132.128   2022-11-23T07:40:23+08:00 - 2022-11-23T07:40:23+08:00  (00:00)
liu      ssh:notty    170.64.132.128   2022-11-23T07:40:22+08:00 - 2022-11-23T07:40:22+08:00  (00:00)
chenms   ssh:notty    170.64.132.128   2022-11-23T07:40:22+08:00 - 2022-11-23T07:40:22+08:00  (00:00)
mingjian ssh:notty    170.64.132.128   2022-11-23T07:40:22+08:00 - 2022-11-23T07:40:22+08:00  (00:00)
liu      ssh:notty    170.64.132.128   2022-11-23T07:40:21+08:00 - 2022-11-23T07:40:21+08:00  (00:00)
sine     ssh:notty    170.64.132.128   2022-11-23T07:40:21+08:00 - 2022-11-23T07:40:21+08:00  (00:00)
ftpUser  ssh:notty    170.64.132.128   2022-11-23T07:40:21+08:00 - 2022-11-23T07:40:21+08:00  (00:00)
(1)日志时长

btmp 日志由于内容过多。它会按 30 天进行备份一次数据。只会备份一个月的数据。

备份文件和 btmp 文件存储在同一目录下,只是命名后面追加上备份创建日期而已。示例:

小技巧:在 Linux 系统中填写路径时按 Tab 将会补全,如果无法补全说明有多个候选项,我们双击 Tab 将会列出全部候选项。

[root@iZuf /]# ls var/log/btmp
btmp           btmp-20221101

例如上面的结果,我们如果要看 btmp-20221101 里面的数据,就需要使用:lastb -f /var/log/btmp-20221101

示例如下,查询上个月的非法登录的前 10 条记录:

[root@iZuf /]# lastb -f /var/log/btmp-20221101 -10
sine     ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
liu      ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
sine     ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
sine     ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
wjquan   ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
liu      ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
zkkj     ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
chenms   ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
mingjian ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)
mingjian ssh:notty    143.244.141.68   Sat Oct 29 22:02 - 22:02  (00:00)

如果非法登录的数据文件比较大,我们怎么进行查询呢?Linux 可以针对数据进行筛选

(2)统计 ip 登录次数

恶意访问数据过多的时候,我们通过 lastb 直接阅读比较困难因为数据较大。这个时候我们就可以通过对查询结果进行筛选。

例如:

[root@iZuf /]# lastb | awk '{print $3}' | sort | uniq -c | sort -n
      5 98.143.158.42
   5368 143.244.137.83
   5402 170.64.132.120
   5522 170.64.132.128
   6212 193.47.61.21

上述显示结果,第一列 ip 地址的登录次数,第二列为 ip 地址。我们可以对登录过大的 ip 进行封禁操作。

下面进行命令拆分介绍。在 Linux 中通过 | 符号对命令进行拆分。

上述的命令其实就是:

    lastb:通过 lastb 命令会拉取全部的非法登录日志。
    awk ‘{print $3}’:截取 lastb 输出的数据中的第三列也就是 ip 地址。
    sort:将 ip 地址进行分类。
    uniq -c:将分类好的 ip 数据进行去重并计数。
    sort -n:将分类去重并计数的数据,进行分类并且按照数值进行从小到大排序。

例如我们如果要查上一个月的非法登录次数统计:

[root@iZuf /]# lastb -f /var/log/btmp-20221101 | awk '{print $3}' | sort | uniq -c | sort -n
     51 157.230.21.85
   4861 167.71.234.209
   5038 143.244.141.68
   5202 143.244.129.121
   5262 167.71.226.83

PS: 如果想高效控制和防范,那么使用防火墙可以说是最佳选择了。可以使用阿里云提供的云防火墙,包括结合情报的实时入侵防护、全流量可视化分析、智能化访问控制、日志溯源分析等能力。

4、secure 日志

相较于 wtmp 文件和 btmp 文件,secure 日志就是一个文本。可以通过 vim 或者 cat 阅读。也可以导出到 windows 环境下使用 VSCode 或者文本文档等阅读。

secure 日志和 wtmp 和 btmp 文件一样,存储在 var/log 目录下。示例如下:

[root@iZuf /]# ls /var/log/secure
secure           secure-20221030  secure-20221106  secure-20221113  secure-20221120

secure 文件是按照每 7 天备份一次的频率,进行备份的。文档打开后的内容如下所示:

Nov 20 09:25:19 iZuf sshd[2322424]: error: kex_exchange_identification: banner line contains invalid characters
Nov 20 12:55:16 iZuf sshd[2323018]: error: kex_exchange_identification: Connection closed by remote host
Nov 20 12:58:27 iZuf sshd[2323024]: Invalid user amax from 170.64.132.120 port 47146
Nov 20 12:58:28 iZuf sshd[2323026]: Invalid user amax from 170.64.132.120 port 47158
Nov 20 12:58:28 iZuf sshd[2323024]: pam_unix(sshd:auth): check pass; user unknown
Nov 20 12:58:28 iZuf sshd[2323024]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=170.64.132.120
Nov 20 12:58:28 iZuf sshd[2323026]: pam_unix(sshd:auth): check pass; user unknown
Nov 20 12:58:28 iZuf sshd[2323026]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=170.64.132.120
Nov 20 12:58:28 iZuf sshd[2323028]: Invalid user amax from 170.64.132.120 port 47164
Nov 20 12:58:28 iZuf sshd[2323030]: Invalid user amax from 170.64.132.120 port 47178
Nov 20 12:58:28 iZuf sshd[2323028]: pam_unix(sshd:auth): check pass; user unknown
Nov 20 12:58:28 iZuf sshd[2323028]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=170.64.132.120
Nov 20 12:58:28 iZuf sshd[2323032]: Invalid user amax from 170.64.132.120 port 47188
Nov 20 12:58:29 iZuf sshd[2323030]: pam_unix(sshd:auth): check pass; user unknown
Nov 20 12:58:29 iZuf sshd[2323030]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=170.64.132.120
Nov 20 12:58:29 iZuf sshd[2323032]: pam_unix(sshd:auth): check pass; user unknown

相较于 wtmp 和 btmp 一个记录成功的,一个记录失败的。secure 日志记录整个登录过程的所有数据,不管成功还是失败都会进行记录。

PS:由于 secure 日志属于文档类型的,那么登录成功后的非法登录它是可以比较方便的对 secure 文件进行篡改的。

下面简单列一些出现的各种错误和成功日志:

访问成功后的日志:Accepted password for root from 我的真实 IP port 端口号 ssh2
指令与端口不匹配: 修改了默认的 SSH 端口(22)改为其他端口了。攻击者访问该端口时,命令和端口服务不匹配就会出现下面的错误日志记录。
error: kex_exchange_identification: banner line contains invalid characters。
ip 地址为 170.64.132.120 的主机尝试破解 sshd 登录:它使用了新的账户和密码进行验证。
pam_unix(sshd:auth): check pass; user unknown
pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=170.64.132.120。
提示来自于 170.64.132.120 主机的端口 47146 的请求,用户名无效。不允许操作:Invalid user amax from 170.64.132.120 port 47146。
为正确用户开启 root 会话,也就是远程登录的命令输入界面:pam_unix(sshd:session): session opened for user root by (uid=0)。
为用户关闭 root 会话 也就是命令行输入界面:pam_unix(sshd:session): session closed for user root。
来自用户名 jason 的登录,密码和用户验证失败:Failed password for invalid user jason from 170.64.132.128 port 59676 ssh2。
等等还有很多的命令日志。

只要我们的服务器开启了 SSH,那么这种攻击就会再所难免。我们需要

修改默认的 ssh 的端口 22 改为其他的端口,可以提高安全性。
root 密码设置比较复杂的密码,并且保持更新。
使用秘钥验证比密码验证安全性更高。
使用防火墙屏蔽大量访问的 ip。
使用脚本,对攻击访问进行自动拉黑添加到屏蔽访问的文件中。

5、总结

只要将我们的服务器在公网环境公开,提供服务。就避免不了来自全球互联网上的各种攻击。大部分的攻击都是一些泛攻击,利用程序自动扫描并发起攻击而已。

更多的针对的都是一些弱密码例如 123456,admin 等的自动攻击脚本。

我们只需要给自己的服务器创建复杂程度高的密码,并保持一段时间的密码跟换。同时如果必须使用 SSH 登录就将默认端口 22 更换为其他端口。​​​​

然后一段时间后,针对大量重复的 ip 地址进行封禁就可以了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计8232字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7799648
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...