码迷,mamicode.com
首页 > 其他好文 > 详细

postfix-企业邮件服务器搭建完整版

时间:2016-05-16 17:58:19      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:邮件服务器   postfix   saslauthd   dovecot   f-prot   clamav   

声明:本文为个人原创,引用请申明出处。此文在百度文库等地方上传过。百度文库ID:denhuaibo!此文最早上传于2014年。

附件提供文档下载。

postfix邮件服务器安装配置文档

 

 

 

 

 

 

目录

简介... 2

构建运行环境... 2

安装配置postfix. 5

在客户端发送邮件... 7

另一种认证更简单... 11

在客户端接收邮件... 12

邮件传输加密... 13

邮件病毒扫描... 14

广告邮件的抵挡... 19

邮件监控... 20

 

 

 

 

 

 

 

 

 

 

 

 

简介

这是一个集成项目,请仔细阅读本文档后再操作。遇到问题时请耐心检查配置和日志文件,本文档中如果没有列出相关解决方法请到网上寻求帮助吧!

本文档旨在让大家明白postfix和其它程序之间的关系,如何让他们协同工作。每种软件提供的功能,所完成何种任务。本文档不详细介绍postfix,具体详细的postfix参数和优化请参阅《POSTFIX权威指南》

这里以redhat6.4系统为例进行安装,其它系统可以根据实际情况对命令进行相应调整,配置方式不变。

redhat中默认安装了sendmail的需要先使用rpm 命令安装完postfix后卸载掉sendmail,也可以不卸载使用chkconfig sendmail off命令禁止其启动。

在此使用的是一个完整的架构,其中会用到非常多的软件,所以在进行此实验之前需要一定的linux系统基础知识才能保证成功率。

会用到的软件有:

apache 提供网页后台管理功能,可使用nginx或者其它相关程序代替。

php   postfixadmin组件提供浏览,因为postfix admin是使用php编写的网页

mysql  提供用户认证和虚拟邮件路径等数据信息

postfix 主邮件系统,提供邮件管理

postfix admin 提供邮件网页管理功能,是一个使用php编写的网页。可使用extmail代替。

cyrus-sasl  提供smtp发送邮件认证功能

pam_mysql  提供pammysql认证,与cyrus-sasl协同工作。可使用courier-authlib代替

dovecot  提供收件服务功能

Amavisd-new 邮件系统和杀毒软件之间的中介程序,负责调用杀毒软件对邮件进行病毒扫描

Clamav  一个开源的杀毒软件,另外一个比较好的是f-prot但是要收费。

总共有10个软件协同工作来构建出一套实用安全的邮件系统。以下内容是本人在部署完整个系统后发现在整个过程中费了很多的时间和经历,所以想想还是把它写下来贡献给大家学习参考。由于是事后回忆,当初也没有做笔记,所以很多在过程中遇到的错误没有记录下来实在是一个遗憾。希望大家引以为鉴,在平时工作和学习当中一定要做好笔记,特别是错误的处理过程。这里只能通过日志内容回忆一下处理的全过程供大家参考了。下面如无特殊说明,所使用的rpm包均在安装光盘中能直接找到

构建运行环境

为了方便后续操作,在安装之前有必要进行yum源的配置,然后通过光盘进行安装是比较方便的事情。所以下面从光盘安装的rpm包都使用yum命令操作,当然也可以使用rpm命令,看个人喜好了.

1apachephp安装

yum install httpd  安装apache程序

php安装:

虽然安装光盘中有phprpm包,但是只能提供一般的功能,postfixadmin中会用到两个功能是rpm包无法提供的,所以必须下载源码编译安装。否则打开网页配置时会出现如下错误,提示缺少mbstringimap组件。

  • Error: Depends on:     multibyte string - NOT FOUND
        To install multibyte string support, install php5-mbstring

  • Warning: Depends on: IMAP     functions - NOT FOUND
        To install IMAP support, install php5-imap
        Without IMAP support, you won‘t be able to create subfolders when creating     mailboxes.

 

可以到http://www.php.net/ 官网下载php的源代码,这里使用的是php-5.5.5.tar.gz当前最新版本。使用tar -zxf php-5.5.5.tar.gz解压然后编译,下面是编译的.configure选项

./configure --prefix=/usr/local/php5.5 --enable-bcmath  --enable-mbstring  --enable-sockets  --enable-zip --with-apxs2=/usr/sbin/apxs --with-libxml-dir --with-gd --with-mysql--with-mysql-sock --with-jpeg-dir --with-freetype-dir --with-gettext--with-imap --with-imap-ssl --with-kerberos

程序运行的过程中可能会出现错误,无法继续的可能。下面列出一些来:

./configure: line 8423: /usr/sbin/apxs: No such file ordirectory  请安装httpd-devel组件

configure: error: xml2-config not found  请安装libxml2-devel

configure: error: jpeglib.h not found 请安装libjpeg-turbo-devel

configure: error:png.h not found 请安装 libpng-devel

configure: error: freetype.h not found. 请安装 freetype-devel

error: utf8_mime2text() has new signature 需要安装libc-clientlibc-client-devel 可到rpmfind.net上下载

configure: error: Kerberos libraries not found. 请安装krb5-devel

configure: error: Cannot find OpenSSL‘s <evp.h>  请安装openssl-devel

其它错误,请自行网上查找答案。

如果通过,你会看到Thank you for using PHP.的这么一行,当然不一定显示在最后。

看到这个就表示成功很近了,使用make编译,然后make install安装。

默认安装完以后使用servicehttpd start就可以启动了,不需要什么配置。

可以在/var/www/html/下写一个php的测试页。

vi/var/www/html/index.php内容为:

<?php

 phpinfo();

?>

然后保存,使用浏览器输入服务器的ip地址就能看到一片php的信息。当然如果高端一点的可以使用源码进行安装,其中配置过程就比较麻烦一点。具体方式可以参考网上的文档,这里不细说。

如果php网页无法执行,只能看到文件内容请检查httpd.conf文件中是否有一下内容:

LoadModulephp5_module modules/libphp5.so

AddHandlerphp5-script .php

AddTypetext/html .php

2mysql安装配置:

   同样使用yum installmysql-server 进行安装,当然数据库就比较麻烦一点。

安装完成后使用mysql_install_db命令对数据库进行初始化,接下来就可以启动数据库了。service mysqld start 启动

/usr/bin/mysqladmin-u root password “newpassword” 修改数据库密码,然后使用service mysqld restart重新启动一次,使用mysql -u root -p 输入上面的密码后登录数据库测试是否能正常使用。

3postfixadmin安装

下载位置http://sourceforge.net/projects/postfixadmin/files/postfixadmin/目前使用的是2.3.6版本。

删除/var/www/html/index.php之前的测试文件,然后把postfixadmin-2.3.6.tar.gz解压到此处。

postfix单独创建一个数据库和帐号,是比较明智的选择,便于管理和备份。

mysql -u root -p

输入密码登录数据库

mysql> createdatabase postfix character set utf8; 创建数据库

mysql> grantall privileges on postfix.* to postfix@localhost identified by ‘youpassword‘;

vi/var/www/html/config.inc.php修改内容

$CONF[‘configured‘]= true; 打开配置功能

$CONF[‘database_type‘]= ‘mysql‘;  设置网页数据库类型

$CONF[‘database_host‘]= ‘localhost‘; 数据库主机地址

$CONF[‘database_user‘]= ‘postfix‘;  数据库账户

$CONF[‘database_password‘]= ‘postfix‘; 数据库密码

$CONF[‘database_name‘]= ‘postfix‘; 数据库名字

修改完后保存

在浏览器中输入http://192.168.4.11/setup.php如果正常就能看到

技术分享

输入一个密码点下面的按钮,会有提示要求再次编辑config.inc.php 文件输入

技术分享

修改好以后在第一项输入刚才设置的密码,第二项为管理员email地址如admin@test.com下面输入设置的密码。然后点按钮提交,这样就算设置完了。

首先新建一个域:

技术分享

然后可以新建邮箱:

技术分享

注意用户名和名字需要一模一样,否则可能会导致后面无法登录验证。具体原因不知道,如果你们明白怎么回事情,还希望发送邮件给我谢谢! denwork#qq.com#改成@

建立还邮箱地址以后还是不能发送邮件,因为没有邮件服务程序。

安装配置postfix

配置好yum源,然后通过光盘进行安装是比较方便的事情。其实redhat系统在安装完成以后就已经安装完成了。yum install postfix进行安装

主要的配置文件:

/etc/postfix/main.cf  postfix的打部分设置都在此文件中,后面会多次用到这个文件

/etc/postfix/master.cf  该文件规定了postfix每个程序的运行参数,后面也会使用到

编辑main.cf文件这里只列出修改的内容

 

myhostname =mail.test.com   输入本机的计算机名

mydestination = 因为要在下面设置virtual_mailbox_domains所以这里需要留空

mydomain = test.com    输入域名

inet_interfaces= all  运行的接口

mynetworks =192.168.4.11/32,127.0.0.1/32 设置信任的客户端地址

注释:设置虚拟邮件目录(下面的内容一样在main.cf里面)

virtual_mailbox_base= /var/mailbox   设置虚拟邮件目录

virtual_mailbox_maps= mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf 定义邮件结构,使用到的表是mailbox。里面保存了用户名密码,用户邮件的路径等。

virtual_mailbox_domains= mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf定义邮件域名。里面记录了邮件服务器可以服务的域名,可以为很多域名提供邮件服务。

virtual_alias_maps= mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf  定义邮件别名,比如每个部门有一个名字对应了整个部门所有的员工邮件地址。

virtual_minimum_uid= 48 因为是网页上面对其进行操作,所以这里的uidgid需要是apahce的用户id,可以在/etc/passwd文件中查看,或者使用id apache命令查看。

virtual_uid_maps= static:48 同上

virtual_gid_maps= static:48 同上

virtual_transport= virtual 传输类型当然是virtual

message_size_limit= 41720000  允许发送的最大邮件大小,注意这里不是附件而是整个邮件的大小。单位为Byte

mailbox_size_limit= 209715200  定义邮件可以使用的空间

virtual_mailbox_limit= 209715200 定义虚拟邮件可以使用的空间

virtual_create_maildirsize= yes

virtual_mailbox_extended= yes

virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf用来定义设置邮箱容量,有了上面的两个项可以不使用。

virtual_mailbox_limit_override= yes

virtual_maildir_limit_message= Sorry, the user’s maildir has overdrawn his disspace quota, please try againlater.

virtual_overquota_bounce= yes

==============================main.cf=========================================

上面main.cf文件中还有几个cf的文件,如

mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf意思是需要在/etc/postfix/mysql 目录下创建mysql_virtual_mailbox_maps.cf的文件,下面就给出这几个文件的内容。

/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf

user = postfix  填写数据库账户

password = postfix 数据库密码

hosts = localhost  数据库地址

dbname = postfix  数据库名

table = mailbox   使用的表

select_field = maildir  关键字

where_field = username 条件

上面的动作完成使用账户密码等内容登录数据库,然后执行use postfix; select maildir from mailbox where username=”test@test.com”;得到的结果是这个邮件用户保存邮件的相对main.cf配置文件中virtual_mailbox_base = /var/mailbox选项设置的路径加上查询的结果。比如邮件名为test@test.com的用户邮件路径为/var/mailbox/test@test.com/。告诉postfix程序保存邮件的具体位置,下面其它类似文件的作用也是如此。就不做一一讲解了。

mysql_virtual_domains_maps.cf内容:

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = domain

select_field = domain

where_field = domain

mysql_virtual_alias_maps.cf内容:

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = alias

select_field = goto

where_field = address

mysql_virtual_mailbox_limit_maps.cf内容:

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = mailbox

select_field = quota

where_field = username

=================================关于数据库的设置文件完========================

还需要对master.cf文件进行设置,上面就写过这个文件是对postfix的各个程序进行控制,所以后面的收发文件、病毒查杀等程序都是在这个文件中设置。添加一行:

smtps    inet  n       -      n       -       -      smtpd

 

到这里postfix基本就可以搭配postfixadmin进行收发邮件了。但是这尽限于本机,还无法像其它客户端一样通过网页或者outlook等客户端进行收发邮件。

postfix进行测试,使用service postfix start命令启动程序。这里需要注意,就算显示OK也需要查看一下/var/log/maillog文件中是否有错误。否则还是会不成功的。

telnet 127.0.0.1 25可以测试postfix是否正常。

输入ehlo local

mail from:test@test.com

rcpt to:main@test.com

data

   “输入邮件内容”

  . 输入一个点结束编辑

250 2.0.0 Ok: queued as 2AE65203D6 出现类似内容代表邮件已经发出了。

在客户端发送邮件

经过上面的设置后,就可以发送邮件了。如果要达到使用foxmail或者outlook客户端进行邮件的收发还需要进行下一步配置,就是登录邮件服务器的验证。

启用stmpd程序的认证,这个认证的目的是可以使用客户端登录邮件服务器发送邮件,如果需要收邮件还需要另外一个程序。

常常使用saslauthd来进行程序认证,需要安装如下rpm包:

cyrus-sasl-libcyrus-sasl-develcyrus-sasl-plaincyrus-sasl-md5cyrus-sasl

编辑/etc/sasl2/smtpd.conf配置文件:

pwcheck_method:saslauthd 认证程序

log_level: 3 日志级别

mech_list: plainlogin 提供的认证类型

saslauthd_path:/var/run/saslauthd/mux 执行程序的socket文件默认为此位置

这里更正一下网上的内容,很多网站上面写的都是一样的,各个网站互相复制内容。导致结果全是错误的根本无法提供验证。后来找到一个方法,就是使用pam_mysql模块为sasl程序提供pam的验证功能达到验证的目的。

下载pam_mysql源代码。http://download.chinaunix.net/download/0008000/7820.shtml在网上找到的链接,只能保证暂时有效。大家可以去网上搜索。我目前找到的最高版本pam_mysql-0.7RC1.tar.gz

使用如下命令进行编译安装。

./configure--with-openssl=/usr/include/openssl/ --with-mysql=/usr  --with-pam=/usr  --with-cyrus-sasl=/usr/include/sasl/

在配置程序运行的过程中会提示没有pam的头文件,需要安装pam-develmysql-devel

其中由于需要md5支持,需要把/usr/include/openssl/md5.h文件拷贝到/usr/include/md5.h下才能编译成功。如果没有这个文件需要安装openssl-devel

然后make &&make install 编译并安装

把编译好的模块cp/usr/lib/security/pam_mysql.* /lib/security/目录下

编辑PAM模块,让smtp程序能调用pam进行mysql数据库认证,使用vi 打开/etc/pam.d/smtp.postfix删除原来的两项内容,添加以下两项内容:

auth sufficientpam_mysql.so user=postfix passwd=postfix host=localhost db=postfixtable=mailbox usercolumn=name passwdcolumn=password crypt=1 4

account  required pam_mysql.so  user=postfix  passwd=postfix  host=localhost  db=postfix table=mailbox usercolumn=name passwdcolumn=password crypt=1 4

以上参数的解释和其它参数请查看程序编译目录的README文件。

除了上面的配置以外还需要在/etc/postfix/main.cf配置文件中添加以下内容:

broken_sasl_auth_clients= yes 启用sasl登录认证

smtpd_recipient_restrictions=

        permit_mynetworks 允许mynetworks选项中的主机

        permit_sasl_authenticated 允许通过sasl_authenticated认证的主机

        reject_invalid_hostname  拒绝未知主机名

        reject_unknown_sender_domain 拒绝未知的发送域名

        reject_non_fqdn_sender  

        reject_non_fqdn_recipient

        reject_unknown_recipient_domain

        reject_unauth_pipelining

        reject_unauth_destination

这里设置允许和拒绝的内容。其它未说明或者没有设置的内容可去网上查看其用法,其选项还有很多。

smtpd_sasl_auth_enable= yes

smtpd_sasl_path= smtpd

smtpd_sasl_local_domain= $myhostname

smtpd_sasl_security_options= noanonymous

smtpd_banner =Welcome to our $myhostname ESMTP,Warning: Version Available!

 

 

调试方法:

配置好上面的配置文件以后重新启动postfix,使用telnet127.0.0.1 25进行调试,以下是调试内容:

[root@localhostlog]# telnet 127.0.0.1 25

Trying127.0.0.1...

Connected to127.0.0.1.

Escape characteris ‘^]‘.

220 Welcome toour localhost.localdomain ESMTP,Warning: Version Available!  这里显示的内容是上面main.cfsmtpd_banner= Welcome to our $myhostname ESMTP,Warning: Version Available!的信息。

ehlo local 查看服务器支持的信息。

250-localhost.localdomain

250-PIPELINING

250-SIZE41720000

250-VRFY

250-ETRN

250-AUTH PLAINLOGIN

250-AUTH=PLAINLOGIN   显示这两项说明支持plain login认证

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

auth login  使用login认证方式

334 VXNlcm5hbWU6  提示输入用户名

dGVzdEB0ZXN0LmNvbQ==

334 UGFzc3dvcmQ6  提示输入密码

cmVkaGF0

235 2.7.0 Authenticationsuccessful  出现这个表示认证成功。

上面输入的密码是通过命令编码后的内容,在shell命令行中输入printf  ”test@test.com” | openssl base 64,然后就能看到了,密码也是如此。同时可以在日志里面查看认证过程,涉及到的日志文件有/var/log/maillog, /var/log/message, /var/log/secure, 如果其中的内容都不能判断是什么错误的话,那么请启用mysql的详细日志。进入mysql 使用show variables like "%general_log%";语句进行查看,如果|general_log      | OFF,那么set globalgeneral_log=1;语句开启,并在上一条语句中查看到的路径中文件的位置进行查看。然后再此执行认证过程,看是否mysql参与了认证过程。我在安装的时候就忘记把pam文件中原来的两行注释,造成没有通过mysql认证所以导致日志文件中总是提示认证失败没有别的错误提示。

在实际应用过程中会发现,当你使用A用户登录后以B用户的名义来寄信这也是可以的。所以必须杜绝这种情况发生。设置防止伪造发信人:

main.cf中添加

smtpd_sender_login_maps=

mysql:/etc/postfix/mysql/mysql_sender_login_maps.cf,mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf

smtpd_reject_unlisted_sender= yes

smtpd_sender_restrictions= reject_authenticated_sender_login_mismatch

smtpd_recipient_restrictions=

        reject_sender_login_mismatch

       reject_authenticated_sender_login_mismatch

修改后的smtpd_recipient_restrictions=

        permit_mynetworks

        reject_invalid_hostname

        reject_unknown_sender_domain

        reject_sender_login_mismatch

       reject_authenticated_sender_login_mismatch

                   permit_sasl_authenticated

        reject_non_fqdn_sender

        reject_non_fqdn_recipient

        reject_unknown_recipient_domain

        reject_unauth_pipelining

        reject_unauth_destination

#       reject_non_fqdn_hostname

注意这个列表的顺序,否则可能出问题。

数据库文件配置:

mysql_sender_login_maps.cf

user = postfix 

password = ps.test.com

hosts =localhost

dbname = postfix

table = mailbox

select_field =username

where_field =username

mysql_virtual_alias_maps.cf

user = postfix

password = ps.test.com

hosts =localhost

dbname = postfix

table = alias

select_field =goto

where_field =address

additional_conditions= AND active=‘1‘

配置完后重启postfix服务,再进行测试。使用A账户和密码登录,指定发件人为B <from:B邮箱地址>如果以上配置成功会出现如下类似错误:

postfix/smtpd[10220]:NOQUEUE: reject: RCPT from unknown[112.193.145.100]: 553 5.7.1 <test@test.cn>:Sender address rejected: not owned by user test@test.com; from=< test@test.cn> to=< testwork@qq.com> proto=ESMTP helo=<CV0024762TO>

另一种认证更简单

smtp.conf配置

 

pwcheck_method:authdaemond

log_level: 3

mech_list: plainlogin

srp_mda: md5

password_format:crypt

authdaemond_path:/usr/local/courier-auth/var/spool/authdaemon/socket

 

 

courier-authlib安装

./configure--sysconfdir=/etc --prefix=/usr/local/courier-auth--with-authmysqlrc=/etc/authlib/authmysqlrc--with-mysql-libs=/usr/lib/mysql/ --with-mysql-includes=/usr/include/mysql/

configure期间如果提示LibTool  ltdl库文件没找到就需要安装libtool-ltdl-devel这个软件包。

makeinstall-configure配置文件可以使用这个命令来生成

按照上面的配置安装完成后,所有的配置文件都在/etc/authlib下面。

配置authdaemonrc文件告诉程序使用mysql模块认证。

authmodulelist="authmysql"

authmodulelistorig="authmysql"

只需要修改这两项就行了。

authmysqlrc文件

 

MYSQL_SERVER            localhost  

MYSQL_USERNAME          postfix

MYSQL_PASSWORD          postfix

MYSQL_SOCKET            /var/lib/mysql/mysql.sock

MYSQL_PORT              3306

MYSQL_DATABASE          postfix 数据库名称

MYSQL_USER_TABLE        mailbox 数据库表名

MYSQL_CRYPT_PWFIELD     password 密码字段

DEFAULT_DOMAIN  test.com  服务器域名

MYSQL_UID_FIELD         89 postfix的账户ID

MYSQL_GID_FIELD         89 postfixID

MYSQL_LOGIN_FIELD       username 数据库表中带域名的字段

MYSQL_HOME_FIELD        ‘/var/mailbox/‘ 邮件存放位置,和main.cf文件中的一致

MYSQL_NAME_FIELD        name  用户名字段

MYSQL_MAILDIR_FIELD     maildir 邮件路径字段

MYSQL_WHERE_CLAUSE      active=‘1‘ 是否为激活状态

 

在编译目录下把courier-authlib.sysvinit文件复制到/etc/init.d目录下courier-authlib这样就可以使用service命令启动了。

 

 

排错:

 warning: SASL authentication failure: cannotconnect to Courier authdaemond: Permission denied

出现以上信息时,请检查/usr/local/courier-auth/var/spool/authdaemon目录的权限,请增加执行权限。

 warning: SASL authentication failure: cannotconnect to Courier authdaemond: No such file or directory

1、出现以上信息,请确认courier-authlib已经启动。

2authmysqlrcsmtp.conf文件中每行的结尾是否有空格。特别是authdaemond_path:/usr/local/courier-auth/var/spool/authdaemon/socket

3main.cf文件中smtpd_sasl_local_domain= 参数需要为空。

在客户端接收邮件

如果你通过了上面的配置,那么恭喜你。经过漫长的测试和配置过程,你的邮件服务器已经可以通过客户端发送邮件了,但是很遗憾的告诉你。到这里你也才刚刚完成了整个邮件系统建设的一半工作,只能发不能收算什么邮件系统。下面就来介绍如何使用客户端来接收别人发来的邮件。

这里使用到的软件是dovecot使用yum installdovecot进行安装,可以先查看一下包的文件结构,这样比较能知道配置文件等的位置。

首先打开/etc/dovecot/dovecot.conf,里面修改的内容有

base_dir =/var/run/dovecot/

protocol pop3

把这两行的注释去掉,

接下来是下级目录conf.d10-auth.conf配置认证方式

disable_plaintext_auth= no 支持明文传输

auth_mechanisms= plain login加上认证类型

#!includeauth-system.conf.ext 注释掉这行

!includeauth-sql.conf.ext  取消这样的注释。打开使用sql认证的功能

10-mail.conf配置mail的存放路径。

找到mail_location的行,添加mail_location= maildir:/var/mailbox/%n@%d/ 这里只的是mail的目录为/var/mailbox/邮箱名@域名/

first_valid_uid= 48 uid为系统的apache用户ID,这里一定要修改正确否则也会认证不成功

20-pop3.conf配置去掉pop3_uidl_format的注释。

/etc/dovecot/下新建一个配置文件dovecot-sql.conf.ext,这个文件的位置取决于在conf.d目录下auth-sql.conf.ext配置文件中的路径。内容如下

driver =mysql

connect =host=localhost dbname=postfix user=postfix password=postfix 数据库的链接信息

default_pass_scheme= MD5 邮件密码加密方式

password_query =SELECT password, concat(‘/var/mailbox/‘,maildir) AS home, 48 AS uid, 48 AS gidFROM mailbox WHERE username = ‘%u‘

user_query =SELECT concat(‘/var/mailbox/‘,maildir) AS home, 48 AS uid, 48 AS gid FROMmailbox WHERE username = ‘%u‘

配置完成后就可以启动dovecot服务了。servicedovecot start

测试方式也可以使用telnet127.0.0.1 110

[root@localhostconf.d]# telnet 127.0.0.1 110

Trying127.0.0.1...

Connected to127.0.0.1.

Escape characteris ‘^]‘.

+OK Dovecot ready.

usertest@test.com

+OK

pass redhat

+OK Logged in.

list

+OK 3 messages:

1 2492

2 435

3 320

如果到这里就证明认证已经可以正常使用了,如果遇到无法认证可以到maillog文件中查看日志。

在配置dovecot时总会发现日志内容不够详细,可以通过下面选项打开程序的调试日志便于程序的排错。

# 显示协议层的SSL错误

verbose_ssl = yes

# 详细的认证过程信息记录

auth_verbose = yes

# 更详细的认证调试(debug)信息

auth_debug = no

邮件传输加密

以上配置中的,密码和内容都是在网络上明文传输的,所以非常的不安全。可以启用SSL加密方式进行认证。

smtp邮件发送的加密认证:

生成ssl证书文件:

make -C/etc/pki/tls/certs smtpd.pem

mv  /etc/pki/tls/certs/smtpd.pem  /etc/postfix/

在生成证书是会提示输入一些内容,按照提示输入即可。

打开/etc/postfix/main.cf文件,添加以下内容:

#=========================postfixssl config==================

smtp_use_tls =yes

smtpd_use_tls =yes

smtp_tls_note_starttls_offer= yes

smtpd_tls_key_file= /etc/postfix/smtpd.pem

smtpd_tls_cert_file= /etc/postfix/smtpd.pem

smtpd_tls_CAfile= /etc/postfix/smtpd.pem

smtpd_tls_loglevel= 1

smtpd_tls_received_header= yes

smtpd_tls_session_cache_timeout= 3600s

打开/etc/postfix/master.cf文件:

smtps     inet n       -       n      -       -       smtpd

前面已经添加过这一项了,不过还是请确认一下。默认配置里面会有多余的两个-o选项,还请不要配置。

注意,经过测试在配置邮件客户端的时候需要选择认证加密方式。分别发送加密为tls端口还是25,收信加密为ssl端口会变成993或者995

dovecot邮件接收的加密认证:

首先配置conf.d目录下的10-auth.conf文件:

disable_plaintext_auth= yes

10-master.conf文件:

inet_listenerimap {

    port = 0 改成0.

    #port = 143

  }

inet_listener pop3{

    port = 0 改成0

    #port = 110

  }

10-ssl.conf文件:

ssl = yes

ssl_cert =</etc/pki/dovecot/certs/dovecot.pem

ssl_key =</etc/pki/dovecot/private/dovecot.pem

查看一下/etc/pki/dovecot/certs/dovecot.pem是否有此文件,如果没有此文件需要运行/usr/libexec/dovecot/mkcert.sh脚本。如果使用rpm包安装默认文件是已经存在的。

然后重新启动dovecot程序,servicedovecot restart

SSL认证登录时,使用mutt-f pops://test@test.com登录发现调试日志中的用户名是test。自动加上域名需要在10-auth.conf中配置

auth_default_realm= test.com

设置完以上内容后就可以使用客户端进行测试了,outlook或者foxmail

邮件病毒扫描

目前邮件病毒比较猖獗,如果有相关的杀毒软件放在服务器上就能保护所有的用户。现在比较好的邮件杀毒软件算是f-protclamav

配置杀毒软件需要两个软件支持,amavisdclamav 或者f-prot

其中amavisd可以在这个网站下载rpmhttp://www.ijs.si/software/amavisd/#download或者源码,这里为了方便我下载了rpm包。同时如果需要安装这个rpm包的话还需要很多的依赖包,而且有很多是在光盘中无法找到的。这些包可以到rpmfind.nethttp://pkgs.repoforge.org/ 下载。下面列出光盘中没有的包:

amavisd-new-2.8.0-1.el6.rf.i686.rpm这个包可以到官网下载

altermime-0.3.10-1.el6.rf.x86_64.rpm   perl-BerkeleyDB-0.43-1.el6.rf.x86_64.rpm

amavisd-new-2.8.0-1.el6.rf.x86_64.rpm  perl-Convert-TNEF-0.18-1.el6.rf.noarch.rpm

arc-5.21p-1.el6.rf.x86_64.rpm          perl-Convert-UUlib-1.34-1.el6.rf.x86_64.rpm

cabextract-1.4-1.el6.rf.x86_64.rpm     perl-Net-Server-0.99-1.el6.rf.noarch.rpm

freeze-2.5.0-3.el6.rf.x86_64.rpm       perl-Unix-Syslog-1.1-1.el6.rf.x86_64.rpm

lha-1.14i-19.2.2.el6.rf.x86_64.rpm     ripole-0.2.0-1.2.el6.rf.x86_64.rpm

ncompress-4.2.4-54.el6_2.1.x86_64.rpm  unarj-2.63-0.a.2.el6.rf.x86_64.rpm

nomarch-1.4-1.el6.rf.x86_64.rpm        unrar-4.2.3-1.el6.rf.x86_64.rpm

p7zip-9.20.1-1.el6.rf.x86_64.rpm       zoo-2.10-2.2.el6.rf.x86_64.rpm

使用rpm -ivh安装完所有rpm包以后就可以进行配置了。

amavisd配置很简单打开/etc/amavisd.conf文件,搜索clamav。然后去掉其中内容的注释就行了:

[‘ClamAV-clamd‘,

  \&ask_daemon, ["CONTSCAN {}\n","/tmp/clamd.socket"],

  qr/\bOK$/m, qr/\bFOUND$/m,

  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

 

[‘ClamAV-clamd-stream‘,

  \&ask_daemon, ["*", ‘clamd:/tmp/clamd.socket‘],

  qr/\bOK$/m, qr/\bFOUND$/m,

  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

/tmp/clamd.socket这个文件需要安装了clamav之后再确定正确路径。

上面是病毒引擎,还需要一些别的基本配置才可以使用。

$mydomain =   修改成你的域名

$MYHOME =   amavis的默认目录,如果是rpm安装的。应该不需要修改。

$inet_socket_port = 10024  程序监听端口

$myhostname = mail.test.com  本地主机名

$notify_method  = ‘smtp:[127.0.0.1]:10025‘;

$forward_method = ‘smtp:[127.0.0.1]:10025‘;   设置链接端口,在postfix权威指南里面说到是只扫描完邮件后通过这个端口传回给postfix处理。

下面是找到问题邮件后进行什么操作的规则

$final_virus_destiny      =D_DISCARD;   找到病毒后

$final_banned_destiny     = D_BOUNCE;  找到禁止项目

$final_spam_destiny       = D_PASS;  找到广告

$final_bad_header_destiny = D_PASS;  找到不良信件标头

操作的选项有 D_PASS  无论邮件的内容是否有问题,都发给收件人。

D_DISCARD 邮件被直接丢弃,而且不会告知收件人和发件人。

D_BOUNCE 邮件不会传给收件人,但无法传递的信息会传给发件人。

D_REJECT 邮件不会传给收件人,但发件人会收到拒绝的信息。

暂时先不要启动amavisd因为还没有安装杀毒软件,这只是一个杀毒软件与postfix之间的接口程序而已。

下面来安装clamav

下载clamav源代码,./configure --prefix=/usr/local/clamav命令进行配置安装。

安装完以后配置文件在/usr/local/clamav/etc/目录下,里面有两个默认的实例文件,把clamd.conf.sample复制一份成clamd.conf另外一个也进行类似操作,然后对文件进行修改。

clamd.conf文件配置:

#Example把这行注释掉。

LogFile /var/log/clamav/clamd.log

LogFileMaxSize 1M

LogVerbose

LogTime

LocalSocket /tmp/clamd.socket

PidFile /var/run/clamav/clamd.pid

DatabaseDirectory  /usr/local/clamav/data

MaxDirectoryRecursion 15

User amavis  默认为clamav一定要修改,否则会lstat() failed: Permission denied. ERROR\n" at (eval 113) line897.的提示信息而无法扫描。

ScanMail  yes

ScanArchive yes

上面的选项可根据实际情况调整,在配置文件中有详细的说明。

freshclam.conf文件配置:

#Example 注释掉

DatabaseDirectory /usr/local/clamav/data 和上面一样配置

UpdateLogFile /var/log/clamav/freshclam.log

LogSyslog
LogVerbose
DatabaseOwner amavis

Checks 12
DatabaseMirror db.CN.clamav.net  这里默认CNXY
DatabaseMirror database.clamav.net
NotifyClamd /usr/local/clamav/etc/clamd.conf

创建相关目录 mkdir /var/log/clamav && chown -c amavis /var/log/clamav/

mkdir /usr/local/clamav/data && chown -c amavis /usr/local/clamav/data

执行/usr/local/clamav/bin/freshclam升级病毒库。

为方便启动和管理程序方便,创建一个程序启动脚本:

vi /etc/init.d/clamd

#! /bin/bash

#

# crond Start/Stop the clam antivirusdaemon.

#

# chkconfig: 2345 90 60

# description: clamdis a standard UNIXprogram that scans for Viruses.

# processname: clamd

# config: /usr/local/etc/clamd.conf

# pidfile: /var/run/clamav/clamd.pid

 

# Source function library.

. /etc/init.d/functions

 

RETVAL=0

 

# See how we were called.

 

prog="clamd"

progdir="/usr/local/clamav/sbin"

 

# Source configuration

if [ -f /etc/sysconfig/$prog ] ; then

. /etc/sysconfig/$prog

fi

 

start() {

echo -n $"Starting $prog: "

daemon $progdir/$prog

RETVAL=$?

echo

return $RETVAL

}

 

stop() {

echo -n $"Stopping $prog: "

killproc $prog

RETVAL=$?

echo

return $RETVAL

}

 

rhstatus() {

status clamd

}

 

restart() {

stop

start

}

 

reload() {

echo -n $"Reloading clam daemonconfiguration: "

killproc clamd -HUP

retval=$?

echo

return $RETVAL

}

 

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

reload)

reload

;;

status)

rhstatus

;;

condrestart)

[ -f /var/lock/subsys/clamd ] &&restart || :

;;

*)

echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"

exit 1

esac

 

exit 0

设置 clamav 为自启动项

 

# chmod 755 /etc/init.d/clamd

# chkconfig --add clamd

# chkconfig clamd on

配置postfix,让接收的邮件都需要先经过病毒扫描后再转发给收件人。

vi /etc/postfix/main.cf在文件中添加下面一项:

content_filter = SMTP-amavis:[127.0.0.1]:10024

vi /etc/postfix/master.cf编辑文件添加以下内容:

#Set amavis

SMTP-amavis   unix - - n - 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 - n - - smtpd

       -o content_filter=

       -o smtpd_restriction_classes=

       -o smtpd_delay_reject=no

       -o smtpd_client_restrictions=permit_mynetworks,reject

       -o smtpd_helo_restrictions=

       -o smtpd_sender_restrictions=

        -osmtpd_recipient_restrictions=permit_mynetworks,reject

       -o smtpd_data_restrictions=reject_unauth_pipelining

       -o smtpd_end_of_data_restrictions=

       -o mynetworks=127.0.0.1/32

       -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 smtpd_milters=

       -o local_header_rewrite_clients=

       -o local_recipient_maps=

       -o relay_recipient_maps=

 

接下来就启动service amavisd start service clamd start。查看日志文件tail -f /var/log/clamav/clamd.log 如果有错误会在里面记录,如果没有就会出现很多OK的内容如下:

Wed Oct 23 14:52:01 2013 -> /var/amavis/tmp/amavis-20131023T135201-05949-WbGe3KJt/parts/p001:OK

Wed Oct 23 15:02:01 2013 -> SelfCheck:Database status OK.

这样就代表已经完成了。

 

广告邮件的抵挡

spamassassin是一个自动抵挡广告邮件的机制,光盘中自带有spamassassinrpm包可以安装。安装完以后对它进行一些配置就可以了。

修改vi /etc/amavisd.conf文件,$sa_tag_level_deflt  = 5.0;2改成5

修改vi /etc/mail/spamassassin/local.cf文件

required_hits 5    广告邮件评分,如果操作这个分数就被认定为广告邮件。

report_safe 0

rewrite_header Subject [SPAM]  修改邮件的标头信息

然后重新启动service amaivsd restart.就可以了。

(!!)TROUBLE in pre_loop_hook: config: norules were found!  Do you need to run‘sa-update‘?

如果报错,请启动service spamassassin start 程序然后使用sa-update -D命令对数据库进行更新。这样能保持最新的广告邮件过滤。再次启动 amavisd就可以了。

 

 

到这里一个基本合格的postfix服务器就全部搭建完成了,算是比较漫长。写这个安装文档因为怕有错误,所以又在虚拟机上经过了一次安装调试。所以可以确定按照这个文档一步步安装应该没有什么问题。可以邮件给我denwork#vip.qq.com#改成@

 

邮件监控

就目前来看很多企业已经不对员工的往来邮件进行监控了。不过有些企业保密机制比较严格,所以还是会有这方面的需要,在这里也一起做个介绍。

postfix自带有三种bcc(密送)方式:

always_bcc:将所有的邮件都备份到指定邮箱

sender_bcc_maps:将收件人包含在map文件中的邮件被分到指定邮箱

recipient_bcc_maps:将收件人包含在map文件中的邮件被分到指定邮箱

receive_override_options 这里必须增加,禁止地址展开/影射,否则如果遇到别名的时候会引起冗余邮件的产生。

master.cf文件里面也添加一条规则。

127.0.0.1:10025 inet n - n - - smtpd

     -o receive_override_options= no_address_mappings

注意上面的参数一定要有空格,否则会出错。

首先需要编辑main.cf文件

vi/etc/postfix/main.cf #增加下面两行

recipient_bcc_maps= mysql:/etc/postfix/mysql/mysql_virtual_recipient_bcc.cf

sender_bcc_maps= mysql:/etc/postfix/mysql/mysql_virtual_sender_bcc.cf

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

mysql_virtual_recipient_bcc.cf内容

user = postfix

password = pass.mail.com

hosts = localhost

dbname = postfix

table = bcc

select_field = user_bcc

where_field = recipient_bcc

mysql_virtual_sender_bcc.cf内容

user = postfix

password = pass.mail.com

hosts = localhost

dbname = postfix

table = bcc

select_field = user_bcc

where_field = sender_bcc

数据库结构(注意!这个数据库表需要自己单独创建)

mysql> select * from bcc; 

 sender_bcc      | recipient_bcc    |    user_bcc       

test1@test.com | test1@test.com | admin@test.com 

配置完成后重新启动postfix就行了。

如果使用了上面的杀毒软件,可能会造成备份邮箱收到两份一样的邮件。可以这样进行修改!

编辑master.cf文件。

复制cleanup   unix  n      -       n       -      0       cleanup这行,修改为

cleanup2  unix  n       -      n       -       0      cleanup

       -o sender_bcc_maps=

       -o recipient_bcc_maps=

127.0.0.1:10025 inet n - n - - smtpd这个行里面添加一个参数

       -o cleanup_service_name=cleanup2

这样就不会出现两份邮件了!

这里的设置方便把部门员工的邮件都备份给部门领导。如果公司比较小只需要把所有邮件都放到一个邮箱里面,那么可以这样做:

登录网页创建一个邮箱地址如:postback@test.com

编辑vi main.cf文件添加:

always_bcc = postback@test.com

receive_override_options =no_address_mappings

注意,这个选项和上面只能保存一个。否则可能会出现冗余邮件。这里比较简单的是不需要新建数据库表。

解决重复邮件的方法一样。编辑master.cf文件:

cleanup2  unix  n       -      n       -       0      cleanup

       -o always_bcc =

127.0.0.1:10025 inet n - n - - smtpd这个行里面添加一个参数

       -o cleanup_service_name=cleanup2

 


本文出自 “原创作品” 博客,谢绝转载!

postfix-企业邮件服务器搭建完整版

标签:邮件服务器   postfix   saslauthd   dovecot   f-prot   clamav   

原文地址:http://denwork.blog.51cto.com/7127597/1773813

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!