本页网址二维码:
Linux 服务器操作系统的每天巡检很耗时间是吧?
笔者从 Slackware Linux 2.1 开始长期使用Linux系统,管理数量从2台扩展到几十台,一直都是通过 logwatch 日志监控程序产生的日志监视邮件实现对多台 Linux 服务器的每天状态集中巡检。
虽然默认的一天一检并不是实时的,但作为一般运算负载环境、中小型企业(缺人)来说已经完全足够。
笔者背景:CISA(国际信息系统审计师)、软考系统分析师
尤其是在实施等级保护之后,如果没有部署集中式运维管理平台支撑,那就要通过堡垒机去登录每一台服务器做巡检,这会把自己折腾死。
顺带说两句集中式运维管理平台。这类平台要么基于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为例。下载地址:
配置过程实际还适用于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
|
接下来检查邮箱文件是否可用,应位于:
/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,原因无他,开源、可靠。
由于我们只是接收邮件不发,所以要选择手工配置,才能跳过他检测SMTP服务器有没有效的这一个过程。
首先要注意的是配置信息如何填写,尤其是用户名是不需要加上@服务器地址的,这和公共邮件服务不同。
另外就是由于用的是自签名证书,在配置界面是不会提示接受例外的,所以一定会测试失败。自行确认设置无误后,直接点击“高级配置”就可以完成配置。然后收邮件,确认证书例外:
确认例外后,就能把上面的测试邮件收取到客户端了。
|
如下是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 运维,还是要找本书成体系地实践才行。