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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux统一身份认证Linux Unified Authentication)是一种集中管理用户账户的系统,它可以让用户在不同的Linux系统上使用同一组账号和密码登录,从而提高系统的安全性和管理效率。OpenLDAP是一种开源的LDAP(Lightweight Directory Access Protocol)服务器,它可以用于实现统一身份认证。 在CentOS 6/7上,可以通过安装和配置OpenLDAP来实现Linux统一身份认证。具体步骤如下: 1. 安装OpenLDAP 在终端中执行以下命令安装OpenLDAP: ``` yum install openldap-servers openldap-clients ``` 2. 配置OpenLDAP 配置OpenLDAP需要编辑配置文件/etc/openldap/slapd.conf。以下是一个简单的配置示例: ``` include /etc/openldap/schema/core.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args access to * by * read database bdb suffix "dc=example,dc=com" rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxx directory /var/lib/ldap index objectClass eq ``` 其中,suffix表示LDAP数据库的命名空间,rootdn和rootpw表示管理员账户的用户名和密码。 3. 启动OpenLDAP 在终端中执行以下命令启动OpenLDAP: ``` systemctl start slapd.service ``` 4. 配置客户端 在需要进行认证的Linux客户端上,需要安装和配置nss-pam-ldapd。具体步骤如下: ``` yum install nss-pam-ldapd authconfig --enableldap --enableldapauth --ldapserver=ldap://ldap.example.com --ldapbasedn="dc=example,dc=com" --enablemkhomedir --update ``` 其中,ldapserver和ldapbasedn分别表示LDAP服务器的地址和命名空间。 5. 测试认证 在客户端上执行以下命令测试认证: ``` id username ``` 其中,username为LDAP服务器上已存在的用户账户。 以上就是在CentOS 6/7上实现Linux统一身份认证的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值