CentOS服务器搭建postfix邮件系统

Linux就该这么学

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

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

 

mysql数据库的安装

 

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

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

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

 

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

[root@centos ~]# id mysql    检查发现没有mysql用户
id: mysql: No such user
[root@centos ~]# useradd -s /sbin/nologin  -d /dev/null mysql  
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

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

 

(3)mysql的编译安装

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

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

./configure出了问题 

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

checking for tgetent in -lncurses... no

checking for tgetent in -lcurses... no

checking for tgetent in -ltermcap... no

checking for tgetent in -ltinfo... no

checking for termcap functions library... configure: error: No curses/termcap library found

原因:

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

解决办法:

下载安装相应软件包

[root@centos mysql-5.1.69]# yum -y install ncurses-devel 

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


Thank you for choosing MySQL!

Remember to check the platform specific part of the reference manual
for hints about installing MySQL on your platform.
Also have a look at the files in the Docs directory.

 

    make  && make install 

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

make[2]: Entering directory `/down/webinstall/mysql-5.1.57/mysql-test 
make[3]: Entering directory `/down/webinstall/mysql-5.1.57/mysql-test 
make[3]: Nothing to be done for `install-exec-am. 
make        INSTALL_TO_DIR="/usr/local/mysql/mysql-test" install_test_files 
make[4]: Entering directory `/down/webinstall/mysql-5.1.57/mysql-test

 mysql配置文件

[root@centos mysql-5.1.69]# cp support-files/my-medium.cnf  /etc/my.cnf

 

mysql的开机启动
[root@centos mysql-5.1.69]# cp  support-files/mysql.server /etc/init.d/mysqld
[root@centos mysql-5.1.69]# chmod 700 /etc/init.d/mysqld 
[root@centos mysql-5.1.69]# chkconfig --list |grep mysqld
[root@centos mysql-5.1.69]# chkconfig --add mysqld

 


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


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

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


启动mysql

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


service mysqld restart

ps aux |grep mysqld

netstat -anpt |grep 3306

 

apache的安装

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

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

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using ::1. Set the 'ServerName' directive globally to suppress this message

编辑/etc/hosts  文件

 # Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.87.128          centos.wolf.org   centos

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

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

   1, apache  安装

          tar  xvfz   httpd-2.2.11.tar.gz                                

          cd httpd-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="rewrite deflate",--enable-mods-share=most,效果等同于多个--enable-<FEATURE>=share 

          make && make install
          /usr/local/apache/bin/apachectl restart             启动 httpd 

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

 

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

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

[root@centos httpd-2.2.11]# cd /usr/local/apache/conf/
[root@centos conf]# vim httpd.conf 

User apache
Group apache

遇到的问题:

[root@centos httpd-2.2.11]# service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

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

[root@centos apache]# ps aux|grep http
root     10271  0.0  0.0  61228   728 pts/1    R+   14:45   0:00 grep http
daemon   32757  0.0  0.1  29144  1444 ?        S    14:19   0:00 /usr/local/apache/bin/httpd -k start
daemon   32758  0.0  0.1  29144  1444 ?        S    14:19   0:00 /usr/local/apache/bin/httpd -k start
daemon   32759  0.0  0.1  29144  1444 ?        S    14:19   0:00 /usr/local/apache/bin/httpd -k start
[root@centos apache]# kill -9 32757
[root@centos apache]# kill -9 32758
[root@centos apache]# kill -9 32759
[root@centos apache]# ps aux|grep http
root     10447  0.0  0.0  61228   752 pts/1    S+   14:47   0:00 grep http
[root@centos apache]# /usr/local/apache/bin/apachectl start
[root@centos apache]# /usr/local/apache/bin/apachectl start
httpd (pid 10463) already running
[root@centos apache]# 
[root@centos apache]# ps aux|grep http
root     10463  0.0  0.1  24936  1784 ?        Ss   14:47   0:00 /usr/local/apache/bin/httpd -k start
apache   10464  0.0  0.1  24936  1340 ?        S    14:47   0:00 /usr/local/apache/bin/httpd -k start
apache   10465  0.0  0.1  24936  1340 ?        S    14:47   0:00 /usr/local/apache/bin/httpd -k start
apache   10466  0.0  0.1  24936  1340 ?        S    14:47   0:00 /usr/local/apache/bin/httpd -k start

 

php安装配置

 

postfix正式安装

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

        [root@centos ~]# rpm -e --nodeps sendmail


一, 创建用户和组

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

[root@centos postfix-2.10.0]# groupadd -g 1001 postfix
[root@centos postfix-2.10.0]# groupadd -g 1002 postdrop
[root@centos postfix-2.10.0]# useradd -M -u 1001 -g postfix  -s /sbin/nologin postfix

[root@centos postfix-2.10.0]# useradd -M -u 1002 -g postdrop  -s /sbin/nologin  postdrop


二,编译安装

    在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@centos postfix-2.10.0]#  make makefiles '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’ has no member named ‘db’
dict_mysql.c:773: error: ‘HOST’ has no member named ‘db’
dict_mysql.c:774: error: ‘HOST’ has no member named‘hostname’
dict_mysql.c:775: error: ‘HOST’ has no member named ‘name’
dict_mysql.c:776: error: ‘HOST’ has no member named ‘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)

Install the appropriate db*-devel package first.

安装要想mysql支持就要安装e db*-devel

[root@centos postfix-2.10.0]# yum install -y db*-devel


(3)

xsasl_cyrus_server.c:606: error: 'XSASL_CYRUS_SERVER' has no member named 'username'
xsasl_cyrus_server.c:607: error: 'XSASL_CYRUS_SERVER' has no member named 'username'
make: *** [xsasl_cyrus_server.o] Error 1
make: *** [update] Error 1

缺少cyrus认证包:有cyrus-sasl-md5 cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel  

[root@centos postfix-2.10.0]# yum install -y cyrus-sasl-md5 cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel  

(4)

bin/postconf: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory

解决方法:

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

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

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


[root@centos postfix-2.10.0]#  /usr/sbin/postfix  start
postfix/postfix-script: fatal: the Postfix mail system is already running
[root@centos postfix-2.10.0]# netstat -antup|grep 25
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      32713/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 ~]# telnet  centos.wolf.org 25
Trying 192.168.87.128...
Connected to centos.wolf.org (192.168.87.128).
Escape character is '^]'.
220 centos.wolf.org ESMTP Postfix
ehlo centos.wolf.org
250-centos.wolf.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:root@centos.wolf.org
250 2.1.0 Ok
rcpt to:centos@centos.wolf.org
451 4.3.0 <centos@centos.wolf.org>: Temporary lookup failure
quit
221 2.0.0 Bye
Connection closed by foreign host.

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

[root@centos ~]# telnet  192.168.87.128  25
Trying 192.168.87.128...
Connected to centos.wolf.org (192.168.87.128).
Escape character is '^]'.
220 centos.wolf.org ESMTP Postfix
mail from:root@wolf.org
250 2.1.0 Ok
rcpt to:centos@wolf.org
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
ni hao
.
250 2.0.0 Ok: queued as DABD5578047
quit
221 2.0.0 Bye

测试成功了!!



二,开启基于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 = Welcome to our $myhostname ESMTP,Warning: Version not you  

      在低于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/postfix reload
 postfix/postfix-script: refreshing the Postfix mail system
[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@centos courier-authlib-0.62.4]# yum install libtool-ltdl  libtool-ltdl-devel  -y

[root@centos courier-authlib-0.65.0]# yum groupinstall -y    "Development Libraries"     "Development Tools"    "Legacy Software Development"         "X Software Development"                                                      

[root@centos courier-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@centos courier-authlib-0.62.4]# make && make install

[root@centos courier-authlib-0.62.4]# make install-configure

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


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

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

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


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

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

[root@centos authlib]# cp authdaemonrc authdaemonrc.back

[root@centos authlib]# vim authdaemonrc

authmodulelist="authmysql"
authmodulelistorig="authmysql"

[root@centos authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/

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


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

uid和gid是postfix的uid和gid为1001

  • MYSQL_SERVER localhost  

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

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

  • MYSQL_PASSWORD extmail            (密码)  

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

  • MYSQL_DATABASE  extmail  

  • MYSQL_USER_TABLE  mailbox  

  • MYSQL_CRYPT_PWFIELD  password  

  • MYSQL_UID_FIELD  '1001'  

  • MYSQL_GID_FIELD  '1001'  

  • MYSQL_LOGIN_FIELD  username  

  • MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)  

  • MYSQL_NAME_FIELD  name  

  • MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)  


启动courier-authlib 

[root@centos authlib]# cd ~/courier-authlib-0.62.4
[root@centos courier-authlib-0.62.4]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@centos courier-authlib-0.62.4]# chmod 755 /etc/rc.d/init.d/courier-authlib
[root@centos courier-authlib-0.62.4]#  chkconfig --level 35 courier-authlib on
[root@centos courier-authlib-0.62.4]# service courier-authlib start
Starting Courier authentication services: authdaemond


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

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


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


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

virtual_gid_maps = static:1001

virtual_transport = virtual  

#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, try again later.  

#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 ~]# tar zxvf extman-1.1.tar.gz 

[root@centos ~]# cd extman-1.1/docs/

[root@centos docs]# mysqladmin -uroot password 123456
[root@centos docs]# mysql -uroot -p123456  < extmail.sql 
[root@centos docs]# mysql -uroot -p123456  < init.sql 
[root@centos docs]# cp mysql_virtual_* /etc/postfix/

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

[root@centos ~]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.1.69-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';

Query OK, 0 rows affected (0.00 sec)


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


[root@centos ~]# /usr/sbin/postfix  stop
postfix/postfix-script: stopping the Postfix mail system
[root@centos ~]# /usr/sbin/postfix  start
postfix/postfix-script: starting the Postfix mail system


ok!!!!

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

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

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

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

      [root@test3 mysql]# yum install -y libpng libpng-devel libjpeg libjpeg-devel freetype freetype-devel gd gd-devel mysql-devel  libxml2-devel

 

   [root@test3 php-5.2.9]# tar  xvfz  php-5.2.9.tar.gz 

   [root@test3 php-5.2.9]# cd php-5.2.9  

  [root@test3 php-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 && make install

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

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

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

 AddType application/x-httpd-php .php

 LoadModule php5_module modules/libphp5.so

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

  phpinfo();

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


到此为止mysql apache php安装成功了

 

dovecot安装配置

dovecot安装配置

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

    [root@centos ~]# yum install  dovecot
Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 1.7 M
Is this ok [y/N]: y
Downloading Packages:
dovecot-1.0.7-7.el5_7.1.x86_64.rpm                       | 160 kB     02:00 ...
http://mirrors.grandcloud.cn/centos/5.9/os/x86_64/CentOS/dovecot-1.0.7-7.el5_7.1.x86_64.rpm: [Errno 4] Socket Error: timed out
Trying other mirror.
dovecot-1.0.7-7.el5_7.1.x86_64.rpm                       | 1.7 MB     00:06    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
 Installing     : dovecot                                                  1/1

Installed:
dovecot.x86_64 0:1.0.7-7.el5_7.1        

Complete!


配置dovecot

vim  /etc/dovecot.conf

protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no

auth default {  

mechanisms = plain

 passdb sql {  

args = /etc/dovecot-mysql.conf  

   }  

   userdb sql {  

args = /etc/dovecot-mysql.conf  

   }

}


# vim /etc/dovecot-mysql.conf                

driver = mysql
connect = [host=localhost dbname=extmail user=extmail password=extmail]    
default_pass_scheme = CRYPT
password_query = [SELECT username AS user,password AS password FROM mailbox WHERE username = '%u']
user_query = [SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u']


[root@centos ~]# service dovecot restart
Stopping Dovecot Imap:                                     [  OK  ]
Starting Dovecot Imap:                                     [  OK  ]

extmail的配置安装

1,解压安装

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

[root@centos ~]# mkdir -pv /var/www/extsuite
mkdir: created directory `/var/www'
mkdir: created directory `/var/www/extsuite'
[root@centos ~]# cp -R  extmail-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  

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

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
Server version: Apache/2.2.11 (Unix)
Server built:   May 21 2013 14:12:11
Server's Module Magic Number: 20051115:21
Server loaded:  APR 1.3.3, APR-Util 1.3.4
Compiled using: APR 1.3.3, APR-Util 1.3.4
Architecture:   64-bit
Server MPM:     Prefork
 threaded:     no
   forked:     yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"开启了 suexec的功能
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"


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

<VirtualHost *:80>

ServerName mail.test.com  

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

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

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

SuexecUserGroup postfix postfix  

</VirtualHost>


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


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

# vi /etc/httpd/httpd.conf  

User postfix  

Group postfix  

<VirtualHost *:80>

ServerName  192.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>         //目录权限
       Options Indexes FollowSymLinks        //允许符号链接,访问不在本目录下的文件
       AllowOverride None                    //禁止读取.htaccess
       Order allow,deny               //指定先执行Allow访问规则,再执行Deny访问规则
       Allow from all                        //允许访问所有
       </Directory>

</VirtualHost>


4、依赖关系的解决
extmail将会用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下载原码包进行安装。
[root@centos ~]# tar zxvf Unix-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 ~]# cd usr/
[root@centos usr]# cd
[root@centos ~]# cd Unix-Syslog-1.1
[root@centos Unix-Syslog-1.1]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Unix::Syslog
[root@centos Unix-Syslog-1.1]# make && make install

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

extman的配置安装

安装Extman-1.1  

1、安装及基本配置
# tar zxvf  extman-1.1.tar.gz
# mv extman-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 -R postfix.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
#chown postfix.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’t locate DBD/mysql.pm in
搜索DBD-mysql-4.005.tar.gz下载,安装,结果提示如下

之后提示Internal Server Error:
tail -f error_log
/usr/bin/perl: symbol lookup error: /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/mysql.so: undefined symbol: DBIc_TRACE_LEVEL

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

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


[Wed Nov 02 22:05:57 2011] [error] [client 192.168.1.82] Prototype mismatch: sub Encode::IMAPUTF7::decode ($$;$) vs none at /var/www/extsuite/extman/libs/Encode/IMAPUTF7.pm line 76., referer: http://192.168.1.7/extman/cgi/sysinfo.cgi?sid=361641f5c9ee2bdb9fb606a920c327b1

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


不能发送邮件:
warning: do not list domain upkiller.com in BOTH mydestination and virtual_mailbox_domains
明显是指这个域名不在mydestination许可的列表

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


2,虚拟域不能发送邮件给自己:
Sep 28 14:01:10 rohto postfix/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 (unknown user: “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

        # Do not remove the following line, or various programs
        # that require network functionality will fail.
         127.0.0.1               localhost.localdomain localhost
         ::1             localhost6.localdomain6 localhost6
         192.168.87.128          mail.example.org   mail

vim /etc/sysconf/network

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

    1,安装软件包

 [root@centos ~]# yum install -y bind-devel bind-chroot bind  caching-nameserver

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

    [root@centos ~]# cd /var/named/chroot/
    [root@centos chroot]# ls
    dev  etc  var

   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 {
           type master;
           file "example.org";
           };
zone "87.168.192.in-addr.arpa" IN {
       type master;
       file "87.168.192.in-addr.arpa";
       allow-update { none; };
           };


 [root@mail ~]# vim  /var/named/chroot/var/named/example.org
$TTL    86400
@       IN      SOA     example.org.  root.localhost.  (
                                     1997022700 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
                   IN      NS      mail.example.org.
mail                IN      A       192.168.87.128
example.org.        IN      MX  10        mail.example.org.


   [root@mail ~]# vim  /var/named/chroot/var/named/87.168.192.in-addr.arpa
$TTL    86400
@       IN      SOA     mail.example.org  root.localhost.  (
                                     1997022700 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
          IN      NS      mail.example.org.
128       IN      PTR      mail.example.org.




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

example.org     mail exchanger = 10 mail.example.org.


配置成功!!!

extmail正确使用

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

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


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




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


发送邮件

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



cc@example.org收邮件


 

 

本文由 CentOS中文站 - 专注Linux技术 作者:centos 发表,其版权均为 CentOS中文站 - 专注Linux技术 所有,文章内容系作者个人观点,不代表 CentOS中文站 - 专注Linux技术 对观点赞同或支持。如需转载,请注明文章来源。

相关文章

发表评论

邮箱地址不会被公开。 必填项已用*标注