搭建完整邮件系统(postfix+dovecot+clamAV+Spamassassin+amavisd-new)

   相关软件:

  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

  alias_database = hash:/etc/aliases

  myorigin = tiddy.com

  relayhost =

  mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

  mailbox_size_limit = 0

  recipient_delimiter = +

  inet_interfaces = all

  #我们使用虚拟网域virtual_mailbox_domains变量来决定哪些网域的邮件可以被投递,此处注释掉

  #relay_domains = tiddy.com

  #mydestination = tiddy.com

  ##################### 启用SASL Auth ########################

  # 设定 Postfix 使用 SASL 认证。

  smtpd_sasl_auth_enable = yes

  # 设定 SASL 支持非标准 E-mail Client 的认证动作。

  broken_sasl_auth_clients = yes

  # 不使用 ANONYMOUS 这个认证。

  smtpd_sasl_security_options = noanonymous

  # 对收件人,发件人的限制(允许授权认证用户,本地网络用户<即mynetwork定义的网络客户端>,其他一律拒绝)

  smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject

  # 客户端限制(允许授权认证客户端,本地网络客户端<即mynetwork定义的网络客户端>,其他一律拒绝)

  smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject

  # 认证类型

  smtpd_sasl_type = dovecot

  # sasl认证路径(注意与dovecot配置文件/etc/dovecot/dovecot.conf中的socket listen内容path末端保持一致)

  smtpd_sasl_path = private/auth

  ############################### 虚拟邮箱 #####################################

  # 虚拟邮箱的根路径

  virtual_mailbox_base = /var/vmail

  # 虚拟邮箱映射表

  virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

  # 虚拟网域

  virtual_mailbox_domains = tiddy.com

  # 虚拟别名映射表(用户邮箱别名,邮件群组都由该参数决定,群组也是别名的一种形式)

  virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

  # 哪些用户可以访问虚拟邮箱

  virtual_uid_maps = static:5000

  virtual_gid_maps = static:5000

  ########################### 邮件投递程序 #################################

  virtual_transport = virtual

  ########################## 邮箱容量限制################################

  #每封信的最大大小(10M),postfix的默认值为10M,但这指的是邮件正文和

  #编码后附件的总和,经过base64编码,附件的大小会增加35%左右,因此这里设定邮件大小为14M

  message_size_limit = 14336000

  # 如果使用Courier maildir++ quotas,则使用yes,默认为no

  virtual_maildir_extended = yes

  virtual_create_maildirsize = yes

  #默认邮箱大小限制

  virtual_mailbox_limit = 16000000

  #是否允许覆盖默认的邮箱大小设置。

  virtual_mailbox_limit_override = yes

  # no限制整个maildir,yes只限制inbox,默认为no

  virtual_mailbox_limit_inbox = no

  #针对每个用户的限制

  virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf

  # 这个选项在未设置’virtual_maildir_limit_message_maps’时,如果用户超出了限额的提示信息

  virtual_maildir_limit_message = Sorry, overquota

  # yes的话使用5xx错误,no使用4xx错误,邮件还是会被放入队列

  virtual_overquota_bounce = yes

  # 是否在计算限额时加上垃圾文件夹,这个选项需要virtual_trash_name配合,默认为no

  virtual_trash_count = no

  # 设置垃圾文件夹名称,默认值为:.Trash

  virtual_trash_name = “.Trash”

  17. 创建相关文件

  (1) 创建文件/etc/postfix/mysql_virtual_mailbox_maps.cf,内容如下(下面内容其实是查询数据库,具体语句涵义不再赘述):

  user = root

  password = tiddy

  hosts = localhost

  dbname = mail

  table = users

  select_field = maildir

  where_field = username

  (2) 创建文件/etc/postfix/mysql_virtual_alias_maps.cf,内容如下(下面内容其实是查询数据库,具体语句涵义不再赘述):

  user = root

  password = tiddy

  hosts = localhost

  dbname = mail

  table = alias

  select_field = goto

  where_field = address

  18. 数据库结构

  数据库名称:mail

  数据库表users( id in(8) primary key auto_increment, username varchar(50), password varchar(50), domain varchar(50), quota int(10), maildir varchar(200))

  数据库表alias( id int(8) primary key auto_increment, address varchar(100), goto varchar(5000), isgroup int(2))

  注意:

  (1) 表users中的字段maildir保存的邮件存放路径的最后一个字符'/'有无,决定了邮件的存放方式:有'/'表示以maildir方式存放,无'/'表示以mailbox方式存放

  (2) 表alias中的字段goto表示根据别名邮箱将邮件实际转发的目标邮箱,如果是群组转发,则goto字段可能保存多个邮箱地址,这些邮箱地址以分号隔开

  -----------------------------------------------------------------以上是基本邮件系统的安装及配置---------------------------------------------------------------------------------

  -----------------------------------------------------------------以下是对基本邮件系统的完善(包括杀毒和防垃圾邮件的处理)---------------------------------------------------------------------------------

  1. 安装杀毒软件(ClamAV)和防垃圾软件(SpamAssassin)及其相关依赖包

  # apt-get install libnet-dns-perl pyzor razor arj bzip2 cabextract cpio file gzip lha nomarch pax rar unrar unzip zip

  # apt-get install amavisd-new spamassassin clamav-daemon

  2. 修改用户权限

  # usermod -a -G clamav amavis

  # usermod -a -G amavis clamav

  3. 修改spamassassin配置文件/etc/default/spamassassin

  ENABLED=0 ====> ENABLED=1

  CRON=0 ====> CRON=1

  4.启动spamassassin

  # /etc/init.d/spamassassin start

  5. 修改amavis配置文件/etc/amavis/conf.d/15-content_filter_mode

  去掉如下内容注释(目的:check病毒和垃圾邮件)

  @bypass_virus_checks_maps = (

  %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);

  @bypass_spam_checks_maps = (

  %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);

  6. 修改postfix配置文件/etc/postfix/main.cf,注释掉mydestination,并添加如下内容

  # 将postfix接收到的邮件传递给amavis程序进行扫描

  content_filter = smtp-amavis:[127.0.0.1]:10024

  7. 编辑文件/etc/postfix/master.cf,在文件最后添加如下内容(注意:-o之前必须至少有两个空格,表示跟前面一行在逻辑上是一行)

  smtp-amavis unix - - - - 2 smtp

  -o smtp_data_done_timeout=1200

  -o smtp_send_xforward_command=yes

  -o disable_dns_lookups=yes

  -o max_use=20

  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_delay_reject=no

  -o smtpd_client_restrictions=permit_mynetworks,reject

  -o smtpd_helo_restrictions=

  -o smtpd_sender_restrictions=

  -o smtpd_recipient_restrictions=permit_mynetworks,reject

  -o smtpd_data_restrictions=reject_unauth_pipelining

  -o smtpd_end_of_data_restrictions=

  -o mynetworks=127.0.0.0/8

  -o smtpd_error_sleep_time=0

  -o smtpd_soft_error_limit=1001

  -o smtpd_hard_error_limit=1000

  -o smtpd_client_connection_count_limit=0

  -o smtpd_client_connection_rate_limit=0

  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

  8. 在文件/etc/postfix/master.cf中的pickup行添加如下内容(注意:-o之前必须至少有两个空格,表示跟前面一行在逻辑上是一行)

  -o content_filter=

  -o receive_override_options=no_header_body_checks

  9. 重启postfix

  # /etc/init.d/postfix reload

  10. amavis对相关邮件(病毒,垃圾邮件等)的处理方式,修改/etc/amavis/conf.d/20-debian_defaults

  关于如下参数的含义,详情请参见我的另一篇文章《邮件系统之amavisd-new的简介、安装及配置》

  $final_spam_destiny = D_BOUNCE ===> $final_spam_destiny = D_DISCARD

  $QUARANTINEDIR = "/data/virusmails";

  11. 修改/etc/amavis/conf.d/05-node_id(若不修改成如下格式,在启动邮件系统的一些软件时,在/var/log/mail.log中总是报错,且软件无法正常启动)

  $myhostname = "mail.tiddy.com";

  12. 修改/etc/amavis/conf.d/50-user,添加如下内容(注意如下内容不能添加到最后面):

  #垃圾邮件和病毒邮件将被存放的目录(该目录spam-quarantine对应/etc/amavis/conf.d/20-debian_defaults文件中的变量$QUARANTINEDIR )

  #这里的设置表示垃圾及病毒邮件的保存目录为/data/virusmails

  $spam_quarantine_to = "spam-quarantine";

  $virus_quarantine_to = "spam-quarantine";

  #黑白名单设置

  @whitelist_sender_maps = read_hash("/etc/amavis/whitelist");

  @blacklist_sender_maps = read_hash("/etc/amavis/blacklist");

  13. 在目录/etc/amavis下创建文件blacklist(黑名单)和whitelist(白名单)

  # touch /etc/amavis/whitelist

  # touch /etc/amavis/blacklist

  14. 重启所有服务

  # /etc/init.d/clamav-daemon restart

  # /etc/init.d/clamav-freshclam restart

  # /etc/init.d/spamassassin restart

  # /etc/init.d/amavis restart

  # /etc/init.d/postfix restart

  # /etc/init.d/dovecot restart

时间: 2025-01-21 02:16:19

搭建完整邮件系统(postfix+dovecot+clamAV+Spamassassin+amavisd-new)的相关文章

postfix 邮件系统中dovecot的pop3 服务客户端无法接受邮件的问题

最近遇到了postfix 邮件系统中dovecot的pop3 服务客户端无法接受邮件的问题,在邮件的日志中是这样记录的 如下图所示: 报告不能打开邮箱,内部错误. 使用vi编辑器打开 邮箱查看vi /var/mail/info  看到第一行是空的,删除这个空行,保存之后再尝试收取邮件,结果顺利的收下邮件. 看了一些别人的介绍,可能的原因是dovecot的版本过低,升级之后就不会再出现的. 由于当前的业务关系,暂时不能升级,等到业务低峰期的时候在考虑升级. 本文出自 "影子骑士" 博客,

能否利用Hadoop搭建完整的云计算平台?

Hadoop并不完全代表云计算,所以,要用Hadoop搭建完整的云计算平台,答案是不够.我们常说云计算,实际上还是通过计算机的大规模或者说海量处理来为生活中各式各样的人和各行各业服务--所以,核心在"服务".关于服务,展开来就是常用的那3种(也是事实上的标准):SaaS,PaaS,IaaS.对云计算来说,公有和私有,虚拟和存储,这其实是相对讨论的核心. 回头说Hadoop.在Google三大论文的直接刺激下,Hadoop社区兴起,而在众多的开源实现中,Hadoop(主项目)可以说是所有

RHCE学习&lt;8&gt;Postfix+Dovecot+ExtMail构建企业邮件系统

一.电子邮件基本概念 邮件系统角色 MUA(mial user agent):使用的邮件客户端,使用IMAP或POP3协议与服务器通信. MTA(mial transfer agent):Email的服务器端程序,通过SMTP发送.转发邮件. MDA(mail deliver(发送) agent):将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描. MRA(mail receive(接受) agent)负责实现IMAP与POP3协议,与MUA进行交互. 常用MUA:outl

iRedMail停用Amavisd+ClamAV+SpamAssassin

如果希望停用杀毒和发垃圾的功能,编辑/etc/postfix/main.cf 文件,到把最底下的这行注释掉 content_filter = smtp-amavis:[127.0.0.1]:10024 这个时候,postfix接收到的邮件,就不会再交给amavis处理,就可以把amavisd, clamd, freshclam服务停止.不过要注意的是这个时候DKIM的功能,也是无法使用,因为iredmail的DKIM是通过amavis来实现的. rolaod postifx服务 #update-

centos 6.4 x64 postfix 邮件系统 和 dovecot pop3的设置

首先MX解析 A记录 mxdomain 188.188.188.188 MX @ mxdomain.xxx.com //postfix 2.6.6 yum install postfix vi /etc/postfix/main.cf myhostname = mxdomain.xxx.com mydomain = xxx.com myorigin = $mydomain //@后面的域名 . inet_interfaces = all //接受来自所有网络的请求 mydestination =

Centos 6 搭建邮箱服务器教程(Postfix, Dovecot和 MySQL)

Postfix(邮箱服务器)是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试.Postfix试图更快.更容易管理.更安全,同时还与sendmail保持足够的兼容性. 本教程旨在配置postfix,并用Dovecot提供IMAP/POP3服务,用mysql存储数据. 登录服务器主机(ssh root@域名|ip地址) 安装需要的包 1.首先更新安装源 yum update 2. Centos6自带的Postfix不支持mysql,所以要从CentOS Plus库安

centos 6.0安装Postfix+dovecot+sasl+openwebmail+httpd+bind

postfix ,但是它只是一个 smtp server ,要配置完整的 mail 还要有个 pop3/imap ,在这里我选择了 dovecot ,原因是比较新,更重要的是,它有很多安全配置功能. 很多 C/S 的协议是没有验证能力的,或者说验证能力很弱.所以我们要找个专业的加强用户验证功能的软件,这个软件就是 Cyrus SASL 即简单的认证机制.在网上用 LDAP 的人也很多,因为公司网络没有其他要用 LDAP 认证的,所以我没有用这个,以后会出现在补充文档里. SASL 密码加密库 <

DedeCMS网站搭建完整教程

中介交易 SEO诊断 淘宝客 云主机 技术大厅 今天在这里我们学习下如何使用DedeCMS系统搭建一个自己的网站,这里我们结合一个实例来具体说明网站的整个搭建的流程,并结合一些基本的技术讲解进一步阐述DedeCMS系统用于网建的强大之处. 在学习搭建网站之前,我们需要了解网站建设的几个大步骤:1.网站规划:2.页面设计:3.服务器购买:4.制作模板:5.网站调试:6.网站运营.这几个步骤是一个平面的介绍,网站搭建的正规步骤大致如此,但辨别这些网站的好坏还是需要通过每个过程的深度来. 1.网站规划

Posty —— Postfix 和 Dovecot 的管理工具

Posty 详细介绍 Posty 是一款基于 Web 的 Postfix & Dovecot 管理工具,功能模块包括:API.CLI 和 WebUI. API 方法: Domains: GET - http://API-URL/api/v1/domains - get all domains GET - http://API-URL/api/v1/domains/{name} - get {name} domain POST - http://API-URL/api/v1/domains - c