OpenLDAP+iRedMail+GitLab统一身份认证邮件代码仓库系统的解决方案
创始人
2025-06-01 10:12:51
0

前言: 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            
mail             A            
@                MX       mail.mydomain.com    
gitlab           A                

(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: alwayshostname: 'mx.mydomain.com'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://mail.mydomain.com:8888'gitlab_rails['gitlab_shell_ssh_port'] = 2222gitlab_rails['ldap_enabled'] = truegitlab_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' => '','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-singleimage: osixia/phpldapadmin:0.9.0-amd64restart: alwaysports:- 8099:80volumes:- /etc/localtime:/etc/localtimeenvironment:- PHPLDAPADMIN_LDAP_HOSTS=172.31.16.124// 注意替换为自己服务器的private IP- PHPLDAPADMIN_HTTPS=falsedeploy:resources:limits:memory: 1Greservations: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" manageby * 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=''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
EOFldapadd -D "cn=Manager,dc=mydomain,dc=com" -w  -x -f  gitgroup.ldif

登录gitlab: http://gitlab.mydomain.com:8888 (选择LDAP方式登录)

输入账号: demo

密码: 888888

登入成功则说明GitLab接入LDAP成功。后续新建账号后,可在phpldapadmin上选择GitLab组,在member属性下加入用户。

相关内容

热门资讯

鲁迅弃医从文的原因 鲁迅弃医从文的原因  引导语:鲁迅弃医从文,这个故事大家是否了解?为何鲁迅先生要弃医从文,我们一起来...
描写风的诗句 描写风的诗句大全  在日复一日的学习、工作或生活中,大家都接触过很多优秀的诗句吧,诗句是高度凝练的语...
描写牡丹的古诗句 描写牡丹的古诗句  1、山丹丽质冠年华,复有余容殿百花。  2、断肠东风落牡丹,为祥为瑞久留难。  ...
描写鸽子的现代诗句 描写鸽子的现代诗句  导语:美丽的家鸽,每天按着固定的时间,像一片流动的霞似的在青天上飞舞。以下小编...
团结的诗词名句 关于团结的诗词名句  在学习、工作、生活中,大家都对那些朗朗上口的诗词名句很是熟悉吧,你知道什么样的...
陆游在冬夜读书示子聿 《示儿》说课稿推荐度:育子心得推荐度:《父与子》读后感推荐度:《父与子》读后感推荐度:《父与子》读后...
“草木变衰行剑外,兵戈阻绝老... “草木变衰行剑外,兵戈阻绝老江边”这两句说,在草木摇落变衰的季节来到剑外,兵戈阻绝,与兄弟音信不通。...
描写菊花的诗句 有关描写菊花的诗句  菊花有顽强的品性,自古以为就有很多诗人为它作诗。下面是小编为您带来的是有关描写...
中秋节古诗大全 一年级中秋节古诗大全  在生活、工作和学习中,大家总少不了接触一些耳熟能详的'古诗吧,古诗泛指中国古...
“花间一壶酒,独酌无相亲。”... 花间一壶酒,独酌无相亲。举杯邀明月,对影成三人。 [译文] 在花丛中我置下一壶美酒,自斟自酌身边没有...
描写黄鹤楼的诗句有哪些 描写黄鹤楼的诗句有哪些  1、楚思渺茫云水冷,商声清脆管弦秋。白花浪溅头陀寺,红叶林笼鹦鹉洲。——白...
苏轼的简单介绍 关于苏轼的简单介绍  在日常学习、工作抑或是生活中,许多人都接触过一些比较经典的句子吧,根据语气的不...
杨万里的古诗有哪些 关于杨万里的古诗有哪些  导语:杨万里我们一定都不陌生,他写过的诗非常多,你都知道哪些呢?下面是小编...
生怕见花开花落,朝来塞雁先还 “生怕见花开花落,朝来塞雁先还。”出处 出自 宋代 辛弃疾 的《汉宫春·立春日》“生怕见花开花落,朝...
漾鼻石门关 -资料 漾鼻石门关 -资料??漾濞石门关位于苍山龙泉峰与玉局峰西麓,漾江东岸,为大理州著名游览风光这一,漾鼻...
精彩片段作文 精彩片段作文精彩片段作文1“慈母手中线,游子身上衣……”我们第一大组正在振振有词的背诵游子吟,原来我...
描写杏花的诗句 描写杏花的诗句大全  导语:杏花,一种花,又称杏子,是杏属李亚科植物,其果肉、果仁均可食用。杏花单生...
表白情诗我爱你藏头诗 表白情诗我爱你藏头诗  在日常的学习、工作、生活中,大家一定没少看到经典的诗歌吧,诗歌饱含着作者的思...
傍邻闻者多叹息,远客思乡皆泪... “傍邻闻者多叹息,远客思乡皆泪垂。”出处 出自 唐代 李颀 的《听安万善吹觱篥歌》“傍邻闻者多叹息,...
中秋节最佳古诗 中秋节最佳17首古诗  在日复一日的学习、工作或生活中,大家都接触过古诗吧,古诗可分为古体诗和近体诗...