我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux中Postfix虚拟用户及虚拟域的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux中Postfix虚拟用户及虚拟域的示例分析

这篇文章主要为大家展示了“Linux中Postfix虚拟用户及虚拟域的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中Postfix虚拟用户及虚拟域的示例分析”这篇文章吧。

Postfix基于虚拟用户虚拟域的邮件架构

Linux中Postfix虚拟用户及虚拟域的示例分析

上图是一个几乎完整的邮件系统架构图,这里基于Mysql数据库进行用户认证,不管是Postfix、Dovecot、webmail都需要去Mysql数据库中进行用户认证。

用户可以基于outlook连接postfix然后通过Courier-authlib连接到Mysql进行认证,认证成功就可以发送邮件。前面我们也是用Cyrus-sasl进行shadow用户认证,其实Cyrus-sasl也同样支持Mysql认证。但是由于驱动比较底层配置起来比较繁琐,所以选用Courier-authlib进行认证,但是从上图可以看出我们是postfix还是借用Cyrus-sasl函数库与Courier-authlib进行连接。同样的道理Postfix也可以直接连接到Courier-authlib但是比较麻烦。

用户可以基于outlook连接Dovecot然后直接到mysql进行认证,认证成功就可以接收Mailbox中的邮件。这里比较简单,因为Dovecot自身支持到Mysql的认证。

用户可以基于webmail进行收发邮件,同样通过Extmail/Extman到Mysql中认证,认证成功。就可以基于postfix发邮件,基于Dovecot收邮件。但是Extmail/Extman自身就可以到Mailbox中收取邮件。

Courier-authlib

Courier 是一个优秀的电子信件系统,拥有一个完整的邮件系统:其提供MTA(Courier-MTA),MDA(Maildrop),MUA,MRA(Courier-IMAP),SASL(Courier-authlib)WebMail(sqwebmail)等这些组件。

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

虚拟用户虚拟域配置

安装ltdl动态模块加载器

[root@localhost ~]# yum install libtool-ltdl libtool-ltdl-devel

安装expect主机间通信

[root@localhost ~]# yum install expect

创建用户

[root@localhost ~]# groupadd -g 1001 vmail[root@localhost ~]# useradd vmail -u 1001 -g 1001

安装Courier-authlib

[root@localhost ~]# tar xvf courier-authlib-0.66.1.tar.bz2 -C /usr/class="lazy" data-src/[root@localhost ~]# cd /usr/class="lazy" data-src/courier-authlib-0.66.1[root@localhost courier-authlib-0.66.1]# ./configure \--prefix=/usr/local/courier-authlib \--sysconfdir=/etc \--without-authpam \--without-authshadow \--without-authvchkpw \--without-authpgsql \  #以上without是不支持此类认证免得需要安装依赖的数据包--with-authmysql \  #基于mysql认证--with-mysql-libs=/usr/lib64/mysql \--with-mysql-includes=/usr/include/mysql \  #需要mysql的头文件和库文件路径一定要正确--with-redhat \  #如果是redhat系统会实现自我优化;如果不是就不要加了--with-authmysqlrc=/etc/authmysqlrc \  #提供给mysql的配置文件,记录认证怎样跟数据进行交互--with-authdaemonrc=/etc/authdaemonrc \  #courier-authlib自身是一个服务进程所以也需要一个配置文件--with-mailuser=vmail \--with-mailgroup=vmail \  #用户邮件收发管理的用户和组
[root@smtp ~]# make && make install

调整配置文件

[root@localhost ~]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon  #调整一下authdaemon的权限(存放进程套接字)[root@localhost ~]# cp -p /etc/authdaemonrc.dist  /etc/authdaemonrc  #调整courier文件名,因--with-authdaemonrc=/etc/authdaemonrc指定了文件名[root@localhost ~]# cp -p /etc/authmysqlrc.dist  /etc/authmysqlrc  #调整跟mysql交互文件名,因--with-authmysqlrc=/etc/authmysqlrc指定了文件名

调整courier-authlib配置文件

[root@localhost ~]# vim /etc/authdaemonrcauthmodulelist="authmysql"  #指定认证模块为authmysqlauthmodulelistorig="authmysql"  #认证的原始模块只保留authmysqldaemons=10  #修改默认开启进程#DEBUT-LOGIN=2  #如果使用虚拟用户登录有问题就打开调试功能看看日志;不然不要打开

调整通过MYSQL进行邮件账号认证文件

[root@localhost ~]# vim /etc/authmysqlrcMYSQL_SERVER localhost  #指定Mysql服务器地址MYSQL_USERNAME extmail  #连接数据库的用户名(如果不使用extmail,那么在extman中需要重新指定账号)MYSQL_PASSWORD extmail  #用户密码MYSQL_PORT 3306  #指定你的mysql的端口(使用socket通信就不用端口)MYSQL_SOCKET /var/lib/mysql/mysql.sock  #Mysql的套接字文件MYSQL_DATABASE  extmail  #存储用户的库(如果不使用extmail,那么在extman中都要更改)MYSQL_USER_TABLE  mailbox  #存储用户的表(mailbox是extman帮我们自动生成的不能改)MYSQL_CRYPT_PWFIELD  password  #认证密码字段MYSQL_UID_FIELD  '1001'  #vmail用户的UIDMYSQL_GID_FIELD  '1001'  #vmail用户的GIDMYSQL_LOGIN_FIELD  username  #认证账号字段MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)  #concat是mysql的一个函数用来把/var/mailbox/跟homedir连接成一个路径(homedir是mysql的一个变量值为每一个用户名)MYSQL_NAME_FIELD  name  #用户全名字段,默认MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)  #虚拟用户的邮件目录

Courier-authlib提供SysV服务脚本

[root@localhost ~]# cd /usr/class="lazy" data-src/courier-authlib-0.66.1/[root@localhost courier-authlib-0.66.1]# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib[root@localhost ~]# chmod 755 /etc/init.d/courier-authlib[root@localhost ~]# chkconfig --add courier-authlib[root@localhost ~]# chkconfig courier-authlib on[root@localhost ~]# service courier-authlib startStarting Courier authentication services: authdaemond

PS:可以使用pstree -a可以看到authdaemond已经生成了11个进程,我们开启了10个,但是有一个主进程负责生成其他进程。

建立虚拟用户邮箱目录

[root@localhost ~]# mkdir -pv /var/mailbox[root@localhost ~]# chown -R vmail /var/mailbox

PS:邮箱目录属主为vmail

更改SASL认证模式为authdaemond

Postfix的SMTP认证需要透过Cyrus-SASL连接到authdaemon获取认证信息

[root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf#pwcheck_method: saslauthd#mech_list: PLAIN LOGIN#注释前面实验使用SASL认证的参数pwcheck_method: authdaemondlog_level: 3mech_list:PLAIN LOGINauthdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

让Postfix支持虚拟用户及虚拟域

[root@localhost ~]# vim /etc/postfix/main.cf#################Virtual Mailbox Settings###################virtual_mailbox_base = /var/mailbox  #用户邮箱目录(跟这个参数MYSQL_HOME_FIELD定义的要一致)virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf  #用来查询用户账号信息(这个配置文件中定义了SQL语句,使用extmail用户)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:1001virtual_gid_maps = static:1001  #每一个虚拟用户都映射为系统用户vmailvirtual_transport = virtual  #指定MDA专门为虚拟用户投递代理virtual_mailbox_limit = 20971520  #磁盘配额

安装Httpd

[root@localhost ~]# yum install httpd

安装extman

需要使用源码extman目录下docs目录中的extmail.sql和init.sql建立数据库extmail

[root@localhost ~]# tar zxvf extman-1.1.tar.gz -C /usr/class="lazy" data-src/[root@localhost ~]# cd /usr/class="lazy" data-src/extman-1.1/docs[root@localhost docs]# service mysqld restart[root@localhost docs]# mysql -u root < extmail.sql[root@localhost docs]# mysql -u root < init.sql[root@localhost docs]# mysql -u root -B -e "show databases;"Databaseinformation_schemaextmailmysqltest

#对于MySQL-5.1以后版本,其中的服务脚本extmail.sql执行会有语法错误,因为MySQL-5.1使用的默认存储引擎是MyISAM,而在MySQL-5.1之后使用的是InnoDB存储引擎。可先使用如下命令修改extmail.sql配置文件而后再执行修改方法如下:

sed -i ‘s@TYPE=MyISAM@ENGINE=InnoDB@g’ extmail.sql

#这里我使用的是PRM包,所以MySQL是5.1版本的,不用修改SQL脚本。

这两个SQL脚本会创建extmail数据库和表,以及extmail、webman用户。所以需要授予用户extmail访问extmail数据库的权限(生产环境中extmail给select权限,因为它只需要检索用户即可)。同时这里的密码设置为extmail同上面的配置文件一样,不然都要改。

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;

从Extman中复制Postfix支持虚拟用户和虚拟域及连接mysql的文件

[root@localhost ~]# cd /usr/class="lazy" data-src/extman-1.1/docs[root@localhost docs]# cp mysql_virtual_mailbox_maps.cf /etc/postfix/[root@localhost docs]# cp mysql_virtual_domains_maps.cf /etc/postfix/[root@localhost docs]# cp mysql_virtual_alias_maps.cf /etc/postfix/[root@localhost docs]# cp mysql_virtual_limit_maps.cf /etc/postfix/

打开一个文件看看

[root@localhost ~]# cat /etc/postfix/mysql_virtual_domains_maps.cfuser = extmailpassword = extmailhosts = localhostdbname = extmailtable = domainselect_field = domainwhere_field = domainadditional_conditions = AND active = ‘1’

PS:所以在通过mysql认证配置文件/etc/authmysqlrc中的账号密码很多地方都要用到,生产环境中全部都要统一修改。

取消前面配置的中心域

使用虚拟域的时候,就需要取消中心域的使用,myhostname、mydomain、myorigin、mydestination,所以现在main.cf配置文件需要添加的参数如下所示:

[root@localhost ~]# vim /etc/postfix/main.cf#################Center Domain Settings###########mynetworks = 127.0.0.0/8#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain#myhostname = smtp.ywnds.com#mydomain = ywnds.com#myorigin = $mydomain#home_mailbox = Maildir/

配置Dovecot基于MySQL认证

[root@localhost ~]# vim /etc/dovecot/dovecot.conf#Ssl = no#disable_plaintext_auth = no#mail_location = maildir:~/Maildir#把dovecot主配置文件/etc/dovecot/dovecot.conf中刚开始添加的几行数据注释掉[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.confmail_location = maildir:/var/mailbox/%d/%n/Maildir  #添加此行指定邮件的提取位置[root@localhost ~]# vim /etc/dovecot/conf.d/10-auth.confdisable_plaintext_auth = no  #开启明文验证(可以选择把dovecot.conf配置文件中的此参数关闭)auth_mechanisms = plain login  #支持验证方法#!include auth-system.conf.ext  #取消默认系统验证!include auth-sql.conf.ext  #开启mysql验证#auth_verbose = yes  #认证详细日志,调试可以打开[root@localhost ~]# vim /etc/dovecot/conf.d/auth-sql.conf.extpassdb {  driver = sql  #args = /etc/dovecot/dovecot-sql.conf.ext  args = /etc/dovecot/dovecot-sql.conf}userdb {  driver = sql  #args = /etc/dovecot/dovecot-sql.conf.ext  args = /etc/dovecot/dovecot-sql.conf}

PS:在这个MySQL验证文件中指定了用户的账号和密码需要通过/etc/dovecot/dovecot-sql.conf这个文件去数据库中取。

[root@localhost ~]# vim /etc/dovecot/dovecot-sql.confdriver = mysqlconnect = host=localhost dbname=extmail user=extmail password=extmaildefault_pass_scheme = CRYPTpassword_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'解释:Driver  #Dovecot使用自带的驱动连接MySQLConnect  #连接本地mysql;数据库extmail;用户extmail;密码extmail。  #说明:如果mysql服务器是本地主机,即host=localhost时,如果mysql.sock文件不是默认的/var/lib/mysql/mysql.sock,可以使用host=“sock文件的路径”来指定新位置;  #例如,使用通用二进制格式安装的MySQL,其sock文件位置为/tmp/mysql.sock,相应地,connect应按如下方式定义connect = host=/tmp/mysql.sock dbname=extmail user=extmail password=extmail。Default_pass_scheme  #表明我们的密码为加密存放Password_query  #找密码查询哪个字段User_query  #找账号查询哪个字段 PS:dovecot其实也提供了这么一个配置文件模板,在/usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext

启动所有服务

[root@localhost ~]# service dovecot restart[root@localhost ~]# service postfix restart[root@localhost ~]# service courier-authlib restart[root@localhost ~]# service mysqld restart

测试虚拟用户

[root@localhost ~]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmailAuthentication succeeded.

以上是“Linux中Postfix虚拟用户及虚拟域的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux中Postfix虚拟用户及虚拟域的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux中Postfix虚拟用户及虚拟域的示例分析

这篇文章主要为大家展示了“Linux中Postfix虚拟用户及虚拟域的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中Postfix虚拟用户及虚拟域的示例分析”这篇文章吧。Po
2023-06-05

Linux下如何安装Postfix邮件虚拟用户及虚拟域

小编给大家分享一下Linux下如何安装Postfix邮件虚拟用户及虚拟域,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Postfix基于虚拟用户虚拟域的邮件架构上
2023-06-27

linux中虚拟内存的示例分析

这篇文章给大家分享的是有关linux中虚拟内存的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是虚存?为什么需要它?   我们知道程序代码和数据必须驻留在内存中才能得以运行,然而系统内存数量很有限,往
2023-06-13

Linux虚拟化技术KVM的示例分析

这篇文章主要介绍Linux虚拟化技术KVM的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!KVM是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监
2023-06-27

Python中虚拟环境原理的示例分析

这篇文章将为大家详细讲解有关Python中虚拟环境原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。认识虚拟环境在我们平时的工作环境中,可能会存在一台电脑存在多个版本的 python 的情况 。
2023-06-29

Vue源码分析之虚拟DOM的示例分析

小编给大家分享一下Vue源码分析之虚拟DOM的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么需要虚拟dom?虚拟DOM就是为了解决浏览器性能问题而被
2023-06-15

Java虚拟机发展变化的示例分析

这篇文章将为大家详细讲解有关Java虚拟机发展变化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向
2023-06-14

Java虚拟机之类加载的示例分析

小编给大家分享一下Java虚拟机之类加载的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序
2023-06-15

mhddfs虚拟存储工具中Linux分区合并利器的示例分析

本篇文章给大家分享的是有关mhddfs虚拟存储工具中Linux分区合并利器的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。所谓 Linux 分区合并,从严格意义上来讲应
2023-06-16

pycharm终端部启用虚拟环境的示例分析

pycharm终端部启用虚拟环境的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。新建项目时,选择新建虚拟环境项目打开后,启动终端,却经常发现,并没有开启
2023-06-22

linux系统下kvm虚拟机数据恢复的示例分析

这篇文章给大家分享的是有关linux系统下kvm虚拟机数据恢复的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、服务器数据恢复描述需要进行数据恢复的服务器采用Linux操作系统、EXT4文件系统。由于实
2023-06-04

CentOS虚拟机下相关操作的示例分析

小编给大家分享一下CentOS虚拟机下相关操作的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在VM虚拟机中安装完Redhat系统之后如果需要用secureCRT连接linux系统的话操作步骤如下:1.进入linu
2023-06-10

浅析Linux中vsftpd服务配置(匿名,用户,虚拟用户)

vsftpd概述 vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 linux、BSD、Solaris、 H
2022-06-04

Linux内存监控虚拟内存实现机制及容量设定的示例分析

这篇文章主要介绍Linux内存监控虚拟内存实现机制及容量设定的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容
2023-06-16

Java虚拟机中内存分配与回收策略的示例分析

小编给大家分享一下Java虚拟机中内存分配与回收策略的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!内存分配与回收策略Java技术体系的自动内存管理,最根
2023-06-25

编程热搜

目录