postfix邮件系统

Funcity mail system 运维部Postfix mail system一、

Funcity mail system 运维部

Postfix mail system

一、 所需软件包 . .......................................................... 2

二.查看系统的AMP 环境是否搭建好,建议关闭selinux ........................... 3

三、安装BerkeleyDB (BerkeleyDB ,在配置虚拟域后并没有用到可跳过) ............ 3

四、安装Postfix ............................................................. 4

五、安装courier-authlib ..................................................... 5

编辑/etc/ authmysqlrc文件,并将其内容清空,然后增加如下内容: ........... 5

六、编译安装cyrus-sasl ...................................................... 6

smtp 测试 ................................................................ 8

七、安装courier-imap ........................................................ 9

1) 配置Courier-IMAP ,为用户提供pop3服务: ............................. 9

2) 设置Courier-IMAP 开机自动运行: . ..................................... 9

八、安装maildrop ............................................................ 9

编辑master.cf .......................................................... 10

编辑main.cf ............................................................ 10

更改/usr/sbin/suexec文件权限 ........................................... 11

查看 suexec . ............................................................ 11

九、extmail extman . ......................................................... 13

十、启动相关程序并将其加入启动项,一个具有收发功能的mail server到至设置完毕 14

十一、下面介绍使用 foxmail,outlook 收发邮件 ................................ 14

十二、收邮件测试 . ........................................................... 15

POP 测试 ................................................................ 15

IMAP 测试 ............................................................... 15

本地域名与虚拟域名冲突 . ................................................. 15

十三、配置Mailgraph_ext .................................................... 15

1

,

Funcity mail system 运维部

(注:绿色部分可以跳过不执行,红色部分请注意)

邮件系统搭建之前确定DNS 的一条MX 记录和一条A 记录指向mail server

注意MX 记录,与A 记录的指向mail server如果不用A 记录用ip 直接访问应该也可以

1)#dig mm.qeedoo.com mx

2)#nslookup

>set q=mx

>mm.qeedoo.com

一、所需软件包

1) 环境(LAMP )linux apache mysql php本文均采用redhat (AS 4)自带的软件包安装

2)其它rpm 包(基本的gd 库gdbm jpeg zlib png freetype quote 一般会默认安装如果系统为定制请检查下)下面三个包中的pcre 请特别注意下一般不会默认安装

·ldap

[root@localhost ~]# rpm -qa|grep ldap

python-ldap-2.2.0-2.1

openldap-2.3.43-3.el5

openldap-clients-2.3.43-3.el5

nss_ldap-253-17.el5

·sasl

[root@localhost ~]# rpm -qa|grep sasl

cyrus-sasl-2.1.22-4

cyrus-sasl-plain-2.1.22-4

cyrus-sasl-lib-2.1.22-4

·pcre

[root@localhost ~]# rpm -qa|grep pcre

pcre-6.6-2.el5_1.7

pcre-devel-6.6-2.el5_1.7

·libdbi

·libdbi-drivers

·libdbi-dbd-mysql

·openssl

3) 编译使用的tar 包

a)

·courier-imap

·ourier-authlib

·maildrop

上述三个包均可从下面地址下载 http://www.courier-mta.org/download.php

b)

·postfix

可从下面地址下载postfix 需要手动编译支持mysql ,一般系统自带的postfix 不支持mysql http://www.postfix.org/

c)

·extmail

2

,

Funcity mail system 运维部

·extman http://www.extmail.org

d )

Unix-Syslog http://search.cpan.org/~mharnisch/Unix-Syslog-1.1/Syslog.pm

e)

BerkeleyDB http://www.oracle.com/technology/products/berkeley-db/index.html

二.查看系统的AMP 环境是否搭建好,建议关闭selinux

1)/etc/sysconfig/selinux

SELINUX=disabled

Disable 掉后需要重启系统

2)如果使用了selinux 使用ls 查看文件相关设置,一般http 需要访问的需要带有httpd_sys_content_t字段,如果文件通过web 界面执行后发现web 程序执行有问题请查看message 和http 的error.log 两日志文件判断是否是由于selinux 的开启所造成的

[root@localhost ~]# ls -laZ /var/www/

drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 .

drwxr-xr-x root root system_u:object_r:var_t:s0 ..

drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 error

drwxr-xr-x root root extsuite

drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 html

drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 icons

3)如果是selinux 所造成的,但又暂时不能关闭selinux, 或者使用网上所说的不重启关闭时,一时无法解决时,即要根据能访问的目录来设置策略字段

[root@localhost html]# chcon -R -t httpd_sys_content_t /var/www/mail/

再查看策略字段,一般/var/www目录下的不需要设置,在该目录添加时会自动加上策略,注意mail 的存放目录/var/mailbox的selinux 策略

[root@localhost ~]# ls -laZ /var/www/mail

三、安装BerkeleyDB (BerkeleyDB ,在配置虚拟域后并没有用到可跳过)

[root@localhost ~]# cd db-4.7.25/build_unix/

[root@localhost build_unix]# ../dist/configure --prefix=/usr/local/BerkeleyDB&& make && make install

[root@localhost build_unix]# mv /usr/include/db4 /usr/inculde/db4.OFF

[root@localhost build_unix]# rm -rf /usr/include/db_cxx.h /usr/include/db.h /usr/include/db_185.h

[root@localhost build_unix]# ln -sv /usr/local/BerkeleyDB/include /usr/include/db4

[root@localhost build_unix]# ln -sv /usr/local/BerkeleyDB/include/db.h /usr/include/db.h

[root@localhost build_unix]# ln -sv /usr/local/BerkeleyDB/include/db_cxx.h 3

,

Funcity mail system 运维部

/usr/include/db_cxx.h

配置库文件搜索路径

[root@localhost build_unix]# echo "/usr/local/BerkeleyDB/lib" >> /etc/ld.so.conf

[root@localhost build_unix]# ldconfig -v

四、安装Postfix

如postfix rpm已安装把它删除掉进行编译安装

a)postfix 帐户

[root@localhost ~]# adduser postfix -s /sbin/nologin

重新添加postfix 帐户,注意postfix 的UID 必须大于500因为我是使用它来执行apache suexec 权限的,此要求执行帐户为普通帐户即uid 500以上

b) 编译安装

[root@localhost postfix-2.6.5]# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -I/usr/local/BerkeleyDB/include -DUSE_TLS -I/usr/include/openssl ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2/lib -lsasl2 -L/usr/local/BerkeleyDB/lib -L/usr/lib/ssl/lib -lssl -lcrypto'

[root@localhost postfix-2.6.5]# make && make install

进行安装时全部使用默认选项

生成别名二进制文件,这个步骤如果忽略,会造成postfix 效率极低:

[root@localhost postfix-2.6.5]# newaliases

进行一些基本配置,测试启动postfix 并进行发信

#vi /etc/postfix/main.cf

修改以下几项为您需要的配置

myhostname = test.com

myorigin = test.com

mydomain = test.com

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

使用虚拟域时绿色部分文字需要注释掉

inet_interfaces = all开启允许所有网络访问

说明:

myorigin 参数用来指明发件人所在的域名;

mydestination 参数指定postfix 接收邮件时收件人的域名,即您的postfix 系统要接收到哪个域名的邮件;

myhostname 参数指定运行postfix 邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;

mydomain 参数指定您的域名,默认情况下,postfix 将myhostname 的第一部分删除而作为mydomain 的值;

mynetworks 参数指定你所在的网络的网络地址,postfix 系统根据其值来区别用户是远程的还是本地的

inet_interfaces 参数指定postfix 系统监听的网络接口;

注意:

1、在postfix 的配置文件中,参数行和注释行是不能处在同一行中的;

4

,

Funcity mail system 运维部

2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;

3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix ;

4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix 会把第一个字符为空格或tab 的文本行视为上一行的延续;

五、安装courier-authlib

[root@localhost ~]# tar jxvf courier-authlib-0.62.4.tar.bz2

[root@localhost courier-authlib-0.62.4]#./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --sysconfdir=/etc --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/lib/mysql --with-mysql-includes=/usr/include/mysql --with-redhat --with-mailuser=postfix --with-mailgroup=postfix --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc CFLAGS="-march=i686 -O2 -fexpensive-optimizations" CXXFLAGS="-march=i686 -O2 -fexpensive-optimizations"

注意redhat 安装时需要--with-redhat 选项

[root@localhost courier-authlib-0.62.4]# make && make install&& make install-migrate&& make install-configure

chmod 755 /usr/local/courier-authlib/var/spool/authdaemon

cp /etc/authdaemonrc.dist /etc/authdaemonrc

cp /etc/authmysqlrc.dist /etc/authmysqlrc

cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib

chmod 755 /etc/rc.d/init.d/courier-authlib

chkconfig --add courier-authlib

chkconfig courier-authlib on

echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf ldconfig

ldconfig –v

service courier-authlib start启动服务

[root@localhost ~]# vi /etc/authmysqlrc

[root@localhost ~]# echo "" > /etc/authmysqlrc

[root@localhost ~]# vi /etc/authmysqlrc

编辑/etc/ authmysqlrc文件,并将其内容清空,然后增加如下内容:

MYSQL_SERVER localhost

MYSQL_USERNAME extmail

MYSQL_PASSWORD extmail

MYSQL_SOCKET /var/lib/mysql/mysql.sock

5

,

Funcity mail system 运维部

MYSQL_PORT 3306

MYSQL_OPT 0

MYSQL_DATABASE extmail

MYSQL_USER_TABLE mailbox

MYSQL_CRYPT_PWFIELD password

MYSQL_UID_FIELD 501

MYSQL_GID_FIELD 501

MYSQL_LOGIN_FIELD username

MYSQL_HOME_FIELD homedir

MYSQL_NAME_FIELD name

MYSQL_MAILDIR_FIELD maildir

MYSQL_QUOTA_FIELD quota

MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber, CONCAT('/var/mailbox/',homedir), CONCAT('/var/mailbox/',maildir), quota, name FROM mailbox WHERE username = '$(local_part)@$(domain)'

红色部分需要根据情况更改,我这里的用户是直接用postfix 所以UID ,GID 均是postfix 的,目录是/var/mailbox下

六、编译安装cyrus-sasl

自带的cyrus-sasl 不支持authdaemon 连接mysql 进行帐户认证

下载地址 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cyrus-sasl.html

删掉原来的sasl 目录,因为编译postfix 曾指定sasl2的lib 目录为/usr/lib/sasl2/,在编译好sasl 后需要做个链接到/usr/lib/sasl2

[root@s2 cyrus-sasl-2.1.22]# export LDFLAGS="-lpthread"

[root@s2 cyrus-sasl-2.1.22]# ./configure --with-mysql --enable-anon --enable-plain --enable-login --disable-krb4 --disable-otp --disable-cram --disable-digest --disable-gssapi --with-pam --with-authdaemond

[root@s2 cyrus-sasl-2.1.22]# make&& make install

[root@s2 cyrus-sasl-2.1.22]# rm -rf /usr/lib/sasl

[root@s2 cyrus-sasl-2.1.22]# rm -rf /usr/lib/sasl2

[root@s2 cyrus-sasl-2.1.22]# echo "/usr/local/lib" >> /etc/ld.so.conf

[root@s2 cyrus-sasl-2.1.22]ln -s /usr/local/lib/sasl2/ /usr/lib/

[root@s2 cyrus-sasl-2.1.22]# ldconfig

[root@s2 usr]# ldconfig -v

[root@s2 usr]# vi /etc/ld.so.conf

Smtpd.conf 的认证方法还有courier-authlib 的socket 这两个得注意,如果选择了pam 什 6

,

Funcity mail system 运维部

么的认证方法那请跟着那文章一直走下去吧

[root@s2 sasl2]# vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: authdaemond

authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket mech_list: PLAIN LOGIN

log_level: 3

#pwcheck_method: saslauthd

[root@localhost ~]# vi /etc/postfix/main.cf

##############SASL####################

smtpd_sasl_security_options = noanonymous

smtpd_sasl_auth_enable = yes

smtpd_sasl2_auth_enable = yes

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =

permit_mynetworks,

permit_sasl_authenticated,

reject_unknown_sender_domain,

reject_non_fqdn_sender,

reject_non_fqdn_recipient,

reject_unknown_recipient_domain,

reject_unauth_pipelining,

reject_unauth_destination,

permit

mysql:/etc/postfix/mysql_virtual_sender_maps.cf,

mysql:/etc/postfix/mysql_virtual_alias_maps.cf

smtpd_reject_unlisted_sender = yes

smtpd_sender_restrictions =

# reject_sender_login_mismatch,

# reject_authenticated_sender_login_mismatch,

# reject_unauthenticated_sender_login_mismatch

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

注:

smtpd_sasl_security_options = noanonymous 这个选项与outlook 有关如果没有使用这个可能会造成outlook 使用不正常

mysql:/etc/postfix/mysql_virtual_sender_maps.cf,

mysql:/etc/postfix/mysql_virtual_alias_maps.cf

这两个是用来连接数据库进进发送用的

7

,

Funcity mail system 运维部

后面的几个掉是因为

[root@s2~]#postmap -q

mysql:/etc/postfix/mysql_virtual_sender_maps.cf wjh@test.com

查看/etc/postfix/mysql_virtual_sender_maps.cf语句有没有问题,或返回值

/etc/init.d/saslauthd 这个服务不要启动,因为postfix 只是用到里面的一些库文件之类的

重启服务courier-authlib 与postfix 后测试:

通过以下命令获得test@test.com的用户名及密码的BASE64编码:

perl -e 'use MIME::Base64; print encode_base64("wjh@mm.qeedoo.com")'

d2poQG1tLnFlZWRvby5jb20=

perl -e 'use MIME::Base64; print encode_base64("wjh")'

d2po

smtp 测试

telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.xsbn.net ESMTP Postfix

auth login

334 VXNlcm5hbWU6

dGVzdEBkYW95b3UuY29t

334 UGFzc3dvcmQ6

dGVzdA==

235 Authentication successful

quit

221 Bye

Vi /etc/authdaemonrc

DEBUG_LOGIN=2 原来默认是打开日志信息

[root@s2 ~]# vi /etc/syslog.conf

*.debug /var/log/debug.log

打开debug 日志文件 wjh@test.com

8

,

Funcity mail system 运维部

然后看看/var/log/maillog 在认证失败时有什么提示。

/var/log/debug.log

七、安装courier-imap

[root@localhost courier-imap-4.6.0]# ./configure --prefix=/usr/local/courier-imap --with-trashquota --without-ipv6 --with-redhat --enable-unicode=utf-8,iso-8859-1,gb2312,big5 --disable-root-check CPPFLAGS='-I/usr/include/openssl -I/usr/local/courier-authlib/include' LDFLAGS='-L/usr/local/courier-authlib/lib/courier-authlib -L/usr/lib' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'

CHOST="i686-pc-linux-gnu" CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer" CXXFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer"

[root@localhost courier-imap-4.6.0]# make && make install && make install-configure

1) 配置Courier-IMAP ,为用户提供pop3服务:

vi /usr/local/courier-imap/etc/pop3d

POP3DSTART=yes

#DEFDOMAIN="@test.com"此句使用客户端软件登录时,直接使用用户名登录即可,但这得配置smtp 服务一起使用如果smtp 不能直接使用用户名登录使用时这选项最好别用

提供imap 服务

[root@localhost courier-imap-4.6.0]# vi /usr/local/courier-imap/etc/imapd IMAPDSTART=YES

2) 设置Courier-IMAP 开机自动运行:

cp courier-imap.sysvinit /etc/rc.d/init.d/imap

chmod x /etc/rc.d/init.d/imap

chkconfig --add imap

service imap start

注:如果你想为用户提供IMAP 服务,可以在“/usr/local/courier-imap/etc/imapd”文件中设置“IMAPDSTART=yes”。

八、安装maildrop

[root@localhost maildrop-1.7.0]# ./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root postfix' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=502--enable-maildrop-gid=502 --with-trashquota --with-dirsync

这里直接使用postfix 用户,安装时可以考虑添加vuser,vgroup 等虚拟用户虚拟组替换 9

,

Funcity mail system 运维部

postfix

[root@localhost maildrop-1.7.0]# make&& make install

[root@localhost maildrop-1.7.0]# vi /etc/maildroprc

logfile "/var/log/maildrop.log"

[root@localhost maildrop-1.7.0]# touch /var/log/maildrop.log

[root@localhost maildrop-1.7.0]# chown postfix.postfix /var/log/maildrop.log

[root@localhost maildrop-1.7.0]# maildrop –v

配置Postfix

编辑master.cf

# vi /etc/postfix/master.cf

启用如下两行

maildrop unix - n n - - pipe

flags=DRhu user=postfix argv=/usr/local/bin/maildrop -d ${recipient}

注意:定义transport 的时候,即如上两行中的第二行,其参数行必须以空格开头,否则会出错。

编辑main.cf

# vi /etc/postfix/main.cf

####################Virtual Mailbox Settings########################

virtual_mailbox_base = /var/mailbox

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_alias_domains =

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

virtual_uid_maps = static:502

virtual_gid_maps = static:502

#virtual_transport = virtual

mailbox_command = maildrop

maildrop_destination_recipient_limit = 1

maildrop_destination_concurrency_limit = 1

##########################QUOTA Settings########################

message_size_limit = 14336000

virtual_mailbox_limit = 20971520

virtual_create_maildirsize = yes

virtual_mailbox_extended = yes

virtual_mailbox_limit_maps =

mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf

virtual_mailbox_limit_override = yes

virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.

virtual_overquota_bounce = yes

10

标签: