【2022争霸赛*干货满满】Extmail的详解以及邮件服务器的搭建
  

SANGFOR_HZ 31523人觉得有帮助

{{ttag.title}}
Extmail的详解以及邮件服务器的搭建


一、extmail简介

       Extmail 是一个以perl语言编写,面向大容量ISP级应用,免费的高性能Webmail软件,主要包括ExtMail、Extman两个部分的程序套件。ExtMail套件用于提供从浏览器中登录、使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面。它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的IT应用环境,满足用户多变的需求,能快速进行开发、改进和升级,适应能力强的webmail系统。

二、extmail工作原理
            
       Extmail的工作原理图,如下图所示:

三、extmail安装

      从extmail的工作原理可以看出extmail的安装应用依赖许多安装工具包,所以extmail得安装步骤如下:
1、extmail安装前准备
(1)安装所需的rpm包,这包括以下这些:httpd, php, php-mysql, mysql, mysql-server, mysql-devel, openssl-devel, dovecot, perl-DBD-MySQL, tcl, tcl-devel, libart_lgpl, libart_lgpl-devel, libtool-ltdl, libtool-ltdl-devel, expect
//安装相关软件包
[root@server1 ~]# yum install httpd     mysql  mysql-server  mysql-devel  openssl-devel  dovecot  perl-DBD-MySQL  tcl  tcl-devel  libart_lgpl  libart_lgpl-devel libtool-ltdl  libtool-ltdl-devel  expect
[root@server1 ~]# yum groupinstall "Development Libraries"
(2)启动http服务器和mysql服务,并查看端口以及给mysql管理员设置密码。
[root@server1 ~]# service httpd start
[root@server1 ~]# chkconfig httpd on
[root@server1 ~]# netstat -tupln |grep httpd
tcp        0      0 :::80               :::*             LISTEN      3093/httpd  
[root@server1 ~]# service mysqld start
[root@server1 ~]# chkconfig mysqld on
[root@server1 ~]# netstat -tupln |grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      3293/mysqld   
[root@server1 ~]# mysqladmin -u root -p password '123'
2、安装Postfix
//卸载系统自带的Postfix
[root@server1 ~]# rpm -qa postfix
postfix-2.6.6-2.2.el6_1.i686
[root@server1 ~]# yum remove postfix
//删除原有的Postfix账号和组,以及相关的目录
[root@server1 ~]# userdel -r postfix
[root@server1 ~]# groupdel postfix
[root@server1 ~]# rm -rf /var/spool/postfix
//创建Postfix相关的账号和密码
[root@server1 ~]# groupadd -g 2525 postfix
[root@server1 ~]# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
[root@server1 ~]# groupdel postdrop
[root@server1 ~]# groupadd -g 2526 postdrop
[root@server1 ~]# useradd -g postdrop -u 2526 -s /bin/false -M postdrop
//解压Postfix安装包
[root@server1 ~]# tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
[root@server1 ~]# cd /usr/local/src/postfix-2.8.2/
//进行编译和安装
[root@server1 postfix-2.8.2]# 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'
[root@server1 postfix-2.8.2]# make && make install
//产生控制脚本
[root@server1 ~]# cp /media/cdrom/Packages/postfix-2.6.6-2.2.el6_1.i686.rpm  /tmp/abc/
[root@server1 ~]# cd /tmp/abc/
[root@server1 abc]# rpm2cpio postfix-2.6.6-2.2.el6_1.i686.rpm |cpio -id
[root@server1 abc]# cd etc/
[root@server1 etc]# cd rc.d/
drwxr-xr-x. 2 root root 4096 Apr 17 12:43 init.d
[root@server1 rc.d]# cd init.d/
-rwxr-xr-x. 1 root root 3852 Apr 17 12:43 postfix
[root@server1 init.d]# cp -p postfix /etc/init.d/
//启动服务,并查看端口号
[root@server1 ~]# service postfix start        
Starting   postfix:                       [  OK  ]
[root@server1 ~]# netstat -tupln |grep 25
//此时可以看到,25端口并没有启动,这时我们可以看日志信息如下:
[root@server1 ~]# tail -f /var/log/maillog  
Apr 17 15:03:14 server1 postfix/postfix-script[8409]: warning: not owned by postfix: /var/lib/postfix/.
//从日志信息上可以看到,由于/var/lib/postfix目录文件没有所有者,因此要给与所有者权限。
[root@server1 ~]# chown -R postfix /var/lib/postfix/
[root@server1 ~]# service postfix restart
[root@server1 ~]# chkconfig --add postfix
[root@server1 ~]# chkconfig postfix on
//编辑配置文件
[root@server1 ~]# vim /etc/postfix/main.cf
修改以下几项为您需要的配置:
myhostname = mail.a.com
myorigin = a.com
mydomain = a.com
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.2.0/24, 127.0.0.0/8
//重新启动,并验证服务
[root@server1 ~]# service postfix restart
[root@server1 ~]# mail user1  //给user1发信息
Subject: 2112
weuqghfqhgreuhwirehfq
.
EOT
[root@server1 ~]# tail -f /var/log/maillog  //查看日志
从上面可以看到Postfix已经成功安装

3、为postfix开启基于cyrus-sasl的认证功能
//查看是否安装cyrus-sasl软件包
[root@server1 ~]# rpm -qa |grep sasl     
cyrus-sasl-lib-2.1.23-13.el6_3.1.i686
cyrus-sasl-md5-2.1.23-13.el6_3.1.i686
cyrus-sasl-2.1.23-13.el6_3.1.i686
cyrus-sasl-devel-2.1.23-13.el6_3.1.i686
//可以看到上面没有安装plain认证功能,所以要安装
[root@server1 Packages]# yum install cyrus-sasl-plain-2.1.23-13.el6_3.1.i686.rpm
//postfix与sasl结合,编辑Postfix文件,添加以下内容
[root@server1 ~]# vim /etc/postfix/main.cf
编辑完后保存,然后重新启动服务
[root@server1 ~]# service postfix restart
//验证Postfix与sasl结合
[root@server1 ~]# telnet 127.0.0.1 25
EHLO mail.a.com
250-mail.a.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH CRAM-MD5 LOGIN PLAIN DIGEST-MD5
250-AUTH=CRAM-MD5 LOGIN PLAIN DIGEST-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
从上面可以看到已经结合。
//编辑/usr/local/sasl2smtpd.conf
[root@server1 ~]# mkdir /usr/local/lib/sasl2
[root@server1 ~]# vim /usr/local/lib/sasl2/smtpd.conf
添加以下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
//启动saslauthd服务
[root@server1 ~]# service saslauthd start
Starting  saslauthd:                            [  OK  ]
[root@server1 ~]# chkconfig --add saslauthd
[root@server1 ~]# chkconfig saslauthd on

4、安装Courier authentication library
//解压安装包
[root@server1 ~]# tar -jxvf courier-authlib-0.63.0.tar.bz2  -C  /usr/local/src/
//进行编译和执行make
[root@server1 ~]# cd /usr/local/src/courier-authlib-0.63.0/
[root@server1 courier-authlib-0.63.0]# ./configure  \
> --prefix=/usr/local/courier-authlib \
> --syscnotallow=/etc \
> --with-authmysql  \
> --with-mysql-libs=/usr/lib/mysql \
> --with-mysql-includes=/usr/include/mysql \
> --with-redhat \
> --with-authmysqlrc=/etc/authmysqlrc \
> --with-authdaemnotallow=/etc/authdaemonrc
[root@server1 courier-authlib-0.63.0]# make && make install
//重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容:
[root@server1 ~]# vim /usr/local/lib/sasl2/smtpd.conf
//修改权限
[root@server1 ~]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon/
[root@server1 ~]# cp /etc/authdaemonrc.dist /etc/authdaemonrc
[root@server1 ~]# cp /etc/authmysqlrc.dist  /etc/authmysqlrc
//修改/etc/authdaemonrc配置文件,编辑内容如下:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemnotallow=10
//修改/etc/authmysqlrc配置文件,编辑内容如下:
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  '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)
//产生启动控制脚本
[root@server1 courier-authlib-0.63.0]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@server1 courier-authlib-0.63.0]# chmod 755 /etc/init.d/courier-authlib  //给予可执行权限
[root@server1 courier-authlib-0.63.0]# chkconfig --add courier-authlib
[root@server1 courier-authlib-0.63.0]# chkconfig --level 2345 courier-authlib on
[root@server1 courier-authlib-0.63.0]# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
[root@server1 courier-authlib-0.63.0]# ldconfig -v
//启动courier-authlib服务
[root@server1 ~]# service courier-authlib start
Starting Courier authentication services: authdaemond
//新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户
[root@server1 ~]# mkdir -pv /var/mailbox
[root@server1 ~]# chown -R postfix /var/mailbox

5、让postfix支持虚拟域和虚拟用户
(1)编辑/etc/postfix/main.cf,添加如下内容:
[root@server1 ~]# vim /etc/postfix/main.cf
##################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
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, please Tidy your mailbox and try again later.
virtual_overquota_bounce = yes
(2)使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:
[root@server1 ~]# tar -zxvf extman-1.1.tar.gz //解压
[root@server1 ~]# cd extman-1.1/docs
[root@server1 docs]# cp mysql_virtual_* /etc/postfix/
//导入数据库
[root@server1 docs]# mysql -u root -p <extmail.sql
[root@server1 docs]# mysql -u root -p <init.sql
(3)授予用户extmail访问extmail数据库的权限
[root@server1 docs]# mysql -u root -p
Enter password:
mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
mysql> GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';
mysql> FLUSH PRIVILEGES;
说明:启用虚拟域以后,需要取消中心域,即注释掉myhostname, mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的。
//重新启动Postfix
[root@server1 docs]# service postfix restart

6、配置dovecot
//编辑dovecot配置文件
[root@server1 ~]# cd /etc/dovecot/dovecot/conf.d
[root@server1 conf.d]# vim 10-mail.conf
//编辑Postfix的配置文件
[root@server1 conf.d]# vim /etc/postfix/main.cf
[root@server1 conf.d]# mv auth-sql.conf.ext auth-sql.conf
[root@server1 conf.d]# vim auth-sql.conf
//编辑/etc/dovecot-mysql.conf
[root@server1 conf.d]# vim /etc/dovecot-mysql.conf
//启动dovecot
[root@server1 ~]# service dovecot start
[root@server1 ~]# chkconfig dovecot on

7、安装Extmail-1.2
(1)解压安装
[root@server1 ~]# tar -zxvf extmail-1.2.tar.gz
[root@server1 ~]# mkdir -pv /var/www/extsuite
[root@server1 ~]# mv extmail-1.2 /var/www/extsuite/extmail
[root@server1 ~]# cd /var/www/extsuite/extmail/
[root@server1 extmail]# cp webmail.cf.default webmail.cf
(2)修改主配置文件
[root@server1 extmail]# vim webmail.cf
修改选项说明如下:
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_AUTHLIB_SOCKET = /var/spool/authdaemon/socket
此句用来指明authdaemo socket文件的位置,这里修改为:
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
//修改 cgi执行文件属主为apache运行身份用户
[root@server1 extmail]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
(3)apache相关配置
[root@server1 extmail]# vim  /etc/httpd/conf/httpd.conf

//重新启动Apache服务
[root@server1 extmail]# service httpd restart
//安装CGI相关安装包
[root@server1 ~]# yum install perl-CGI*
(4)依赖关系的解决
[root@server1 ~]# tar -zxvf Unix-Syslog-0.100.tar.gz -C /usr/local/src/
[root@server1 ~]# cd /usr/local/src/Unix-Syslog-0.100/
[root@server1 Unix-Syslog-0.100]# perl Makefile.PL
[root@server1 Unix-Syslog-0.100]# make && make install
8、安装Extman-1.1
//编辑extman配置文件
[root@server1 ~]# mv extman-1.1 /var/www/extsuite/extman
[root@server1 ~]# cd /var/www/extsuite/extman
[root@server1 extman]# mv webman.cf.default webman.cf         
[root@server1 extman]# vim webman.cf
修改SYS_CAPTCHA_ON = 1为SYS_CAPTCHA_ON = 0
//修改cgi的所属组
[root@server1 extman]# chown -R postfix.postfix /var/www/extsuite/extman/cgi/
//修改Apache主配置文件
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf
//创建其运行时所需的临时目录,并修改其相应的权限
[root@server1 ~]# mkdir  -pv  /tmp/extman
[root@server1 ~]# chown postfix.postfix  /tmp/extman

四、效果验证

通过浏览器访问extmail,结果如下:
点击登陆邮箱,选择登陆邮箱管理进入后台登陆管理页面,如下:
输入管理账号root@extmail.org和密码extmail*123*登陆,如下所示:
进入后可以做一些操作,如新建域如下:​
新建完域后,进入登陆界面注册账号如下:
填写要注册的域名,然后点击注册,进入界面如下:
输入用户名,然后点击提交,进入如下界面:​
然后输入姓名和密码就注册成功,然后用user1登陆,如下图所示:
输入user1的用户名和密码登陆,结果如下图所示:
​ 然后就可以写邮件,发送邮件了。

打赏鼓励作者,期待更多好文!

打赏
34人已打赏

hnsangfor 发表于 2022-10-23 09:31
  
楼主的文章图文并茂,清晰易懂,看完这波操作可以轻松上手了,如遇到问题再向楼主请教~
新手595921 发表于 2022-10-23 09:39
  
果然是高手在民间,楼主帖子写的不错,很有参考价值,还想看更多精彩分享,期待楼主下一篇好帖!
এ塔铃独语别黄昏এ 发表于 2022-10-23 17:38
  
学习一下,感谢分享!!!!!!
阿Q 发表于 2022-10-23 19:29
  
果然是高手在民间,楼主帖子写的不错,很有参考价值,还想看更多精彩分享,期待楼主下一篇好帖!
嘀嘀柠柠 发表于 2022-10-23 22:13
  
楼主的文章图文并茂,清晰易懂,看完这波操作可以轻松上手了,如遇到问题再向楼主请教~
飞翔的苹果 发表于 2022-10-24 08:13
  
学习一下,感谢楼主分享!!!!
科思哲 发表于 2022-10-24 08:26
  
学习一下,感谢分享!!!!!!
韩_鹏 发表于 2022-10-24 09:25
  
感谢分享                                       
怪兽君 发表于 2022-10-24 09:33
  
学习一下,感谢楼主分享!!!!
发表新帖
热门标签
全部标签>
每日一问
2024年技术争霸赛
安装部署配置
技术笔记
每周精选
技术盲盒
2023技术争霸赛专题
产品连连看
干货满满
技术咨询
信服课堂视频
功能体验
自助服务平台操作指引
秒懂零信任
运维工具
文档捉虫活动
标准化排查
功能咨询
通用技术
GIF动图学习
新版本体验
问题分析处理
每日一记
SDP百科
排障笔记本
纪元平台
畅聊IT
答题自测
专家问答
技术圆桌
测试报告
用户认证
解决方案
VPN 对接
项目案例
地址转换
存储
技术争霸赛
卧龙计划
技术晨报
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
日志审计
流量管理
云计算知识
原创分享
sangfor周刊
SANGFOR资讯
专家分享
技术顾问
信服故事
终端接入
授权
设备维护
资源访问
虚拟机
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
华北区拉练
天逸直播
以战代练
山东区技术晨报
齐鲁TV
华北区交付直播
北京区每日一练

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人