Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
content:serverbasics:docker-freeipa [2024/09/07 11:15] – Daniel | content:serverbasics:docker-freeipa [2025/02/19 10:46] (aktuell) – Daniel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== FreeIPA ====== | + | ====== |
+ | |||
+ | FreeIPA is a collection of Tools for managing an AD (Active Directory) and a nice Web- GUI to mange those. | ||
+ | |||
+ | As docker Image, it delivers LDAP for central storing of Users/ | ||
+ | |||
+ | This chapter will describe, how to install FreeIPA in a rootless Docker- Environement, | ||
+ | |||
+ | ===== Prerequiusite ===== | ||
+ | |||
+ | You will need a Docker- Host, that is rechable from the Internet with its fully qualifierd Domain- Name (FQDN) as described in the chapters before. The given Ports must be reachable from the clients. | ||
+ | |||
+ | ===== Docker composer ===== | ||
+ | |||
+ | FreeIPA will not use a Database - all needed informations are stored into the Docker Data- Volume. Some Services - like LDAP will setup their own DB in that Directory. | ||
+ | |||
+ | First, create a Directory in your Docker-Compose directry that you chose before in [[http:// | ||
+ | |||
+ | Then, create your '' | ||
+ | < | ||
+ | |||
+ | services: | ||
+ | freeipa: | ||
+ | image: freeipa/ | ||
+ | restart: unless-stopped | ||
+ | hostname: [FQDN_HOSTNAME] | ||
+ | #For dns setup: | ||
+ | # read_only: true | ||
+ | environment: | ||
+ | IPA_SERVER_HOSTNAME: | ||
+ | TZ: " | ||
+ | PASSWORD: ' | ||
+ | # DEBUG_NO_EXIT: | ||
+ | tty: true | ||
+ | stdin_open: true | ||
+ | cgroup: host | ||
+ | cap_add: | ||
+ | - NET_ADMIN | ||
+ | volumes: | ||
+ | - / | ||
+ | - ipa_data:/ | ||
+ | - ipa_journal:/ | ||
+ | - / | ||
+ | - / | ||
+ | - caddy_data:/ | ||
+ | tmpfs: | ||
+ | - /run | ||
+ | - /tmp | ||
+ | sysctls: | ||
+ | - net.ipv6.conf.all.disable_ipv6=0 | ||
+ | - net.ipv6.conf.lo.disable_ipv6=0 | ||
+ | security_opt: | ||
+ | - " | ||
+ | command: | ||
+ | - -U | ||
+ | - --domain=clients.[DOMAINPART_OF_HOSTNAME] | ||
+ | # Must match the last part of the Domain-Name and must be upper case and routed to the domain | ||
+ | - --realm=[DOMAINPART_OF_HOSTNAME_UPPERCASE] | ||
+ | - --http-pin=[NEWHTTPDPIN] | ||
+ | - --dirsrv-pin=[NEWDIRSRVPIN] | ||
+ | #Bind/DNS Setup - use own Server Open Port 53 for this | ||
+ | - --setup-dns | ||
+ | # - --no-host-dns | ||
+ | - --setup-dns | ||
+ | # Save choice: | ||
+ | - --no-forwarders | ||
+ | # Will Forward unknow DNS- Queries to something else. May be a security- breach | ||
+ | # - --auto-forwarders | ||
+ | # - --forwarder=192.168.178.1 | ||
+ | #NTP - not needed, this is the server which time is taken from / | ||
+ | #This server has also a chrony-daemon running here to sync time | ||
+ | - --no-ntp | ||
+ | # - --ntp-server=172.0.0.11 | ||
+ | #Error: Unable to determine the amount of available RAM | ||
+ | - --skip-mem-check | ||
+ | ports: | ||
+ | #HTTP(s): Will be proxiesd by Caddy | ||
+ | # - " | ||
+ | # - " | ||
+ | #LDAP (needed) | ||
+ | - " | ||
+ | #LDAPs (needed) | ||
+ | - " | ||
+ | #Kerberos (needed) | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | #DNS (needed) | ||
+ | - " | ||
+ | - " | ||
+ | #NTP - not needed, takes chronyd of the host | ||
+ | # - " | ||
+ | #Unknown: | ||
+ | # - " | ||
+ | # - " | ||
+ | # - " | ||
+ | # - " | ||
+ | volumes: | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | The caddy_data Volume contains the Certifictes for encryption from Caddy as described in [[.: | ||
+ | |||
+ | ===== Caddyfile ===== | ||
+ | |||
+ | Caddy wil be used for Proxy, so in your Caddyfile (see [[https:// | ||
+ | < | ||
+ | |||
+ | # FreeIPA | ||
+ | http:// | ||
+ | reverse_proxy serverpc-freeipa-1: | ||
+ | } | ||
+ | https:// | ||
+ | header Strict-Transport-Security max-age=31536000; | ||
+ | reverse_proxy https:// | ||
+ | transport http { | ||
+ | tls | ||
+ | tls_insecure_skip_verify | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | As the internal Certificate of FreeIPA will be self-signed, | ||
+ | |||
+ | ===== Encryption ===== | ||
+ | |||
+ | First thing you should do, is to secure the (LDAP)- ports with the certificate from letsenrcypt that Caddy uses. Without those matching certificates in place, Kerberos later won't accept the self signed- certificates that FreeIPA will create during install. | ||
+ | |||
+ | Your Caddyfile should have mounted the Certificates from Caddy to / | ||
+ | |||
+ | The Parts will be: 1. Certificate for your FQDN 2. Certificate of the Issuer | ||
+ | |||
+ | For setting up the Truststore, we will nee the Certificate of the Issuer in one file and than import it to the keystore of freeipa webserver and ldap-server. | ||
+ | |||
+ | To do this, root-bash into your Container of running FreeIPA and do the following: | ||
+ | |||
+ | < | ||
+ | [root@ipa test]# DOMAIN=" | ||
+ | [root@ipa test]# cd / | ||
+ | [root@ipa test]# csplit -f cert ${DOMAIN}.crt '/ | ||
+ | [root@ipa test]# ipa-cacert-manage -p ' | ||
+ | [root@ipa test]# ipa-certupdate | ||
+ | [root@ipa test]# ipa-server-certinstall -d -w / | ||
+ | [root@ipa test]# ipactl restart | ||
+ | |||
+ | </ | ||
+ | |||
+ | The first ipa-cacert-manage will install the intermediate- certificate of letsencrypt. | ||
+ | |||
+ | You can check ift its the right one, by using '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | If the Subject contains you FQDN , its the wrong certificate. | ||
+ | |||
+ | When ipa-server-certinstall has been sucessfully run, your server should use those Certificates for Kerberos, LDAP and your Webservice. | ||
+ | |||
+ | Test if your Certificates for LDAP and Web do match: | ||
+ | |||
+ | openssl s_client -connect [FQDN_HOSTNAME]: | ||
+ | |||
+ | should be the same as: | ||
+ | |||
+ | openssl s_client -connect [FQDN_HOSTNAME]: | ||
+ | |||
+ | If not, check the above Certificates and loctaions to be from letsencrpt wih openssl. Mind that " | ||
+ | |||
+ | '' | ||
+ | ===== LDAP - Zentrales AD ===== | ||
+ | |||
+ | Coming soon… | ||
- | comig soon.... |