首页 > 系统相关 >Linux中Postfix虚拟用户及虚拟域(六)

Linux中Postfix虚拟用户及虚拟域(六)

时间:2023-07-07 19:11:18浏览次数:48  
标签:extmail Postfix Linux etc 虚拟 mysql authlib root localhost

摘自:http://www.ywnds.com/?p=1797

 

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

 

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

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

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

3、用户可以基于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动态模块加载器

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

二、安装expect主机间通信

 
1 [root@localhost ~]# yum install expect

三、创建用户

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

四、安装Courier-authlib

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@localhost ~]# tar xvf courier-authlib-0.66.1.tar.bz2 -C /usr/src/ [root@localhost ~]# cd /usr/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 \   #用户邮件收发管理的用户和组

 

 
1 [root@smtp ~]# make && make install

五、调整配置文件

 
1 2 3 4 5 6 [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配置文件

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

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

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@localhost ~]# vim /etc/authmysqlrc MYSQL_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用户的UID MYSQL_GID_FIELD  '1001'   #vmail用户的GID MYSQL_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服务脚本

 
1 2 3 4 5 6 7 [root@localhost ~]# cd /usr/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 start Starting Courier authentication services: authdaemond

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

九、建立虚拟用户邮箱目录

 
1 2 3 [root@localhost ~]# mkdir -pv /var/mailbox [root@localhost ~]# chown -R vmail /var/mailbox PS:邮箱目录属主为vmail

十、更改SASL认证模式为authdaemond

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

 
1 2 3 4 5 6 7 8 [root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf #pwcheck_method: saslauthd #mech_list: PLAIN LOGIN #注释前面实验使用SASL认证的参数 pwcheck_method: authdaemond log_level: 3 mech_list:PLAIN LOGIN authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

十一、让Postfix支持虚拟用户及虚拟域

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [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:1001 virtual_gid_maps = static:1001   #每一个虚拟用户都映射为系统用户vmail virtual_transport = virtual   #指定MDA专门为虚拟用户投递代理 virtual_mailbox_limit = 20971520   #磁盘配额

十二、安装Httpd

 
1 [root@localhost ~]# yum install httpd

十三、安装extman

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

 
1 2 3 4 5 6 7 8 9 10 11 [root@localhost ~]# tar zxvf extman-1.1.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/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;" Database information_schema extmail mysql test

#对于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同上面的配置文件一样,不然都要改。

 
1 2 3 mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail'; mysql> GRANT all privileges on extmail.* TO [email protected] IDENTIFIED BY 'extmail'; mysql> flush privileges;

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

 
1 2 3 4 5 [root@localhost ~]# cd /usr/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/

打开一个文件看看

 
1 2 3 4 5 6 7 8 9 [root@localhost ~]# cat /etc/postfix/mysql_virtual_domains_maps.cf user = extmail password = extmail hosts = localhost dbname = extmail table = domain select_field = domain where_field = domain additional_conditions = AND active = ‘1’

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

十五、取消前面配置的中心域

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

 
1 2 3 4 5 6 7 8 [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

 
1 2 3 4 #Ssl = no #disable_plaintext_auth = no #mail_location = maildir:~/Maildir #把dovecot主配置文件/etc/dovecot/dovecot.conf中刚开始添加的几行数据注释掉

[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf

 
1 2 mail_location = maildir:/var/mailbox/%d/%n/Maildir   #添加此行指定邮件的提取位置

[root@localhost ~]# vim /etc/dovecot/conf.d/10-auth.conf

 
1 2 3 4 5 6 7 8 9 10 disable_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.ext

 
1 2 3 4 5 6 7 8 9 10 passdb {   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.conf

 
1 2 3 4 5 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'

解释:

 
1 2 3 4 5 6 7 8 9 10 11 12 Driver   #Dovecot使用自带的驱动连接MySQL Connect   #连接本地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 

十七、启动所有服务

 
1 2 3 4 [root@localhost ~]# service dovecot restart [root@localhost ~]# service postfix restart [root@localhost ~]# service courier-authlib restart [root@localhost ~]# service mysqld restart

十八、测试虚拟用户

 
1 2 3 [root@localhost ~]# /usr/local/courier-authlib/sbin/authtest -s login [email protected] extmail Authentication succeeded. #<span style="font-family: 宋体;">显示这个表示成功,测试时使用的用户</span>[email protected]<span style="font-family: 宋体;">是我们我们导入的数据库的默认账号。</span>

 

标签:extmail,Postfix,Linux,etc,虚拟,mysql,authlib,root,localhost
From: https://www.cnblogs.com/LiuYanYGZ/p/17535867.html

相关文章

  • CygWin:windows上运行类linux命令
    CygWin是一个在Windows平台上运行的类UNIX模拟环境,是CygnusSolutions公司开发的自由软件。它提供了类似于Linux系统的终端环境和工具,使用户可以在Windows平台上运行Unix-like的程序,如Bash、awk、sed和grep等。下载setup.exe安装Cygwin,您需要下载setup.exe,此程序根据您选择的软......
  • Linux中Postfix邮件安装配置(二)
    摘自:http://www.ywnds.com/?p=1764Postfix安装配置本套邮件系统的搭建,从如何发邮件到收邮件到认证到虚拟用户虚拟域以及反病毒和反垃圾邮件等都有详细的介绍。在搭建过程中必须的参数解释以及原理都有告诉,这样才能更好地理解邮件系统。一、卸载自带postfix 123......
  • linux环境变量配置文件
    在linux系统中有很多地方可以配置环境变量,有时候我们需要增加一个或者查找具体是谁修改了环境变量,往往找不到地方。这里列举一下有哪些文件会影响环境变量。配置文件正常情况,linux系统启动的时候会按照如下加载环境变量/etc/environment/etc/profile/etc/bash.bashrc/etc/z......
  • linux HAproxy
     HAproxy服务可以完成负载均衡,和反向代理,不仅可以完成几十万的高并发请求,而且可以完成保护真实服务器。 目录一、HAProxy概念二、HAProxy主要特性三、HAProxy负载均衡策略四、LVS、nginx和HAProxy区别五、部署HAproxy六、日志分析七、总结        ......
  • Linux | curl命令详解
    curl是一个命令行访问URL的计算机逻辑语言的工具,发出网络请求,然后得到数据并提取出,显示在标准输出“stdout”上面,可以用它来构造httprequest报文,curl(CommandLineUniformResourceLocator),即在命令行中利用URL进行数据或者文件传输。在Linux中curl是一个利用URL规则在命令行......
  • Linux修改ip
    1、打开终端;2、在终端执行“vi/etc/sysconfig/network-scripts/ifcfg-eth0”命令;3、点击i进入编辑模式,修改IPADDR、NETMASK等项的值;4、esc退出编辑模式,shift+:,输入x就保存好了;5、重启网卡:servicenetworkrestart;6、检查ip是否更新成功:ifconfig-a......
  • linux环境安装golang
    在使用pprof工具分析性能时,发现我们的环境上默认没有装go,所以执行不了gotoolpprof命令,于是自己手动装了下。步骤如下:首先下载一个对应系统架构的golang包,这里我用的是arm包,装的1.14.12版本。(见附件)。在环境上创一个个人目录,把包传上去,然后执行以下命令解压到/usr/local目录下(官......
  • 大模型复现实践记录-在linux环境4090GPU(24G)
    chatglm-6btiger-7b......
  • Linux 特殊权限和 ACL 权限管理
    Linux上有三种特殊权限,分别是setuid,setgid,sticky。对应权限的数值分别为4,2,1。对应权限的字母分别为s,s,t。对应的操作分别为chmodu+sfile,chmodg+sdir,chmodo+tdir,对应的操作也支持将字母替换为数字 setuid:一般作用于二进制文件,二进制文件在设置了该权限后,用户在执行......
  • linux overlay文件系统
    一个overlay文件系统包含两个文件系统,一个upper文件系统和一个lower文件系统,是一种新型的联合文件系统。overlay是“覆盖…上面”的意思,overlay文件系统则表示一个文件系统覆盖在另一个文件系统上面。为了更好的展示overlay文件系统的原理,现新构建一个overlay文件系统。......