基于OPENldap搭建postfix 虚拟用户
本文首发: https://www.somata.net/2019/depend_openldap_build_postfix_virtual_mail_user.html
postfix + dovecot + openldap 制作虚拟邮件用户
这里使用的虚拟邮件用户的方法是我自己研究的,可能会有不对或则不好的地方,望指出。
由于之前已经写过MariaDB作为数据库的虚拟用户,所以这里会有很多地方会简化配置和讲解,如果没有看懂可以看看这篇文章:邮件服务配置(虚拟域&虚拟用户)
有关于openldap方面的配置这里不多做解释,更多的查看这篇文章LDAP 服务搭建和后期管理,这里主要还是写有关于虚拟邮件用户的相关配置。
同时这里我使用debian9作为平台。
1. OPENldap添加用户
# file: mail.ldif
# MAIL组
dn: ou=MAIL,dc=black,dc=com
objectClass: organizationalUnit
ou: MAIL
#User1
dn: uid=User1,ou=MAIL,dc=black,dc=com
objectClass: inetOrgPerson
uid: User1
sn: User1
cn: User1
mail: /home/User1/Maildir/
userPassword: {SSHA}sO5Pfb6GPmGUPQb1o59KXa7yQDGFt6iU # 密码生成: doveadm pw -s ssha -p User1
#User2
dn: uid=User2,ou=MAIL,dc=black,dc=com
objectClass: inetOrgPerson
uid: User2
sn: User2
cn: User2
mail: /home/User2/Maildir/
userPassword: {SSHA}E6PyVtdWcXtpfhJLw3NnElBOb63qqPuw
如果有批量的操作,这里还可是使用脚本:
#!/bin/bash
cat << EOF | ldapadd -D "cn=root,dc=black,dc=com" -w 123456
dn: ou=MAIL,dc=black,dc=com
objectClass: organizationalUnit
ou: MAIL
EOF
for i in {1..2};do
user=User$i
password=`doveadm pw -s ssha -p $user`
cat << EOF | ldapadd -D "cn=root,dc=black,dc=com" -w 123456
dn: uid=$user,ou=MAIL,dc=black,dc=com
objectClass: inetOrgPerson
uid: $user
sn: $user
cn: $user
mail: /home/$user/Maildir/
userPassword: $password
EOF
done
2. postfix 服务配置
# 添加用户vmail
useradd vmail # 后面通过查询得知UID和GID为1004
这里主要写 有关虚拟用户目录,和用户配置的部分:
# file: /etc/postfix/main.cf
……
virtual_gid_maps = static:1004 # 直接固定UID 和 GID
virtual_uid_maps = static:1004
virtual_mailbox_domains = black.com # 同样的也固定域名
# 这里需要注意在mydestination 中不能包含该域名
virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf # 指定用户邮箱的配置文件
virtual_mailbox_base = / # 这里的base路径设置为 / ,
# 这里主要是因为ldap不能像MariaDB一样可是使用concat函数,dovecot中不能设置base路径,所以在ldap中mail的路径被设置成了绝对路径,然后这里的base路径设置为/。如果有其他方法请留言或邮件告知。
broken_sasl_auth_clients = yes # 拒绝非正常客户端
smtpd_sasl_auth_enable = yes # 开启sasl认证
smtpd_sasl_type = dovecot # 使用dovecot认证
smtpd_sasl_path = private/auth # 设置认证套接字
smtpd_recipient_restrictions = permit_sasl_authenticated,reject # 这里设在为了强制认证,如果放在生产环境中是不可取的。
ldap.cf 文件:
# file: /etc/postfix/ldap.cf
server_host = localhost # 服务器地址
server_port = 389 # 服务器端口
timeout = 5 # 超时时间
bind_dn = cn=root,dc=black,dc=com # 登入用户
bind_pw = 123456 # 登入密码
search_base = ou=MAIL,dc=black,dc=com # 搜寻base地址
query_filter = (&(objectClass=inetOrgPerson)(uid=%u)) # 过滤规则
result_attribute = mail # 指定使用那个返回属性
3. dovecot 服务配置
主要配置一下几个文件:
# file: /etc/dovecot/dovecot.conf
protocols= pop3 # 开启pop3服务
listen = * # 监听服务类型
!include conf.d/*.conf # 其他配置
# file: /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no # 关闭不允许为加密密文传输
auth_mechanisms = plain login # 这里需要再开启login的认证,否则postix无法使用
!include auth-ldap.conf.ext # 这里注释auth-system.conf.ext,然后开启auth-ldap.conf.ext
# file /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/%u/Maildir/
namespace inbox {
inbox = yes
}
mail_uid = 1004 # 这里跟postfix一样固定UID和GID
mail_gid = 1004
# file: /etc/dovecot/conf.d/10-master.conf
……
service auth {
unix_listener auth-userdb {
}
unix_listener /var/spool/postfix/private/auth { # 为postfix开启auth认证套接字
mode = 0660
user = postfix
group = postfix
}
}
……
# file: /etc/dovecot/dovecot-ldap.conf.ext
hosts = localhost:389 # 主机
dn = cn=root,dc=black,dc=com #登入名称
dnpass = 123456 # 密码
base = ou=MAIL,dc=black,dc=com # base路径
user_attrs = mail=home # 指定返回的属性
user_filter = (&(objectClass=inetOrgPerson)(uid=%u)) # 用户过滤参数
pass_attrs = uid=user,userPassword=password # 密码过滤参数
pass_filter = (&(objectClass=inetOrgPerson)(uid=%u))
default_pass_scheme = SSHA # 指定密码加密方法
4. 权限配置和测试
首先给vmail用户添加一下权限
setfacl -m u:vmail:rwx /home
systemctl restart dovecot
systemctl restart postfix
然后就可是进行测试了,这里不多讲,能写出来那么肯定是能通过的:
echo -e "EHLO client\nAUTH LOGIN\nVXNlcjE=\nVXNlcjE=\nMAIL FROM: User1@black.com\nRCPT TO: User2@black.com\nDATA\nHello,User2\n.\nQUIT\n" | nc 127.0.0.1 25
220 mail.black.com ESMTP Postfix (Debian/GNU)
250-mail.black.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 2.7.0 Authentication successful
250 2.1.0 Ok
250 2.1.5 Ok
354 End data with .
250 2.0.0 Ok: queued as 0A38110016B
221 2.0.0 Bye
echo -e "USER User2\nPASS User2\nSTAT\nQUIT\n" | nc 127.0.0.1 110
+OK Dovecot ready.
+OK
+OK Logged in.
+OK 2 804
+OK Logging out.
本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【1I2CK9UC】获取授权信息。
基于OPENldap搭建postfix 虚拟用户的更多相关文章
- 烂泥:Postfix邮件服务器搭建之虚拟用户配置
virtual_gid_maps = static: virtual_transport = dovecot dovecot_destination_recipient_limit = 1 注意:po ...
- CentOS7 FTP服务搭建(虚拟用户访问FTP服务)
概述 最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白.Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建.FT ...
- Linux中Postfix虚拟用户及虚拟域(六)
Postfix基于虚拟用户虚拟域的邮件架构 上图是一个几乎完整的邮件系统架构图,这里基于Mysql数据库进行用户认证,不管是Postfix.Dovecot.webmail都需要去Mysql数据库中进行 ...
- centos 7.2下搭建vsftp 虚拟用户
虚拟用户搭建vsftp 要求一: 只允许上传 下载 不能删除 不能更换名称 yum install pam* yum install db4* -y yum install vsftpd chkcon ...
- RHEL7 -- Linux搭建FTP虚拟用户
安装vsftpd软件包[root@localhost ~]# yum install vsftpd -y [root@localhost ~]# yum install db4 db4-utils 建 ...
- CentOS 7搭建vsftp(虚拟用户方式登录)
说明: vsftpd的版本:vsftpd-3.0.2-22.el7.x86_64 ftp 根目录 : /data/ftp ftp 配置文件目录:/etc/vsftpd ftp 虚拟用户权限配置文件目录 ...
- ecs centos7.3 搭建vsftpd 虚拟用户
FTP介绍 FTP会话时包含了两个通道,一个叫控制通道,端口号21:一个叫数据通道,端口号20. 控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的. ...
- Vsftpd: 基于PAM认证的虚拟用户和匿名用户
目录 环境说明效果说明及截图①. 安装组件②. 系统账户建立③. 编辑vsftpd的配置文件④. 生成虚拟用户的数据库文件⑤. 生成一个使用vsftpd_login.db数据文件的PAM认证文件⑥. ...
- centos7下安装vsftpd与PAM虚拟用户
Vsftp与PAM虚拟用户 使用yum 安装vsftp yum install vsftpd pam pam-* db4 db4-* 设置开机启动 chkconfig vsftpd on 创建一个保存 ...
随机推荐
- Asp.net C# 遍历Excel中的表格名称
Asp.net C# 遍历Excel中的表格名称 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + " ...
- Android SDK目录说明
在SDK目录下有很多文件夹,了解这个文件夹都包含哪些内容,更有利于Android的开发,也是作为Android开发者应该了解的.本文就SDK目录进行说明. SDK目录如下: add-ones:Goog ...
- Linux 教程学习笔记
目录 一.Linux 系统启动过程 1.分为 5 个阶段 3.shell.操作系统.内核的关系 二.Linux 系统目录结构 三.Linux 文件基本属性 1.Linux文件属性 3.更改文件属性: ...
- POJ2449 【第k短路/A*】
题目链接:http://poj.org/problem?id=2449 题目大意: 给出n个点,m条有向边,最后一行给出起点到终点的第k短路.求长度. 题解思路: 这是我第一道第k短路题以及A*算法的 ...
- python学习-17 列表list 2
# 1. 选择嵌套列表里的元素(内部进行了for循环) li = [1,2,",45]],"abc",True] a = li[3][2][1] print(a) 运行结 ...
- set object is not JSON serializable 解决方式
python return json的时候报错: set object is not JSON serializable 解决方式,增加一个将set转为list的函数: def set_default ...
- WUSTOJ 1274: 喂,这里是帅帅的LCM(Java)
1274: 喂,这里是帅帅的LCM 题目 在一组数中,找出个数为奇数的数.更多内容点击标题. 分析 其实这种题并不难,做过一次之后,绝对不会错第二次.通过读题可以发现,我们要找的那个数在这一堆 ...
- 关于UBOOT,LINUX内核编译,根文件系统的15个小问题
(1)内核默认运行地址和加载地址在哪里设置? 由 arch/arm/kernel/vmlinux.lds.S 生成的 arch/armkernel/vmlinux.lds决定 (2)从FLASH什 ...
- Ubuntu 搭建 配置 nfs服务器
什么是NFS? NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NF ...
- (三)SpringBoot之配置文件详解:Properties和YAML
一.配置文件的生效顺序,会对值进行覆盖: 1. @TestPropertySource 注解 2. 命令行参数 3. Java系统属性(System.getProperties()) 4. 操作系统环 ...