最新版POSTFIX +courier-authlib+cyrus-sasl+Courier-IMAP +maildrop +postfixadmin 安装记录
(2007年11月4日更新版)
转载请注明出处:http://windychan.cublog.cn 作者:Windy.Chan
本文参考文献有:
1,POSTFIX 2.2.10+VDA补丁+courier-authlib 0.58+cyrus-sasl 2.1.22+Courier-IMAP 4.1.1+maildrop 2.0.2+postfixadmin 2.1.0 安装记录_microsea
2,postfix all (http://marion.cublog.cn)
友请提醒I:如果你在安装或运行时出现一些错误时,请留意每部分的特别提示或集中阅读本文最后的一部所提及的常见安装/首次使用中的故障解决。
友请提醒II:本文还在反复测试验证中,不足之处,敬请原谅.
友请提醒III:本文仅供参考学习,如您按本文或本文所引用文章操作时,对您系统造成的任何损害或损失,都与本人以及本文所引用文章的作者无关。
===========================================================
系统环境:
slackware12 (6 SMP PREEMPT Tue Jan 23 00:27:40 AKST 2007 i686 unknown unknown GNU/Linux)
相关软件:
courier-authlib-0.60.2
courier-imap-4.2.1
cyrus-sasl-2.1.22 (slackware 12自带的2.1.21,建议删除)
maildrop-2.0.4
postfix-2.4.6
postfixadmin-2.1.0
Mysql 4.1.22
Apachen (httpd.2.4.4)
php-4.4.2/
可选软件:
phpMyAdmin - 2.8.0.3
===========================================================
安装前准备Postfix Mail组件前的准备:
1,邮件投递原理
推荐文章:Mail Server 的相關知識()---鳥哥的 Linux 與 ADSL 私房菜
2,安装Mysql+Apache+Php+PhpMyadmin
推荐文章: linux下面apache2.0.52+php5+gd2+mysql(http://blog.chinaunix.net/u/9951/showart_60559.html) --- 网络神话之服务器管理
首先安装msyql (我的系统中已经配置好了mysql 4.1.22,安装路径为/usr/local/mysql), 因为后面的 courier-authlib安装中需要指定认证方式为mysql,编时需要用户到libmysqlclient.so(注意下面的特别提示)。
Apache的DocumentRoot路径为: /usr/local/apache/htdocs。
1.安装courier-authlib
下载地址:
你可以通过下列地址查码安装代码:
安装时最新版本 0.60.2 release.
安装之前添加postfix和maildrop相关的用户&用户组
root@net-server:/# groupadd postfix
root@net-server:/# groupadd postdrop
root@net-server:/# useradd postfix --g postfix -G postdrop
root@net-server:/# groupadd vmail
root@net-server:/# useradd vmail -g vmail -d /home/mail
root@net-server:/# cat /etc/passwd
postfix:x:1009:1000::/home/postfix:
vmail:x:1010:1002::/home/mail:
#### 特别提示 1:这个主要是设定邮件管理帐号/进程启动帐号. 记住postfix和pstdrop组都中包含用户postfix, vmail组中包括vmail用户,你可以通过直接编/etc/group文件,把这些用户加入相关的组。同时,请记住这里的vmail的GI--1010D和UID--1002,在下面文章的多处针使用到).
root@net-server:/# mkdir /home/mail
root@net-server:/# chown vmail:vmail /home/mail
root@net-server:/# chmod -R 775 /home/mail
root@net-server:/# cd /usr/src/
root@net-server:/usr/src/# tar jvxf courier-authlib-0.60.2.tar.bz2
root@net-server:/usr/src/#cd /usr/src/courier-authlib-0.60.2
./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --without-authuserdb --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authdaemonvar=/var/spool/authdaemon --without-authcustom --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-authmysqlrc=/usr/local/courier-authlib/etc/authmysqlrc --with-mailuser=vmail --with-mailgroup=vmail --with-authdaemonrc=/usr/local/courier-authlib/etc/authdaemonrc CHOST="i686-pc-linux-gnu" CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer" CXXFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer"
(以上是同一条命令)
root@net-server:/usr/src/courier-authlib-0.60.2# make
root@net-server:/usr/src/courier-authlib-0.60.2# make install
#### 特别提示2.如果courier-authlib安装到非标准位置(例如安装到/usr/local下,我的安装路径是 /usr/local/authlib),一定记得在./configure时增加--without-stdheaderdir,这样以后在编译Courier-IMAP和maildrop的时候,不用特别指定courier-authlib的库文件位置
#### 特别提示3,检查相关软件或库文件路径,这里可能与你实际情况不同:比如 mysql-include,我的是/usr/local/mysql/include/ ,mysql-libs路径是/usr/local/mysql/lib。
#### 特别提示4,编译出现过程出现如下错误(其实我的mysql 4.1.22之前一直正常使用的):,这是因为在编译指错了--with-mysql-includes的路径。
authmysql.h:8:26: mysql.h: No such file or directory
authmysql.h:9:27: errmsg.h: No such file or directory
make[2]: *** [authmysql.lo] Error 1
make[2]: Leaving directory `/usr/src/courier-authlib-0.60.2'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/src/courier-authlib-0.60.2'
make: *** [all] Error 2
后来用locate mysql.h找到此文件在/usr/local/mysql/include/mysq/中。我也很郁闷,其它软件在编译,像这样的路径完全是可能写成/usr/local/mysql/include.不知道为什么,编译courier-authlib却不行。看来不能偷懒哦,改为--with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql 就可以了.
root@net-server:/# cd /usr/local/courier-authlib/etc/
root@net-server:/usr/local/courier-authlib/etc# cp authmysqlrc.dist authmysqlrc
root@net-server:/usr/local/courier-authlib/etc# cp authdaemonrc.dist authdaemonrc
root@net-server:/usr/local/courier-authlib/etc# vi authdaemonrc
authmodulelist="authmysql" <--使用Mysql用户认证
authmodulelistorig="authmysql" <--使用Mysql用户认证
daemons=5 <--已经存在, 没有就增加
authdaemonvar=/var/spool/authdaemon <--authlib会自己设定好此路径。非标准安装路径应为
### /var/安装目录名/spool/authdaemon
DEBUG_LOGIN=0 <--已经存在, 没有就增加, 2 为详细Debug模式,可以看更详细的日志。
DEFAULTOPTIONS="" <--已经存在, 没有就增加
LOGGEROPTS="" <--已经存在, 没有就增加
root@net-server:/usr/local/courier-authlib/etc# vi authmysqlrc
MYSQL_SERVER 192.168.1.89 <--mysql服务器名或IP地址
MYSQL_USERNAME mysql <--mysql用户名
MYSQL_PASSWORD pwd06a <--mysql用户名密码
MYSQL_SOCKET /tmp/mysql.sock1 <--mysql SOCKET,请根据你的实情而定
MYSQL_PORT 3306 <--mysql 端口号,请根据你的实情而定
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
##MYSQL_CLEAR_PWFIELD clear_password <---0.60.2 release.没有此字段,取消
MYSQL_UID_FIELD 1010 <--mysql表中, 管理authlib用户的UID.前面我们就用的vmail
MYSQL_GID_FIELD 1002 <--mysql表中, 管理authlib用户的GID.前面我们就用的vmail
### vmail---->UID:1010, GID:1002
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/home/mail/',maildir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/home/mail/',maildir)
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active='1'
启动courier-authlib
root@net-server:/# cp /usr/src/courier-authlib-0.60.2/courier-authlib.sysvinit /etc/rc.d/courier-authlib.sysvinit
root@net-server:/# /etc/rc.d/courier-authlib.sysvinit start
2.安装 cyrus-sasl-2.1.22:
[其实,在安装slackware12后,已经自动安装了,cyrus-sasl-2.1.21,强烈建议参考下文重新进行编译安装,我用的是2.1.22源包安装)
官文网址
参考下载地址:ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.22.tar.gz
删除以前的rpm包以及相关目录(我以前是安装Slackware时安装的2.1.21,只是没有按需要编译,所以我没有删除,只是手动删除了一些相关文件)
rpm -e --nodeps cyrus-sasl-2.1.15 cyrus-sasl-plain-2.1.15 cyrus-sasl-md5-2.1.15 cyrus-sasl-devel-2.1.15
rm -rf /usr/lib/sasl
rm -rf /usr/lib/sasl2
root@net-server:/# cd /usr/src/
root@net-server:/usr/src# tar xvzf cyrus-sasl-2.1.22.tar.gz
root@net-server:/usr/src# cd cyrus-sasl-2.1.22
root@net-server:/usr/src/cyrus-sasl-2.1.22#
root@net-server:/usr/src/cyrus-sasl-2.1.22# ./configure --prefix=/usr/local/cyrus-sasl --with-mysql=/usr/local/mysql --disable-sample --disable-saslauthd --disable-pwcheck --disable-cram --disable-digest --disable-krb4 --disable-gssapi --disable-anon --enable-plain --enable-login --enable-sql --disable-ntlm --disable-otp --disable-srp --disable-srp-setpass --with-authdaemond=/var/spool/authdaemon/socket --with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql
(以上是同一条命令)
root@net-server:/usr/src/cyrus-sasl-2.1.22# make
root@net-server:/usr/src/cyrus-sasl-2.1.22# make install
root@net-server:/usr/src/cyrus-sasl-2.1.22# ln -s /usr/local/cyrus-sasl/lib/sasl2 /usr/lib/sasl2
添加以下两行到"/etc/ld.so.conf",并执行ldconfig命令.
/usr/local/cyrus-sasl/lib/sasl2
/usr/local/cyrus-sasl/lib
关闭或删除下列文件,也避免与新版2.1.22中的文件混淆。
root@net-server:/# mv /usr/lib/libsasl2.a /usr/lib/libsasl2.a.OFF
root@net-server:/# mv /usr/lib/libsasl2.la /usr/lib/libsasl2.la.OFF
root@net-server:/# mv /usr/lib/libsasl2.so.2.0.19 /usr/lib/libsasl2.so.2.0.19.OFF
root@net-server:/# mv /usr/lib/sasl2 /usr/lib/sasl2.OFF
root@net-server:/# rm /usr/lib/libsasl2.so
root@net-server:/# rm /usr/lib/libsasl2.so.2
root@net-server:/# ln -sv /usr/local/cyrus-sasl/lib/* /usr/lib
postfix 2.3以后的版本(本文是安装postfix-2.4.6)会分别在/usr/local/lib和/usr/local/include中搜索sasl库文件及头文件,故还须将其链接至此目录中:
# ln -sv /usr/local/cyrus-sasl/lib/* /usr/local/lib
# ln -sv /usr/local/cyrus-sasl/include/sasl/* /usr/local/include
创建运行时需要的目录并调试启动
# mkdir -pv /var/state/saslauthd
# /usr/local/cyrus-sasl/sbin/saslauthd -a shadow pam -d
启动并测试
# /usr/local/cyrus-sasl/sbin/saslauthd -a shadow pam
# /usr/local/cyrus-sasl/sbin/testsaslauthd -u root -p root用户密码
设置开机自动启动
# echo "/usr/local/cyrus-sasl/sbin/saslauthd -a shadow pam" >>/etc/rc.d/rc.local
vi /usr/local/cyrus-sasl/lib/sasl2/smtpd.conf <----我的系统中没有此文件,locate与找不出来,我是自己建立该文件。
pwcheck_method: saslauthd
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket
注意,这个文件的编辑不要多写一个空格,否则会出现smtp验证不过的问题
3.安装postfix (我是用postfix-2.4.6)
下载地址:
root@net-server:/usr/src# tar xvzf postfix-2.4.6.tar.gz
root@net-server:/usr/src# cd postfix-2.4.6
root@net-server:/usr/src/postfix-2.4.6# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/cyrus-sasl/include/sasl/' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/cyrus-sasl/lib/sasl2 -lsasl2'
(以上是同一条命令)
root@net-server:/usr/src/postfix-2.4.6# make
root@net-server:/usr/src/postfix-2.4.6# make install
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值)
install_root: [/] /
tempdir: [/usr/local/src/ postfix-2.4.5] /tmp
config_directory: [/etc/postfix] /etc/postfix
daemon_directory: [/usr/libexec/postfix] /usr/local/postfix/libexec
command_directory: [/usr/sbin] /usr/local/postfix/sbin
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [no] /var/www/postfix_html
manpages: [/usr/local/man] /usr/local/postfix/man
readme_directory: [no]
生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低:
root@net-server:/# ln -s /etc/postfix/aliases /etc/aliases
root@net-server:/# newaliases
设定postfix, main.cf是主配置文档
root@net-server:/# vi /etc/postfix/main.cf
myhostname = mail.windychan.com <----服务器主机名
mydomain = windychan.com <----域名
myorigin = $mydomain <----我的域名
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain <# mydestination 参数指定这个机器考虑本身最终目的Domain的列表。
# These domains are routed to the delivery agent specified with the local_transport parameter setting. By default, that is the UNIX compatible delivery agent that lookups all recipients in /etc/passwd and /etc/aliases or their equivalent.
# local_transport 参量设置这些Doamin被路由到交付代理(DA )。默认情况, UNIX 兼容交付代理(DA )在/etc/passwd 和/etc/aliases 或他们的等值中查寻所有收件人。
alias_maps = hash:/etc/aliases
home_mailbox = Maildir/
mynetworks = 192.168.148.0/24, 127.0.0.0/8 <----我的网络
启动postfix
root@net-server:/# /usr/local/postfix/sbin/postfix start
可看到下列进程已经启动
root 8240 0.2 0.2 3476 1164 ? Ss 16:08 0:00 /usr/local/postfix/libexec/master
postfix 8241 0.1 0.2 3556 1148 ? S 16:08 0:00 qmgr -l -t fifo -u
postfix 8242 0.0 0.2 3516 1112 ? S 16:08 0:00 pickup -l -t fifo -u
设置开机自动启动
root@net-server:/# echo "/usr/local/postfix/sbin/postfix start " >>/etc/rc.d/rc.local
日志文件: /var/log/maillog
通常可以通过检查日志文件来解决许多问题哦.
####
4、为postfix开启基于cyrus-sasl的认证功能
使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:
root@net-server:/# /usr/local/postfix/sbin/postconf -a <---显示如下
cyrus
dovecot
root@net-server:/# /etc/postfix/main.cf
添加以下内容:
############################CYRUS-SASL I ############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_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_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
############################END CYRUS-SASL I ############################
特别提示
#########vi /usr/lib/sasl2/smtpd.conf ---<注意检查此文件的真实路径,我这样输入,是因为我在
###前面用过 ln -sv /usr/local/cyrus-sasl/lib/* /usr/lib
添加如下两行(如已经存在,就请忽略):
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
让postfix重新加载配置文件
root@net-server:/#/usr/local/postfix/sbin/postfix reload
配置Mysql项,在main.cf 中添加以下内容:
root@net-server:/# vi /etc/postfix/main.cf
#####=======MySQL===============####
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /home/mail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 102400000
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1010 <----请注意实际情况
virtual_uid_maps = static:1010 <----请注意实际情况
virtual_gid_maps = static:1002 <----请注意实际情况
virtual_transport = virtual
#"virtual_gid_maps"和"virtual_uid_maps"是vmail用户的gid和uid, "virtual_minimum_uid"应当###"virtual_uid_maps",
##"virtual_mailbox_limit"是每个邮箱的大小.
#####=======End MySQL===============####
######===============Quota================#######
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
#virtual_trash_count=yes
#virtual_trash_name=.Trash
######===============End Quota================#######
编辑cf配置文件
root@net-server:/# vi /etc/postfix/mysql_virtual_alias_maps.cf
--->注意下面的一些设定应该与 vi /usr/local/courier-authlib/etc/authmysqlrc一致
user = mysql
password = pwd06a
hosts = 192.168.148.93
dbname = postfix
table = alias
select_field = goto
where_field = address
additional_conditions = AND active = '1'
##SQL_SERVER 192.168.148.93 <---相关authmysqlrc 中的设定
##MYSQL_USERNAME mysql <---相关authmysqlrc 中的设定
##MYSQL_PASSWORD pwd06a <---相关authmysqlrc 中的设定
##MYSQL_DATABASE postfix <---相关authmysqlrc 中的设定
######===============End============#######
root@net-server:/# vi /etc/postfix/mysql_virtual_domains_maps.cf
user = mysql
password = pwd06a
hosts = 192.168.148.93
dbname = postfix
table = domain
select_field = description
where_field = domain
additional_conditions = AND active = '1'
######===============End============#######
=================================
root@net-server:/# vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mysql
password = pwd06a
hosts = 192.168.148.93
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = AND active = '1'
######===============End============#######
root@net-server:/# vi /etc/postfix/mysql_virtual_limit_maps.cf
user = mysql
password = pwd06a
hosts = 192.168.148.93
dbname = postfix
table = mailbox
select_field = quota
where_field = username
additional_conditions = AND active = '1'
######===============End============#######
启动和停止postfix服务:
root@net-server:/# /usr/local/postfix/sbin/postfix stop
root@net-server:/# /usr/local/postfix/sbin/postfix start
重启动courier-authlib 伤务:
root@net-server:/# cp /usr/src/courier-authlib-0.60.2/courier-authlib.sysvinit /etc/rc.d/courier-authlib.sysvinit ###<-----前面已经运行执过,请跳过
root@net-server:/# /etc/rc.d/courier-authlib.sysvinit restart
特别提示:在发信过程可能会出现:
May 18 16:19:51 bb06 postfix/cleanup[5371]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
处理方法:
root@net-server:/usr/local/courier-authlib/etc# vi authmysqlrc
MYSQL_SOCKET /tmp/mysql.sock1 <--设定为mysql SOCKET的真实路径,可以通过检查my.cnf得到确认。
5.编译安装安装Courier-IMAP
我选择的是courier-imap-4.2.1#
你可以通过下列地址查码安装代码:
root@net-server:/# cd /usr/src/
root@net-server:/usr/src# tar xvzf courier-imap-4.2.1.tar.gz
root@net-server:/usr/src# cd courier-imap-4.2.1
root@net-server:/usr/src/courier-imap-4.2.1# ./configure --prefix=/usr/local/courier-imap --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/local/courier-authlib/include' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
###注意,以上configure为是一条命令
特别提示:
CPPFLAGS='-I/usr/local/courier-authlib/include' 如果编译courier-authlib没有安装在默认路径,必须指定这个,如果之前编译courier-authlib加了--without-stdheaderdir,就不需要指定了.
没有加COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'会出现下列:
checking for courierauthconfig... no
configure: WARNING: === Courier authentication library not found.
configure: WARNING: === You need to download and install
configure: WARNING: === first.
configure: WARNING: === If courier-authlib is installed in a non-default
configure: WARNING: === directory, set the COURIERAUTHCONFIG environment
configure: WARNING: === variable to the full path to the courierauthconfig
configure: WARNING: === binary and rerun this configure script.
configure: WARNING:
configure: error: courierauthconfig not found
export COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig
再执行configure.
root@net-server:/usr/src/courier-imap-4.2.1#make
root@net-server:/usr/src/courier-imap-4.2.1#make install
root@net-server:/#cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd
root@net-server:/#cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl
root@net-server:/#cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d
root@net-server:/#cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl
配置Courier-IMAP,为用户提供pop3服务:
root@net-server:/#vi /usr/local/courier-imap/etc/pop3d
POP3DSTART=yes
root@net-server:/#vi /usr/local/courier-imap/etc/imapd
IMAPDSTART=YES
从源文目录中/usr/src/courier-imap-4.2.1/courier-imap.sysvinit文件复制到启动目录(/etc/rc.d/)中,生成启动文件。
root@net-server:/# cp /usr/src/courier-imap-4.2.1/courier-imap.sysvinit /etc/rc.d/rc.courier-imapd
root@net-server:/# chmod 755 /etc/rc.d/rc.courier-imapd
root@net-server:/# echo "/etc/rc.d/rc.courier-imapd start" >> /etc/rc.d/rc.local
接下来重新配置SMTP 认证,编辑 /usr/local/cyrus-sasl/lib/sasl2#/smtpd.conf ,确保其为以下内容:
pwcheck_method: saslauthd
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/var/spool/authdaemon/socket <---注意你的实际情况
现在创建邮箱(手动)。
root@net-server:/#mkdir -p /home/mail ###<----若前面已经建立,请跳过
root@net-server:/#chown vmail.vmail /home/mail ###<----若前面已经建立,请跳过
root@net-server:/#su - vmail ###<----切换到vmail用户 (当然,也可能直接用root用户完成下面
###<----3条命令行,完成之后,再用chown等命令修改其所有者就可行了).
vmail@net-server:~$ cd /home/mail
vmail@net-server:~$ mkdir windychan.com
vmail@net-server:~$ mkdir windychan.com/Maildir
root@net-server:/# cd /home/mail/windychan.com
root@net-server:/home/mail/windychan.com# /usr/local/courier-imap/bin/maildirmake jackwang
# chown -R vmail.vamil /home/mailwindychan.com/jackwang
# chmod -R g=s /home/mailwindychan.com/jackwang
6.安装maildrop
maildrop-2.0.4.tar.bz2
你可以通过下列地址查码安装代码:
目前最新版本:2.0.4
root@net-server:/usr/src# tar xvjf maildrop-2.0.4.tar.tar
root@net-server:/usr/src#ln -s /usr/local/courier-authlib/bin/courierauthconfig /usr/bin/courierauthconfig
root@net-server:/usr/src#cd maildrop-2.0.4
root@net-server:/usr/src/maildrop-2.0.4#./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail' --enable-syslog=1 --enable-maildirquota --enable-maildrop-gid=1010 --enable-maildrop-uid=1002 --with-trashquota --with-dirsync
root@net-server:/usr/src/maildrop-2.0.4# make
root@net-server:/usr/src/maildrop-2.0.4# make install
特别提示1,确认vmail用户的gid和uid, --enable-maildrop-gid=1001 --enable-maildrop-uid=1001就引用到.我这里为vmail:x:1010:1002::/home/mail:(gid=1002,uid=1010)
特别提示2,由于我们在执行configura时没有用--prefix=path,所以相关的安装文件/库文件都在
`/usr/local/bin' 和 `/usr/local/lib' 等目录. maildrop建议不要自定义目录安装,可以减少不必要的麻烦,删除很方便:直接在已经编译的源代码目录 make uninstall 就行
特别提示3,源码安装的,将courierauthconfig 命令链接到/usr/bin里,假设装在:
/usr/local/courier-authlib/bin/courierauthconfig,则:
ln -s /usr/local/courier-authlib/bin/courierauthconfig /usr/bin/courierauthconfig
这样编译出来的maildrop才会ourier Authentication Library extension enabled.
否则会出错,大概提示如下
May 19 09:19:14 bb06 postfix/pipe[8746]: 3707B298212: to=, relay=maildrop, delay=0, status=bounced (user unknown. Command output: Invalid user specified. )
May 19 09:19:14 bb06 postfix/qmgr[6106]: 3707B298212: removed
说明maildrop没有编译支持ourier Authentication Library extension enabled.
检验安装版本
root@net-server:/usr/src/maildrop-2.0.4# /usr/local/bin/maildrop -v
maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
配置main.cf和master.cf使postfix调用maildrop
========================
vi /etc/postfix/main.cf
virtual_transport = maildrop <---注意检查不要重复设定virtual_transport
maildrop_destination_recipient_limit = 1
========================
vi /etc/postfix/master.cf <----原来已经有,只要取消其注释符#就行
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension}${nexthop}
58 maildrop unix - n n - - pipe
59 flags=DRhu user=vmail argv=/usr/local/bin/maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension}${nexthop}
调试maildrop是否正常工作
从其他邮箱发一份邮件到你新建立的email地址,看到类似log记录
May 10 07:21:05 mail postfix/pipe[13994]: 78DCC156AE7: to=, relay=maildrop, delay=0, status=sent
(domain.com)
看到relay=maildrop 并且log没有报错,则说明maildrop已经正常工作
特别提示:
1. 编译安装的时候出现以下报错configure: error: pcre.h not found - install PCRE from
请安装pcre-devel包
2,安装maildrop并配置后,postfix不能启动了,检查日志 /var/log/mail,出如下提示.
Nov 2 10:58:57 net-server postfix/postfix-script[10904]: starting the Postfix mail system
Nov 2 10:58:57 net-server postfix/master[10905]: fatal: /etc/postfix/master.cf: line 100: bad transport type: user=vmail
再检查/etc/postfix/ master.cf的100行,没有错了,再回到原来设定"flags=DRhu user=vmail argv=/usr/local/bin/maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension}${nexthop}"出没发现错识,后来查询一些资料后,才知道定义transport的时候,即如上两行中的第二行,其参数行必须以空格开头,否则会出错。
3,安装客户端无法登录(outlook)
Nov 2 16:35:41 net-server pop3d: Connection, ip=[192.168.151.193]
Nov 2 16:35:42 net-server pop3d: LOGIN FAILED, user=jack, ip=[192.168.151.193]
7.编译安装postfixadmin
下载地址:Download postfixadmin-2.1.0.tgz
目前最新版本是2.1.0
root@net-server:/usr/src# tar xvzf postfixadmin-2.1.0.tgz
root@net-server:/usr/src# mv postfixadmin-2.1.0 /usr/local/apache/htdocs/postfixadmin
root@net-server:/usr/src# cd /usr/local/apache/htdocs/postfixadmin/
root@net-server:/usr/local/apache/htdocs/postfixadmin#
INSTALL.TXT文件建议改文件属性: <---请注意这些文件经过移动文件夹后的实际路径.
### 我这里为/usr/local/apache/htdocs/postfixadmin#
$ cd /usr/local/www/postfixadmin
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin/admin/
$ chmod 640 *.php .ht*
$ cd /usr/local/www/postfixadmin/images/
$ chmod 640 *.gif *.png
$ cd /usr/local/www/postfixadmin/languages/
$ chmod 640 *.lang
$ cd /usr/local/www/postfixadmin/templates/
$ chmod 640 *.tpl
$ cd /usr/local/www/postfixadmin/users/
$ chmod 640 *.php
设置完后无法打开网页,我再加上了read属性
root@net-server:/usr/local/apache/htdocs# chmod +r postfixadmin/ -R
导入数据库
mysql -uroot -p < DATABASE_MYSQL.TXT
设置PostfixAdmin的数据库连接
root@net-server:/usr/local/apache/htdocs/postfixadmin# cp config.inc.php.sample config.inc.php
root@net-server:/usr/local/apache/htdocs/postfixadmin# vi config.inc.php
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'net-server.windychan.com';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
访问:
http://域名/postfixadmin/
特别提示:
注:第一次访问时,要做相关的设定(如mail domain, domain admin等),一定要设备domain admin,这样以后才能管理。完成后,请将/usr/local/apache/htdocs/postfixadmin/中的setup.php更名,这样以后就直接进入管理界面了。
############################################################################################################################################################################
常见安装/首次使用中的故障解决。
###特别提示1.
Nov 2 13:22:38 net-server postfix/master[21285]: warning: process /usr/local/postfix/libexec/smtpd pid 12486 exit status 1
Nov 2 13:22:38 net-server postfix/master[21285]: warning: /usr/local/postfix/libexec/smtpd: bad command startup -- throttling
处理方法:修改mail.cf中virtual_transport = virtual 为 virtual_transport = maildrop
###特别提示2.
postfix/trivial-rewrite[2619]: warning: do not list domain windychan.com in BOTH mydestination and virtual_mailbox_domains
方法1 ,mydestination会自动根据机器名生成,因此如果不希望使用它的话,应将其设为空:postconf -e mydestination=
方法2,原来是系统域名与虚拟帐户的域名冲突了,改成 $hostname就好了。
#### 特别提示3.投递过程出现如下错误:----日志显示(cat /var/log/maillog)
Nov 2 14:59:30 net-server postfix/qmgr[3434]: C33521CD7F3: from=, size=20355, nrcpt=1 (queue active)
Nov 2 14:59:30 net-server maildrop[3546]: Temporary authentication failure.
Nov 2 14:59:30 net-server postfix/pipe[3543]: C33521CD7F3: to=, relay=maildrop, delay=0.35, delays=0.33/0/0/0.02, dsn=4.3.0, status=deferred (temporary failure. Command output: /usr/local/bin/maildrop: Temporary authentication failure. )
状况: main.cf中#virtual_transport = virtual就没问题.
解决办法1:说明编译authlib时没有指定maildrop的用户和组,加上--with-mailuser和--with-mailgroup 指定用户和组后重编译安装(vmail.vmail).
解决办法2,增加"/usr/local/courier-authlib/lib/courier-authlib"到"/etc/ld.so.conf",并执行ldconfig命令。
root@net-server:/#cd /usr/local/courier-authlib/etc/
root@net-server:/usr/local/courier-authlib/etc/# cp authdaemonrc.dist ./authdaemonrc
root@net-server:/usr/local/courier-authlib/etc/# vi /usr/local/courier-authlib/etc/authdaemonrc
(如果非courier-authlib安装目录时,authdaemonrc.dist 目录路径应为: /usr/local/安装目录名/etc/authlib)
解决办法3:重新确认 /usr/local/courier-authlib/etc/authmysqlrc中关于数据库的设定.
(比如MYSQL_CLEAR_PWFIELD clear_password ,在无此字段,应该取消)
解决办法4,修改 /usr/local/courier-authlib/etc/authdaemonrc,打开更加详细log信息,
DEBUG_LOGIN=2
然后再根据实际情况处理.