前言: iRedMail官方提供有各平台的自动安装脚本,整个安装过程并不复杂,重点在于安装后接入LDAP的配置。OpenLDAP的配置是出了名的恶心,尤其是网上大部分文档过于老旧,大多数情况下并不适用于当下。
一、说明
本文档操作环境如下:
操作系统: Ubuntu 22.04.1 LTS
硬件资源: AWS EC2 2Core 8GB
软件版本: iRedMail 1.6.2 , OpenLDAP 2.5.13 , GitLab latest
域名:mydomain.com
服务器private IP: 172.31.16.124
二、配置iRedMail
iRedMail是一个基于Linux/BSD 系统的企业级邮件服务器解决方案。最重要的是它是开源,免费的项目,可进行二次开发,安装过程也比较简单。它的官方完整安装文档在https://docs.iredmail.org/,(基础内容有中文版本,详细配置只有英文,英语阅读能力较强的同学可以根据官方文档进行安装和配置。)这里我们按照Install iRedMail on Debian or Ubuntu Linux的章节进行配置。
注意:
(1)阿里云、腾讯云均禁止使用邮件服务所必须的 25 端口提供邮件服务,因此您不能在 它们的云服务器部署邮件服务器。经测试AWS EC2同样限制了25端口,如需解除限制可以开个case说明情况。
(2)iRedMail 只针对全新安装的操作系统设计,它要求你的操作系统上 没有 事先 安装邮件服务相关的组件,例如 MySQL,OpenLDAP,Postfix,Amavisd,等。 iRedMail 会自动安装和配置邮件服务所需的组件,因此如果操作系统上已有相关 组件,iRedMail 可能会打乱你的配置并造成服务无法正常启动。
1、配置前准备
设置主机完整域名(FQDN):
修改文件/etc/hostname,内容为:
mx
修改文件/etc/hosts,定义主机名和 IP 地址的对应关系
127.0.0.1 mx.mydomain.com mx localhost localhost.localdomain
重启服务器
sudo reboot
防火墙需开放端口: 22 25 80 110 143 389 443 2222 8888 8099
2、安装iRedMail
(1)安装依赖组件
sudo apt-get install gzip dialog
(2)下载iRedMail安装工具包
访问https://www.iredmail.org/download.html找到下载链接
sudo su
cd /root
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz
tar zxf 1.6.2.tar.gz
cd iRedMail-1.6.2
bash iRedMail.sh
(3)安装配置iRedMail
安装过程会以交换形式进行,需要注意的地方有
Choose preferred backend used to store mail accounts 选择 OpenLDAP
LDAP suffix (root dn) 输入 dc=mydomain,dc=com
Your first mail domain name 输入 mydomain.com
Password for the mail domain administrator 输入 12345678
安装完成后查看文件 /root/iRedMail-1.6.2/iRedMail.tips, 这里记录会所有iRedMail相关服务和组件的信息。
(4)设置DNS解析
在你的域名提供商那里,设置如下DNS解析:
主机记录记录类型值
@ A <public ip>
mail A <public ip>
@ MX mail.mydomain.com
gitlab A <public ip>
(5)配置 SSL 证书
配置前准备:
sudo vim /etc/nginx/sites-enabled/00-default-ssl.conf
修改server_name这一行为:
server_name mail.mydomain.com;
停止nginx
sudo service nginx stop
如果不配置nginx的server_name和停止nginx服务,certbot会安装失败。
使用 Let's Encrypt 提供免费的 SSL 证书,访问https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal根据官方文档进行操作
由于Ubuntu22.04自带snap,可以跳过snap的安装,直接更新snap
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo certbot --nginx
配置过程中会提示你输入证书域名: mail.mydomain.com
配置结束后启动nginx
sudo service nginx start
(6)在浏览器中访问https://mail.mydomain.com/mail
邮箱管理员账号为 postmaster@mydomain.com
密码是安装iRedMail时输入的密码12345678,当然也可以在/root/iRedMail-1.6.2/iRedMail.tips文件中找到
登入成功表示iRedMail服务搭建完毕。
注意:由于机房限制25端口,在未解除限制前,邮件服务器仅能接收和本域名范围内发送邮件。
2、安装GitLab
(1)安装
创建工作目录:
mkdir -p /home/ubuntu/work/gitlab && cd /home/ubuntu/work/gitlab
创建docker-compose.yml文件,内容为:
version: '3.6'
services:
web:
container_name: 'gitlab'
image: 'gitlab/gitlab-ee:latest'
restart: always
hostname: 'mx.mydomain.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://mail.mydomain.com:8888'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'LDAP',
'host' => '172.31.16.124',// 注意替换为自己服务器的private IP
'port' => 389,
'uid' => 'uid',
'encryption' => 'plain',
'allow_username_or_email_login' => true,
'user_filter' => '(memberof=cn=GitLab,ou=Groups,domainName=mydomain.com,o=domains,dc=mydomain,dc=com)', // GitLab组的成员可以登入
'block_auto_created_users' => false,
'lowercase_usernames' => false,
'bind_dn' => 'cn=vmail,dc=mydomain,dc=com',
'password' => '<vmail password>',
'base' => 'ou=Users,domainName=mydomain.com,o=domains,dc=mydomain,dc=com'
}
}
ports:
- '8888:8888'
- '2222:22'
volumes:
- '/home/ubuntu/work/gitlab/config:/etc/gitlab'
- '/home/ubuntu/work/gitlab/logs:/var/log/gitlab'
- '/home/ubuntu/work/gitlab/data:/var/opt/gitlab'
shm_size: '256m'
启动容器:
docker compose up -d
(2)配置
创建GitLab本地管理员账号:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
获取密码后在网页上登录:http://gitlab.mydomain.com:8888 (登录框中选择Standard)
登录成功则说明GitLab安装成功。
3、配置OpenLDAP
(1)安装phpldapadmin
由于iRedMail在安装过程中会自动安装OpenLDAP并将其各组件接入OpenLDAP,且iRedMail的LDAP规则过于复杂,不建议新手单独创建OpenLDAP服务并配置接入。
OpenLDAP的命令行配置过于反人类,需要安装phpldapadmin救命。因为iRedMail自动安装了web服务,为避免冲突这里使用docker安装phpldapadmin
创建工作目录:
mkdir -p /home/ubuntu/ici/work/phpldapadmin
cd /home/ubuntu/work/phpldapadmin
创建docker-compose.yml文件,内容为:
version: "3"
services:
phpldapadmin:
container_name: phpldapadmin-single
image: osixia/phpldapadmin:0.9.0-amd64
restart: always
ports:
- 8099:80
volumes:
- /etc/localtime:/etc/localtime
environment:
- PHPLDAPADMIN_LDAP_HOSTS=172.31.16.124// 注意替换为自己服务器的private IP
- PHPLDAPADMIN_HTTPS=false
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 256M
启动容器:
docker compose up -d
如提示docker-compose命令不存在,可以用 apt install docker-compose 来安装命令。
启动完成后,通过http://mail.mydomain.com:8099访问LDAP页面。
管理员账号信息在/root/iRedMail-1.6.2/iRedMail.tips文件中可以找到,类似于
* LDAP root dn: cn=Manager,dc=mydomain,dc=com, password: xxxxxxxxxxxxxxxxxxxxxxxxxxx
注意:账号不要只输入 Manager 要输入完整信息:cn=Manager,dc=mydomain,dc=com
(2)启用memberOf模块
默认情况下,OpenLDAP的用户组属性为Posixgroup,起与用户之间没有实际对应关系,这会导致LDAP无法根据用户与组之间的隶属关系做查询。而在实际的项目和组织架构管理中,这种隶属关系的应用很普遍,所以需要启用LDAP的memberOf模块。普遍情况下启动memberOf模块并不复杂,网上的教程和文档也很多,但由于这里的OpenLDAP是由iRedMail自动安装和配置的,网上的资源完全无法使用。为什么会出现这种情况?
OpenLDAP是在iRedMail的自动安装脚本过程中自动被安装的,我们无法控制这一过程,我曾尝试先安装配置OpenLDAP后再将iRedMail手动接入,但由于iRedMail所包含的组件较多,涉及到LDAP的相关配置很复杂最终放弃。在这种情况下我们只有一条路可以走,那就是使用iRedMail自动配置好的OpenLDAP策略,这会导致一个问题,OpenLDAP的静态配置和动态配置问题,所谓静态配置:我想修改LDAP的配置,我只能修改/etc/ldap/slapd.conf这配置文件,删除slapd.d目录后,通过slaptest重新生成子配置文件,重启OpenLDAP生效。动态配置:使用ldapadd通过编辑ldif文件内容执行OpenLDAP配置,这需要执行一条命令,不需要重启服务。不幸的是iRedMail安装的OpenLDAP使用的是静态配置,而网上的教程采用的是动态配置。所以不管你怎么执行动态配置的命令,都无法修改slapd.d目录下的内容,也就无法添加memberof模块。
静态配置memberof模块的方法如下:
修改/etc/ldap/slapd.conf文件:在moduleload back_monitor的下一行插入2行:
moduleload memberof
moduleload refint
在database monitor的上一行添加:
database config
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * none
在database mdb的下一行添加:
overlay memberof
overlay refint
保存文件后,退出
通过下面的命令刷新配置文件
sudo rm -r /etc/ldap/slapd.d
sudo mkdir /etc/ldap/slapd.d
sudo slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
sudo chown -R openldap:openldap /etc/ldap/slapd.d
sudo service slapd restart
以上方法参考资料:https://www.openldap.org/doc/admin24/overlays.html
https://forum.iredmail.org/topic8673-general-ldap-setup-question.html
(3)创建组织架构
创建邮箱用户:
sudo su
cd /root/iRedMail-1.6.2/tools/
编辑create_mail_user_OpenLDAP.sh
修改信息为自己的:
LDAP_SUFFIX="dc=mydomain,dc=com"
BINDPW='<your_password>'
DEFAULT_PASSWD='888888'//固定的初始密码
USE_DEFAULT_PASSWD='YES' //YES表示启用固定初始密码,NO表示不启用,密码默认为与账号相同
修改好后保存退出,使用命令创建用户:
bash create_mail_user_OpenLDAP.sh mydomain.com demo
创建git组,并把demo用户加到组里:
cat > gitgroup.ldif << EOF
dn: cn=GitLab,ou=Groups,domainName=mydomain.com,o=domains,dc=mydomain,dc=com
cn: GitLab
objectClass: groupOfNames
objectClass: top
Member: mail=demo@mydomain.com,ou=Users,domainName=mydomain.com,o=domains,dc=mydomain,dc=com
EOF
ldapadd -D "cn=Manager,dc=mydomain,dc=com" -w <your_password> -x -f gitgroup.ldif
登录gitlab: http://gitlab.mydomain.com:8888 (选择LDAP方式登录)
输入账号: demo
密码: 888888
登入成功则说明GitLab接入LDAP成功。后续新建账号后,可在phpldapadmin上选择GitLab组,在member属性下加入用户。