虚拟用户和域与Postfix,Courier,MySQL和SquirrelMail(Ubuntu 13.10)

本文档介绍如何安装基于虚拟用户和域的Postfix邮件服务器,即用户和域中的MySQL da ...

本教程是Falko Timme&Srijan Kishore的版权所有(c)2014。 它来自Christoph Haas的教程,您可以在http://workaround.org找到。 您可以根据知识共享许可2.5或更高版本免费使用本教程。

本文档介绍如何安装基于虚拟用户和域的Postfix邮件服务器,即MySQL数据库中的用户和域。 我还将展示Courier(Courier-POP3,Courier-IMAP)的安装和配置,以便Courier可以对Postfix使用的相同的MySQL数据库进行身份验证。

所得到的Postfix服务器能够使用SMTP-AUTHTLS配额 (默认情况下,配额不会内置到Postfix中),我将显示如何适当修补Postfix。 密码以加密形式存储在数据库中(我发现大多数文档都是处理明文密码,这是一个安全风险)。 除此之外,本教程还介绍了AmavisdSpamAssassinClamAV的安装 ,以便电子邮件扫描垃圾邮件和病毒。 我还将展示如何将SquirrelMail安装为Webmail界面,以便用户可以读取和发送电子邮件并更改密码。

这种“虚拟”设置(MySQL数据库中的虚拟用户和域)的优点是,它比基于“真实”系统用户的设置性能要好得多。 通过此虚拟设置,您的邮件服务器可以处理数千个域和用户。 此外,更容易管理,因为您只需在添加新用户/域或编辑现有的MySQL数据库时处理MySQL数据库。 没有更多的postmap命令来创建数据库文件,不需要再重新加载Postfix等。对于MySQL数据库的管理,您可以使用基于Web的工具,如phpMyAdmin,它也将安装在这个howto中。 第三个优点是用户使用电子邮件地址作为用户名(而不是用户名+电子邮件地址),这更容易理解和记住。

这是一个实践指南; 它不包括理论背景。 他们在网络上的许多其他文档中被处理。

本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!

1初步说明

本教程基于Ubuntu 13.10服务器(Saucy Salamander),因此您应该在继续本教程之前设置基本的Ubuntu 13.10服务器安装。 系统应该有一个静态IP地址。 我在本教程中使用192.168.0.100作为我的IP地址,将server1.example.com用作主机名。

确保您以root身份登录(输入

sudo su

成为root),因为我们必须以root用户身份运行本教程中的所有步骤。

/ bin / sh的符号链接到/ bin / bash是非常重要的...

dpkg-reconfigure dash

使用破折号作为默认系统shell(/ bin / sh)? < - 不

...并禁用AppArmor:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils

2安装Postfix,Courier,Saslauthd,MySQL,phpMyAdmin

要安装Postfix,Courier,Saslauthd,MySQL和phpMyAdmin,我们只需运行

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

你会被问到几个问题:

MySQL“root”用户的新密码: < - yourrootsqlpassword
重复MySQL“root”用户的密码: < - yourrootsqlpassword
创建基于Web的管理目录? < - 不
一般类型的邮件配置: < - 网站
系统邮件名称: < - server1.example.com
需要SSL证书 < - 好的
Web服务器自动重新配置: < - apache2
使用dbconfig-common配置phpmyadmin的数据库? < - 不

3应用配额补丁到Postfix

我们必须得到Postfix源代码,使用配额补丁进行修补,构建新的Postfix .deb包并安装这些.deb包:

apt-get build-dep postfix

cd /usr/src
apt-get source postfix

(确保在以下命令中使用正确的Postfix版本。我安装了Postfix 2.10.2,您可以通过运行

postconf -d | grep mail_version

输出应如下所示:

root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.10.2
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#

wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.10.2
patch -p1 < ../postfix-vda-v13-2.10.0.patch

下一个打开debian /规则并将DEB_BUILD_HARDENING1更改为0

vi debian/rules

[...]
export DEB_BUILD_HARDENING=0
[...]

如果您不这样做,您的构建将失败并显示以下错误消息:

maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: *** [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.10.2/src/virtual'
make[1]: *** [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.10.2'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.10.2#

现在我们可以构建新的Postfix .deb包:

dpkg-buildpackage

现在我们去一个目录,这就是新的.deb包的创建地方:

cd ..

命令

ls -l

显示可用包:

root@server1:/usr/src# ls -l
total 7124
drwxr-xr-x 18 root root    4096 Apr 16 04:29 postfix-2.10.2
-rw-r--r--  1 root root   48594 Apr 16 04:29 postfix-cdb_2.10.2-1_amd64.deb
-rw-r--r--  1 root root  161974 Apr 16 04:29 postfix-dev_2.10.2-1_all.deb
-rw-r--r--  1 root root 1094344 Apr 16 04:29 postfix-doc_2.10.2-1_all.deb
-rw-r--r--  1 root root   57342 Apr 16 04:29 postfix-ldap_2.10.2-1_amd64.deb
-rw-r--r--  1 root root   50554 Apr 16 04:29 postfix-mysql_2.10.2-1_amd64.deb
-rw-r--r--  1 root root   50804 Apr 16 04:29 postfix-pcre_2.10.2-1_amd64.deb
-rw-r--r--  1 root root   50756 Apr 16 04:29 postfix-pgsql_2.10.2-1_amd64.deb
-rw-r--r--  1 root root   55701 Jun  7  2013 postfix-vda-v13-2.10.0.patch
-rw-r--r--  1 root root  282175 Apr 16 04:28 postfix_2.10.2-1.diff.gz
-rw-r--r--  1 root root    1522 Apr 16 04:28 postfix_2.10.2-1.dsc
-rw-r--r--  1 root root    3899 Apr 16 04:29 postfix_2.10.2-1_amd64.changes
-rw-r--r--  1 root root 1542368 Apr 16 04:29 postfix_2.10.2-1_amd64.deb
-rw-r--r--  1 root root 3828326 Sep 12  2013 postfix_2.10.2.orig.tar.gz

选择postfixpostfix-mysql包,并安装它们如下所示:

dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-1_amd64.deb

4为Postfix / Courier创建MySQL数据库

现在我们创建一个名为mail的数据库:

mysqladmin -u root -p create mail

您将被要求提供此问题:

输入密码: < - yourrootsql 密码

接下来,我们去MySQL shell:

mysql -u root -p

在MySQL shell上,我们用邮件数据库中具有SELECT,INSERT,UPDATE,DELETE权限的passwort mail_admin_password (替换为自己的密码)创建用户mail_admin 。 该用户将被Postfix和Courier用于连接到邮件数据库:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;

仍然在MySQL shell上,我们创建Postfix和Courier所需的表:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;

quit;

你可能已经注意到,随着戒烟; 命令我们已经离开了MySQL shell,并回到了Linux shell。

表将存储Postfix应接收(例如example.com )的电子邮件的每个虚拟域。

example.com

发表用于将一个电子邮件地址别名,例如将info@example.com的电子邮件转发sales@example.com

资源 目的地
info@example.com sales@example.com

用户表存储所有虚拟用户(即,电子邮件地址,因为电子邮件地址和用户名相同)和密码( 加密形式!)和每个邮箱的配额值(在本示例中,默认值为10485760字节意味着10MB)。

电子邮件 密码 配额
sales@example.com No.4E4skNvGa (加密形式的“秘密”) 10485760

运输表是可选的,适用于高级用户。 它允许将单个用户,整个域或所有邮件的邮件转发到另一个服务器。 例如,

运输
example.com smtp:[1.2.3.4]

将通过smtp协议将所有em.com的电子邮件转发到IP地址为1.2.3.4的服务器(方括号[]表示“不查找MX DNS记录”)(这对IP地址有意义。 。)如果您使用完全限定域名(FQDN),则不要使用方括号。

BTW,(我假设您的邮件服务器系统的IP地址为192.168.0.100 ),您可以通过http://192.168.0.100/phpmyadmin/在浏览器中访问phpMyAdmin并以mail_admin身份登录。 那么你可以看看数据库。 以后可以使用phpMyAdmin管理邮件服务器。

5配置Postfix

现在我们必须告诉Postfix在哪里可以找到数据库中的所有信息。 因此,我们必须创建六个文本文件。 你会注意到,我告诉Postfix在IP地址127.0.0.1而不是本地主机连接到MySQL。 这是因为Postfix正在chroot jail中运行,如果我告诉Postfix使用localhost ,则无法访问MySQL套接字。 如果我使用127.0.0.1 Postfix使用TCP网络连接到MySQL,即使在chroot jail中也是没有问题的(替代方案是将MySQL套接字移动到chroot jail中,这会导致一些其他问题)。

请确保/etc/mysql/my.cnf包含以下行:

vi /etc/mysql/my.cnf

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address           = 127.0.0.1
[...]

如果您必须修改/etc/mysql/my.cnf ,请立即重新启动MySQL:

/etc/init.d/mysql restart

netstat -tap | grep mysql

以确保MySQL在127.0.0.1localhost.localdomain )上监听

root@server1:~# netstat -tap | grep mysql
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      24970/mysqld   
root@server1:~#

现在我们来创建我们的六个文本文件。

vi /etc/postfix/mysql-virtual_domains.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_forwardings.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_mailboxes.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_email2email.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_transports.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT transport FROM transport WHERE domain='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT quota FROM users WHERE email='%s'
hosts = 127.0.0.1

然后更改这些文件的权限和组:

chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

现在我们用主目录/ home / vmail创建一个名为vmail的用户和组。 这是所有邮箱将被存储的地方。

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

接下来我们做一些Postfix配置。 确保您用有效的FQDN替换server1.example.com,否则您的Postfix可能无法正常工作!

postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "The user you are trying to reach is over quota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

之后,我们创建TLS所需的SSL证书:

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

国家名称(2个字母代码)[AU]: < - 输入您的国家名称(例如,“DE”)。
州或省名称(全名)[某些州]: < - 输入您的州或省名称。
地点名称(例如,城市)[]: < - 输入您的城市。
组织名称(例如,公司)[互联网Widgits有限公司]: < - 输入您的组织名称(例如,您公司的名称)。
组织单位名称(如部分)[]: < - 输入您的组织单位名称(例如“IT部门”)。
通用名称(例如,您的姓名)[]: < - 输入系统的完全限定域名(例如“server1.example.com”)。
电子邮件地址[]: < - 输入您的电子邮件地址。

然后更改smtpd.key的权限

chmod o= /etc/postfix/smtpd.key

6配置Saslauthd

先跑

mkdir -p /var/spool/postfix/var/run/saslauthd

然后编辑/ etc / default / saslauthd 。 将START设置为yes并将OPTIONS =“ - c -m / var / run / saslauthd”的行更改为OPTIONS =“ - c -m / var / spool / postfix / var / run / saslauthd -r”

vi /etc/default/saslauthd

#
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Description of this saslauthd instance. Recommended.
# (suggestion: SASL Authentication Daemon)
DESC="SASL Authentication Daemon"

# Short name of this saslauthd instance. Strongly recommended.
# (suggestion: saslauthd)
NAME="saslauthd"

# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# WARNING: DO NOT SPECIFY THE -d OPTION.
# The -d option will cause saslauthd to run in the foreground instead of as
# a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish
# to run saslauthd in debug mode, please run it by hand to be safe.
#
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
#
# Example for chroot Postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Example for non-chroot Postfix users: "-c -m /var/run/saslauthd"
#
# To know if your Postfix is running chroot, check /etc/postfix/master.cf.
# If it has the line "smtp inet n - y - - smtpd" or "smtp inet n - - - - smtpd"
# then your Postfix is running in a chroot.
# If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
# running in a chroot.
#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

然后创建文件/etc/pam.d/smtp 。 它应该只包含以下两行(请务必填写正确的数据库详细信息):

vi /etc/pam.d/smtp

auth    required   pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

接下来创建文件/etc/postfix/sasl/smtpd.conf 。 它应该是这样的:

vi /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: mail_admin_password
sql_database: mail
sql_select: select password from users where email = '%u@%r'

接下来将postfix用户添加到sasl组(这样可以确保Postfix有权限访问saslauthd):

adduser postfix sasl

然后重新启动Postfix和Saslauthd:

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

7配置Express

现在我们要告诉Courier它应该对我们的MySQL数据库进行认证。 首先,编辑/ etc / courier / authdaemonrc并更改authmodulelist的值,使其显示为:

vi /etc/courier/authdaemonrc

[...]
authmodulelist="authmysql"
[...]

然后备份/ etc / courier / authmysqlrc并清空旧文件:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc

然后打开/ etc / courier / authmysqlrc ,并在其中放入以下行:

vi /etc/courier/authmysqlrc

MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD mail_admin_password
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#MYSQL_NAME_FIELD
MYSQL_QUOTA_FIELD quota

在安装过程中,使用主机名localhost创建IMAP-SSL和POP3-SSL的SSL 证书 。 要将其更改为正确的主机名(本教程中的server1.example.com),请删除证书...

cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem

...并修改以下两个文件; 将CN = localhost替换为CN = server1.example.com (如果需要,还可以修改其他值):

vi /etc/courier/imapd.cnf

[...]
CN=server1.example.com
[...]

vi /etc/courier/pop3d.cnf

[...]
CN=server1.example.com
[...]

然后重新创建证书...

mkimapdcert
mkpop3dcert

...并重启Express:

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

运行

telnet localhost pop3

您可以看到您的POP3服务器是否正常工作。 它应该回馈+ OK你好 。 (键入退出以返回到Linux shell。)

root @ server1:/ etc / courier#telnet localhost pop3
尝试:: 1 ...
连接到localhost.localdomain。
转义字符为'^]。
+ OK你好。
< - 退出
+ OK下次好运气
外部主机关闭连接。
root @ server1:/ etc / courier#

8修改/ etc /别名

现在我们应该打开/ etc / aliases 。 确保postmaster指向rootroot到您自己的用户名或您的电子邮件地址,例如:

vi /etc/aliases

[...]
postmaster: root
root: postmaster@yourdomain.tld
[...]

或者像这样(如果管理员是你自己的用户名):

[...]
postmaster: root
root:   administrator
[...]

每当你修改/ etc / aliases ,你必须运行

newaliases

之后重启Postfix:

/etc/init.d/postfix restart

9安装amavisd-new,SpamAssassin和ClamAV

要安装amavisd-new,spamassassin和clamav,请运行以下命令:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

之后我们必须配置amavisd-new。 该配置在各种文件中分开,这些文件驻留在/etc/amavis/conf.d目录中。 看看他们每个人熟悉配置。 大多数设置都很好,但是我们必须修改三个文件:

首先,我们必须通过取消注释@bypass_virus_checks_maps@bypass_spam_checks_maps行,在/etc/amavis/conf.d/15-content_filter_mode中启用ClamAV和SpamAssassin:

vi /etc/amavis/conf.d/15-content_filter_mode

该文件应如下所示:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # ensure a defined return

然后,您应该查看垃圾邮件设置以及/etc/amavis/conf.d/20-debian_defaults中垃圾邮件/病毒邮件的操作 。 如果您的默认设置不错,则无需更改任何内容。 该文件包含许多说明,因此无需在此处说明设置:

vi /etc/amavis/conf.d/20-debian_defaults

[...]
$QUARANTINEDIR = "$MYHOME/virusmails";
$quarantine_subdir_levels = 1; # enable quarantine dir hashing

$log_recip_templ = undef;    # disable by-recipient level-0 log entries
$DO_SYSLOG = 1;              # log via syslogd (preferred)
$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug';  # switch to info to drop debug output, etc

$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1

$inet_socket_port = 10024;   # default listening socket

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent
[...]
$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)
[...]

最后编辑/etc/amavis/conf.d/50-user并添加行$ pax ='pax'; 在中间:

vi /etc/amavis/conf.d/50-user

use strict;

#
# Place your configuration directives here.  They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
$pax='pax';

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return

之后,运行这些命令将clamav用户添加到amavis组并重新启动amavisd-new和ClamAV:

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/clamav-daemon restart

现在我们必须通过amavisd-new配置Postfix来管理传入的电子邮件:

postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'

之后添加以下行到/etc/postfix/master.cf

vi /etc/postfix/master.cf

[...]
amavis unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

然后重新启动Postfix:

/etc/init.d/postfix restart

现在跑

netstat -tap

您应该看到Postfix( )在端口25( smtp )和10025上监听,而在端口10024上的amavisd-new:

root@server1:/etc/courier# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:http                  *:*                     LISTEN      6134/apache2
tcp        0      0 *:ssh                   *:*                     LISTEN      610/sshd
tcp        0      0 *:smtp                  *:*                     LISTEN      23128/master
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN      21937/amavisd-new (
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN      23128/master
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      4308/mysqld
tcp        0     52 server1.example.com:ssh 192.168.0.206:57597     ESTABLISHED 976/0
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      610/sshd
tcp6       0      0 [::]:smtp               [::]:*                  LISTEN      23128/master
tcp6       0      0 [::]:imaps              [::]:*                  LISTEN      18191/couriertcpd
tcp6       0      0 [::]:pop3s              [::]:*                  LISTEN      18259/couriertcpd
tcp6       0      0 [::]:pop3               [::]:*                  LISTEN      18222/couriertcpd
tcp6       0      0 [::]:imap2              [::]:*                  LISTEN      18154/couriertcpd
root@server1:/etc/courier#

 

10安装Razor,Pyzor和DCC并配置SpamAssassin

Razor,Pyzor和DCC是使用协作过滤网络的垃圾邮件过滤器。 安装Razor和Pyzor,运行

apt-get install razor pyzor

DCC在Ubuntu 13.10存储库中不可用,因此我们安装如下:

cd /tmp
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z
tar xzvf dcc-dccproc.tar.Z
cd dcc-dccproc-1.3.1.154
./configure --with-uid=amavis
make
make install
chown -R amavis:amavis /var/dcc
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

现在我们要告诉SpamAssassin使用这三个程序。 编辑/etc/spamassassin/local.cf并添加以下行:

vi /etc/spamassassin/local.cf

[...]
#dcc
use_dcc 1
dcc_path /usr/local/bin/dccproc

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

那么我们必须在SpamAssassin中启用DCC插件。 打开/etc/spamassassin/v310.pre并取消注释loadplugin Mail :: SpamAssassin :: Plugin :: DCC行:

vi /etc/spamassassin/v310.pre

[...]
# DCC - perform DCC message checks.
#
# DCC is disabled here because it is not open source.  See the DCC
# license for more details.
#
loadplugin Mail::SpamAssassin::Plugin::DCC
[...]

您可以通过执行以下命令检查您的SpamAssassin配置:

spamassassin --lint

它不应该显示任何错误。

以后重新启动:

/etc/init.d/amavis restart

现在我们更新我们的SpamAssassin规则集,如下所示:

sa-update --no-gpg

我们创建一个cron作业,以便定期更新规则集。 跑

crontab -e

打开cron作业编辑器。 创建以下cron作业:

23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null

这将在4.23h的第二天更新规则集。