28.9. 使用 Ansible 安装带有集成 eDNS 和外部 root CA 的 IdM 服务器
使用 Ansible 加密 DNS 流量,安装带有 DNS-over-TLS (DoT)和外部 root CA 的身份管理(IdM)服务器。
您可以选择 enforced 或 relaxed 策略。默认情况下,安装程序使用 relaxed 策略,它尝试 DoT,但如果无法建立安全连接,则允许回退到标准未加密的 DNS。要应用 强制 策略,请将 ipaserver_dns_policy 变量设置为 Ansible playbook 的 vars 部分中 强制执行 的。
您可以使用集成 IdM 证书颁发机构(CA)发布的证书,或者提供一个外部 CA 发布的自定义证书。如果没有提供证书,IdM CA 会在安装过程中自动发布一个 DoT 证书。
如需更多信息,请参阅系统中的 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/README-server.md。
先决条件
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 -
示例假定
secret.ymlAnsible vault 存储了ipaadmin_password,并且您可以访问存储保护secret.yml文件的密码的文件。 - 您已查看了 为 IdM 服务器安装准备系统 中所述的步骤。
-
为
强制执行DoT,您已完成了 配置客户端和副本系统以专门使用 DoT 中的步骤。
流程
可选:对于外部证书颁发机构发布的 DoT 使用自定义 PEM 格式的证书和密钥:
SSH 到您要安装 IdM 服务器的主机:
$ ssh root@server.idm.example.com创建两个文件,并为
命名守护进程分配所有权:# openssl req \ -newkey rsa:2048 \ -nodes \ -keyout /etc/pki/tls/certs/privkey.pem \ -x509 \ -days 36500 \ -out /etc/pki/tls/certs/certificate.pem \ -subj "/C=<country_code>/ST=<state>/L=<location>/O=<organization>/OU=<organizational_unit>/CN=<idm_server_fqdn>/emailAddress=<email>" && \ chown named:named /etc/pki/tls/certs/privkey.pem /etc/pki/tls/certs/certificate.pem退出 IdM 服务器上的 SSH 会话:
# exit
在 Ansible 控制器上,创建一个名为
install-server-external-ca-step1.yml的 playbook 文件,其中包含安装带有外部 CA 的 IdM 服务器的说明:--- - name: Playbook to configure IPA server Step 1: generate CSR for IdM external CA setup hosts: ipaserver become: true vars_files: - /home/user_name/MyPlaybooks/secret.yml vars: ipaserver_domain: idm.example.com ipaserver_realm: IDM.EXAMPLE.COM ipaserver_hostname: server.idm.example.com ipaadmin_password: "{{ vault_admin_password }}" ipadm_password: "{{ vault_dm_password }}" ipaserver_setup_dns: true ipaserver_dot_forwarders: - "<server_ip>#<dns_server_hostname>" ipaserver_external_ca: true ipaserver_dns_over_tls: true ipaserver_no_dnssec_validation: true ipaserver_auto_reverse: true roles: - role: freeipa.ansible_freeipa.ipaserver post_tasks: - name: Copy CSR /root/ipa.csr from node to "{{ groups.ipaserver[0] + '-ipa.csr' }}" fetch: src: /root/ipa.csr dest: "{{ groups.ipaserver[0] + '-ipa.csr' }}" flat: true如果您使用由外部证书颁发机构发布的 DoT 的自定义 PEM 格式证书和密钥,请在
vars部分中添加以下内容:ipaserver_dns_over_tls_cert: /etc/pki/tls/certs/certificate.pem ipaserver_dns_over_tls_key: /etc/pki/tls/certs/privkey.pem使用安装第一步的说明运行 Ansible playbook:
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-external-ca-step1.yml-
在控制器上找到
ipa.csr证书签名请求文件,并提交给外部的 CA。 - 将外部 CA 和 CA 证书链签名的 IdM CA 证书放在控制器文件系统中,以便下一步中的 playbook 可以找到它。
为 IdM 服务器安装的第二步创建一个新的 Ansible playbook,如
install-server-external-ca-step2.yml:--- - name: Playbook to configure IdM server Step 2: import certificates and finalize installation hosts: ipaserver become: true vars_files: - /home/user_name/MyPlaybooks/secret.yml vars: ipaserver_domain: idm.example.com ipaserver_realm: IDM.EXAMPLE.COM ipaserver_hostname: server.idm.example.com ipaadmin_password: "{{ vault_admin_password }}" ipadm_password: "{{ vault_dm_password }}" ipaserver_setup_dns: true ipaserver_dot_forwarders: - "<server_ip>#<dns_server_hostname>" ipaserver_external_ca: true ipaserver_dns_over_tls: true ipaserver_no_dnssec_validation: true ipaserver_auto_reverse: true ipaserver_external_cert_files: - servercert20240601.pem - cacert.pem pre_tasks: - name: Copy "{{ groups.ipaserver[0] }}-{{ item }}" to "/root/{{ item }}" on node ansible.builtin.copy: src: "{{ groups.ipaserver[0] }}-{{ item }}" dest: "/root/{{ item }}" force: true with_items: - servercert20240601.pem - cacert.pem roles: - role: freeipa.ansible_freeipa.ipaserver state: present使用安装最后一步的说明运行 Ansible playbook:
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-external-ca-step2.yml
故障排除
SSH到 IdM 服务器:# ssh root@server.idm.example.com为
unbound服务启用详细日志记录:# unbound-control verbosity 3重启
unbound服务以应用更新的配置:# systemctl restart unbound监控
unbound服务的实时日志:$ journalctl -u unbound -f