经典有效的日志监控邮件集中巡检 Linux 服务器

作者:Sender Su  来源:原创内容  发布日期:2023-09-28  最后修改日期:2023-10-03

Linux 服务器操作系统的每天巡检很耗时间是吧?

笔者从 Slackware Linux 2.1 开始长期使用Linux系统,管理数量从2台扩展到几十台,一直都是通过 logwatch 日志监控程序产生的日志监视邮件实现对多台 Linux 服务器的每天状态集中巡检。

虽然默认的一天一检并不是实时的,但作为一般运算负载环境、中小型企业(缺人)来说已经完全足够。

article banner

笔者:国际认证信息系统审计师、软考系统分析师

尤其是在实施等级保护之后,如果没有部署集中式运维管理平台支撑,那就要通过堡垒机去登录每一台服务器做巡检,这会把自己折腾死。

顺带说两句集中式运维管理平台。这类平台要么基于SNMP服务,要么在服务器上安装代理程序实现对服务器的状态监控和管理,实时性和管理能力会很强,但对管理平台本身也是要有投入的,是否部署,看自己的规模。

所以这篇文的内容不是给大厂用的。

实现本文内容需要了解:crond、logwatch、postfix、dovecot、mail 以及在管理员终端上部署邮件客户端或者使用可靠的内/外部WebMail服务。

本文具体以 Linux 国产发行版:龙蜥 Anolis Linux 作为过程示范。龙蜥 Linux 目前有 7.x、8.x和23.x三个发行版本,鉴于7.x已经接近淘汰,而23.x刚刚GA还不适合用于生产,且没有提供Dovecot软件包要源码安装稍显麻烦,故本文以8.x为例。下载地址:

https://openanolis.cn/anolisos

配置过程实际还适用于RHEL 8、CentOS 8 Stream、Rocky Linux 8等。以下是配置过程。

安装软件包

作为例子,选择最小化安装龙蜥 Anolis Linux 8,这个过程不赘述。

安装完成,能登录系统后,先确保需要用到的软件包都已经安装。

[root@anolis8 ~]# dnf install logwatch postfix dovecot mailx
配置logwatch

检查logwatch的定时任务:

[root@anolis8 ~]# ll /etc/cron.daily
total 4
-rwxr-xr-x. 1 root root 486 Apr 15 11:18 0logwatch

logwatch的配置文件:

/etc/logwatch/conf/logwatch.conf

默认情况下配置文件内容是空白的,已经可以应付一般的使用要求。参考配置模版位于:

/usr/share/logwatch/default.conf/logwatch.conf

配置postfix

要修改的主配置文件位于:

/etc/postfix/main.cf

配置项都比较简单,不用过多解释:

inet_interfaces = all
inet_protocols = all
mynetworks_style = subnet

需要注意的是,如果服务器是软路由服务器,会面向不同的网络开放网络接口,那就要考虑清楚是否只应对内网开放邮件服务,并正确设置 inet_interfaces 选项为对应的网络接口的地址(不是接口的名称)。

另外,mynetworks_style 选项可以改为使用 mynetworks,从而实现更精细的开放范围定义,比如:

mynetworks = 127.0.0.1/8,192.168.0.0/24

然后关键是设置邮件转发。因为不能把根用户的邮箱收取过程直接暴露在网络上(无论设置了加密与否),必须把给根用户的邮件都转发到单独的用于收邮件的账号上。

修改:

/etc/aliases

在配置文件的最后,有一行特有的提示,可以设置由谁负责接收根用户的邮件。启用邮件转发如下:

# Person who should get root's mail
root:           用户名1,用户名2

多个用户时用英文逗号分隔。

修改完之后还要运行一次:

[root@anolis8 ~]# newaliases

命令才能生效。注意这个命令运行正常结束是没有任何提示的。

配置邮件POP3服务

Dovecot的配置文件拆分开好几个,在其中的重点配置项如下:

/etc/dovcot/dovecot.conf:

# 开放的协议,POP3就足够了
protocols = pop3
# 允许登录的网络范围,多个范围用空格隔开
login_trusted_networks = 127.0.0.1/8 192.168.121.0/24

/etc/dovcot/conf.d/10-auth.conf:

# 登录校验机制,同步启用加密
disable_plaintext_auth = yes
auth_mechanisms = plain

/etc/dovcot/conf.d/10-mail.conf:

# 邮箱的位置。单独把INBOX定义到/var/mail下面。
mail_location = mbox:~/mail:INBOX=/var/mail/%u
# 设置邮件特权组,用于操作INBOX。一般设置为mail以便访问/var/mail
mail_privileged_group = mail

# 邮件进程允许访问的组,用于建立共享邮箱。
# 注意配置文件中有关于此项的安全提示:如果用户可以创建符号链接,则有可能被利用来删除邮件或阅读服务器上其他人的邮件。
# 对于只有等级保护三员且严格通过堡垒机登录管理的服务器,该安全提示不算大问题。
mail_access_groups = mail

# 允许客户端访问整个文件系统,只由操作系统检查UID/GID而没有其他访问权限检查。
# 对邮件文件夹和邮箱有效。
mail_full_filesystem_access = yes

/etc/dovcot/conf.d/10-ssl.conf:

# 设置必须使用SSL加密的POP3方式登录。不加密的POP3访问仅允许服务器本地。
ssl = required

# 配置加密使用的证书和私钥,PEM格式。
# /usr/share/doc/dovecot/mkcert.sh 脚本可以协助产生自签名证书。
# 可考虑同步更新 dovecot-openssl.cnf 配置文件中的证书信息域。
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

产生私钥和证书:

[root@anolis8 ~]# bash /usr/share/doc/dovecot/mkcert.sh
Generating a RSA private key
.......................................................................................................................................................................................................................................................++++
...............................................................................................................++++
writing new private key to '/etc/pki/dovecot/private/dovecot.pem'
-----

subject=OU = IMAP server, CN = imap.example.com, emailAddress = postmaster@example.com
SHA1 Fingerprint=BF:09:B8:8B:ED:D2:1A:81:FF:53:5A:D9:6D:AF:21:21:1C:51:06:32
检查邮箱文件权限、SELinux策略

接下来检查邮箱文件是否可用,应位于:

/var/mail/用户名

如果邮箱文件不存在(正常时会随着添加用户而自动创建),可以用 touch 命令建立默认的空白邮箱文件,并修改文件访问权限。

如果启用了 SELinux 就还要用 chcon 命令修改邮箱文件的 SELinux Contex Label,否则邮件转发会不成功。

例如用于接收邮件的用户是 test_user,那么邮箱文件名称、访问权限以及 SELinux 标签应如下:

[root@anolis8 ~]# ls -Z /var/mail
-rw-rw----. test_user      mail system_u:object_r:mail_spool_t:s0 test_user
防火墙配置

防火墙要开放端口。注意pop3服务的加密端口和非加密端口是不同的,所以要看配置选择开放什么端口。

我们这个例子只开放加密的pop3s端口(995),添加服务然后固化保存防火墙配置:

[root@anolis8 ~]# firewall-cmd --add-service=pop3s
[root@anolis8 ~]# firewall-cmd --runtime-to-permanent
测试

1、启动服务

当然要启动成功啦:

[root@anolis8 ~]# systemctl enable postfix
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
[root@anolis8 ~]# systemctl enable dovecot
Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /usr/lib/systemd/system/dovecot.service.
[root@anolis8 ~]# systemctl start postfix
[root@anolis8 ~]# systemctl start dovecot

2、内部测试

测试方法比较简单,就是在根用户下面用 mail 命令,发个邮件给自己。这个邮件就会根据我们的设置转发到配置为接收根用户邮件的那个用户的邮箱里,再然后就可以通过 mail 命令查看邮件。

[root@anolis8 ~]# mail root@localhost
Subject: test
To: root@localhost
This is a test.
^D
-------
(Preliminary) Envelope contains:
To: root@localhost
Subject: test
Send this message [yes/no, empty: recompose]? yes

注意输入邮件正文后要按 CTRL+D 组合键结束输入,确认后邮件发出。

然后切换到邮件被转发接收的用户,甫一登录就提示有新邮件。运行 mail 命令就可以查看邮件了:

您在 /var/spool/mail/test_user 中有新邮件
[test_user@anolis8 ~]$ mail
s-nail version v14.9.22.  Type `?' for help
/var/spool/mail/test_user: 1 message 1 new
N  1 root                  2023-09-26 23:46   15/466   "test                  "
& t
[-- Message  1 -- 15 lines, 466 bytes --]:
Date: Tue, 26 Sep 2023 23:46:03 +0800
To: root@localhost
Subject: test
Message-Id: <20230926154603.368402318795@anolis8.home>
From: root 

This is a test.

&

3、外部测试,配置邮件终端

建议使用 Thunderbird,原因无他,开源、可靠。

Thunderbird Splash

由于我们只是接收邮件不发,所以要选择手工配置,才能跳过他检测SMTP服务器有没有效的这一个过程。

首先要注意的是配置信息如何填写,尤其是用户名是不需要加上@服务器地址的,这和公共邮件服务不同。

thunderbird setting

另外就是由于用的是自签名证书,在配置界面是不会提示接受例外的,所以一定会测试失败。自行确认设置无误后,直接点击“高级配置”就可以完成配置。然后收邮件,确认证书例外:

confirm self sign

确认例外后,就能把上面的测试邮件收取到客户端了。

mail collected

邮件内容实例

如下是Logwatch邮件的典型内容示例(部分内容作屏蔽处理)。


 --------------------- httpd Begin ------------------------ 
 Requests with error response codes
    404 Not Found
       /mobile/jquery/images/ajax-loader.gif: 9 Time(s)
       /favicon.ico: 4 Time(s)
       /c: 2 Time(s)
       /geoserver/web/: 2 Time(s)
       /robots.txt: 2 Time(s)
       /+CSCOE+/logon.html: 1 Time(s)
       /.020-31002527: 1 Time(s)
       /.well-known/security.txt: 1 Time(s)
       /api/sonicos/auth: 1 Time(s)
       /api/sonicos/tfa: 1 Time(s)
       /autodiscover/autodiscover.json?@zdi/Powershell: 1 Time(s)
       /boaform/admin/formLogin: 1 Time(s)
       /inputs.php: 1 Time(s)
       /phpmyadmin/index.php: 1 Time(s)
       /pmd/index.php: 1 Time(s)
       /sslvpnLogin.html: 1 Time(s)
       /wp-content/plugins/core-plugin/include.php: 1 Time(s)
       /wsman: 1 Time(s)
 ---------------------- httpd End ------------------------- 
 --------------------- Dovecot Begin ------------------------
 Dovecot IMAP and POP3 Successful Logins: 3
 Dovecot disconnects: 3
 ---------------------- Dovecot End -------------------------
 --------------------- pam_unix Begin ------------------------
 sshd:
    Authentication Failures:
       test_user (192.168.XX.XXX): 1 Time(s)
 su-l:
    Sessions Opened:
       test_user -> root: 2 Time(s)
       root -> test_user_2: 1 Time(s)
 sudo:
    Not Identify Password For:
       test_user_2: 2 Time(s)
 ---------------------- pam_unix End -------------------------
 --------------------- SSHD Begin ------------------------
 Failed logins from:
    192.168.XX.XXX: 2 times
 Users logging in through sshd:
    test_user:
       192.168.XX.XXX: 2 times
 ---------------------- SSHD End -------------------------
 --------------------- Sudo (secure-log) Begin ------------------------
 test_user_2 => root
 ------------
 /bin/id                        -   1 Time(s).
 list                           -   1 Time(s).
 Conversation failed with:
 -------------------------
 pam_unix(sudo:auth)            -   2 Time(s)
 ---------------------- Sudo (secure-log) End -------------------------
 --------------------- Disk Space Begin ------------------------
 Filesystem                  Size  Used Avail Use% Mounted on
 devtmpfs                    7.7G     0  7.7G   0% /dev
 /dev/mapper/centos-root     1.7T  769G  898G  47% /
 /dev/sda1                   497M  299M  198M  61% /boot
 192.168.XX.XXX:/BACKUP      19T   8.0T   11T  44% /backup
 ---------------------- Disk Space End -------------------------

在邮件中可以看到有些很关键的日志信息被筛选出来。比如说特权用户的登录情况,特权指令的使用,外部试探性的web攻击等等。

进一步的考虑

1、深化

以上过程实现后,每天早上回来收邮件看邮件就完成了当天的操作系统巡检了。

如果有需要,还可以深入调整 Logwatch,增加支持更多的日志种类和过滤筛选更多的敏感内容。典型如用 Logwatch 处理 Apache Tomcat 的日志。

还有就是 logwatch 每天运行一次的这个频率是可以修改的。方法就是直接在 /etc/crontab 里面定义间隔执行而不是把脚本放在 /etc/cron.daily 里面每天允许一次。

但这样很明显的问题就是日志邮件太多了,因此要么配置 logwatch 的筛选突出重点,要么在收到邮件之后,做二次筛选去突出自己关注的重点。

2、缺点

需要注意的是,这个基于 Logwatch 的做法的有效性有个大前提,就是在 logwatch 被运行之前,日志没有被删改。

但是对于高端黑客来说,入侵系统之后删改日志、掩藏行踪是必备的操守。这时候这个方法就没什么用了。

所以最低限度必须要设置一台独立的日志收集服务器,把系统日志转发到该日志收集服务器进行备份。可以参见我的其他文章:

网络安全日志收集甲方基础实践

有条件时可以采购部署日志管理系统,通过日志收集代理程序收集和独立存储日志。必须合规(不少于6个月)、可靠地保存日志,确保可审计。

而要进一步掌握 Linux 运维,还是要找本书成体系地实践才行。

本栏目相关
  •  2010-01-25 Linux 下的分区调整工具GParted实战
  •  2020-02-27 服务器热加硬盘、热转RAID模式,配合LINUX卷操作实现不重启服务器完成扩容
  •  2022-02-24 如何安装使用 Broadcom RAID卡命令行管理工具 StorCLI(或称PercCLI)?
  •  2022-02-25 Linux 软路由网络吞吐优化设置
  •  2022-12-12 Linux Kernel 日志排错分析和处置三例
  •  2023-02-01 安装MegaRAID存储管理器17.05.06版的好一番折腾(Linux篇)
  •  2023-02-08 Linux有什么工具能自动清理释放存储空间?
  •  2023-10-05 openEuler 安装配置 Dovecot 邮件服务器排障
  •  2023-06-25 Linux 单臂软路由设置及流量监控ntopng避坑
  • 微信订阅号二维码

    本页网址二维码:

    本栏目热门内容
  • Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然...
  • LINKSYS交换机登录WEB界面显示不正确的解决方法
  • 又一次RAID 5阵列故障记录
  • 解决VMware vSphere ESXi 5.0 Update 1 中虚机不能...
  • 修改CentOS发行信息以绕过Dell服务器BIOS更新和DSET...
  • 解决虚拟化运行的 Windows Server 2003 标准版出现...
  • Windows Server 2008 重命名域和域控制器
  • Intel Nehalem CPU Errata 导致 VMWare ESXi(vSpher...
  • 一次很精神的电脑组装过程记录(但不是自己的电脑)...
  • 解决MySQL Cluster 备份总是失败,提示文件已存在的...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的问题
  • 解决 VMWare vSphere 6 客户端无法修改用户密码
  • 解决Windows Server 2008 R2域控制器显示无法连接到...
  • 本站服务器RAID 5阵列双硬盘失效挽救记录
  • 网站数据库从MySQL 5.0升级到5.6的记录
  • 解决MariaDB使用Percona XtraBackup增量备份出错
  • DELL PowerEdge 820 报CPU3 INTERNAL ERROR 的解决...
  • Linux 下的分区调整工具GParted实战
  • 修改arpwatch使通知邮件主题显示IP地址
  • 程序员漫画:如何用8种不同的编程语言去解救公主
  • 解决Samba WINS服务的错误解释问题
  • 解决很好用的多合一即时通信软件pidgin的崩溃问题
  • 使用 GParted 进行虚拟机硬盘分区调整操作
  • 解决Squid代理HTTP时在浏览器出现Content Encoding ...
  • 用Delphi编写使用到ADO的DLL的一些问题
  • 网站简单改版
  • 索尼系列手提电脑备份失败,出现700错误的解决办法
  • Dell R900服务器 BMC firmware incompatible with C...
  • 更多...