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

renqiangguo

renqiangguo

2016-03-31 16:06

下面图老师小编要向大家介绍下搭建完整邮件系统(postfix+dovecot+clamAV+Spamassassin+amavisd-new),看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

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

   相关软件:

  1. 发送邮件 --- postfix

  2. 身份认证 --- sasl2

  3. 接收邮件 --- dovecot

  4. 防病毒邮件 --- clamAV

  5. 防垃圾邮件 --- spamassassin

  6.控制病毒及垃圾邮件扫描程序 --- amavisd-new

  ============================

  待完善的问题:

  1. 群发邮件的权限设置

  2. 用户邮箱的配额限制

  ============================

  完整邮件系统架构简介

  我们知道,一个完整的邮件系统应该包括以下几个重要功能:

  基本功能: 发送邮件、收取邮件

  安全性功能: 收发邮件的身份认证、防病毒、防垃圾

  完整的邮件系统架构流程图如下:

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

  相关软件的安装及配置

  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 {

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  # 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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  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

展开更多 50%)
分享

猜你喜欢

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

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

搭建Linux邮件网关与邮件系统

电脑入门
搭建Linux邮件网关与邮件系统

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

《功夫英雄》邮件系统

网络游戏
《功夫英雄》邮件系统

Linux下构架qmail邮件系统

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux下构架qmail邮件系统

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

中软Linux邮件系统解决方案

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
中软Linux邮件系统解决方案

U-Mail邮件系统如何同步AD管理

电脑网络
U-Mail邮件系统如何同步AD管理

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

360浏览器常见问题解答汇总

360浏览器常见问题解答汇总

windows2003上rman写入远程的方法

windows2003上rman写入远程的方法
下拉加载更多内容 ↓