使用Docker创建适用于LDAP认证的Apache2.4反向代理

目录

    [目次] Prometheusで監視システムを作る with Docker

总结

使用Docker创建一个在Apache 2.4上进行LDAP身份验证的反向代理。
本文将提供在Prometheus容器中应用LDAP身份验证的示例。有关Prometheus环境搭建,请参考以下内容。(顺便提一句,Prometheus本身并不具备身份验证系统等功能)

参考:使用Docker构建基于Prometheus的监控系统

目录结构

├── docker-compose.yaml
├── .env
├── prometheus
│   └── (省略)
└── rproxy
    ├── conf
    │   └── ldap.conf
    └── Dockerfile

docker-compose.yaml 文件

将Prometheus容器的连接来源限制为127.0.0.1。

version: '3'
services:
  # Prometheusコンテナ
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    hostname: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - metrics_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yaml'
    ports:
      # 接続元を127.0.0.1に制限する
      - 127.0.0.1:9090:9090
    restart: always

  # リバースプロキシコンテナ
  rproxy:
    container_name: rproxy
    build:
      context: ./rproxy
      dockerfile: Dockerfile
    env_file:
      - .env
    volumes:
      # LDAP接続のためのCA証明書をmount。適宜パスを変更。不要な場合は省略。
      - /etc/pki/tls/certs/ca-bundle.crt:/etc/ssl/certs/ca-certificates.crt
    ports:
      - "8080:80"
    restart: always

volumes:
  metrics_data:
    external: true

Dockerfile 請用中文重新寫一遍。

FROM httpd:2.4

RUN apt-get update -y
RUN apt-get install -y libapache2-mod-webauthldap
RUN mkdir /usr/local/apache2/conf/include/ &&  echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf

COPY ./conf/*.conf   /usr/local/apache2/conf/include/

httpd的配置文件

LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

LDAPVerifyServerCert off

# Prometheus
<VirtualHost *:80>
    <Location />
        LogLevel info
        AuthName "Prometheus Auth"
        AuthType Basic
        AuthBasicProvider ldap
        AuthLDAPUrl ${LDAP_URL}
        AuthLDAPBindDN ${LDAP_BIND_DN}
        AuthLDAPBindPassword ${LDAP_PASSWORD}
        Require valid-user
        # Proxyするホスト名。対象のDockerコンテナのhostnameとportを指定する。
        ProxyPass http://prometheus:9090/
        ProxyPassReverse http://prometheus:9090/
    </Location>
</VirtualHost>

在中文中重新表达以上内容,只需提供一种选项:

.env文件。

写入LDAP连接信息。

LDAP_URL=ldaps://your_ldap_server.com/o=xxxx,ou=xxxx,dc=xxxx
LDAP_BIND_DN=cn=xxxx,ou=xxxx,dc=xxxx
LDAP_PASSWORD=password

$ sudo docker-compose up -d --build

确认动作

LDAP验证

在浏览器中连接到rproxy容器的8080端口。
http://example.com:8080/

请在出现用户名和密码提示后,输入用于LDAP的个人账户。
确保URL仍为:8080,并验证Prometheus页面是否显示。

普羅米修斯容器驗證

确认无法直接通过浏览器连接到Prometheus容器(ERR_CONNECTION_REFUSED)。
http://example.com:9090/

调试方法

确认LDAP连接是否正常的方法有哪些?

安装以下内容到rproxy容器中,并使用ldapsearch命令检查是否可以进行LDAP连接。

$ echo '\nHOST your_ldap_server.com\nPORT 636\nTLS_REQCERT allow' >> /etc/ldap/ldap.conf
$ apt-get update -y
$ DEBIAN_FRONTEND=noninteractive apt-get install -y slapd ldap-utils

CentOS的情况下

$ sudo yum install openldap-clients

确认连接

您可以将您的LDAP帐户放在YOUR_USER_NAME中。

$ ldapsearch -x -W -s one \
      -H ldaps://your_ldap_server.com \
      -b "o=xxxx,ou=xxxx,dc=xxxx" \
      -D "cn=xxxx,ou=xxxx,dc=xxxx" "(cn=YOUR_USER_NAME)" \
      -d 1

ldap_url_parse_ext(ldaps://your_ldap_server.com)
ldap_create
ldap_url_parse_ext(ldaps://your_ldap_server.com:636/??base)
Enter LDAP Password: # ${LDAP_PASSWORD}を入力。YOUR_USER_NAMEのパスワードではない。

# 中略
connect success

当连接成功时,则成功。
如果ldap_sasl_bind(SIMPLE): Can’t contact LDAP server (-1)发生,那么就是失败。

广告
将在 10 秒后关闭
bannerAds