OpenLDAP+iRedMail+GitLab统一身份认证邮件代码仓库系统的解决方案

news/2024/4/25 7:16:12/文章来源:https://blog.csdn.net/apache0554/article/details/129710443

前言: 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: 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' => '<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-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='<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
EOFldapadd -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属性下加入用户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_274583.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

串口通信(STM32演示实现)

目录 一、串行通信的概念 二、寄存器 2.1控制寄存器USART_CR1 2.2控制寄存器USART_CR2​编辑 2.3串口寄存器USART_BRR 2.4 USART_ISR 2.5USART_TDR 2.6USART_RDR​编辑 三、实现串口数据的收发 一、串行通信的概念 u通信&#xff0c;最少要有两个对象&#xff0c;一个收…

提高曝光率:外贸网站如何充分利用谷歌优化赢得客户

自从我从事外贸行业以来&#xff0c;谷歌优化一直是我关注的重点。 作为一个外贸从业者&#xff0c;我深知提高网站在谷歌搜索引擎中的排名对企业的重要性。 那么&#xff0c;如何利用谷歌优化来提高外贸网站的曝光率&#xff0c;从而赢得更多客户呢&#xff1f; 以下是我在…

I2C和SPI总线以及通信

通讯属性 概括 Serial/parallel 串行/并行Synchronous/asynchronous 同步/异步Point-to-point / bus 点对点 总线Half-duplex/full-duplex 半双工/全双工Master-slave/ equal partners 主从/对等single-ending / differential 单端/差分 点对点和总线 点对点通讯 只有两个通…

【UE】使用初学者内容包创建简单的地形材质

效果步骤新建一个材质打开该材质&#xff0c;创建一个“layerblend”节点创建3个数组元素设置图层命名、混合类型和预览权重使用初学者内容包中的“T_Rock_Basalt_D”纹理、“T_Ground_Gravel_D”纹理和“T_Ground_Grass_D”纹理使用“Terrain_Mat”材质创建一个地形可以用雕刻…

PMP项目管理证书的含金量高吗?

PMP 项目管理证书的含金量一直是大家非常关心的一个问题&#xff0c;其实没必要纠结含金量&#xff0c;想从事项目管理岗位的&#xff0c;考就对了。 先给大家上个目录&#xff0c;再来细细说明 一、PMP带来的好处&#xff08;含金量&#xff09;二、PMP适合什么人考三、PMP 考…

CCS v6 导入工程调试仿真烧写程序教程

点击CCS图标&#xff0c;选择要放置的workplace 1.然后配置仿真器参数&#xff1a;View>Target Configurations 然后开始配置仿真器参数&#xff0c;大家可以根据自己的器件&#xff1a; 选择好之后&#xff0c;点击save 2.导入新的工程 然后就可以看到工程已经导入成功了&a…

掌握CentOS7环境下的Docker使用(八)阿里云镜像仓库实战、harbor仓库搭建与实战、本地镜像容器的载入载出

文章目录镜像仓库简介公共镜像仓库私有镜像仓库阿里云镜像仓库的搭建与使用创建仓库登录将镜像推送到Registry从Registry中拉取镜像harbor仓库搭建与使用搭建harbor仓库配置与使用harbor仓库本地镜像容器的载入与载出保存镜像保存容器可能出现的问题输入正确的密码登录不进去阿…

人员玩手机离岗识别检测系统 yolov5

人员玩手机离岗识别检测系统根通过pythonyolov5网络模型识别算法技术&#xff0c;人员玩手机离岗识别检测算法可以对画面中人员睡岗离岗、玩手机打电话、脱岗睡岗情况进行全天候不间断进行识别检测报警提醒。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很…

Spring核心概念

Spring核心概念1 介绍1.1 为什么要学?1.2 学什么?1.3 怎么学?2 Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史2.2 Spring系统架构2.2.1 系统架构图2.2.2 课程学习路线2.3 Spring核心概念2.3.1 目前项目中的问题2.3.2 IOC、IOC容器、Bean、DI2.3.3 核…

Open Inventor 2023.1RC 将更大变化

体积可视化 具有单一分辨率的体积渲染 使用单一分辨率渲染卷更容易&#xff0c;因为卷可视化现在可以根据当前设置和硬件配置自动计算出最佳分辨率。使用单一分辨率可防止在默认模式下可能可见的不良伪影。 下图突出显示了单一分辨率的优势。在左图中&#xff0c;在 2 种分辨…

深度学习:GPT1、GPT2

深度学习&#xff1a;GPT1、GPT2、GPT3的原理与模型代码解读GPT-1IntroductionFramework自监督学习微调ExperimentGPT-2IntroductionApproachConclusionGPT-3GPT-1 Introduction GPT-1&#xff08;Generative Pre-training Transformer-1&#xff09;是由OpenAI于2018年发布的…

Python读取,预处理DICOM文件方式

需要的库 ●Simpleitk 安装命令&#xff1a; conda install -c simpleitk simpleitk使用&#xff1a; import SimpleITK as sitk●pydicom&#xff08;不推荐&#xff0c;可能有些文件打不开&#xff09; 安装命令&#xff1a; conda install -c conda-forge pydicom●PIL …

linux系统添加审计用户并进行权限控制

审计账号只用于审计功能&#xff0c;其权限可在普通账号基础上进行修改.创建审计用户 sjyhuseradd sjyh为审计用户设置登录密码passwd sjyh会有如下提示&#xff0c;按照提示依次修改即可:更改用户 sjyh 的密码 。 新的 密码&#xff1a; 重新输入新的 密码&#xff1a; 重新输…

平庸的恐惧,就业的烦恼——致互联网人进退两难的35岁

最近阿道看到了一些黑色幽默的新闻。 事情是这样的&#xff0c;某媒体发文抨击职场的“35岁”歧视&#xff0c;但后来被扒出&#xff0c;该媒体所属的机构在发布招聘信息时&#xff0c;却明确地标注了受聘者的年龄界限。 这一通操作属实把大家看傻了&#xff0c;后来阿道又在…

AVL树大讲堂

1.基础概念介绍 首先在前面我们介绍了二叉搜索树&#xff0c;但是如果当存储的数据接近有序或者恰巧有序的时候&#xff0c;二叉搜索树将逐渐退化为单支树&#xff0c;导致搜索效率降低&#xff0c;因此我们的avl树便为了解决这一问题而诞生了。 基础性质&#xff1a;当向二叉…

Tone Mapping中luma滤波(降噪)对噪声放大的定性分析

Tone Mapping中luma滤波对噪声放大的定性分析 在tone mapping过程中&#xff0c;通常经过统计之后得到一条mapping曲线&#xff0c;记这条曲线为f(x)f(x)f(x)&#xff0c;mapping过程中&#xff0c;对于给定的点&#xff0c;假定其亮度为xxx&#xff0c;映射后为f(x)f(x)f(x)&…

虚拟机设置桥接模式:静态IP

一、下载virtual box并安装系统 链接&#xff1a;https://www.virtualbox.org/ 安装并配置Ubuntu桌面版&#xff1a;https://blog.csdn.net/Zhichao_Zhang/article/details/127142410?spm1001.2014.3001.5506 安装并配置CentOS7&#xff1a;https://blog.csdn.net/csp7321711…

【学习笔记】《Writing Science》14-21

文章目录14 Energizing Writing 充满活力的写作14.1. ACTIVE VERSUS PASSIVE VOICE 主动语态和被动语态14.1.1. Controlling Perspective 控制视角14.1.2. Hiding the Actor 隐藏演员14.2. FUZZY VERBS 模糊动词14.2.1. Fuzzy Hypotheses 模糊假设14.3. NOMINALIZATIONS 名词化…

自动化测试学习(七)-正则表达式,你真的会用吗?

目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式&#xff08;regex&#xff09;&#xff0c;就是一种模式匹配&#xff0c;学会用正则匹配&#xff0c;就可以达到事半功倍的效果。 一、正则表达式在…

本地资源检测|单规则多阈值设置功能上线

作为一款可以全面自动检测项目静态工程内各项资源、代码和设置的UWA服务&#xff0c;本地资源检测能够帮助项目组制定合理的资源与代码标准&#xff0c;及时发现潜在的性能问题和异常错误&#xff0c;建立有效的开发规范意识。 此次3.1.0版本更新&#xff0c;在优化和完善现有…