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