构建RHEL上的extmail
一、extmail_solutionz
1、ExtMail Solution 结构
ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案,核心部件包括了Postfix、Amavisd-new、ClamAV、ExtMail、ExtMan、Courier系列软件。是一个功能相对比较齐全的免费电子邮件系统。以下是其主要的特性列表:
主要特性
支持SMTP/POP3/HTTP协议
支持SMTP认证及ESMTP
可支持大容量邮箱(大于1GB)
高速Web界面访问邮箱
完整的Web管理后台
在线服务端病毒过滤
内建内容过滤
SMTP行为识别垃圾邮件
支持大量反垃圾邮件技术
图形化邮件日志分析
支持别名/多域/域管理员等
支持网络磁盘/POP3邮件
支持读/写HTML格式邮件
支持定制模板及多语言
二、操作系统安装
1、RedHat系统所需组件:
本文档支持RedHat Enterprise 4.x 及CentOS 4.x版本。要注意的是安装系统时,只安装如下的组件:
Web Server:
要注意必须选中httpd-suexec软件包,否则下文的配置将失效。
MYSQL数据库:
注意必须选中mysql-server, libdbi-dbd-mysql, perl-DBD-mysql等模块,否则extmail将无法连接mysql
VIM编辑器:
强烈建议安装vim-enhanced软件包,它支持main.cf彩色高亮语法分析。
其余的Xwindows, 打印,KDE/Gnore, 服务器配置工具,网络工具,开发包等全部都不是必选组件。安装完毕进入操作系统后,为增加系统安全性,建议禁止root直接登陆,并增加一个非root帐户,例如sysadmin。这样无法以root账户直接登陆系统,必须先以sysadmin身份登陆再su到root执行。
2、安装步骤:
略。。。。。。
3、配置SSH:
以root身份登进系统后,增加一个非root帐户,名称为sysadmin,密码按您的需求设置一个即可。接下来我们要禁止root直接登陆。
shell
# vi /etc/ssh/sshd_config
修改以下配置为:
PermitRootLogin no
然后重新启动sshd,这样禁止了root直接登陆。
shell
# /etc/init.d/sshd restart
4、配置SELinux
自从RHEL4/CentOS4以后,系统默认打开了SELinux支持,简单说SELinux就是一个强制性的安全机制,但是它也带来了不少麻烦,为了避免编写烦琐的policy规则,本文档将屏蔽掉SELinux对MySQL及httpd的保护。方法如下:
shell
# setsebool httpd_disable_trans=1
# setsebool mysqld_disable_trans=1
操作完毕后,重新启动mysql及apache,并将如下命令加入/etc/rc.d/rc.local以便服务器启动后能自动生效:
shell
# vi /etc/rc.d/rc.local
加入以下内容:
/usr/sbin/setsebool httpd_disable_trans=1
/usr/sbin/setsebool mysqld_disable_trans=1
/etc/init.d/mysqld restart
/etc/init.d/httpd restart
三、制作_yum_仓库
1、下载软件包
整个系统的安装全过程都要求以root身份执行,如果机器没有访问外部网络的能力,则事先下载好EMOS光盘映像,并上传到服务器。
备注:如果要在CentOS 5.x上面进行配置,请下载EMOS-1.5.ISO,配置方法不变;
shell
# su - root
# cd /root
# wget ftp://www5.extmail.org/emos/EMOS_1.5.iso
2、制作本地 yum 仓库
使用EMOS1.5.ISO光盘制作本地 yum 仓库;
此外,我们假设本次安装默认域是extmail.org,主机名为:mail.extmail.org
安装CentOS光盘中createrepo工具
shell
# rpm -ivh createrepo*
加载EMOS1.5的光盘,请把emos的光盘放到光驱中
shell
# mkdir /mnt/EMOS
# mount /dev/cdrom /mnt/EMOS
# cd /mnt
# createrepo .
3、创建客户端 yum 的定义文件:
shell
# cd /etc/yum.repos.d
# mkdir backup
# mv *.repo ./backup
# vi EMOS.repo
加入以下内容:
[EMOS]
name=EMOS
baseurl=file:///mnt/
enabled=1
gpgcheck=0
重新获取最新的仓库信息:
shell
# yum clean all
# yum list
四、配置mta-postfix
1、安装postfix
安装postfix
shell
# yum install postfix
# rpm -e sendmail
2、配置postfix
shell
# postconf -n > /etc/postfix/main2.cf
# mv /etc/postfix/main.cf /etc/postfix/main.cf.old
# mv /etc/postfix/main2.cf /etc/postfix/main.cf
编辑main.cf:
shell
# vi /etc/postfix/main.cf
增加如下内容:(添加到文件的后面)
# hostname
mynetworks = 127.0.0.1
myhostname = mail.extmail.org
mydestination = $mynetworks $myhostname
# banner
mail_name = Postfix - by extmail.org
smtpd_banner = $myhostname ESMTP $mail_name
# response immediately
smtpd_error_sleep_time = 0s
# Message and return code control
message_size_limit = 5242880
mailbox_size_limit = 5242880
show_user_unknown_table_name = no
# Queue lifetime control
bounce_queue_lifetime = 1d
maximal_queue_lifetime = 1d
设置postfix开机自启:
shell
# chkconfig postfix on
五、配置courier-authlib
1、安装Courier-Authlib
安装以下软件包:
shell
# yum install courier-authlib
# yum install courier-authlib-mysql
编辑/etc/authlib/authmysqlrc文件:
shell
# vi /etc/authlib/authmysqlrc
并将其内容清空,然后增加如下内容:
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/domains/',homedir), \
CONCAT('/home/domains/',maildir), \
quota, \
name \
FROM mailbox \
WHERE username = '$(local_part)@$(domain)'
修改authdaemonrc文件
shell
# vi /etc/authlib/authdaemonrc
修改如下内容:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
2、启动courier-authlib:
shell
# service courier-authlib start
如一切正常,命令行将返回如下信息:
Starting Courier authentication services: authdaemond
修改authdaemon socket目录权限
如果该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证:
shell
# chmod 755 /var/spool/authdaemon/
六、配置maildrop
1、安装maildrop
shell
# yum install maildrop
配置master.cf 为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,注释掉原来的maildrop的配置内容,并改为:
maildrop unix - n n - - pipe
flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
配置main.cf 由于maildrop不支持一次接收多个收件人,因此必须在main.cf里增加如下参数:
maildrop_destination_recipient_limit = 1
2、测试maildrop对authlib支持
shell
# maildrop -v
看是否出现以下内容:
maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
注意事项:
1、如需重新编译Maildrop软件包,必须先获得其源码rpm包,并且必须先行安装courier-authlib及其devel软件包,否则编译后的maildrop将无法打开authlib支持。
2、maildrop RPM包安装时,会自动创建vuser用户及vgroup用户组,专门用于邮件的存储,vuser:vgroup的uid/gid都是1000,这与一般的邮件文档中提及用postfix用户存邮件不一样。因为postfix用户的uid一般都低于500,而Suexec模块编译时对UID/GID的要求是要大于500,因此使用postfix用户不能满足要求。其次,如果用Maildrop作为投递代理(MDA),以postfix身份投递的话,会导致postfix MTA错误。
七、配置apache
1、虚拟主机设置
编辑httpd.conf文件:
shell
# vi /etc/httpd/conf/httpd.conf
在最后一行加上:
NameVirtualHost *:80
Include conf/vhost_*.conf
编辑 vhost_extmail.conf
shell
# vi /etc/httpd/conf/vhost_extmail.conf
里面定义虚拟主机的相关内容:
# VirtualHost for ExtMail Solution
<VirtualHost *:80>
ServerName mail.extmail.org
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/
# Suexec config
SuexecUserGroup vuser vgroup
</VirtualHost>
设置apache开机启动
shell
# chkconfig httpd on
八、配置webmail-extmail
1、安装ExtMail
shell
# yum install extsuite-webmail
2、编辑webmail.cf
shell
# cd /var/www/extsuite/extmail
# cp webmail.cf.default webmail.cf
# vi webmail.cf
主要变动的内容见下:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
更新cgi目录权限 由于SuEXEC的需要,必须将extmail的cgi目录修改成vuser:vgroup权限:
shell
# chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/
九、配置管理后台-extman
1、yum安装ExtMan
shell
# yum install extsuite-webman
更新cgi目录权限 由于SuEXEC的需要,必须将extman的cgi目录修改成vuser:vgroup权限:
shell
# chown -R vuser:vgroup /var/www/extsuite/extman/cgi/
链接基本库到Extmail
shell
# mkdir /tmp/extman
# chown -R vuser:vgroup /tmp/extman
# chmod –R 777 /tmp/extman
2、数据库初始化
启动Mysql
shell
# service mysqld start
# chkconfig mysqld on
导入mysql数据库结构及初始化数据,root密码默认为空
shell
# mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
# mysql -u root -p < /var/www/extsuite/extman/docs/init.sql
注意事项:
上面命令行中最后一个cd $OLDPWD是返回原始路径(即ExtMail Solution软件包根目录)
由于RedHat发行版中包含了一个叫tmpwatch的工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。
上述导入初始化SQL时,默认的uidnumber/gidnumber都是1000,这和vuser:vgroup 的uid/gid一致,是因为maildrop投递时会从数据库里取uidnumber/gidnumber,而在master.cf里已经定义好了投递时的运行身份(vuser:vgroup),所以这两个字段的内容必须为1000,否则将出现投递错误,例如报0×06等错误。
3、设置虚拟域和虚拟用户的配置文件
shell
# cd /var/www/extsuite/extman/docs
# cp mysql_virtual_alias_maps.cf /etc/postfix/
# cp mysql_virtual_domains_maps.cf /etc/postfix/
# cp mysql_virtual_mailbox_maps.cf /etc/postfix/
# cp mysql_virtual_sender_maps.cf /etc/postfix/
配置main.cf:
shell
# vi /etc/postfix/main.cf
增加以下内容:
# extmail config here
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = maildrop:
重启postfix :
shell
# service postfix restart
4、测试authlib
在命令行下执行:
shell
# /usr/sbin/authtest -s login postmaster@extmail.org extmail
结果如下:
Authentication succeeded.
Authenticated: postmaster@extmail.org (uid 1000, gid 1000)
Home Directory: /home/domains/extmail.org/postmaster
Maildir: /home/domains/extmail.org/postmaster/Maildir/
Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)
这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库最后访问http://mail.extmail.org/extmail/,如无意外,将看到webmail的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括postmaster@extmail.org也不行。必须要登陆到http://mail.extmail.org/extman/ 里增加一个新帐户才能登陆。
ExtMan的默认超级管理员帐户:root@extmail.org,初始密码:extmail*123*,登陆成功后,建议将密码修改,以确保安全。
5、配置图形化日志
启动mailgraph_ext
shell
# /usr/local/mailgraph_ext/mailgraph-init start
启动cmdserver(在后台显示系统信息)
shell
# /var/www/extsuite/extman/daemon/cmdserver --daemon
加入开机自启动:
shell
# echo “/usr/local/mailgraph_ext/mailgraph-init start” >> /etc/rc.d/rc.local
# echo “/var/www/extsuite/extman/daemon/cmdserver -v -d” >> /etc/rc.d/rc.local
使用方法: 等待大约15分钟左右,如果邮件系统有一定的流量,即可登陆到extman里,点“图形日志”即可看到图形化的日志。具体每天,周,月,年的则点击相应的图片进入即可。
转载于:https://blog.51cto.com/liujian/397503
相关文章:

MapReduce_wordcount
测试数据: [hadooph201 mapreduce]$ more counttext.txt hello mamahello babahello wordcai wen weimama baba jiejie gegegege jiejie didimeimei jiejiedidi mamaayi shushuayi mamahello mamahello babahello wordcai wen weimama baba jiejie gegegege jiejie …

Appium+python自动化(八)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 下(超详解)...
简介 通过上一篇宏哥给各位小伙伴们的引荐,大家移动对这位美女有了深刻的认识,而且她那高超的技艺和婀娜的身姿久久地浮现在你的脑海里,是不是这样呢???不要害羞直接告诉宏哥:是,就…

蜻蜓resin服务器虚拟目录的设置
首先,别急着打开服务器先,接住打开resin主目录下的conf文件夹的resin.conf文件,老规矩,备份先,mv resin.conf resin.conf.bak然后vi resin.conf 文件,找到如下这段代码:1 <!--configures the…

【java】兴唐第十节课知识点总结
1、使用main里的成员方法也要实例化对象吗? 必须实例化 ///重点! 2、在成员方法中调用另一个成员方法可以直接调用(前面省略一个this.) 3、 \n也可以在java里用 4、null可以是除了基本数据类型外的任何数据类型 5、基本数据类…

SharePoint2010是个什么东西
Microsoft SharePoint Foundation is an application that is built on top of Internet Information Services (IIS) and the Microsoft ASP.NET Framework. Microsoft SharePoint Foundation 是架构在IIS和ASP.NET Framework上的一个应用程序。IIS是与互联网站点相关的&#…

Linux Shell高级技巧(目录)
为了方便我们每个人的学习,这里将给出Linux Shell高级技巧五篇系列博客的目录以供大家在需要时参阅和查找。 Linux Shell高级技巧(一) http://www.cnblogs.com/stephen-liu74/archive/2011/12/22/2271167.html一、将输入信息转换为大写字符后再进行条件判断二、为调…

Keras卷积+池化层学习
转自:https://keras-cn.readthedocs.io/en/latest/layers/convolutional_layer/ https://keras-cn.readthedocs.io/en/latest/layers/pooling_layer/ 1.con1D keras.layers.convolutional.Conv1D(filters, kernel_size, strides1, paddingvalid, dilation_rate1, ac…

【Java】阿里巴巴java开发手册总结(我能看懂的)
尽管这本《手册》句句是精华,但由于我还是个菜鸟,这里仅作(我能用的到的&&我能看懂的)的笔记 1.1命名风格 1、类名用UpperCamelCase的风格 2、方法名、参数名、成员变量、局部变量都统一用lowerCameCase的风格ÿ…

关于maya与max互导FBX出现错误的解决方案。
因为自己实在是不愿意一次又一次把时间浪费在导入导出的问题上。每一次都是多试几次才成功,也没有真正去测试这个东西。但是今天实在是碰到了错误中的极品了。最后还是决定写下来。。算是给自己做笔记吧。。大家如果在导入导出的时候遇到一些问题不妨试试以下几种方…

AS3.0中的显示编程(六)-- 几何结构
几何结构,主要是完成Flash编程中,一些和几何相关的内容。如显示对象的变形角度、公式计算等。可能很多人和我一样,高中学的几何知识,差不多都已经还给老师了。不过也不用太担心,因为一般情况下,我们也用不到…

Win10命令行激活 电脑组装
系统激活: 1. 管理员身份运行 cmd 2. slmgr.vbs /upk //卸载产品密匙 3. slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX //安装 4. slmgr /skms zh.us.to …

【java】兴唐第十五节课
知识点: 1、定义包名不能以java.为开头。 2、获取系统时间的方法: 注意: (1) 引入Date类时,引入的是java.util.Date 而不是java.sql.Date(后者是前者的子类)。 代码实现 Date date new Date(); System.o…

SQL Server 日期和时间相关的数据类型有两种
SQL Server 日期和时间相关的数据类型有两种:DateTime和SmallDateTime。 DateTime:需要8个字节,前4个字节用1900年1月1日以后的天数表示日期,后4个字节表示一天中的时间。支持的日期范围:1/1/1753 12:00:00 AM到12/31/9999 11:59…

序列化pickle
import pickle d { name:alex, role:police, blood: 76, weapon:AK47 } d_dump pickle.dumps(d) #序列化 print (pickle.loads(d_dump)) #反序列化 f open(game.pkl, wb) pickle.dump(d, f) #First in first out (FIFO) pickle.dump(alive_players, f) dump 写入文件 du…

T-SQL笔记3:事务、锁定和并发
T-SQL笔记3:事务、锁定和并发 本章摘要 1:事务 1.1:显式事务 1.2:使用DBCC OPENTRAN显示最早的活动事务 2:锁定 2.1:查看锁的活动 3:并发影响及隔离级别 3.1:并发影响 3.2࿱…

几种常用数据库比较
目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。国际国内的主导关系型数据库管理系统有Oracle、Sybase、INFORMIX和INGRES…

成功将BlogEngine 1.5 升级到了BlogEngine 2.0
使用BlogEngine.Net博客系统有两年时间了。官方的最新版本已经出到了2.5。但它是基于.net4.0的。也就是说服务器必须安装.net4.0,运行环境必须选择4.0。出于移植性的考虑。我决定将我的博客升级到2.0。BlogEngine.Net2.0是继续.net2.0的。虽说必须安装.net 3.5&…

【java】4.27上课及做作业时遇到的问题及第十六节课笔记整理
注意: 部分知识点只在eclipse运行环境中适用 1、字符串转化为字符数组的方法: 代码实现: char[] strcs text.toCharArray();2、字符数字转化为字符串 String reStr new String(re,0 ,position);3、打包及 引包的方法 (1) 用ex…

【Android】基于A星寻路算法的简单迷宫应用
简介 基于【漫画算法-小灰的算法之旅】上的A星寻路算法,开发的一个Demo。目前实现后退、重新载入、路径提示、地图刷新等功能。没有做太多的性能优化,算是深化对A星寻路算法的理解。 界面预览: 初始化: 寻路: 后退: 提示: 完成: 刷新地图: 下载地址: 项目…

[转]SQL 约束讲解
约束主要包括: •NOT NULL •UNIQUE •PRIMARY KEY •FOREIGN KEY •CHECK •DEFAULT 1、not null :用于控制字段的内容一定不能为空(NULL)。 用法 :Create table MyTable ( id …

JSON 转 VO
需求 将获取的json数据直接转为vo 解决 利用net.sf.json.JSONObject的toBean() 确保json中的key值和vo中的字段名称一致 JSONObject jsonObject new JSONObject();UserVO vo new UserVO(); vo (UserVO) net.sf.json.JSONObject.toBean(jsonObject, UserVO.class);参考文档地…

怎样查看一个端口有无开启
有时候我们需要确定一下某个端口有无开启,有两种方法。 方法 1:查看一个端口有无开启的最简单方法 查看端口有无开启,需要在dos里使用命令来完成。这个命令就是: netstat -ano这个命令能显示当前电脑有哪些端口正在使用࿰…

一道SQL统计试题
根据上图A表和B表,按照年份和地区生成1至12个月的数据,结果如下: 方法一: select YEAR,AreaName, MAX(case Month when 1 then Money else 0 end) as [1月], MAX(case Month when 2 then Money else 0 end) as [2月], MAX(case Mo…

【单片机】时钟周期 器械周期 指令周期的关系
1、 时钟周期(振荡周期):始终周期也称振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的单位。在一个始终周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。始终周期表示了SDRAM…

Painting A Board --POJ 1691
1、题目类型:暴力法、DFS。 2、解题思路:题意,一块大的矩形区域的被分成多个矩形区域,现在要给不同的区域涂上不同的颜色,有不同颜色的刷子可以提供,每个刷子可以刷一种不同的颜色。每刷一次,将…

《JavaScript高级程序设计》读书笔记【一】
JavaScript介绍 ECMAScript,由ECMA-262定义,提供核心语言功能; 文档对象模型(DOM),提供访问和操作网页内容的方法和接口; 浏览器对象模型(BOM),提供与浏…

上不了名校?可以在 GitHub 上读他们的课程
今天开始,全国各大区域的高考成绩陆续公布,又到了几家欢喜几家愁的时刻,如果你准备报考计算机相关专业,但是又由于分数不高而苦恼。别担心,在 GitHub 上有着大量的名校教学资源,即使上不了名校,…

【java】各种方法的使用(不定期更新)
疑难杂症篇 1、输入一个字符的方法 问题在于Scanner中没有一个类似于nextInt()之类的函数。 代码实现 char num scanner.next().charAt(0);2、将字符串转化为数字 没啥问题就是记不下来 代码实现: int a1 Integer.parseInt(i1);3、字符串转化为字符数组的方法 …

SQL SERVER 触发器示例
触发器是一种特殊的存储过程。 触发器语法 : CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ DELETE ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS sql_statement [ ...n ] 示…

vc数据库知识
在连接SQL数据库时,数据库的链接: _bstr_t strConn"ProviderSQLOLEDB.1;Data Source.;Initial Catalogdb_test;Integrated SecuritySSPI;Persist Security InfoFalse"; _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(__uuidof(connection)…