柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

Centos6.4 extmail收发邮件服务器搭建

       不是专业搞邮件服务器的,所以搭建不了专业的用于公司使用的那种企业邮箱,但是搭建一个服务器用于发送报警的邮件服务器还是可以的。你使用163之类的邮箱发送邮件,有次数限制,发邮件次数多了可能就暂时有一段时间不能使用了,我们线上的监控就遇到过两次。然后如果各机房服务器之间做了ACL限制访问呢,你ACL内部有一个邮件服务器,机房之间还是可以使用邮件服务的。搭建一个邮件服务器也方便自己的使用,比如说,我可以创建一个专门的邮箱用来收报警邮件,我可以将这个邮箱的收件箱挂载到别的地方让程序来监控这个目录,如果有问题报警我会分析这封邮件的内容,加上我设置的规则,如果类似于服务死掉了,服务内存过大了,磁盘被日志占据的太多了,等一些可以交由程序自己搞定的事情,就可以来搞一搞。

       先提供两个链接:

       第一个链接是extmail的官网wiki:http://wiki.extmail.org  我们可以在上面查看相关软件的配置与安装过程

       第二个链接是perl插件的下载链接:http://search.cpan.org/

       好了就扯淡到此,简单邮件服务器的搭建也不是什么高深的技术,写一篇博文记录一下。


一、最外部的dns服务器设置

blob.png

#设置MX记录,邮箱交换协议,以指定与域名相对应的邮件服务器所在的地址,我们的邮件都是什么名称@一个域名,就是这里设置。当然你设置了这条dns你才能收到别人发给你的邮件。用户的邮件系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。

blob.png

#首先是设置A记录,你有A记录mail.120ni.com才能解析到我们制定的服务器上面去呢,当然我们要搭建的是web管理的邮件服务器也需要A记录。

#第三条要注意啊,TXT记录一般指为某个主机名或域名设置的说明,一般用它TXT记录确保企业邮局通信安全。我们这条TXT记录是什么意思呢,这是SPF记录:SPF(Sender Policy Framework)记录为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录,它用于登记某个域名拥有的用来外发邮件的所有IP地址按照SPF的格式在DNS记录中增加一条TXT类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件。SPF是跟DNS相关的一项技术,它的内容写在DNS的txt类型的记录里面。mx记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟mx相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。如果不想自己的邮箱被当成垃圾邮件,这里要设置一下。

这句dns记录的意思是,v=spf1 说明是一个SPF的v1记录,a (这个a是指 mail.120ni.com 解析出来的IP地址,若没有配置应取消),mx (mail.120ni.com 对应的mx,即 mail.120ni.com的A记录所对应的ip),mx:mail.120ni.com (如果没有配置过mail.120ni.com这条MX记录也应取消),ip4:182.92.151.36 (使用ipv4协议,发件人的ip地址为:182.92.151.36),~all: 意思是除了上面的,其他的都不认可。

=====================分割线============================================

好了这样我们的dns就设置完毕了,当然这是常规的设置,还有其他额外的一些其他的设置,比如DKIM数字验证

blob.png

网上都有可以自己搜下,想关的文章有很多。

下面我们找台linux机器来dig一下看看我们设置是否生效。

# dig txt 120ni.com #查询txt记录

120ni.com.585INTXT"v=spf1 a mx mx:mail.120ni.com ip4:182.92.151.36 ~all"  #说明已经生效

# dig mail.120ni.com +short #A记录已经生效

182.92.151.36

# dig mail.120ni.com MX #MX记录查询

下面补充一下:

blob.png

如果你需要客户端连接邮箱服务器的话,最好这三个都CNAME一下,因为你不CNAME,客户端默认是生成这三个域名连接,你不CNAME你客户端连接的时候就要手工改。第一次客户端新加邮箱就知道了。

博文来自:www.51niux.com

二、邮件服务器基础环境设置

  1. 首先我们最好把我们的主机名设置成跟我们上面设置的mx记录一致,命令就不贴了很简单。

  2. 时间同步,关闭selinux,先关闭防火墙,这些都是最基本的设置先设置。

  3. yum安装lamp环境,你想编译也可以,我主要就是要个web环境就yum安装了:

    # yum install httpd httpd-devel  mysql mysql-server mysql-devel php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml

  4.  更改postfix的uid,默认是89,改为2525或者其他大于500的,不然后面可能会出现一些错误:

      # groupmod -g 2525 postfix 

     #usermod -u 2525 postfix

 5.  yum安装一些软件省的后面报错:

# yum install openssl-devel  perl-DBD-MySQL libtool tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect perl-Unix-Syslog  db4 db4-devel cyrus-sasl-* dovecot-mysql perl-CGI perl-GD


三、邮件服务器的搭建

(一)、安装postfix

系统会自带一个postfix软件,我这里是2.6的,# postconf -d mail_version用这个命令查看邮件软件版本。我不想用系统自带的,所以我蛋疼的自己编译了。

官网下载软件:http://www.postfix.org/download.html进入此页面后选择China, Hong Kong,进入到下载页,里面有不同的版本。这里我就下载postfix2.9版本。

# wget ftp://ftp.cuhk.edu.hk/pub/packages/mail-server/postfix/official/postfix-2.9.15.tar.gz

# rpm -e postfix-2.6.6-2.2.el6_1.x86_64 --nodeps #卸载原来的postfix软件

# tar zxf postfix-2.9.15.tar.gz 

# cd postfix-2.9.15

# make      makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'     #CCARGS表示编译器gcc参数是有些,-DHAS_MYSQL表示启用postfix支持MYSQL的功能,AUX表示辅助的,LIBS表示库文件,AUXLIBS表示辅助的库文件,指定MYSQL库文件的路径,并查找mysqlclient的客户端,-lz启用压缩工具,-lm启用编码工具,sasl2的库文件,-lsasl2表示启用这个库,-lssl表示启用openssl加密,-lcrypto表示启用crypto库。

#make

#make install #会有一些选项。默认一路回车就可。

#newaliases #上一步安装结束后,postfix会提示你执行/usr/bin/newaliases生成别名二进制文件,不做这步会影响postfix的效率。

# postconf -a  #查看一下postfix的支持的认证方式,说明支持cyrus风格的sasl认证。

cyrus

dovecot

(二)、 安装courier-authlib

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

#wget http://sourceforge.net/projects/courier/files/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2/download

#tar jxf download 

# cd  courier-authlib-0.64.0

# ./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc/  --without-authpam --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/lib64/mysql --with-mysql-includes=/usr/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-mailuser=postfix --with-mailgroup=postfix --with-ltdl-lib=/usr/lib64/ --with-ltdl-include=/usr/include

#make && make install

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

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

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

#vim /etc/authdaemonrc

authmodulelist="authmysql"  #只保留mysql的认证方式

authmodulelistorig="authmysql"

daemons=10 #开启认证的进程数,根据配置自行修改
authdaemonvar=/usr/local/courier-authlib/var/spool/authdaemon


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

MYSQL_SERVER            localhost

MYSQL_USERNAME          extmail

MYSQL_PASSWORD          extmail

MYSQL_SOCKET            /var/lib/mysql/mysql.sock

MYSQL_PORT              3306

MYSQL_DATABASE          extmail

MYSQL_USER_TABLE        mailbox


MYSQL_CRYPT_PWFIELD     password  #哪个字段是用户的密码

MYSQL_UID_FIELD         2525

MYSQL_GID_FIELD         2525

MYSQL_LOGIN_FIELD       username #哪个字段是用户的账号

MYSQL_HOME_FIELD        concat('/var/mailbox/',homedir) #账号用户的家目录在哪里,最后的/必须得有,不然系统要启动故障了

MYSQL_NAME_FIELD        name #用户的全名在哪个字段上

MYSQL_MAILDIR_FIELD     concat('/var/mailbox/',maildir) #账号的邮件目录


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

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

# echo "/usr/local/courier-authlib/lib/courier-authlib" >>/etc/ld.so.conf.d/courier-authlib.conf

#ldconfig

#/etc/init.d/courier-authlib start

# ps -ef|grep courier #查看一下是否有进程运行,由于是socker的方式,所以没有端口。

# mkdir –p /var/mailbox #新建虚拟用户邮箱所在的目录

# chown -R  postfix /var/mailbox #授权


==================================可能出现的问题================================================================

#当然环境不同你可能再./configue的时候安装不成功,如提示configure: error: invalid ltdl library directory: `/usr/lib64/'或者configure: error: invalid ltdl library directory: `/usr/lib/'

解决办法:

第一种: --with-ltdl-lib=/usr/lib64/ --with-ltdl-include=/usr/include去掉不加

第二种:

# wget  ftp.gnu.org/gnu/libtool/libtool-2.4.tar.gz

# ./configure --prefix=/usr/local/libtool --enable-ltdl-install

# make && make install

#./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc/  --without-authpam --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/lib64/mysql --with-mysql-includes=/usr/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-mailuser=postfix --with-mailgroup=postfix --with-ltdl-lib=/usr/local/libtool/lib/ --with-ltdl-include=/usr/local/libtool/include/

=======================================================================================================================


(三)、配置postfix支持虚拟域和虚拟用户认证

  1. 配置SMTP认证

# vi /etc/sasl2/smtpd.conf 

pwcheck_method: authdaemond

mech_list: PLAIN LOGIN

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

#当然也可以配置log_level级别:log_level: 3

2. postfix配置文件的修改

# vim /etc/postfix/main.cf

inet_interfaces = all #这个前面的注释去掉

mydestination=127.0.0.1 #加上这句话

local_recipient_maps = #注释去掉,不然收不到邮件

mynetworks = 127.0.0.1 #mynetworks只要这一句话

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

broken_sasl_auth_clients = 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 Available!

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

virtual_gid_maps = static:2525

virtual_transport = virtual


$cat  /etc/postfix/main.cf|grep -v "^#"|grep -v "^$"   #这是没有注释掉的配置

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = all
mydestination= 127.0.0.1
local_recipient_maps =
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.1 
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no
inet_protocols = ipv4
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 
broken_sasl_auth_clients = 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 Available! 
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

===========================为了方便上面的复制粘贴我在这里注释上面的内容===============================

#######################Virtual Mailbox Settings######################

virtual_mailbox_base = /var/mailbox  

#邮箱的默认位置

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

#mysql账号密码表的记录文件

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

#mysql的操作文件

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

#并发一次只投递一次邮件

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

#mailbox里面有限定就会覆盖postfix对用户的限定

virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace

quota,please Tidy your mailbox and try again

#用户目录大小超过限制了给用户提示信息

virtual_overquota_bounce = yes

#超过限制了进行邮件弹回

==================================注释============================================================


3. 配置dovecot

#vi /etc/dovecot/dovecot.conf  #因为我们是yum安装的,所以要改这里的默认文件。特别说明的是dovecot2和dovecot1上面的配置有些变化。我这是dovecot2版本的配置。

disable_plaintext_auth = no

log_path = /var/log/dovecot.log

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

passdb {

  args = /etc/dovecot-mysql.conf

  driver = sql

}

ssl = no

userdb {

  args = /etc/dovecot-mysql.conf

  driver = sql

}


==================注释==================================

vi /etc/dovecot.conf   #下面是1的配置,因为我是编译安装的dovecot,所以配置文件直接指定在了/etc下面。dovecot的编译后的启动命令:/usr/local/dovecot/sbin/dovecot  -c /etc/dovecot.conf

protocols = imap pop3 lmtp

disable_plaintext_auth = no

log_path = /var/log/dovecot.log

ssl_disable = yes

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

auth default {

mechanisms = plain

passdb {

driver = sql

       args = /etc/dovecot-mysql.conf

   }

 userdb {

driver =sql

       args = /etc/dovecot-mysql.conf

}

}


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

#%d%n是支持的两个宏,%d表示域名,%n是用户的用户名

auth default {

      mechanisms = plain  #认证机制是plain

      passdb sql { #mysql为认证

               args = /etc/dovecot/dovecot-mysql.conf  #账号密码所在位置

      }

      userdb sql { #使用mysql

               args = /etc/dovecot/dovecot-mysql.conf

      }


#dovecot的编译方式:./configure--prefix=/usr/local/dovecot --sysconfdir=/etc --with-sql --with-mysql && make && make install

========================注释=========================


#vi /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'


4. 配置extman和extmail

下载官网:http://www.extmail.org/download    #要填信息的

# tar zxf extman-1.1.tar.gz 

# cd extman-1.1

# mysql -uroot -p <docs/extmail.sql   #如果数据库比较新比如是mysql5.5或者mariadb默认用的是InnoDB引擎的数据库,可能出现插入失败,可以修改此文件(将TYPE=MyISAM COMMENT='Ext/Webman - Admin Accounts';   去掉,也没多少行)

# mysql -uroot -p <docs/init.sql   #这一步可以不用执行,那你就得有一定的数据库操作能力了,那么extman的登录用户就要手工创建了,可以打开看看,内容不多。

#/etc/init.d/mysqld start

# mysql -uroot -p

mysql> grant all privileges on extmail.* to extmail@localgist identified by 'extmail';

mysql> grant all privileges on extmail.* to extmail@'127.0.0.1' identified by 'extmail';

mysql> flush privileges;

mysql> exit;

# cp -rf /tools/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 = /var/mailbox  #

SYS_CAPTCHA_ON = 0  #关闭验证码功能

注意:启用虚拟域以后,需要取消中心域,即注释掉myhostname,mydestination,mydomain,myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的

# cp docs/mysql_virtual_* /etc/postfix/


#tar zxf extmail-1.2.tar.gz

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

#cp /var/www/extsuite/extmail/webmail.cf.default   /var/www/extsuite/extmail/webmail.cf

#vi  /var/www/extsuite/extmail/webmail.cf #更改一些配置

SYS_USER_LANG = en_CN#设置语言为中文

SYS_MIN_PASS_LEN = 8 #密码最小长度为8位

SYS_MAILDIR_BASE = /var/mailbox #用户邮件的存放位置

SYS_MYSQL_USER = extmail  #用户名

SYS_MYSQL_PASS = extmail  #密码

SYS_MYSQL_DB = extmail  #数据库

SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket #用来指明authdaemosocket文件的位置,以实现postfix通过数据库身份验证

=============================注释=====================================================================

其实还有个问题,就是web登陆的问题,就是它默认的session是写到/tmp下面,所以就经常会出现:

图片.png

#类似于Can't open /tmp/extman//sid_或Can't open /tmp/extmail//sid_之类的错误,所以还是要改下:

$vim /var/www/extsuite/extman/webman.cf

#SYS_SESS_DIR = /tmp/extman/     #注释掉原来的指向,改为下面的配置
SYS_SESS_DIR = /var/www/extsuite/extman/session

$vim /var/www/extsuite/extmail/webmail.cf

#SYS_SESS_DIR = /tmp    #注释掉原来的指向,改为下面的配置
#SYS_SESS_DIR = /tmp/extmail/session
SYS_SESS_DIR = /var/www/extsuite/extmail/session

$mkdir /var/www/extsuite/extman/session
$mkdir /var/www/extsuite/extmail/session

$chown postfix:postfix /var/www/extsuite/extman/session
$chown postfix:postfix /var/www/extsuite/extmail/session

=============================继续往下操作===================================================================

5. 修改http配置

#vi /etc/httpd/conf/httpd.conf 

User postfix  #修改用户名

Group postfix #修改用户组

<VirtualHost *:80>

ServerName mail.120ni.com

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

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

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

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

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

</VirtualHost>


# chown -R postfix:postfix /var/www/extsuite  #不然extmail和extman两个目录数主数组都是500

# mkdir /tmp/{extman,extmail}

# chown -R postfix:postfix /tmp/{extman,extmail}

# /etc/init.d/httpd restart #启动httpd服务

#在浏览器输入域名或者服务器IP,然后会页面报错:

Unix::Syslog not found, please install it first! (in cleanup) Undefined subroutine &Ext::Logger::do_closelog called at /var/www/extsuite/extmail/libs/Ext/Logger.pm line 86.

解决办法:

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

#yum install perl-CGI*

# tar zxf Unix-Syslog-1.1.tar.gz 

# cd Unix-Syslog-1.1

# perl Makefile.PL

# make && make install

#然后再重新刷新web页面,恢复正常,我们先选择登录邮箱管理进去进行下邮箱的修改,初始的用户名:root@extmail.org,密码:extmail*123*

blob.png

博文来自:www.51niux.com

6. 配置Mailgraph_ext,使用Extman的图形日志

blob.png

# /var/www/extsuite/extman/daemon/cmdserver -v -d  #执行这个,解决No such file or directory问题,让系统正常显示信息。

loaded ok  #指定命令后的提示

#我们进入到了首页,但是首页的系统信息有个报错,然后点击图形日志呢,会有个报错,但是到这里已经不影响你的使用了,如果想看分析图什么的还要继续搞一搞。

点击图形日志后的报错信息:

Can't locate RRDs.pm in @INC (@INC contains: /var/www/extsuite/extman/libs /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 /var/www/extsuite/extman/libs/Ext/GraphLog.pm line 23. BEGIN failed--compilation aborted at /var/www/extsuite/extman/libs/Ext/GraphLog.pm line 23. Compilation failed in require at /var/www/extsuite/extman/libs/Ext/MgrApp/ViewLog.pm line 22. BEGIN failed--compilation aborted at /var/www/extsuite/extman/libs/Ext/MgrApp/ViewLog.pm line 22. Compilation failed in require at /var/www/extsuite/extman/cgi/viewlog.cgi line 18.

解决办法:

#yum install rrdtool-devel rrdtool-perl -y  #再点击图形日志不会报错了,但是没图啊,因为少监控。MailGraph_ext是专门为Extmail实现图形化日志监控而开发的一个附加软件。他作为Extman的一个组成部分,集成到了Extman的Web界面。

# cp -r /var/www/extsuite/extman/addon/mailgraph_ext /usr/local/

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

解决方法:

下面是官网说明:http://wiki.extmail.org/%E5%AE%89%E8%A3%85mailgraph_ext

#接下来安装图形日志的运行所需要的软件包Time::HiRes、File::Tail两个包可以去http://search.cpan.org搜索并下载获得。

File::Tail的下载链接:search.cpan.org/CPAN/authors/id/M/MG/MGRABNAR/File-Tail-1.3.tar.gz

Time::HiRes的下载链接:search.cpan.org/CPAN/authors/id/J/JH/JHI/Time-HiRes-1.9739.tar.gz

# tar zxf Time-HiRes-1.9739.tar.gz 

# cd Time-HiRes-1.9739

# perl Makefile.PL

# make && make install

# cd /tools/

# tar zxf File-Tail-1.3.tar.gz 

# cd File-Tail-1.3

# perl Makefile.PL 

# make && make install

# /usr/local/mailgraph_ext/mailgraph-init start  #再次启动mailgraph_ext

Starting mail statistics grapher: mailgraph_ext   #没有报错信息了

Starting queue statistics grapher: qmonitor

# ps -ef|grep mailgraph  #查看进程,下面显示已经有进程再运行

root     25728     1  0 15:06 ?        00:00:00 /usr/bin/perl -w /usr/local/mailgraph_ext/mailgraph_ext.pl -l /var/log/maillog -d --daemon-pid=/var/run/mailgraph.pid --daemon-rrd=/var/lib

root     25730     1  0 15:06 ?        00:00:00 /usr/bin/perl -w /usr/local/mailgraph_ext/qmonitor.pl -d --daemon-pid=/var/run/qmonitor.pid --daemon-rrd=/var/lib


博文来自:www.51niux.com

7. 启动相关服务

启动postfix服务:

#cd /var/spool/postfix 

# chown  -R postfix:postfix /var/spool/postfix/*

# chown -R postfix:postdrop /var/spool/postfix/maildrop

# chown -R postfix:postdrop /var/spool/postfix/public

# chown -R postfix:root  /var/lib/postfix/

# /usr/sbin/postfix  start

postfix/postfix-script: starting the Postfix mail system  #有此条信息说明启动成功

==================注释==============================================

#如果不进行上面授权的话,启动postfix会出错,如提示:

postfix/postfix-script: warning: not owned by postfix: /var/lib/postfix/.

postfix/postfix-script: warning: not owned by group postdrop: /var/spool/postfix/public

postfix/postfix-script: warning: not owned by group postdrop: /var/spool/postfix/maildrop

================================================================

启动dovecot服务:

# /etc/init.d/dovecot start


剩下的服务我们都已经再前面启动了,将这些服务添加到开机启动:/etc/rc.local里面:

/usr/local/mailgraph_ext/mailgraph-init start

/var/www/extsuite/extman/daemon/cmdserver -v -d

/etc/init.d/httpd restart

/usr/sbin/postfix  start

/etc/init.d/courier-authlib restart

/etc/init.d/mysqld start

 /etc/init.d/dovecot start


博文来自:www.51niux.com

8. 对邮件服务器进行配置

第一步:更改管理员

首先我们先看一下我们超级管理员的类型:

blob.png

我们现在再创建都不是admin总管理员类型了,再创建管理员都是postmaster类型都被admin来管理,我们这个总管理员的名称我们不喜欢,要换一个管理员的名称应该怎么办呢。

这里我也没有太深究,我就想到了一个更改数据库的方法:

# mysqldump -A  -B  -uroot -p >/tmp/sql.sql 更改之前先备份,出问题了也可以改回来。

mysql> use extmail; #我们的邮件数据库为extmail

mysql> update manager set username='admin';   #这里我们将manager表的username字段更改为我们想要设置的管理员名称

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from manager\G          #   我们再来查看一下manager表,我们的管理员名称已经修改

*************************** 1. row ***************************

        username: admin

        password: $1$BrT9qxfB$Ha81Mb5YVV6rNKNN5jmtj1

            type: admin

             uid: root

            name: Super User

        question: my question

          answer: my answer

disablepwdchange: 0

      createdate: 2007-02-14 15:10:04

      expiredate: 2010-11-08

          active: 1

1 row in set (0.00 sec)

blob.png

#再刷新一下页面,我们的管理员用户名已经发生了更改,同时将过期时间更改一下,并且把密码改成我们想要更改为的密码。然后你可以退出并重新登录验证一下旧的用户名密码还能否登录,新的是否生效。


第二步:管理域

删除域:

blob.png


#这个域是系统默认的,对于我们来说是无用的,点击右边的红叉删除掉。删除的时候会提示你有别名无法删除,那是因为这个域里面创建了别的用户,要删除掉。

添加域:

点击上图中的那个添加域图标,将我们的mail.120ni.com的域添加进去。下面是我添加后域名的展示。

blob.png

blob.png

#上面是创建域之后的界面,分为两个部分,第一张图是我们这个域相关的设置,如可以创建多少用户啊,磁盘限额啊,是否可以自由注册啊,过期时间。

第二张图为我们创建用户的初始模板,大家可以根据自己的需求进行设置,特殊的用户等创建完之后再单独修改就可以了。


第三步:管理域的用户

blob.png

#图形界面,添加用户,就右上角选择我们对哪个域进行添加用户的操作,这里我们创建了两个用户。大家搭建完之后可以自己玩一下,图形界面很简单的。


第四步:管理用户组

我们生产环节中可能涉及到运维组啊,开发组啊,等等,需要一封邮件发给多个人,这时候就需要创建一个邮件组。这就是上图中别名需要做的事情。

blob.png

#上图为用户别名,也就是用户组的创建展示。

当然通过web只能说明本地连接邮件服务器并发送没有问题,那么远程连接是否有问题呢,就需要客户端来连接测试了,我们用foxmail验证。

blob.png

blob.png

看上图为什么前面要设置三个域名的CNAME了吧,就是为了如果很多人使用就需要绑定客户端,如果不设置域名解析的话,这里就需要手工改服务器的IP很麻烦。

但是你通过POP3连接是连接不上的,然后通过IMAP的接受服务器的类型是可以创建成功的,但是在你的客户端只会显示收件箱,没有别的目录,这显然是连接有问题的,为什么呢?请查看日志:

tail -f /var/log/dovecot.log   #查看dovecot的日志发现下面的错误信息

dovecot: Sep 13 16:20:37 Info: pop3-login: Login: user=<csp@mail.120ni.com>, method=PLAIN, rip=客户端IP, lip=邮件服务器IP

dovecot: Sep 13 16:20:37 Error: POP3(csp@mail.120ni.com): stat(/var/mailbox/mail.120ni.com/csp/Maildir/tmp) failed: Permission denied (euid=1000 egid=1000 missing +x perm: /var/mailbox/mail.120ni.com)

dovecot: Sep 13 16:20:37 Error: POP3(csp@mail.120ni.com): Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2016-09-13 16:20:37]

dovecot: Sep 13 16:20:37 Info: POP3(csp@mail.120ni.com): Couldn't open INBOX top=0/0, retr=0/0, del=0/0, size=0

dovecot: Sep 13 16:20:56 Info: imap-login: Login: user=<csp@mail.120ni.com>, method=PLAIN, rip=客户端IP, lip=邮件服务器IP

dovecot: Sep 13 16:21:00 Info: IMAP(csp@mail.120ni.com): Connection closed bytes=15/188

dovecot: Sep 13 16:21:05 Info: imap-login: Login: user=<csp@mail.120ni.com>, method=PLAIN, rip=客户端IP, lip=邮件服务器IP

dovecot: Sep 13 16:21:05 Error: IMAP(csp@mail.120ni.com): opendir(/var/mailbox/mail.120ni.com/csp/Maildir) failed: Permission denied (euid=1000 egid=1000 missing +x perm: /var/mailbox/mail.120ni.com)

dovecot: Sep 13 16:21:05 Info: imap-login: Login: user=<csp@mail.120ni.com>, method=PLAIN, rip=客户端IP, lip=邮件服务器IP

dovecot: Sep 13 16:21:05 Error: IMAP(csp@mail.120ni.com): stat(/var/mailbox/mail.120ni.com/csp/Maildir/tmp) failed: Permission denied (euid=1000 egid=1000 missing +x perm: /var/mailbox/mail.120ni.com)

dovecot: Sep 13 16:21:11 Error: IMAP(csp@mail.120ni.com): stat(/var/mailbox/mail.120ni.com/csp/Maildir/tmp) failed: Permission denied (euid=1000 egid=1000 missing +x perm: /var/mailbox/mail.120ni.com)

dovecot: Sep 13 16:21:11 Error: IMAP(csp@mail.120ni.com): stat(/var/mailbox/mail.120ni.com/csp/Maildir/tmp) failed: Permission denied (euid=1000 egid=1000 missing +x perm: /var/mailbox/mail.120ni.com)

解决办法:

blob.png

#通过web页面创建用户的时候,此用户默认使用的用户ID是1000组ID也是1000,所以会提示我们没有权限,这里将ID号都改为2525.你再次用客户端连接就会成功了。发送接收邮件也不会出现什么问题了,大家可以自行测试。

博文来自:www.51niux.com

第五步:发送邮件测试

我们先用foxmail连接我们创建的用户邮箱,当然你也可以通过web页面登录的形式进行测试。我这里选择用web连接的形式。

blob.png

#我先用qq邮箱给我的csp@mail.120ni.com发送了一份邮件,可以收到。

blob.png

#然后我给QQ邮箱发送了一封邮件,QQ邮箱也是可以收到的,并且没有再垃圾箱里面。

blob.png

#然后我用QQ给我的用户组发送了一封邮件,用户组也生效。


第六步:查看我们图形日志

blob.png

#通过此图可以看出我们的图形日志,已经生效,并且开始对我们的邮件收发情况进行监控并绘图。

简易的邮件服务器到这里已经搭建完毕了,当然你也可以试一下非邮件系统的用户是否能使用我们的邮件服务器。

作者:忙碌的柴少 分类:邮件服务器 浏览:5406 评论:4
留言列表
访客
访客 写的很详细,基本看着这个就搞定了  回复
长者
长者 小伙子不错嘛  回复
匿名
匿名 docker镜像https://hub.docker.com/r/palidin/extmail,方便安装使用  回复
忙碌的柴少
忙碌的柴少 嗯嗯 现在还是要多用docker哈  回复
发表评论
来宾的头像