postfix+courier-authlib+msyql+extmail邮件服务

  1. 云栖社区>
  2. 博客>
  3. 正文

postfix+courier-authlib+msyql+extmail邮件服务

余二五 2017-11-08 16:54:00 浏览1282
展开阅读全文

postfix+Courier-authlib+extmail

204924604.png

一、安装DNS服务:

1、配置本地yum

[root@localhost ~]# vim/etc/yum.repos.d/rhel-debuginfo.repo

205356662.jpg

205407192.jpg

2、使用本地yum安装DNS软件包。

编辑好本地yum之后,使用yum安装DNS服务所需的软件包。

[root@localhost ~]# yum install bind bind-chrootcaching-nameserver

205543272.jpg

3、编辑DNS的配置文件。

[root@localhost ~]# cd /var/named/chroot/etc/

[root@localhost etc]# cp -pnamed.caching-nameserver.conf named.conf

[root@localhost etc]# vim named.conf

205728127.jpg

205737126.jpg

[root@localhost etc]# vim named.rfc1912.zones

210213347.png

[root@localhost etc]# cd ../var/named/

[root@localhost named]# cp -p localhost.zone a.com.zone

205902111.jpg

至此DNS服务已经配置完成。启动DNS服务,service named start。让named服务随系统启动,chkconfig named on。

210311606.jpg

因为该服务器是mail.a.com.域中的邮件交换器,所以要将服务的主机名改为mail.a.com。修改主机名的方法有两种,一种是临时修改,注销之后再次登录生效,重启失效。使用命令:“hostname主机名”另一种是永久修改,需要重启生效,编辑/etc/sysconfig/network文件,修改“HOSTNAME=主机名”。

[root@localhost named]# vim /etc/sysconfig/network

//HOSTNAME=mail.a.com

注销后重新登录,即可生效。


二、安装extmail前的准备工作

因为extmail是通过web来进行收发邮件,在线注册,身份验证的,所以需要httpd和mysql,openssl一些软件包。

httpd mysql mysql-server mysql-developenssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel

libtool-ltdl libtool-ltdl-devel expect

210911198.jpg

210922535.jpg

主要的软件包是:

dovecot //邮件的接收服务

httpd //利用web来进行收发电子邮件

mysql //mysql客户端

mysql-server //mysql的服务

其它的就是一些依赖的软件包,安装完成后,需要对某些服务进行设置。

①给mysql添加管理员登录口令,以及对其操作的授权。

[root@mail~]# mysqladmin -u root -p password 'redhat'

mysql>mysql -uroot -p 密码:redhat

mysql>grant all privileges on *.* to root@'%' identified by 'redhat'; 对网络上的账号进行授权

mysql>flush privileges; 刷新数据库里面的权限

211328553.png


三、安装extmail相关软件

软件包介绍:

Unix-Syslog-0.100.tar.gz //日志补丁软件包

courier-authlib-0.63.1.20111230.tar.bz //结合mysql进行身份验证

extmail-1.2.tar.gz //实现收发信件

extman-1.1.tar.gz // 实现web注册

postfix-2.8.2.tar.gz //postfix安装包,提供smtp服务


因为使用的是源代码进行安装,安装时需要进行编译,所以系统要具备基本的开发环境,安装圆满了才能够顺利进行。使用:yum grouplist查看系统开发环境所具备的基本组。

211511398.jpg

1、安装postfix

注意在安装postfix之前,要先关闭掉系统自带的sendmail,否则会和postfix的安装冲突。

servic sendmail stop //关闭sendmail服务

chkconfig sendmail off //不随系统启动

① tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/

//解压缩postfix压缩包到/usr/local/src目录中

② cd /usr/local/src/postfix-2.8.2

//进入解压缩后的目录中

③ groupadd -g 2525 postfix

//添加一个组,组ID:2525

④ useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

//创建一个无登录权限无家目录的用户postfix到组postfix中

⑤ groupadd -g 2526 postdrop

//添加一个组,组ID:2526

⑥ useradd -g postdrop –u 2526 -s /sbin/nologin -M postdrop

//创建一个无登录权限无家目录的用户postdropx到组postdrop中

⑦make makefiles'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL-I/usr/include/sasl -DUSE_TLS ''AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'

//生成postfix的make文件

⑧ make //编译

⑨ make install //安装

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


install_root: [/] /

tempdir: [/usr/local/src/postfix-2.6.5] /tmp

config_directory: [/etc/postfix]

command_directory: [/usr/sbin]

daemon_directory:[/usr/libexec/postfix]

data_directory:[/var/lib/postfix]

html_directory: [no]/var/www/postfix_html

mail_owner: [postfix] //系统中要有postfix这个用户

mailq_path: [/usr/bin/mailq]

manpage_directory: [/usr/local/man]

newaliases_path: [/usr/bin/newaliases]

queue_directory: [/var/spool/postfix]

readme_directory: [no]

sendmail_path:[/usr/sbin/sendmail]

setgid_group: [postdrop] //系统中要有postdrop这个组


⑩ newaliases

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

安装好postfix之后,为它编写一个服务控制脚本或者利用rpm包中的postfix中的控制脚本。这里使用的是rpm包中postfix的服务控制脚本来控制源码安装的postfix。

211609982.jpg

211627722.jpg

2、编辑postfix的配置文件。

#vi /etc/postfix/main.cf

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

myhostname = mail.a.com

mydomain = a.com

inet_interfaces = all

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

mynetworks = 192.168.30.0/24,127.0.0.0/8

myorigin=$mydomain

说明:

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

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

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

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

mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;

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

注意:

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


四、为postfix开启基于cyrus-sasl的认证功能

1、查看postfix是否支持cyrus-sasl认证。

212012736.jpg

2、产生postfix与sasl结合的文件。

利用sasl与sendmail结合的文件产生sasl与postfix认证的文件

[root@mailinit.d]# cd /usr/lib/sasl2/

[root@mailsasl2]# cp -p Sendmail.conf smtpd.conf

[root@mailsasl2]# service saslauthd start

[root@mailsasl2]# chkconfig saslauthd on

212040970.jpg

启动saslauthd服务:service saslauthd start

3、修改postfix的配置文件,启用sasl认证。

#vim /etc/postfix/main.cf

添加如下内容:

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_banner = Welcome to our$myhostname ESMTP,Warning: Version not Available!//登录时的提示信息

212321114.jpg

4、重新加载配置文件:service postfix reload

212402302.png


五、安装Courier authenticationlibrary

1、安装

①tar -jxvfcourier-authlib-0.63.1.20111230.tar.bz2 -C/usr/local/src/

//解压缩courier-authlib压缩包

② cd/usr/local/src/courier-authlib-0.63.1.20111230/

//进入解压缩后的文件中

③ ./configure \

--prefix=/usr/local/courier-authlib \

--sysconfdir=/etc \

--with-authmysql \

--with-mysql-libs=/usr/lib/mysql \

--with-mysql-includes=/usr/include/mysql \

--with-redhat \

--with-authmysqlrc=/etc/authmysqlrc \

--with-authdaemonrc=/etc/authdaemonrc \

--with-ltdl-lib=/usr/lib \

--with-ltdl-include=/usr/include

//对环境进行配置,红色参数至关重要,要确保路径的正确性。

④ make //编译

⑤ make install //安装

2、共享库文件以及头文件

为了使其它程序能够查找到courier-authlib的库文件和头文件,需要将它的这些文件共享到系统的库文件和头文件中.

①共享库文件

在/etc/ld.so.conf.d/目录中创建一个文件:courier-authlib.conf

#touch /etc/ld.so.conf.d/courier-authlib.conf

内容是:courier-authlib的库文件的路径:/usr/local/courier-authlib/lib/courier-authlib/

212434828.jpg

②共享头文件

ln -s/usr/local/courier-authlib/include /usr/include/courier-authlib

//创建一个连接,将courier-authlib的头文件链接到系统的库文件目录中

4、修改文件的权限

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

212452685.jpg

5、修改认证模块文件和mysql结合文件

# cp /etc/authdaemonrc.dist /etc/authdaemonrc

# cp /etc/authmysqlrc.dist /etc/authmysqlrc

① 修改/etc/authdaemonrc文件

212514344.jpg

② 修改/etc/authmysqlrc

编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。

MYSQL_SERVER localhost

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

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

MYSQL_PASSWORD extmail (密码)

MYSQL_SOCKET /var/lib/mysql/mysql.sock (msyql的sock文件路径)

MYSQL_DATABASE extmail (访问extmail的数据库)

MYSQL_USER_TABLE mailbox (存放extmail用户的表)

MYSQL_CRYPT_PWFIELD password (对passwo字段加密)

MYSQL_UID_FIELD '2525' (extmail用户文件的用户ID)

MYSQL_GID_FIELD '2525' (extmail用户文件的组ID)

MYSQL_LOGIN_FIELD username (登录时的字段名username)

MYSQL_HOME_FIELD concat('/var/mailbox/',homedir) (用户的家目录)

MYSQL_NAME_FIELD name (用户名字段name)

MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir) (用户邮件目录)

6、产生courier-authlib的服务控制脚本

# cd/usr/local/src/courier-authlib-0.63.1.20111230/

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

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

# chkconfig --add courier-authlib

# chkconfig --level 2345courier-authlib on

# service courier-authlib start (启动服务)

212601233.jpg

7、创建extmail用户的虚拟家目录

新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:

#mkdir -pv /var/mailbox

#chown –R postfix:postfix /var/mailbox

212622688.jpg

8、cyrus-sasl与courier-authlib结合

接下来重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容:

pwcheck_method: authdaemond

log_level: 3

mech_list:PLAIN LOGIN

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

212644367.jpg

然后重启saslauthd服务:service saslauthd restart

212655259.jpg


六、安装extman及其相关配置

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

1、编辑/etc/postfix/main.cf,添加如下内容:

########################Virtual MailboxSettings########################

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

virtual_gid_maps = static:2525

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,the user's maildir has overdrawn his diskspace quota, please Tidy your mailboxand try again later.

virtual_overquota_bounce = yes

212801673.jpg

2、安装extman

① tar -zxvf extman-1.1.tar.gz

//解压缩extman软件包到当前目录

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

# cd extman-1.1/docs

-------------------------------------------------------------------------------------------------------------

# mysql -u root -p <extmail.sql

# mysql -u root -p <init.sql

# mysql -u root -p 进行验证

212835757.jpg

212848119.jpg

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

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

mysql> GRANT all privileges onextmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';

mysql>FLUSH PRIVILEGES; 让设置的内容生效

cp mysql_virtual_* /etc/postfix/

//将extman-1.0.1/docs目录中的mysql开头的文件拷贝到/etc/postfix,设置虚拟域文件

212908974.jpg

service postfix restart

七、配置dovecot

1、在开始我们使用的是yum来安装dovecot,这里只需要对其进行配置

# vi /etc/dovecot.conf

要修改的内容如下:

mail_location =maildir:/var/mailbox/%d/%n/Maildir

213007204.jpg

213016587.jpg

auth default {

mechanisms = plain

passdb sql {

args = /etc/dovecot-mysql.conf

}

userdb sql {

args = /etc/dovecot-mysql.conf

}

213037519.jpg

213045491.jpg

2、产生dovecot与mysql结合的文件

首先要修改postf的配置文件:

# vim /etc/postfix/main.cf

213107480.jpg

#vim /etc/dovecot-mysql.conf //产生一个文件,内容如下:

driver = mysql

connect = host=localhost dbname=extmailuser=extmail password=extmail (如mysql源码安装,host=/tmp/mysql.sock)

default_pass_scheme = CRYPT

password_query = SELECT username ASuser,password AS password FROM mailbox WHERE username = '%u'

user_query = SELECT maildir, uidnumberAS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'

213133962.jpg

重启dovecot服务:service dovecot restart 。

213143336.jpg

监控日志,tail -f /var/log/maillog/ 出现如下信息说明正常:

213152871.jpg


八、安装Extmail (首先要确保安装了httpd)

1、安装

① # tar -zxvf extmail-1.2.tar.gz

//解压缩到当前目录

② # mkdir -pv/var/www/extsuite

//创建一个目录,用来作为一个web站点

# mv extmail-1.2/var/www/extsuite/extmail

# mv extman-1.1/var/www/extsuite/extman

//将extmail和extman拷贝到新建的站点目录下,以便通过web访问。

213224850.jpg

③ 修改extmail目录下的cgi目录下文件的属性

213240864.jpg

④ 修改主配置文件

# cd /var/www/extsuite/extmail/

# cp webmail.cf.default webmail.cf

# vim 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

213353580.png


SYS_MYSQL_HOST = localhost

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


SYS_MYSQL_TABLE = mailbox

SYS_MYSQL_ATTR_USERNAME = username

SYS_MYSQL_ATTR_DOMAIN = domain

SYS_MYSQL_ATTR_PASSWD = password

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


SYS_AUTHLIB_SOCKET =/var/spool/authdaemon/socket

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

SYS_AUTHLIB_SOCKET =

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

213417151.jpg

⑤ 重启相关服务

213430539.jpg


九、配置httpd

由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDA为postfix自带,因此将指定为postfix用户:


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

# vi /etc/httpd/httpd.conf

User postfix

Group postfix


<VirtualHost *:80>

ServerName mail.a.com

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

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

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

</VirtualHost>


十、安装extamil日志补丁

extmail将会用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下载原码包进行安装。

① # tar -zxvf Unix-Syslog-0.100.tar.gz

//解压缩文件

② # cd Unix-Syslog-0.100

# perl Makefile.PL //使用perl工具进行配置

# make //编译

# make install //安装


十一、extmail与extman结合

修改配置文件以符合本例的需要:

# cd /var/www/extsuite/extman

# chown -R postfix:postfix cgi/

# cp webman.cf.default webman.cf

# vi webman.cf

修改内容如下:

----------------------------------------------------------------

SYS_MAILDIR_BASE = /home/domains

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

SYS_MAILDIR_BASE = /var/mailbox


修改

SYS_CAPTCHA_ON = 1 为 SYS_CAPTCHA_ON =0


修改

SYS_LANG = en_US 为 SYS_LANG = zh_CN

③ 通过web访问extman的目录

在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:

ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi

Alias /extman /var/www/extsuite/extman/html

213533477.png

重启httpd服务:service httpd restart

④创建其运行时所需的临时目录,并修改其相应的权限:

#mkdir -pv /tmp/extman

#chown postfix.postfix /tmp/extman

⑤ 使用虚拟域

在postfix主配置文件中的mydestination选项中,我们指明了哪些域是本地的域,但是在extmail中,我们使用了虚拟域,为了产生冲突,需要禁用到postfix中的mydestination选项,如果不禁用,那在设置邮箱域时,必须和postfix中指明的相同。

213557739.jpg


十二、测试

好了,到此为止,重新启动apache服务器后,您的Webmail和Extman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:

选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org 密码为:extmail*123*。首先应该添加一些域名。

214015779.png

214036864.png

214048424.png


说明:

(1) 添加域名后,如果无法自由注册,请重新编辑该域的属性,允许自由注册。

(2) 如果您安装后无法正常显示校验码,安装perl-GD模块会解决这个问题。如果想简单,您可以到以下地址下载适合您的平台的rpm包,安装即可: http://dries.ulyssis.org/rpm/packages/perl-GD/info.html

(3) extman-1.1自带了图形化显示日志的功能;此功能需要rrdtool的支持,您需要安装此些模块才可能正常显示图形日志。

(4)如果登陆http://ip/extmail后出现:

DBIconnect(‘database=extmail;host=localhost;mysql_socket=/var/lib/mysql/mysql.sock’,'extmail’,…)failed: Access denied for user ‘extmail’@'localhost’ (using password: YES) at/opt/test/htdocs/extsuite/extmail/libs/Ext/Auth/MySQL.pm line 45

检查webmail.cf中于数据库连接的设置是否正确,以及authmysqlrc的数据库设置是否正确即可










本文转自 only223wym 51CTO博客,原文链接:http://blog.51cto.com/ymchaofeng/1322962,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注