使用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)发生,那么就是失败。