相关软件:
1. 发送邮件 --- postfix
2. 身份认证 --- sasl2
3. 接收邮件 --- dovecot
4. 防病毒邮件 --- clamAV
5. 防垃圾邮件 --- spamassassin
6.控制病毒及垃圾邮件扫描程序 --- amavisd-new
============================
待完善的问题:
1. 群发邮件的权限设置
2. 用户邮箱的配额限制
============================
完整邮件系统架构简介
我们知道,一个完整的邮件系统应该包括以下几个重要功能:
基本功能: 发送邮件、收取邮件
安全性功能: 收发邮件的身份认证、防病毒、防垃圾
完整的邮件系统架构流程图如下:
相关软件的安装及配置
1. 安装postfix,同时让postfix支持mysql查询
# aptitude install postfix postfix-mysql
2. 查看postfix是否支持外部数据库mysql认证
# postconf -m
btree
cidr
environ
hash
internal
mysql
nis
proxy
regexp
sdbm
static
tcp
unix
3. 查看postfix支持的sasl认证类型
# postconf -a
cyrus
dovecot
4. 安装cyrus sasl认证
# aptitude install sasl2-bin libsasl2-modules-sql
5. 修改/etc/default/saslauthd
START=no ====> START=yes
6. 重启saslauthd,并验证saslauthd正常工作
# /etc/init.d/saslauthd restart
# testsaslauthd -u {username} -p {password}
若出现如下结果,表示saslauthd已正常运行,并可进行认证服务,否则请检查username和password并重试
0: OK "Success."
注:{username},{password}是登录linux系统的用户名和密码
7. postfix启用sasl认证
编辑/etc/postfix/main.cf,在最后添加如下内容:
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
8. 修改/etc/postfix/master.cf,禁止postfix启用chroot
smtp inet n - - - - smtpd
rewrite unix - - - - - trivial-rewrite
cleanup unix n - - - 0 cleanup
==========>>>>>>
smtp inet n - n - - smtpd
rewrite unix - - n - - trivial-rewrite
cleanup unix n - n - 0 cleanup
这样设置的原因:如果不这么设置,则在发送邮件时,总是报如下错误,且邮件无法发送成功:
postfix/trivial-rewrite[10698]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
postfix/trivial-rewrite[10698]: fatal: mysql:/etc/postfix/mysql_virtual_alias_maps.cf(0,lock|fold_fix): table lookup problem
postfix/smtpd[10394]: warning: problem talking to service rewrite: Success
postfix/master[10386]: warning: process /usr/lib/postfix/trivial-rewrite pid 10698 exit status 1
postfix/smtpd[10697]: warning: problem talking to service rewrite: Connection reset by peer
postfix/master[10386]: warning: /usr/lib/postfix/trivial-rewrite: bad command startup -- throttling
9. 安装mysql并创建数据库和表,同时插入数据
# aptitude install mysql-client mysql-server
# mysql -u root -p
输入密码
# sql> create database mail;
# sql> create table mail.users( id in(8) primary key auto_increment, username varchar(50), password varchar(50), domain varchar(50), quota int(10), maildir varchar(200));
# sql> insert into mail.users(username,password,domain,maildir,quota) values('test','test','tiddy.com','tiddy.com/test/',16000);
# sql> commit;
10. 修改postfix通过sasl的认证方式(pam/shadow/sql/ldap),在/etc/postfix/sasl目录下新建文件smtpd.conf,内容如下:
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: root
sql_passwd: tiddy
sql_database: mail
sql_select: SELECT password FROM users WHERE username = '%u'
11. 在postfix上安装telnet并进行测试
# aptitude install telnet
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.tiddy.com ESMTP Postfix (Debian/GNU)
auth login
334 VXNlcm5hbWU6
dGVzdA==
334 UGFzc3dvcmQ6
dGVzdA==
235 2.7.0 Authentication successful
mail from:
250 2.1.0 Ok
rcpt to:
250 2.1.5 Ok
data
354 End data with .
Subject: alskdjlasd
lasdjflasdf
.
250 2.0.0 Ok: queued as 4C1FB440E6
postfix sasl mysql认证成功
注意:上述红色标记的文字表示经过BASE64编码的用户名(test)和密码(test)
12. 安装POP3软件dovecot
# aptitude install dovecot-pop3d
13. 创建虚拟用户(以便该用户有权限访问邮件存放目录)
# groupadd -g 5000 vmail
# useradd -u 5000 -g 5000 vmail -d /var/vmail -m
14. 配置dovecot
修改/etc/dovecot/dovecot.conf,主要修改如下部分
1) 去掉注释符号(#)
base_dir = /var/run/dovecot
2) dovecot所使用的协议
protocols = pop3 pop3s
3) dovecot所监听的端口(*:监听所有网络端口)
listen = *
4) 打开明文密码认证(采用pop3协议收取邮件时,采用明文密码认证)
disable_plaintext_auth = no
5) 日志文件
log_path = /var/log/dovecot.log
6) debug日志文件
info_log_path = /var/log/dovecot.info
7) 每行日志输出的前缀
log_timestamp = "%Y-%m-%d %H:%M:%S "
8) 客户端用pop3协议收取邮件时的服务器收取路径
mail_location = maildir:/var/vmail/%d/%n/
9) 是否开启debug(测试阶段使用,正式投入使用后,最好关闭)
mail_debug = yes
10) dovecot的pop3认证
auth default {
#认证方式
mechanisms = plain login
#认证过程中的密码查询方式(采用sql查询)
passdb sql {
# Path for SQL configuration file
args = /etc/dovecot/dovecot-sql.conf
}
#认证过程中的用户查询方式(采用sql查询)
userdb sql {
# Path for SQL configuration file
args = /etc/dovecot/dovecot-sql.conf
}
#监听客户端socket以便随时发现客户端发起的用户身份认证
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
15. 修改/etc/dovecot/dovecot-sql.conf
1) 数据库驱动
driver = mysql
2) 数据库连接信息
connect = host=localhost dbname=mail user=root password=tiddy
3) 数据库密码的加密方式(PLAIN:明文方式,不加密)
default_pass_scheme = PLAIN
4) 数据库查询语句
password_query = SELECT username, domain, password FROM users WHERE username = '%n'
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM users WHERE username = '%n'
16. 重新修改/etc/postfix/main.cf(注意:有的内容已经存在或添加过,请务必不要重复添加)
######################## 基本配置 ##########################
myhostname = postfixsvr
alias_maps = hash:/etc/aliases