CentOS服务器搭建postfix邮件系统

分类:CentOS运维 阅读:52271 次

postfix系统的结构图,我们将按照这个图来部署我们的postfix的邮件服务器

每个软件包的安装都是一步。

mysql数据库的安装

我这里用的版本是mysql-5.1.69.tar.gz在mysql的官方网站可以下载,而且用的系统是centos5.9

(1)解压mysql-5.1.69.tar.gz

[root@centos~]#tarzxvfmysql-5.1.69.tar.gz

(2)检查创建mysql用户和组

[root@centos~]#idmysql检查发现没有mysql用户
id:mysql:Nosuchuser
[root@centos~]#useradd-s/sbin/nologin-d/dev/nullmysql
useradd:warning:thehomedirectoryalreadyexists.
Notcopyinganyfilefromskeldirectoryintoit.

一般不需要mysql登陆,所以也没有给家目录

(3)mysql的编译安装

安装之前必须要有编译安装的工具gcc等

[root@centosmysql-5.1.69]#./configure--prefix=/usr/local/mysql--with-charset=utf8

./configure出了问题‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

最后几行出了错。完整错误信息如下:

checkingfortgetentin-lncurses...no

checkingfortgetentin-lcurses...no

checkingfortgetentin-ltermcap...no

checkingfortgetentin-ltinfo...no

checkingfortermcapfunctionslibrary...configure:error:Nocurses/termcaplibraryfound

原因:‍

缺少ncurses安装包ncurses提供字符终端处理库,包括面板和菜单。

解决办法:

下载安装相应软件包

[root@centosmysql-5.1.69]#yum-yinstallncurses-devel

如果出现如下提示证明configure成功了


ThankyouforchoosingMySQL!

Remembertochecktheplatformspecificpartofthereferencemanual
forhintsaboutinstallingMySQLonyourplatform.
AlsohavealookatthefilesintheDocsdirectory.

make&&makeinstall

MYSQL安装到这里卡了很久,是不是你觉得认为死机,程序安装错误了?聪明的你可能发现了,实际MYSQL已经安装成功了,它这步过段时间就会好了,但你知道是什么原因吗?哈哈告诉你吧“这是mysql在自我编译测试造成的“。所以耐心的等

make[2]:Enteringdirectory`/down/webinstall/mysql-5.1.57/mysql-test
make[3]:Enteringdirectory`/down/webinstall/mysql-5.1.57/mysql-test
make[3]:Nothingtobedonefor`install-exec-am.
makeINSTALL_TO_DIR="/usr/local/mysql/mysql-test"install_test_files
make[4]:Enteringdirectory`/down/webinstall/mysql-5.1.57/mysql-test

mysql配置文件

[root@centosmysql-5.1.69]#cpsupport-files/my-medium.cnf/etc/my.cnf

mysql的开机启动
[root@centosmysql-5.1.69]#cpsupport-files/mysql.server/etc/init.d/mysqld
[root@centosmysql-5.1.69]#chmod700/etc/init.d/mysqld
[root@centosmysql-5.1.69]#chkconfig--list|grepmysqld
[root@centosmysql-5.1.69]#chkconfig--addmysqld


初始化数据库生成var目录
]#/usr/local/mysql/bin/mysql_install_db--user=mysql


修改/usr/local/mysql下文件属主和属组
除了var目录的属主和属组都为mysql外,其余的只需要将属组设为mysql即可

[root@centos~]#chown-Rroot:mysql/usr/local/mysql/
[root@centos~]#chown-Rmysql:mysql/usr/local/mysql/var/
mysql/mysql-bin.000002test/
mysql-bin.000001mysql-bin.index
[root@centos~]#chown-Rmysql:mysql/usr/local/mysql/var/


启动mysql

/usr/local/mysql/bin/mysqld_safe--user=mysql&


servicemysqldrestart

psaux|grepmysqld

netstat-anpt|grep3306

apache的安装

安装之前定义一个完整的主机名:

否则在启动apache的时候会有这样的报错:

AH00558:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using::1.Setthe'ServerName'directivegloballytosuppressthismessage

编辑/etc/hosts文件

#Donotremovethefollowingline,orvariousprograms
#thatrequirenetworkfunctionalitywillfail.
127.0.0.1localhost.localdomainlocalhost
::1localhost6.localdomain6localhost6
192.168.87.128centos.wolf.orgcentos

编辑/etc/sysconfig/network文件,然后重启才能生效

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=centos.wolf.org

1,apache安装

tarxvfzhttpd-2.2.11.tar.gz

cdhttpd-2.2.11
./configure--prefix=/usr/local/apache--enable-so

#--prefix=<Install_Path>指明编译后的二进制文件安装到<Install_Path>目录,用实际安装路径替换<Install_Path>,如--prefix=/usr/local/apache-2.2.11,如果省略此配置参数,默认安装到/usr/local/apache2目录。

#--enable-so指明编译动态加载模块(DSO)支持到httpd二进制文件,此模块使得Apache的各功能模块可以与核心分开编译、运行时动态加载。有了DSO支持,升级和增加模块时只需编译相关的模块即可,不必重新编译整个系统。最新版本的Apache缺省编译此模块到httpd二进制文件,如果你在使用早期版本的apache并且需要DSO支持,可能要明确指出此选项。

#--enable-mods-shared=<MODULE-LIST>明确指明要以DSO方式编译的模块,<MODULE-LIST>为空格分隔的模块名列表、all或者most,all表示包含所有模块,most表示包含大部分模块,如--enable-mods-share="rewritedeflate",--enable-mods-share=most,效果等同于多个--enable-<FEATURE>=share

make&&makeinstall
/usr/local/apache/bin/apachectlrestart启动httpd

echo"/usr/local/apache/bin/apachectlstart">>/etc/rc.local加入开机

由于编译安装的时候http服务默认的用户组和用户名是daemon,在这里我还是改成习惯的apache

[root@centoshttpd-2.2.11]#idapache
uid=48(apache)gid=48(apache)groups=48(apache)context=root:system_r:unconfined_t:SystemLow-SystemHigh

[root@centoshttpd-2.2.11]#cd/usr/local/apache/conf/
[root@centosconf]#vimhttpd.conf

Userapache
Groupapache

遇到的问题:

[root@centoshttpd-2.2.11]#servicehttpdrestart
Stoppinghttpd:[FAILED]
Startinghttpd:(98)Addressalreadyinuse:make_sock:couldnotbindtoaddress[::]:80
(98)Addressalreadyinuse:make_sock:couldnotbindtoaddress0.0.0.0:80
nolisteningsocketsavailable,shuttingdown
Unabletoopenlogs
[FAILED]

这是由于端口被占用了,所以至于要kill就行了

[root@centosapache]#psaux|grephttp
root102710.00.061228728pts/1R+14:450:00grephttp
daemon327570.00.1291441444?S14:190:00/usr/local/apache/bin/httpd-kstart
daemon327580.00.1291441444?S14:190:00/usr/local/apache/bin/httpd-kstart
daemon327590.00.1291441444?S14:190:00/usr/local/apache/bin/httpd-kstart
[root@centosapache]#kill-932757
[root@centosapache]#kill-932758
[root@centosapache]#kill-932759
[root@centosapache]#psaux|grephttp
root104470.00.061228752pts/1S+14:470:00grephttp
[root@centosapache]#/usr/local/apache/bin/apachectlstart
[root@centosapache]#/usr/local/apache/bin/apachectlstart
httpd(pid10463)alreadyrunning
[root@centosapache]#
[root@centosapache]#psaux|grephttp
root104630.00.1249361784?Ss14:470:00/usr/local/apache/bin/httpd-kstart
apache104640.00.1249361340?S14:470:00/usr/local/apache/bin/httpd-kstart
apache104650.00.1249361340?S14:470:00/usr/local/apache/bin/httpd-kstart
apache104660.00.1249361340?S14:470:00/usr/local/apache/bin/httpd-kstart

php安装配置

postfix正式安装

在安装postfix之前有个很重要的工作要做,那就是将sendmail给删除掉,当然也可以不用删除sendmail,但是这种情况就要切换系统的mta为postfix.为什么一定要这么做呢?原因很简单同样作为mail服务的两个软件在mta的时候会产生矛盾,就像是一山不容二虎一样

[root@centos~]#rpm-e--nodepssendmail


一,创建用户和组

创建运行postfix服务的用户(postfix)、组(postfix、postdrop)

[root@centospostfix-2.10.0]#groupadd-g1001postfix
[root@centospostfix-2.10.0]#groupadd-g1002postdrop
[root@centospostfix-2.10.0]#useradd-M-u1001-gpostfix-s/sbin/nologinpostfix

[root@centospostfix-2.10.0]#useradd-M-u1002-gpostdrop-s/sbin/nologinpostdrop


二,编译安装

在postfix的README文档中这么说的。要想编译安装postfix支持mysql,那么就要加上

-DHAS_MYSQL和-I这两个参数,还给了我们这个例子,其他的参数是添加安全和认证

CCARGS参数:为编译器提供额外的参数。“-I”选项指出标准的额外头文件的存放目录。例如,mysql和cyrus-sasl的头文件分别位于目录:/usr/local/mysql/lib/mysql、/usr/include/sasl。
AUXLIBS参数:指出位于标准位置之外的额外函数库。如果需要链接SASL、MySQL或任何附加的函数库,而且它们不是存放在标准位置(/usr/lib/目录),则必须在AUXLIBS参数中指出这些函数库的路径。例如,mysql和cyrus-sasl的库文件分别位于目录:/usr/local/mysql/lib/mysql、/usr/lib/sasl2。


[root@centospostfix-2.10.0]#makemakefiles'CCARGS=-DHAS_MYSQL-I/usr/local/mysql/include/mysql-DUSE_SASL_AUTH-DUSE_CYRUS_SASL-I/usr/include/sasl''AUXLIBS=-L/usr/local/mysql/lib/mysql-lmysqlclient-lz-lm-L/usr/lib/sasl2-lsasl2'


按照以下的提示输入相关的路径([]号中的是缺省值,”[]”后的是输入值,省略的表示采用默认值)(可全部采用默认值)

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

  1. install_root:[/]/

  2. tempdir:[/root/postfix-2.6.5]

  3. config_directory:[/etc/postfix]

  4. command_directory:[/usr/sbin]

  5. daemon_directory:[/usr/libexec/postfix]

  6. data_directory:[/var/lib/postfix]

  7. html_directory:[no]/

  8. mail_owner:[postfix]

  9. mailq_path:[/usr/bin/mailq]

  10. manpage_directory:[/usr/local/man]

  11. newaliases_path:[/usr/bin/newaliases]

  12. queue_directory:[/var/spool/postfix]

  13. readme_directory:[no]

  14. sendmail_path:[/usr/sbin/sendmail]

  15. setgid_group:[postdrop]




编译排错

(1)

dict_mysql.c:772:error:‘HOST’hasnomembernamed‘db’
dict_mysql.c:773:error:‘HOST’hasnomembernamed‘db’
dict_mysql.c:774:error:‘HOST’hasnomembernamed‘hostname’
dict_mysql.c:775:error:‘HOST’hasnomembernamed‘name’
dict_mysql.c:776:error:‘HOST’hasnomembernamed‘name’
make:***[dict_mysql.o]错误1
make:***[update]错误1
解决:
因为刚开始的时候看一些文档里面路径用的是/usr/local/mysql/include,/usr/local/mysql/lib所以找不到mysql.h文件

后来改成/usr/local/mysql/include/mysql,/usr/local/mysql/lib/mysql错误就解决了


(2)

Installtheappropriatedb*-develpackagefirst.

安装要想mysql支持就要安装edb*-devel

[root@centospostfix-2.10.0]#yuminstall-ydb*-devel


(3)

xsasl_cyrus_server.c:606:error:'XSASL_CYRUS_SERVER'hasnomembernamed'username'
xsasl_cyrus_server.c:607:error:'XSASL_CYRUS_SERVER'hasnomembernamed'username'
make:***[xsasl_cyrus_server.o]Error1
make:***[update]Error1

缺少cyrus认证包:有cyrus-sasl-md5cyrus-sasl-libcyrus-sasl-plaincyrus-saslcyrus-sasl-devel

[root@centospostfix-2.10.0]#yuminstall-ycyrus-sasl-md5cyrus-sasl-libcyrus-sasl-plaincyrus-saslcyrus-sasl-devel

(4)

bin/postconf:errorwhileloadingsharedlibraries:libmysqlclient.so.16:cannotopensharedobjectfile:Nosuchfileordirectory

解决方法:

这里说找不到mysql的共享库,需要将路径加入/etc/ld.so.conf#echo"/usr/local/mysql/lib/mysql">>/etc/ld.so.conf#ldconfig

[root@centospostfix-2.10.0]#cp/usr/local/mysql/lib/mysql/libmysqlclient.so.16/usr/lib/

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/mysql/


[root@centospostfix-2.10.0]#/usr/sbin/postfixstart
postfix/postfix-script:fatal:thePostfixmailsystemisalreadyrunning
[root@centospostfix-2.10.0]#netstat-antup|grep25
tcp000.0.0.0:250.0.0.0:*LISTEN32713/master

postfix正式配置

postfix的配置文件/etc/postfix/main.cf


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

myhostname=centos.wolf.org

mydomain=wolf.org

myorigin=$mydomain

inet_interfaces=all

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

mynetworks=192.168.87.0/24,127.0.0.0/8

myorigin参数用来指明发件人所在的域名;
mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
myhostname参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
mydomain参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;
mynetworks参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;
inet_interfaces参数指定postfix系统监听的网络接口;

测试出现如下问题

[root@centos~]#telnetcentos.wolf.org25
Trying192.168.87.128...
Connectedtocentos.wolf.org(192.168.87.128).
Escapecharacteris'^]'.
220centos.wolf.orgESMTPPostfix
ehlocentos.wolf.org
250-centos.wolf.org
250-PIPELINING
250-SIZE10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250DSN
mailfrom:root@centos.wolf.org
2502.1.0Ok
rcptto:centos@centos.wolf.org
4514.3.0<centos@centos.wolf.org>:Temporarylookupfailure
quit
2212.0.0Bye
Connectionclosedbyforeignhost.

通过查看日志发现是没有aliase文件导致的,所以果断的添加的这么个文件,然后postmap一下下就可以了。

[root@centos~]#telnet192.168.87.12825
Trying192.168.87.128...
Connectedtocentos.wolf.org(192.168.87.128).
Escapecharacteris'^]'.
220centos.wolf.orgESMTPPostfix
mailfrom:root@wolf.org
2502.1.0Ok
rcptto:centos@wolf.org
2502.1.5Ok
data
354Enddatawith<CR><LF>.<CR><LF>
nihao
.
2502.0.0Ok:queuedasDABD5578047
quit
2212.0.0Bye

测试成功了!!



二,开启基于cyrus-sasl的认证功能

postfix支持cyrus和dovecot两种方式的sasl认证

[root@centos~]#postconf-a
cyrus
dovecot

vim/etc/postfix/main.cf

############################CYRUS-SASL############################
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_path=smtpd
smtpd_banner=Welcometoour$myhostnameESMTP,Warning:Versionnotyou

在低于2.3的postfix版本中使用smtpd_sasl_application_name=smtpd,但是在其以后的版本中用smtpd_sasl_path=smtpd

#vim /usr/lib(64)/sasl2/smtpd.conf
添加如下内容:

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
让postfix重新加载配置文件
#/usr/sbin/postfixreload
postfix/postfix-script:refreshingthePostfixmailsystem
[root@centos ~]# telnet localhost 25 
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 Welcome to our centos.wolf.org ESMTP,Warning: Version not you
ehlo centos.wolf.org
250-centos.wolf.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN (这里输出的是两行才是正确的)
250-ENHANCEDSTATUSCODES
250-8BITMIME

三,courier-authlib的配置

这个包是用来做mysql的mail认证的

准备好编译环境

[root@centoscourier-authlib-0.62.4]#yuminstalllibtool-ltdllibtool-ltdl-devel-y

[root@centoscourier-authlib-0.65.0]#yumgroupinstall-y"DevelopmentLibraries""DevelopmentTools""LegacySoftwareDevelopment""XSoftwareDevelopment"

[root@centoscourier-authlib-0.62.4]#./configure--prefix=/usr/local/courier-authlib--without-stdheaderdir--with-authmysql--with-mysql-libs=/usr/local/mysql/lib/mysql/--with-mysql-includes=/usr/local/mysql/include/mysql--with-redhat

[root@centoscourier-authlib-0.62.4]#make&&makeinstall

[root@centoscourier-authlib-0.62.4]#makeinstall-configure

其中,“makeinstall-configure“命令将生成默认配置文件”authmysqlrc“和”authdaemonrc“。


修改courier-authlib相关配置,并启动服务

[root@centoscourier-authlib-0.62.4]#vim/etc/ld.so.conf

/usr/local/courier-authlib/lib/courier-authlib


修改authdaemonrc主配置文件,仅保留authmysql认证方式,去掉其他方式

[root@centosauthlib]#cd/usr/local/courier-authlib/etc/authlib/

[root@centosauthlib]#cpauthdaemonrcauthdaemonrc.back

[root@centosauthlib]#vimauthdaemonrc

authmodulelist="authmysql"
authmodulelistorig="authmysql"

[root@centosauthlib]#chmod-R755/usr/local/courier-authlib/var/spool/authdaemon/

注意:要将“authdaemon“目录的权限设置为755,否则Postfix可以会无法正确获得用户数据及密码信息。


修改authmysqlrc文件,用户描述如何向MySQL数据库查询信息

uid和gid是postfix的uid和gid为1001

  • MYSQL_SERVERlocalhost

  • MYSQL_PORT3306(指定你的mysql监听的端口,这里使用默认的3306)

  • MYSQL_USERNAMEextmail(这时为后文要用的数据库的所有者的用户名)

  • MYSQL_PASSWORDextmail(密码)

  • MYSQL_SOCKET/var/lib/mysql/mysql.sock

  • MYSQL_DATABASEextmail

  • MYSQL_USER_TABLEmailbox

  • MYSQL_CRYPT_PWFIELDpassword

  • MYSQL_UID_FIELD'1001'

  • MYSQL_GID_FIELD'1001'

  • MYSQL_LOGIN_FIELDusername

  • MYSQL_HOME_FIELDconcat('/var/mailbox/',homedir)

  • MYSQL_NAME_FIELDname

  • MYSQL_MAILDIR_FIELDconcat('/var/mailbox/',maildir)


启动courier-authlib

[root@centosauthlib]#cd~/courier-authlib-0.62.4
[root@centoscourier-authlib-0.62.4]#cpcourier-authlib.sysvinit/etc/init.d/courier-authlib
[root@centoscourier-authlib-0.62.4]#chmod755/etc/rc.d/init.d/courier-authlib
[root@centoscourier-authlib-0.62.4]#chkconfig--level35courier-authlibon
[root@centoscourier-authlib-0.62.4]#servicecourier-authlibstart
StartingCourierauthenticationservices:authdaemond


新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
[root@centos~]#mkdir?pv/var/mailbox
[root@centos~]#chownpostfix-R/var/mailbox

接下来重新配置SMTP认证,编辑/usr/lib(64)/sasl2/smtpd.conf,确保其为以下内容:
pwcheck_method:authdaemond
log_level:3
mech_list:PLAINLOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket


四,让postfix支持虚拟域和虚拟用户


########################VirtualMailboxSettings########################

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:1001

virtual_gid_maps=static:1001

virtual_transport=virtual

#maildrop_destination_recipient_limit=1

#maildrop_destination_concurrency_limit=1

##########################QUOTASettings########################

#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,theuser'smaildirhasoverdrawnhisdiskspacequota,tryagainlater.

#virtual_overquota_bounce=yes

virtual_mailbox_base:指定虚拟邮箱存储目录的路径起点。
virtual_alias_maps:指定虚拟邮件用户对应的别名文件位置。
virtual_mailbox_domains:设置Postfix服务器可以接收的虚拟邮件域的域名,作用类似于配置参数“mydestination“。
virtual_uid_maps:设置所有虚拟邮件用户映射的本地用户的UID号。
virtual_gid_maps:设置所有虚拟邮件用户映射的本地用户的GID号。


使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:


[root@centos~]#tarzxvfextman-1.1.tar.gz

[root@centos~]#cdextman-1.1/docs/

[root@centosdocs]#mysqladmin-urootpassword123456
[root@centosdocs]#mysql-uroot-p123456<extmail.sql
[root@centosdocs]#mysql-uroot-p123456<init.sql
[root@centosdocs]#cpmysql_virtual_*/etc/postfix/

授予用户extmail访问extmail数据库的权限

[root@centos~]#mysql-uroot-p123456
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis10
Serverversion:5.1.69-logSourcedistribution

Copyright(c)2000,2011,Oracleand/oritsaffiliates.Allrightsreserved.

OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.Othernamesmaybetrademarksoftheirrespective
owners.

Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.

mysql>GRANTallprivilegesonextmail.*TOextmail@localhostIDENTIFIEDBY'extmail';
QueryOK,0rowsaffected(0.00sec)

mysql>GRANTallprivilegesonextmail.*TOextmail@localhostIDENTIFIEDBY'extmail';

QueryOK,0rowsaffected(0.00sec)


说明:启用虚拟域以后,需要取消中心域,即注释掉myhostname,mydestination,mydomain,myorigin几个指令;
当然,你也可以把mydestionation的值改为你自己需要的。
#vim/etc/postfix/main.cf
注释掉myhostname,mydestination,mydomain,myorigin


[root@centos~]#/usr/sbin/postfixstop
postfix/postfix-script:stoppingthePostfixmailsystem
[root@centos~]#/usr/sbin/postfixstart
postfix/postfix-script:startingthePostfixmailsystem


ok!!!!

‍‍‍‍‍‍‍‍‍‍‍‍

安装php,希望大家参考我的另外一篇博客

http://wolfword.blog.51cto.com/blog/4892126/1203250

在这里我就建议安装了!!

在安装php之前需要其他的包的支持,这些包很多,在这里我就不一一编译安装了,最简单的方法是yum安装

[root@test3mysql]#yuminstall-ylibpnglibpng-devellibjpeglibjpeg-develfreetypefreetype-develgdgd-develmysql-devellibxml2-devel

[root@test3php-5.2.9]#tarxvfzphp-5.2.9.tar.gz

[root@test3php-5.2.9]#cdphp-5.2.9

[root@test3php-5.2.9]#./configure--prefix=/usr/local/php--with-apxs2=/usr/local/apache/bin/apxs--with-mysql=/usr/local/mysql--with-gd--with-freetype-dir--with-jpeg-dir--with-png-dir--enable-sockets

接下来就是漫长的make&&makeinstall

[root@test3php-5.2.9]#ln-s/usr/local/php/bin/*/usr/local/bin/
[root@test3php-5.2.9]#cpphp.ini-dist/usr/local/php/lib/php.ini

安装到这里还不算完全,我们还要整合apache和php,而且还要测试

在apache的配置文件httpd.conf添加php支持

AddTypeapplication/x-httpd-php.php

LoadModulephp5_modulemodules/libphp5.so

并且将DirectoyIndex后面的index.html(在htdoc中)的改成index.php在这个文件里面加上如下的一句话<?php

phpinfo();

?>
重启apache服务,在浏览器中输入http://localhost如出现如下结果就是配置正确


到此为止mysqlapachephp安装成功了

dovecot安装配置

dovecot安装配置

这里我们用系统自到的dovecot安装,因为现在很多系统已经自到了dovecot,而且即使是编译安装也很简单,所以为了节约时间,在这里我就直接yum安装

[root@centos~]#yuminstalldovecot
TransactionSummary
================================================================================
Install1Package(s)
Upgrade0Package(s)

Totaldownloadsize:1.7M
Isthisok[y/N]:y
DownloadingPackages:
dovecot-1.0.7-7.el5_7.1.x86_64.rpm|160kB02:00...
http://mirrors.grandcloud.cn/centos/5.9/os/x86_64/CentOS/dovecot-1.0.7-7.el5_7.1.x86_64.rpm:[Errno4]SocketError:timedout
Tryingothermirror.
dovecot-1.0.7-7.el5_7.1.x86_64.rpm|1.7MB00:06
Runningrpm_check_debug
RunningTransactionTest
FinishedTransactionTest
TransactionTestSucceeded
RunningTransaction
Installing:dovecot1/1

Installed:
dovecot.x86_640:1.0.7-7.el5_7.1

Complete!


配置dovecot

vim/etc/dovecot.conf

protocols=imapimapspop3pop3s
disable_plaintext_auth=no

authdefault{

mechanisms=plain

passdbsql{

args=/etc/dovecot-mysql.conf

}

userdbsql{

args=/etc/dovecot-mysql.conf

}

}


#vim/etc/dovecot-mysql.conf

driver=mysql
connect=[host=localhostdbname=extmailuser=extmailpassword=extmail]
default_pass_scheme=CRYPT
password_query=[SELECTusernameASuser,passwordASpasswordFROMmailboxWHEREusername='%u']
user_query=[SELECTmaildir,uidnumberASuid,gidnumberASgidFROMmailboxWHEREusername='%u']


[root@centos~]#servicedovecotrestart
StoppingDovecotImap:[OK]
StartingDovecotImap:[OK]

extmail的配置安装

1,解压安装

[root@centos~]#tarzxvfextmail-1.1.1.tar.gz

[root@centos~]#mkdir-pv/var/www/extsuite
mkdir:createddirectory`/var/www'
mkdir:createddirectory`/var/www/extsuite'
[root@centos~]#cp-Rextmail-1.1.1/var/www/extsuite/extmail
[root@centos~]#cp/var/www/extsuite/extmail/webmail.cf.default/var/www/extsuite/extmail/webmail.cf


[root@centos~]#vim/var/www/extsuite/extmail/webmail.cf

2、修改主配置文件
#vim/var/www/extsuite/extmail/webmail.cf
部分修改选项的说明:SYS_MESSAGE_SIZE_LIMIT=5242880

用户可以发送的最大邮件

SYS_USER_LANG=en_US

语言选项,可改作:

SYS_USER_LANG=zh_CN

SYS_MAILDIR_BASE=/home/domains

此处即为您在前文所设置的用户邮件的存放目录,可改作:

SYS_MAILDIR_BASE=/var/mailbox

SYS_MYSQL_USER=db_user

SYS_MYSQL_PASS=db_pass

以上两句句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库,这里修改为:

SYS_MYSQL_USER=extmail

SYS_MYSQL_PASS=extmail

SYS_MYSQL_HOST=localhost

指明数据库服务器主机名,这里默认即可

SYS_MYSQL_TABLE=mailbox

SYS_MYSQL_ATTR_USERNAME=username

SYS_MYSQL_ATTR_DOMAIN=domain

SYS_MYSQL_ATTR_PASSWD=password

以上用来指定验正用户登录里所用到的表,以及用户名、域名和用户密码分别对应的表中列的名称;这里默认即可

SYS_MYSQL_SOCKET=/tmp/mysql.sock
由于我的mysql是编译安装的所以在/tmp/mysql.sock下,可以做一个连接/var/lib/mysql/mysql.sock

SYS_AUTHLIB_SOCKET=/var/spool/authdaemon/socket

此句用来指明authdaemosocket文件的位置,这里修改为:

SYS_AUTHLIB_SOCKET=/usr/local/courier-authlib/var/spool/authdaemon/socket


3,extmail和http

由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;
本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。只有在编译安装http的时候特别指定才可以,但是我这里没有考虑到这一点,所以有另外一个方法。

[root@centos~]#/usr/local/apache/bin/httpd-V
Serverversion:Apache/2.2.11(Unix)
Serverbuilt:May21201314:12:11
Server'sModuleMagicNumber:20051115:21
Serverloaded:APR1.3.3,APR-Util1.3.4
Compiledusing:APR1.3.3,APR-Util1.3.4
Architecture:64-bit
ServerMPM:Prefork
threaded:no
forked:yes(variableprocesscount)
Servercompiledwith....
-DAPACHE_MPM_DIR="server/mpm/prefork"
-DAPR_HAS_SENDFILE
-DAPR_HAS_MMAP
-DAPR_HAVE_IPV6(IPv4-mappedaddressesenabled)
-DAPR_USE_SYSVSEM_SERIALIZE
-DAPR_USE_PTHREAD_SERIALIZE
-DSINGLE_LISTEN_UNSERIALIZED_ACCEPT
-DAPR_HAS_OTHER_CHILD
-DAP_HAVE_RELIABLE_PIPED_LOGS
-DDYNAMIC_MODULE_LIMIT=128
-DHTTPD_ROOT="/usr/local/apache"
-DSUEXEC_BIN="/usr/local/apache/bin/suexec"开启了suexec的功能
-DDEFAULT_PIDLOG="logs/httpd.pid"
-DDEFAULT_SCOREBOARD="logs/apache_runtime_status"
-DDEFAULT_LOCKFILE="logs/accept.lock"
-DDEFAULT_ERRORLOG="logs/error_log"
-DAP_TYPES_CONFIG_FILE="conf/mime.types"
-DSERVER_CONFIG_FILE="conf/httpd.conf"


[root@centos~]#vim/usr/local/apache/conf/httpd.conf

<VirtualHost*:80>

ServerNamemail.test.com

DocumentRoot/var/www/extsuite/extmail/html/

ScriptAlias/extmail/cgi/var/www/extsuite/extmail/cgi

Alias/extmail/var/www/extsuite/extmail/html

SuexecUserGrouppostfixpostfix

</VirtualHost>


修改cgi执行文件属主为apache运行身份用户:
#chown-Rpostfix.postfix/var/www/extsuite/extmail/cgi/


如果您没有打开apache服务器的suexec功能,也可以使用以下方法解决:

#vi/etc/httpd/httpd.conf

Userpostfix

Grouppostfix

<VirtualHost*:80>

ServerName192.168.87.128

DocumentRoot/var/www/extsuite/extmail/html/

ScriptAlias/extmail/cgi/var/www/extsuite/extmail/cgi

Alias/extmail/var/www/extsuite/extmail/html

<Directory/var/www/extsuite>//目录权限
OptionsIndexesFollowSymLinks//允许符号链接,访问不在本目录下的文件
AllowOverrideNone//禁止读取.htaccess
Orderallow,deny//指定先执行Allow访问规则,再执行Deny访问规则
Allowfromall//允许访问所有
</Directory>

</VirtualHost>


4、依赖关系的解决
extmail将会用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下载原码包进行安装。
[root@centos~]#tarzxvfUnix-Syslog-1.1.tar.gz
Unix-Syslog-1.1/
Unix-Syslog-1.1/README
Unix-Syslog-1.1/Changes
Unix-Syslog-1.1/test.pl
Unix-Syslog-1.1/Artistic
Unix-Syslog-1.1/Makefile.PL
Unix-Syslog-1.1/META.yml
Unix-Syslog-1.1/Syslog.pm
Unix-Syslog-1.1/Syslog.xs
Unix-Syslog-1.1/MANIFEST
[root@centos~]#cdusr/
[root@centosusr]#cd
[root@centos~]#cdUnix-Syslog-1.1
[root@centosUnix-Syslog-1.1]#perlMakefile.PL
Checkingifyourkitiscomplete...
Looksgood
WritingMakefileforUnix::Syslog
[root@centosUnix-Syslog-1.1]#make&&makeinstall

[root@centos~]#/usr/local/apache/bin/apachectlrestart

extman的配置安装

安装Extman-1.1

1、安装及基本配置
#tarzxvfextman-1.1.tar.gz
#mvextman-1.1/var/www/extsuite/extman
修改配置文件以符合本例的需要:
#cp/var/www/extsuite/extman/webman.cf.default/var/www/extsuite/extman/webman.cf
#vi/var/www/extsuite/extman/webman.cf
SYS_MAILDIR_BASE=/home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE=/var/mailbox
修改cgi目录的属主:
#chown-Rpostfix.postfix/var/www/extsuite/extman/cgi/
在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:
#vim/etc/httpd/conf/httpd.conf
ScriptAlias/extman/cgi/var/www/extsuite/extman/cgi
Alias/extman/var/www/extsuite/extman/html
创建其运行时所需的临时目录,并修改其相应的权限:
#mkdir-pv/tmp/extman
#chownpostfix.postfix/tmp/extman
修改vim/var/www/extsuite/extman/webman.cf
SYS_CAPTCHA_ON=1

SYS_CAPTCHA_ON=0


好了,到此为止,重新启动apache服务器后,您的Webmail和Extman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:http://centos.wolf.org或者http://192.168.87.128本机IP或者http://localhost
选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org密码为:extmail*123*


,install_driver(mysql)failed:Can’tlocateDBD/mysql.pmin
搜索DBD-mysql-4.005.tar.gz下载,安装,结果提示如下

之后提示InternalServerError:
tail-ferror_log
/usr/bin/perl:symbollookuperror:/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/mysql.so:undefinedsymbol:DBIc_TRACE_LEVEL

//肯定是DBD-MYSQL版本不兼容问题:
find/usr/lib-name“mysql.so”-execrm{}\;

http://search.cpan.org/dist/DBD-mysql/下载:DBD-mysql-3.0002_4.tar.gz
perlMakefile.PL
make
makeinstall
(再打开ok)


[WedNov0222:05:572011][error][client192.168.1.82]Prototypemismatch:subEncode::IMAPUTF7::decode($$;$)vsnoneat/var/www/extsuite/extman/libs/Encode/IMAPUTF7.pmline76.,referer:http://192.168.1.7/extman/cgi/sysinfo.cgi?sid=361641f5c9ee2bdb9fb606a920c327b1

ps-aux|grepcmdserver
kill-9id
/var/www/extsuite/extman/daemon/cmdserver-d
刷新


不能发送邮件:
warning:donotlistdomainupkiller.cominBOTHmydestinationandvirtual_mailbox_domains
明显是指这个域名不在mydestination许可的列表

解决方法:
在有多域的服务器上直接把mydestination选项在/etc/postfix/main.cf注释掉:


2,虚拟域不能发送邮件给自己:
Sep2814:01:10rohtopostfix/local[2377]:07AC332E69:to=<user2@xxxx.com.cn>,relay=local,delay=0.71,delays=0.41/0.16/0/0.14,dsn=5.1.1,status=bounced(unknownuser:“user2″)

1)首先确定:
extman/webman.cf文件中:
SYS_DEFAULT_GID=2525
修改后进入/var/mailbox/domain.com.cn中rm-rf*

2)原来是在main.cf文件中myhostname与mydomain不能一样,要不然
虚拟域和main.cf中设的域名一样就会出现问题:(kao)

myhostname=xxx.com.cn
mydomain=xxxx.com.cn
修改如下:
myhostname=mail.xxx.com.cn
mydomain=xxxx.com.cn

dns安装配置

为了把这台机子配置成真正意义上的mail服务器,我决定把hostname改成mail.example.org

vim/etc/hosts

#Donotremovethefollowingline,orvariousprograms
#thatrequirenetworkfunctionalitywillfail.
127.0.0.1localhost.localdomainlocalhost
::1localhost6.localdomain6localhost6
192.168.87.128mail.example.orgmail

vim/etc/sysconf/network

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=mail.example.org

1,安装软件包

[root@centos~]#yuminstall-ybind-develbind-chrootbindcaching-nameserver

由于dns安装在chroot模式下,所以他的家目录在/var/named/chroot/

[root@centos~]#cd/var/named/chroot/
[root@centoschroot]#ls
devetcvar

2,dns的配置

[root@mail~]#cp/var/named/chroot/etc/named.caching-nameserver.conf/var/named/chroot/etc/named.conf

[root@mail~]#vim/var/named/chroot/etc/named.rfc1912.zones

zone"example.org"IN{
typemaster;
file"example.org";
};
zone"87.168.192.in-addr.arpa"IN{
typemaster;
file"87.168.192.in-addr.arpa";
allow-update{none;};
};


[root@mail~]#vim/var/named/chroot/var/named/example.org
$TTL86400
@INSOAexample.org.root.localhost.(
1997022700;Serial
28800;Refresh
14400;Retry
3600000;Expire
86400);Minimum
INNSmail.example.org.
mailINA192.168.87.128
example.org.INMX10mail.example.org.


[root@mail~]#vim/var/named/chroot/var/named/87.168.192.in-addr.arpa
$TTL86400
@INSOAmail.example.orgroot.localhost.(
1997022700;Serial
28800;Refresh
14400;Retry
3600000;Expire
86400);Minimum
INNSmail.example.org.
128INPTRmail.example.org.




[root@mail~]#nslookup-type=MXexample.org
Server:192.168.87.128
Address:192.168.87.128#53

example.orgmailexchanger=10mail.example.org.


配置成功!!!

extmail正确使用

extman默认管理帐号为:root@extmail.org密码为:extmail*123*

添加域,将允许自由注册勾上,表示这个域的用户可以注册用户


注册用户(点击免费注册邮箱)




注册的用户是cc@example.org,密码是cc


发送邮件

aa@example.org给用户cc@example.org发邮件



cc@example.org收邮件