zoukankan      html  css  js  c++  java
  • 基于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
    AUTH LOGIN
    VXNlcjE=
    VXNlcjE=
    MAIL FROM: User1@black.com
    RCPT TO: User2@black.com
    DATA
    Hello,User2
    .
    QUIT
    " | 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
    PASS User2
    STAT
    QUIT
    " | nc 127.0.0.1 110
    

    +OK Dovecot ready.
    +OK
    +OK Logged in.
    +OK 2 804
    +OK Logging out.

    本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【1I2CK9UC】获取授权信息。

  • 相关阅读:
    CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
    C#动态调用WebService
    WPF实现窗体中的悬浮按钮
    Oracle树结构查询按层级排序
    WPF自定义TabControl样式
    WPF自定义Window窗体样式
    C# 实现图片压缩
    C# 图片反色处理 图片夜间模式
    C#中多线程中变量研究
    EasyNetQ操作RabbitMQ(高级消息队列)
  • 原文地址:https://www.cnblogs.com/somata/p/DependOPENldapBuildPostfixVirtualMailUser.html
Copyright © 2011-2022 走看看