【postfix系列之一】编译安装Postfix邮件服务器

一、安装前的准备工作

邮件依赖于DNS系统,所以安装postfix之前,要把DNS给弄好。如果系统有sendmail,需要把sendmail关掉

由于是编译安装postfix,所以如果有rpm的postfix,要删除掉,并且把postfix用户等信息也删除掉。因为我后面要配合做mysql认证,好像rpm的postfix不支持mysql认证,我也没有验证过,为了保险起见,直接源码来安装了!

创建postfix用户及组

注:这里不要为了偷懒而不去删除postfix用户,postfix的rpm包安装好之后,postfix用户的UID和GID是89,如果这里以这样一个ID去运行服务,后面会出一些错误!所以最好自己创建一个用户,ID号大于500的。我这里使用的是2525,也不建议大家改,因为这里一改,后面很多很多地方,都需要改。postfix搞起来本身就非常的麻烦!

安装编译环境及依赖软件包

有些源里可能没有perl-Unix-Syslog这个包,可以使用下面的命令来下载安装

还有perl-GD这个包,地址如下,下载完之后,使用yum localinstall来安装,因为这个有依赖关系,建议使用dag的源,这些包dag源里都有,dag源还是很给力的,顶一下!

 

启动saslauthd服务及mysql

二、开始安装postfix

开始安装

 注:上面的命令要注意的是根据自己的情况去修改一些东西。我这里是64位的系统,所以mysqlclient指的是/usr/lib64/,如果是32位的系统,就是/usr/lib/ 否则会报/usr/bin/ld: cannot find -lmysqlclient

安装完成后,可以看到postfix提示生成别名二进制文件

我这里准备搭建的是企业级的邮件系统,需要支持虚拟用户的,本地用户测试这一些东西,现在就先不搞了!

提供脚本管理postfix启动与停止,把下面的内容放在/etc/init.d/postfix里面

为脚本添加执行权限,并加入开机启动

为postfix开户基于cryus-sasl的认证功能

使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:

添加以下内容:

注意:
1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本 行视为上一行的延续;

三、安装Courier authentication library

courier-authlib是Courier组件中的认证库,它是courier组件中一个独立的子项目,用于为Courier的其它组件提供认证服务。其认证功能通常包括验正登录时的帐号和密码、获取一个帐号相关的家目录或邮件目录等信息、改变帐号的密码等。而其认证的实现方式也包括基于PAM通过/etc/passwd和/etc/shadow进行认证,基于GDBM或DB进行认证,基于LDAP/MySQL/PostgreSQL进行认证等。因此,courier-authlib也常用来与courier之外的其它邮件组件(如postfix)整合为其提供认证服务。

修改/etc/authdaemonrc 文件

配置通过MySQL认证,修改/etc/authmysqlrc,其中2525,2525 为postfix 用户的UID和GID。

提供SysV服务脚本及添加共享库文件并启动服务

由于是socket的方式,所以没有端口,验证一下进程有没启

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

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

四、让postfix支持虚拟域和虚拟用户并为postfix配置dovecot

支持虚拟域和虚拟用户,编辑/etc/postfix/main.cf,添加如下内容:

配置dovecot

编辑dovecot通过mysql认证的文件

启动dovecot服务:

五、安装Extmail和Extman

Extmail是一款国人开发的开源的webmail工具,主要是使用perl写的。Extmail用于用户的登陆注册,发送接收邮件等。Extman是Extmain的管理工具,主要用于管理员来管理Extmail的信息,比如添加虚拟用,添加用户等!

下载地址:http://www.extmail.org/cgi-bin/download.cgi

安装Extmail

修改Extmail的主配置文件

建立extmail的临时文件目录及session目录

apache相关配置

由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;如果apache打开了SUEXEC,需要配置suexec,挺麻烦的,我是直接关掉了

建立Extmail虚拟主机配置文件

安装及配置Extman

修改主配置文件

而后修改cgi目录的属主:

导入Extman的数据库

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

为Extman创建临时目录并给予权限

全部完成后,就可以通过IP地址或者域名来访问Extmail了。

extmail的首页,可以在域名那里输入你的域名,然后点下面的注册来注册一个用户,不过默认只有一个extmail的域,所以我们需要登陆Extman来管理域列表,添加一个我们自己的虚拟域

Extmail-index

点登录邮箱那个下拉三角,选择登录邮箱管理,默认的管理员账号和密码是:

 

Extmail-to-extman

Extman-log

很简单,一看就知道是做什么的,不过多解释了。

Extman-index

 六、配置Extman后台显示图形日志

我们点到图形日志,发现全是叉叉!

extmail-graph

 

这里需要安装一下perl的插件,还有服务需要启动一下

启动相关服务并加入开机启动

mail-graphok

 

七、配置mail日志每天回滚

一个简单东西,但是这个也是很重要的,试想一下,一个邮件的日志达到GB级别,分析起来也是很吃力的。如果能按日来每天自动回滚,这个日志不会太大,也方便查看分析某一天的日志。我们只需要使用lgoroute来简单的配置一下就可以了

这样做完之后,就可以把日志回滚到/data/maillog/里面了

Bug Fixd:

一、启动报错

错误解决:

二、使用POP协议认证报错

错误解决:

三、登陆的时候不断提示输入用户名密码

错误解决:

四、SASL认证失败

错误解决:

五、登陆报错

错误解决:

六、启动apache报错

目录明明是存在的,而且看日志是报403

错误解决:

七、打开Extmail报错

错误解决

八、不显示验证码

如下图

extmail-yanzhengma

查看apache的错误日志报如下

 错误解决:

 

extmail-yanzhengma-ok

 

九、启动dovecot报错

有可能是IPV6的支持被关掉了,改下配置文件,把监听IPV6地址的选项去掉即可

FIX:

十、安装完maildrop后,图形又不显示了

本来是好的,但是安装完maildrop之后,发现图形又不显示了,裂图了,这是因为安装完maildrop之后,邮件的用户修改了,如果没有修改,是不会出现这个情况的,只需要修改一下一个目录的权限即可。

 

  11 comments for “【postfix系列之一】编译安装Postfix邮件服务器

  1. 张勇
    2018 年 10 月 23 日 at 09:48

    博主你好,我安装好所有配置后,打开是apache默认欢迎界面,这是哪里配置出问题了呢?

  2. 黄定龙
    2017 年 1 月 30 日 at 19:16

    make makefiles ‘CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE _CYRUS_SASL -I/usr/include/sasl -DUSE_TLS -I/usr/include/openssl’
    ‘AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto’

    提示Makefile:5: *** missing separator. Stop.
    不知道为什么?

  3. donny
    2015 年 11 月 18 日 at 01:10

    博主你好,postfix的启动脚本在centos 7下报错,手动开启是可以的,能否改进一下,谢谢!

    日志:

    Nov 18 00:30:56 ~~~~ systemd[1]: Starting SYSV: Postfix is a Mail Transport Agent, which is the program that moves mail from one machine to another….
    — Subject: Unit postfix.service has begun with start-up
    — Defined-By: systemd
    — Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

    — Unit postfix.service has begun starting up.
    Nov 18 00:30:56 ~~~~~~ systemd[17674]: Failed at step EXEC spawning /etc/rc.d/init.d/postfix: Exec format error
    — Subject: Process /etc/rc.d/init.d/postfix could not be executed
    — Defined-By: systemd
    — Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

    — The process /etc/rc.d/init.d/postfix could not be executed and failed.

    — The error number returned while executing this process is 8.
    Nov 18 00:30:56 ~~~~~ systemd[1]: postfix.service: control process exited, code=exited status=203
    Nov 18 00:30:56 ~~~~~ systemd[1]: Failed to start SYSV: Postfix is a Mail Transport Agent, which is the program that moves mail from one machine to another..
    — Subject: Unit postfix.service has failed
    — Defined-By: systemd
    — Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

    — Unit postfix.service has failed.

    — The result is failed.
    Nov 18 00:30:56 ~~~~~~ systemd[1]: Unit postfix.service entered failed state.
    Nov 18 00:31:01 ~~~~~~ crond[633]: (root) WRONG FILE OWNER (/var/spool/cron/root)

    • donny
      2015 年 11 月 18 日 at 01:49

      已解决,经验证是用户权限问题…

  4. 金鑫
    2015 年 9 月 14 日 at 11:33

    真不错,页面清晰。已经实践

  5. Kli
    2014 年 5 月 20 日 at 12:15

    root登入进去后显示 connection refused 怎么回事啊?

  6. wink
    2014 年 5 月 10 日 at 11:14

    安装perl插件时候提示少No package prel-file-tail available.
    你这个包是在哪里找的

  7. 故作调
    2014 年 4 月 14 日 at 09:54

    [root@mail root]# /usr/local/mailgraph_ext/mailgraph-init start
    Starting mail statistics grapher: mailgraph_ext
    Can’t locate File/Tail.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/mailgraph_ext/mailgraph_ext.pl line 296.
    BEGIN failed–compilation aborted at /usr/local/mailgraph_ext/mailgraph_ext.pl line 296.
    Starting queue statistics grapher: qmonitor
    [root@mail root]# yum install perl-File-Tail
    Loaded plugins: fastestmirror, security
    Loading mirror speeds from cached hostfile
    * base: http://ftp.stu.edu.tw
    * extras: mirror.esocc.com
    * updates: mirror.esocc.com
    Setting up Install Process
    Package perl-File-Tail-0.99.3-1.2.el5.rf.noarch already installed and latest version
    Nothing to do
    [root@mail root]# cat /etc/redhat-release
    CentOS release 6.5 (Final)

    也是64位的版本,不知道是perl的插件没安装还是哪里有问题,命令执行不成功。。能否抽空帮我解答一下,谢谢了

  8. Joshua
    2014 年 3 月 26 日 at 17:46

    # chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
    # cp /etc/authdaemonrc.dist /etc/authdaemonrc
    # cp /etc/authmysqlrc.dist /etc/authmysqlrc

    我执行这个命令的时候出现不存在那个路径或者文件,怎么弄啊,希望能赐教!

    修改/etc/authdaemonrc 文件

    这个也是说找不到文件

    谢谢你,希望能够赐教,谢谢!

    • honway
      2014 年 3 月 28 日 at 10:19

      这说明你Courier authentication没有安装成功,请检查一下安装的时候有没有报错。还有,我这个环境是centos 6.5!

  9. V_v
    2014 年 2 月 11 日 at 17:25

    不错的文章,有机会实践一下!

故作调进行回复 取消回复

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