邮件服务系列之 postfix+sasl+dovecot+虚拟域+虚拟用户+webmail+webman综合演练

文章内容:介绍的是邮件服务系列配置中 postifx+sasl+dovecot+虚拟域+虚拟用户+webmail+webman综合实现
文章工具及说明:在配置时需要编译安装的软件包已经上传到51下载中心,下载请点击 这里进行下载; 文章中的蓝色字体是对内容进行的解释
安装前的准备工作
配置yum库后安装开发工具与开发库
#yum groupinstall “Development Tools” “Development Libraries” -y
安装实验中所有依赖的软件包(这些都是在编译的时候报错时报告所依赖的;所以这里就直接安装了,这些包在红帽系统自身带的就有)
#yum install httpd openssl-devel dovecot  perl-DBD-MySQL, tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect
这些安装包是在后面进行相关软件中需要依赖的,这里就直接安装了(安装包的安装需要都是在实验中出现编译等错误后发现的,所以写文档时就直接安装了)
邮件服务依赖于DNS服务,所以首先要进行DNS配置
DNS配置
红帽5.8上面有新版本bind97,这里先卸载bind93
#rpm -e bind-libs bind-utils
#yum install bind97 bind97-libs bind-97-utils �Cy
修改named.conf配置文件
#vim /etc/named.conf
修改options中定义的初始的几个片段,保留以下内容:
  
  
  
  
  1. directory       "/var/named";

  2. dump-file       "/var/named/data/cache_dump.db";

  3. statistics-file "/var/named/data/named_stats.txt";

  4. memstatistics-file "/var/named/data/named_mem_stats.txt";

  5. recursion yes;

  6. /* Path to ISC DLV key */

  7. bindkeys-file

添加区域文件定义的内容
编辑正向、反向区域配置文件
#vim /var/named/test1.com.zone
#vim /var/named/172.16.51.zone
检测配置文件中是否有语法错误
修改权限
将DNS服务添加到服务列表,并设定开机启动
修改resolv.conf配置文件中默认DNS
#vim /etc/resolv.conf
  
  
  
  
  1. nameserver 172.16.51.31     -----指定DNS服务器

更改主机名(与mail服务器域名保持一致)
#vim /etc/sysconfig/network
HOSTNAME=mail.test1.com
手动执行更改主机名,然后重新登录终端让其立即生效
#hostname mail.test1.com
启动DNS服务器
#service named start
安装mysql
使用的是系统自带rpm包
#yum install mysql-server mysql-devel
启动mysql数据库
# service mysqld start
连接测试
编译安装postfix
关闭sedmail
红帽5.8系统上sendmail服务默认是开启的需要手动关闭它,它会影响postfix的服务的运行
#service sendmail stop
#chkconfig sendmail off
创建postfix用户postfix组以及postdrop用户postdrop组
使用的源码包版本是postfix-2.9.6,在编译安装的之前要使用date命令查看一下自己系统的的时间;因为在虚拟机中的linux系统很多都是挂起的,会导致时间错误;如果软件包的开发时间在系统时间的后面,这会让我们的系统变得凌乱的
#hwclock �Cs    -----将硬件时间同步到系统时间
开始编译
#tar xf postfix-2.9.6.tar.gz
#cd postfix-2.9.6
# 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'
#make
#make install
在执行make install命令后,会让选择一些默认的路径的安装位置,这里编译的没有做改动,使用的是默认的,自己可根据需要来进行更改,方便以后文件的管理
  
  
  
  
  1. install_root: [/]                                 ------postfix安装路径

  2. tempdir: [/root/postfix-2.9.1] /tmp/postfix       ------临时文件的生成目录

  3. config_directory: [/etc/postfix] /etc/postfix    -------配置文件目录

  4. daemon_directory: [/usr/libexec/postfix]         -------服务进程目录

  5. command_directory: [/usr/sbin]                    ------bash命令目录

  6. queue_directory: [/var/spool/postfix]              ---邮件队列

  7. sendmail_path: [/usr/sbin/sendmail]                ---smtp的客户端,用于实现与sendmail客户端

  8. 兼容的

  9. newaliases_path: [/usr/bin/newaliases]             ---生成新别名

  10. mailq_path: [/usr/bin/mailq]                       ---邮件队列程序

  11. mail_owner: [postfix]                              ---邮件服务器的运行者

  12. setgid_group: [postdrop]                           ---用于实现将用户的邮件投递到它的邮箱中去的

  13. html_directory: [no]/var/www/html/postfix          ---当web服务器没有配置好就使用no选项

  14. manpages: [/usr/local/man]                         ---man文档的安装路径

  15. readme_directory: [no]                             ---帮助文档

  16. data_directory:[/var/lib/postfix]                 ---可读写文件的存放路径

准备postfix服务脚本
由于postfix服务脚本过长,所以就放在附件中的txt文本中了,给您带来的不便还请谅解哦
为postfix服务脚本添加执行权限并添加到服务列表中
为postfix准备一些配置
生成别名二进制文件
newaliases 的功能传是将 /etc/aliases 转换成其所能理解、处理的数据库
编辑postfix的配置文件main.cf做出响应更改,所要更改的内容如下
  
  
  
  
  1. #vim /etc/postfix/main.cf

  2. myhostname = mail.test1.com                 ------指定自己的邮件服务器

  3. mydomain = test1.com                        ------自己创建的域名

  4. myorign = $mydomain                         -----定义出站邮件使用的域名

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

  6. 定义哪些域接收邮件

  7. mynetworks = 172.16.0.0/16  127.0.0.0/8       --------定义允许中继的网络


启动postfix
#service postfix start
查看日志,判断是否启动成功
查看端口是否成功监听
进行测试
创建一个用户用于测试邮件的收发
#useradd hadoop && echo "hadoop" | passwd --stdin hadoop
连接到邮件服务器进行测试发送
telnet连接域名时,由于需要解析所以时间会慢一些,mail from(谁发送的);rcpt to(发送给谁的);data(邮件内容);内容编辑完成后以点“.”表示结束编写
查看邮件是否接收
#su - hadoop
配置dovecot
安装dovecot软件包
#yum install dovecot �Cy
编辑dovecot配置文件
更改protocols保留需要的协议
# vim /etc/dovecot.conf
  
  
  
  
  1. protocols = pop3

添加dovecot到服务列表并启动dovecot服务
测试邮件的是否可以成功接受
在终端发送邮件,内容是”My name is root too!!”
在windows端安装邮件客户端工具,进行用户及邮件服务器的相关配置后进行邮件收取测试;笔者使用的是outlook2003客户端工具进行收发邮件
点击“接收”邮件按钮
配置基于cyrus-sasl的用户认证功能
编辑/saslauthd配置文件
#vim /etc/sysconfig/saslauthd
更改MECH指定的内容 (把原来的pam改成shadow,让其从/etc/shadow中检索账号)
  
  
  
  
  1. MECH=shadow

将其添加到服务列表中
做一下简单的测试,检索账号
Postfix是借助SASL来提供认证功能;提供认证功能是要为Postfix提供一个配置文件(smtpd.conf);这个配置文件是SASL提供的,通过这个配置文件可以指明postfix是否使用SASL进行认证
编辑sasl配置文件smtpd.conf
#vim /usr/lib/sasl2/smtpd.conf
Pwcheck_method意思是让postfix知道要通过saslauthd来实现用户认证
mech_list是指定真正要完成认证的功能是谁
重新启动saslauthd
#service saslauthd restart
编辑postfix配置文件
为了验证启用了sasl认证,所以修改配置文件中mynetwork选项,定义只为本地网络中继,其他网络的访问就需要基于sasl来认证了
  
  
  
  
  1. mynetworks = 127.0.0.0/8

在配置文件尾部添加定义sasl功能的内容,如下
  
  
  
  
  1. ############################ CYRUS-SASL ############################

  2. broken_sasl_auth_clients = yes

  3. smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

  4. smtpd_sasl_auth_enable = yes

  5. smtpd_sasl_local_domain = $myhostname

  6. smtpd_sasl_security_options = noanonymous

  7. smtpd_sasl_path = smtpd

  8. smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!

重新启动postfix
service postfix restart
测试
在命令行中进行验证
在Outlook中收取邮件

邮件服务系列之虚拟域、虚拟用户和webmail与webman的实现
编译安装courier-authlib
# tar jxvf courier-authlib-0.62.4.tar.bz2
# cd courier-authlib-0.62.4
#./configure \

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

   --sysconfdir=/etc \

   --without-authpam \

   --without-authshadow \

   --without-authvchkpw \

   --without-authpgsql \

   --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-mailuser=postfix \

   --with-mailgroup=postfix \

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

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

# make
# make install
编译执行的选项内容介绍
  
  
  
  
  1. 反斜线的意思是续行符

  2. --prefix=/usr/local/courier-authlib \            -----文件的安装路径

  3. --sysconfdir=/etc \                              -----配置文件的安装位置

  4. --without-authpam  --without-authshadow  --without-authvchkpw  --without-authpgsql

  5. -----不支持pam/shadow/vchkpw/pgsql认证,这些选项不添加也可以

  6. -with-authmysql                                 ----支持mysql认证(重要就是支持者一项)

  7. --with-mysql-libs=/usr/lib/mysql                ------指明mysql的库文件路径的安装位置

  8. --with-mysql-includes=/usr/include/mysql        -------指明mysql的头文件的安装路径

  9. --with-redhat                                   ------说明系统类型,表示根据redhat系统实现一些系统优化

  10. --with-authmysqlrc=/etc/authmysqlrc             -----指定courier-authlib服务进程配置文件路径

  11. --with-authdaemonrc=/etc/authdaemonrc            -----守护进程,courier-authlib服务进程的配置文件

  12. --with-mailuser=postfix                          ----邮件收发管理的用户

  13. --with-mailgroup=postfix                         -----邮件收发管理的组

  14. --with-ltdl-lib=/usr/lib                         -----ltdl动态模块加载器,提供一个运行环境

  15. --with-ltdl-include=/usr/include                 ----ltdl文件的头文件路径

更改socket文件的权限
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
把生成的配置文件重新命名
# cp /etc/authdaemonrc.dist  /etc/authdaemonrc
# cp /etc/authmysqlrc.dist  /etc/authmysqlrc
修改/etc/authdaemonrc配置文件
  
  
  
  
  1. authmodulelist="authmysql"-----指明认证的模块

  2. authmodulelistorig="authmysql"------保留的原始模块

  3. daemons=10                              ------默认启动启动的进程个数(根据需要修改)

  4. DEBUG_LOGIN=2                           ----打开调试调试功能(三个取值“0”是关闭,“1”是打开调试;“2”是打开调试并且把登陆时的密码记录下来;当第一次使用虚拟用户登陆,但是登陆不上时这个就需要打开)

  5. 编辑/etc/authmysqlrc配置文件

  6. MYSQL_SERVER localhost                  -----指定服务器所在位置

  7. MYSQL_USERNAME  extmail                 -----连接mysql使用的文档

  8. MYSQL_SOCKET   /var/lib/mysql/mysql.sock  ----指定mysql套接字文件所在位置

  9. MYSQL_PORT      3306                     -----mysql端口号

  10. MYSQL_DATABASE  extmail                  -----在mysql的哪个库中为postfix提供虚拟用户(这里这样的设定是与下文extmail的配置保持一致,自己定义也行)

  11. MYSQL_USER_TABLE  mailbox                 -----mysql的用户账号存放的表的位置

  12. MYSQL_CRYPT_PWFIELD  password-----mysql中哪个字段是用户密码

  13. MYSQL_UID_FIELD  2525                     -----mysql用户账户的UID就是postfix用户的UID

  14. MYSQL_GID_FIELD  2525                     -----mysql用户账号的GID就是postfix组的ID号

  15. MYSQL_LOGIN_FIELD  username                ------哪个字段是用户的账号

  16. MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)        -----用户账号的家目录所在位置,虚拟用户没有家目录,homedir是变量,等同于用户名称;concat是mysql内置的函数用于将两个字符串连接起来

  17. MYSQL_NAME_FIELD  name-----用户名称在哪个字段上

  18. MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)   -----用户邮箱目录

为courie-authlib提供SysV服务脚本
在解压出的courier-authlib-0.64.0目录中提供的有服务脚本直接复制使用就可以了
#cd courier-authlib-0.64.0
# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
为服务脚本添加执行权限并且添加到服务列表,设置开机启动
启动courier-authlib服务
# service courier-authlib start   (启动服务)
让postfix支持虚拟域和虚拟用户
创建邮箱目录并且更改属主为postfix
编辑main.cf配置文件
#vim /etc/postfix/main.cf
添加内容如下
  
  
  
  
  1. ######################## Virtual Mailbox Settings  ########################

  2. virtual_mailbox_base = /var/mailbox                 ----用户邮箱默认目录

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

  4. -----邮箱映射表在mysql_virtual_mailbox_maps.cf配置文件中定义的就是就是如何查询这些用户相关信息

  5. 也就是一些查找语句

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

  7. -----虚拟域,在mysql_virtual_domains_maps.cf定义的是如何在mysql表中查找域

  8. virtual_alias_domains =                              -----定义别名域

  9. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf        

  10. ----用户账号别名,在mysql_virtual_alias_maps.cf配置文件中定义如何查询

  11. (上述这三个配置文件会在下文配置extman的时候提供)

  12. virtual_uid_maps = static:2525                       ----定义邮箱的所有者

  13. virtual_gid_maps = static:2525                       ----定义邮箱的组

  14. static意思是静态地图类型使用自己已经创建的特定的用户与组)

  15. virtual_transport = virtual                          ----用户投递代理

  16. ########################## QUOTA Settings ########################

  17. message_size_limit = 14336000                        ----邮件大小最大值限定

  18. virtual_mailbox_limit = 20971520                     ----用户邮箱最大值限定

检测main.cnf配置文件中配置的参数是否支持
#postconf �Cn
修改/usr/lib/sasl2/smtpd.conf配置文件
定义authdaemond及其路径
重新启动一下saslauthd
#service saslauthd restart
配置extman
# tar xf extman-1.1.tar.gz
# cd extman-1.1
# cd docs
在mysql中执行extman已经设置好的sql语句(创建相关的表等)
# mysql -uroot < extmail.sql   -----密码为空,-p选项省略了
导入init脚本到mysql中
# mysql -uroot < init.sql
启动mysql对用户进行授权
  
  
  
  
  1. mysql> GRANTALL LPRIVILEGES ON extmail.* TO extmail@localhost IDENTIFIED BY'extmail'

  2. -----在数据库extmail上的所有表上创建extmail用户,密码也是extmail

  3. mysql> GRANTALL LPRIVILEGES ON extmail.* TO extmail@‘127.0.0.1’ IDENTIFIED BY'extmail'

  4. -----与上条命令意思一样,考虑到使用本机表示方式不同

  5. mysql> FLUSH PRIVILEGES;  ----更新mysql的系统权限相关表

准备配置文件
在解压出的# extman-1.1目录下的docs目录中有提供的配置文件
修改/etc/postfix/main.cf配置文件
当启用虚拟域以后,就需要取消中心域,在配置文件中需要注释 myhostname, mydestination, mydomain, myorigin这些参数指令的指定
重启postfix服务
# service postfix restart
配置dovecot
编辑创建/etc/dovecot-mysql.conf
# vim /etc/dovecot-mysql.conf
----定义dovecot用户认证时是基于哪个用户账号及密码去连接mysql数据库,并且到mysql数据库中哪个表中去查找用户的账号与密码,这个配置定义后会在dovecot.conf配置文件中引用这个配置文件的定义
connect:指定连接时的服务器,用户账号及其密码等
default_pass_scheme:用户的加密方式
password_query与user_query:定义以用户登陆时的用户名为条件通过mailbox在相应的字段查找用户名及密码,以及uid,gid号
编辑dovecot.conf配置文件
# vim /etc/dovecot.conf
在末行模式下全文搜索mail_location(命令是:/mail_location)添加内容是
%d:dovecot支持的宏,代表用户所在的域;%n: dovecot支持的宏,代表用户名
全文搜索auth default 查看mechanisms默认值是否是plain 如果不是修改为plain
全文搜索 passdb pam  注释它的定义(后面的“}”也要在添加“#”符号来注释)
全文搜索passdb sql 启用passdb sql 的定义内容,添加args内容
全文搜索 userdb passwd 注释其定义内容
全文搜索userdb sql 定义args
passdb sql与userdb sql :定义dovcot认证时基于sql认证,并且指定相关配置文件区mysql的数据库中检索
修改完成,然后保存退出
dovecot配置完成重新启动dovecot服务
安装配置Extmail-1.2
Extmail-1.2是个网页文件配置起来比较简单
修改extmail主配置文件
#vim  /var/www/extsuite/extmail/webmail.cf
更改内容如下
默认语言修改为中文
更改邮箱地址
联系mysql时使用的账号及密码
更改socket文件位置
修改完成,然后保存退出
配置apache
首先在/etc/httpd/conf/httpd.conf配置文件中注释中心主机
更改apache默认用户与组
因为extmail要进行本地邮件的投递操作,所以必须将运行apache服务器用户的身份修改为邮件投递代理的用户(这里没有打开apache服务器的suexec功能,所以采用了这个方法)
在配置文件的行尾创建虚拟主机
ScriptAlias:指定能够cgi脚本的目录;Alias    :指定别名
更改cgi目录的所有文件的属主属组为postfix
修改完成后保存退出
解决依赖关系
实验文档的制作是在整个实验完成之后又重新的进行梳理,所以整合了会报错的解决方法
需要用到的perl的Unix::syslogd功能
编译安装Unix::syslogd
# tar xf Unix-Syslog-1.1.tar.gz # cd Unix-Syslog-0.100
# cd Unix-Syslog-1.1
# perl Makefile.PL                      -----perl模块的安装方式
# make
# make install
编译安装Unix::syslogd后启动apache服务
# service httpd start
现在就可以使用windows中的浏览器访问http服务了(这里的地址是 http://172.16.51.31/extmail/
现在的邮箱还不能登录没有虚拟用户,需要再次配置exman,使其能够在apache服务器访问;配置流程与extmail相似
首先创建webman用户(在webman.cf配置文件指定的默认用户)
连接mysql创建webman
# mv extman-1.1 /var/www/extsuite/extman  
# cd /var/www/extsuite/extman
# cp /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webman.cf
编辑extman配置文件
# vim /var/www/extsuite/extman/webman.cf
修改邮箱位置
配置文件有指定的建立会话的目录(如下图)这是配置文件中直接定义的所以需要自己自行创建这个目录并且属主属组是httpd进程的(postfix)
关闭验证码模块
更改UID与GID(是postfixUID与其组的GID)
修改完成,保存退出 创建extman运行时所需的临时目录,并修改属主属组
修改apache配置文件 # vim /etc/httpd/conf/httpd.conf 虚拟主机定义的内容最终修改如下
修改cgi目录的属主数组为postfix
修改完成后保存退出 重新启动apache服务
现在Extmail与Extman就可以登陆使用了访问Extman使用172.16.51.31/extman进行访问

新建域及注册新用户介绍
在进入后台管理后点击域列表后可以自己创建自己域,填写相应的信息后,就可以使用自己设置的域进行注册用户了(域创建完成以后,需要重新编辑一下新建域中的允许注册选项,“保存修改”才能生效);注册用户是在extmail登陆界面,在域名的选项框中填写自己创建的域(笔者创建的域名为deng.com),然后就可以填写新用户的相关信息了;完成这些操作后就可以使用自己注册的用户登陆了(笔者创建的用户为tom)
登陆界面

用户登陆后界面

现在整个实验就完成了,是不是也想手动创建一个属于自己的邮箱!!心动不如行动哦
文档的整理是在之前实验完成之后的又进一步的复习、梳理才完成的,如果内容中有理解不正确的,或者是操作有问题的还请大家指出(交流就是一种进步);在截取的图片中由于终端的窗口是缩放的,所以有的图有些模糊(特别是图上蓝色字体),这样的结果还请大家谅解哦!!
知识一直都在补充期待您的关注哦


你可能感兴趣的:(邮件服务器,虚拟用户,虚拟域)