Linux 技术手札

Postfix + MailScanner 架设过滤病毒及垃圾 Mail Gateway

Mail Gateway 的作用是在电邮到达电邮服务器前, 预先过滤或处理不当电邮 (例如带有病毒的邮件及垃圾电邮), 再将电邮转送到后端的电邮服务器。其他人只会从 MX record 知道 Mail Gateway 的位置, 但不会知道电邮服务器的位置。

系统管理员架设起 Mail Gateway 后, 只要将域名的 MX record 指向 Mail Gateway 的 IP 便可以, 对其他使用者几乎不会察觉有转换。而且后端如果有多于一台电邮服务器, 可以按域名将电邮转送到指定的电邮服务器。

要架设 Mail Gateway 不会太难, 只是如果 Mail Gateway 需要具备过滤病毒及垃圾邮件的功能, 需要多点步骤而已。以下是在 CentOS 8 用 Postfix 架设 Mail Gateway, 以及安装 Mail Scanner, ClamAV 及 Spamassassin 过滤垃圾电邮及病毒的方法。

安装及设定 Postfix

用 dnf 或 yum 安装 Postfix:

# dnf install postfix

Postfix 的设定档在 /etc/postfix/main.cf, 开启进行几个设定:

# vi /etc/postfix/main.cf

inet_interfaces

relay_domains
设定要转寄邮件的域名, 如果有多于一个域名, 可以用空格或逗号分隔

transport_maps

设定好上面的几个选项后, 储存盘案。根据地上面的例子, 加入 domain1.com 及 domain2.com 到档案 /etc/postfix/transport:

上面的 “mail-server-ip” 改成后端电邮服务器的 IP, 然后执行以下指令执建立 transport.db:

# postmap /etc/postfix/transport

设定 Firewalld 开启 port 25:

# firewall-cmd –add-service=smtp –permanent
# firewall-cmd –reload

最后重新启动 Postfix 及开机自动启动:

# systemctl start postfix
# systemctl enable postfix

这时 Mail Gateway 已经可以转送邮件。

现在开始安装 Mail Scanner, ClamAV 及 Spamassassin, 对邮件进行病毒扫瞄及垃圾电邮过滤。

安装 ClamAV

先开启 EPEL:

# dnf –enablerepo=extras install epel-release

安装 ClamAV:

# dnf install clamav clamav-update clamd -y

安装好后, 下载最新病毒定义档:

# freshclam

然后执行以下指令设定 ClamAV:

然后启动 ClamAV:

# systemctl enable clamd@.service
# systemctl start clamd@scan

执行 crontab 设定自动更新病毒定义档:

# crontab -e

加入以下一行:

安装 Spamassassin

执行以下指令安装 Spamassassin:

# dnf install spamassassin

更新 Spamassassin 的规则:

# sa-update

启动 Spamassassin 及设定开机自动启动

# systemctl enable spamassassin
# systemctl start spamassassin

安装 MailScanner

在安装 MailScanner 前, 需要先安装必以下套件:

# dnf install perl unzip gcc patch rpm-build cpp perl-DBI perl-MIME-tools perl-DBD-SQLite binutils glibc-devel perl-Filesys-Df zlib zlib-devel automake perl-devel git

现在用 git 下载 MailScanner, 目前最新版是 5.3.3-1:

# cd /usr/local/src/
# git clone https://github.com/MailScanner/v5.git
# cd v5

目录下有几个可执行档, 分别是:

Build.all
Build.debian
Build.nix
Build.rhel
Build.suse

根据安装的环境执行相关 Build 档案, 例如 RHEL 及 CentOS 执行 Build.rhel:

# ./Build.rhel

然后在 /root/ 目录下会产生一个 msbuilds 目录, 里面有一个 MailScanner-5.3.3-1.rhel.noarch.rpm 档案, 安装这个 rpm 档:

# rpm -ivh /root/msbuilds/MailScanner-5.3.3-1.rhel.noarch.rpm
# /usr/sbin/ms-configure

在画面按照自己的需要回答问题, 除了 MTA 需要选择 Postfix 外, 其他选用默认值即可。

之后 MailScanner 会进行安装, 这个过程需要点时间, 让它自动执行。

程式执行完成后, 现在设定 Postfix 配合 MailScanner:

# mkdir /var/spool/MailScanner/spamassassin
# chown postfix /var/spool/MailScanner/spamassassin
# chown postfix.postfix /var/spool/MailScanner/incoming
# chown postfix.postfix /var/spool/MailScanner/quarantine

开启 MailScanner 的设定档 /etc/MailScanner/MailScnner.conf

# vi /etc/MailScanner/MailScnner.conf

修改以下几个项目, 改成这样:

Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix
SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

然后开启 Postfix 的设定档 /etc/postfix/main.cf:

# vi /etc/postfix/main.cf

找到 header_checks = regexp:/etc/postfix/header_checks 这一行, 将最前面的 “#” 删除.

开启档案 /etc/postfix/header_checks

# vi /etc/postfix/header_checks

加入以下内容:

/^Received:/ HOLD

以上动作是为了让 Postfix 把收到的邮件先储存在某个目录, 待 MailScanner 进行扫瞄。

如果 ClamAV 及 Spamassassin 是用 yum 或 dnf 安装, MailScanner 默认会找到它们。

最后开启 /etc/MailScanner/defaults:

# vi /etc/MailScanner/defaults

将 run_mailscanner 改成 1:

run_mailscanner=1

最后修改 /etc/MailScanner/defaults 设定run_mailscanner=1 才可以将服务启动

run_mailscanner=1

执行 systemctl 启动及开机自动执行 MailScanner:

# systemctl enable mailscanner
# systemctl start mailscanner

要使用 Mail Gateway, 现在只要将域名的 MX record 指向 Mail Gateway, 等 DNS update 生效即可。当邮件透过 Mail Gateway 转送到 Mail Server 后, 邮件最后会加入以下字串:

This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

如果看到便安装成功了。

Exit mobile version