Nous allons mettre en pratique ce que nous avons appris dans la partie 5, nous connecterons notre environnement FreeIPA à un contrôleur de domaine Active Directory avec une relation d’approbation.

Présentation du Lab

Nous allons connecter notre cluster FreeIPA à un serveur AD, il porte un seul domaine racine dans une forêt unique.

Interface administrateur freeipainterface administrateur freeipainterface administrateur freeipa

Le domaine AD est un sous domaine de notre domaine principal porté la zone IPA.

Pré-requis :

  • Un environnement FreeIPA fonctionnel, avec au moins un serveur et le DNS intégré activé.
  • Un environnement serveur Windows fonctionnel, avec le contrôleur de domaine configuré.

Vérification des DNS

DNS Zone IPA

dig +short _kerberos-master._tcp.acme.com. SRV
dig +short _kerberos._tcp.acme.com. SRV
dig +short _kpasswd._tcp.acme.com. SRV
dig +short _kerberos-master._udp.acme.com. SRV
dig +short _kerberos._udp.acme.com. SRV
dig +short _kpasswd._udp.acme.com. SRV
dig +short _ldap._tcp.acme.com. SRV
dig +short _kerberos.acme.com. TXT
dig +short _kerberos._tcp.dc._msdcs.acme.com. SRV
dig +short _kerberos._udp.dc._msdcs.acme.com. SRV
dig +short _ldap._tcp.dc._msdcs.acme.com. SRV

Ces commandes doivent retourner au moins 1 serveur FreeIPA :

[root@freeipa0 ~]# dig +short _kerberos-master._tcp.acme.com. SRV
 _kerberos-master._tcp.location1._locations.acme.com.
 0 100 88 freeipa0.acme.com.
 50 100 88 freeipa1.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos._tcp.acme.com. SRV
 _kerberos._tcp.location1._locations.acme.com.
 0 100 88 freeipa0.acme.com.
 50 100 88 freeipa1.acme.com.
 [root@freeipa0 ~]# dig +short _kpasswd._tcp.acme.com. SRV
 _kpasswd._tcp.location1._locations.acme.com.
 0 100 464 freeipa0.acme.com.
 50 100 464 freeipa1.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos-master._udp.acme.com. SRV
 _kerberos-master._udp.location1._locations.acme.com.
 50 100 88 freeipa1.acme.com.
 0 100 88 freeipa0.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos._udp.acme.com. SRV
 _kerberos._udp.location1._locations.acme.com.
 50 100 88 freeipa1.acme.com.
 0 100 88 freeipa0.acme.com.
 [root@freeipa0 ~]# dig +short _kpasswd._udp.acme.com. SRV
 _kpasswd._udp.location1._locations.acme.com.
 0 100 464 freeipa0.acme.com.
 50 100 464 freeipa1.acme.com.
 [root@freeipa0 ~]# dig +short _ldap._tcp.acme.com. SRV
 _ldap._tcp.location1._locations.acme.com.
 0 100 389 freeipa0.acme.com.
 50 100 389 freeipa1.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos.acme.com. TXT
 "ACME.COM"
 [root@freeipa0 ~]# dig +short _kerberos._tcp.dc._msdcs.acme.com. SRV
 _kerberos._tcp.dc._msdcs.location1._locations.acme.com.
 0 100 88 freeipa0.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos._udp.dc._msdcs.acme.com. SRV
 _kerberos._udp.dc._msdcs.location1._locations.acme.com.
 0 100 88 freeipa0.acme.com.
 [root@freeipa0 ~]# dig +short _ldap._tcp.dc._msdcs.acme.com. SRV
 _ldap._tcp.dc._msdcs.location1._locations.acme.com.
 0 100 389 freeipa0.acme.com.

DNS Zone AD

De façon générale, les serveurs AD doivent pouvoir résoudre la zone IPA, l’inverse est également vrai, sinon le trust ne fonctionnera pas.

Nous allons ajouter sur notre DNS FreeIPA une “DNS Forward Zone” pour ad.acme.com, qui utilisera le serveur AD comme résolveur.

ipa dnsforwardzone-add ad.acme.com --forwarder=192.168.56.103 --forward-policy=only
[root@freeipa0 ~]# ipa dnsforwardzone-add ad.acme.com --forwarder=192.168.56.103 --forward-policy=only
 Server will check DNS forwarder(s).
 This may take some time, please wait …
   Zone name: ad.acme.com.
   Active zone: TRUE
   Zone forwarders: 192.168.56.103
   Forward policy: only

Nous devrions résoudre les enregistrements de service de l’AD :

[root@freeipa0 ~]# dig +short _kerberos._tcp.ad.acme.com. SRV
 0 100 88 ad.ad.acme.com.
 [root@freeipa0 ~]# dig +short _kpasswd._tcp.ad.acme.com. SRV
 0 100 464 ad.ad.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos._udp.ad.acme.com. SRV
 0 100 88 ad.ad.acme.com.
 [root@freeipa0 ~]# dig +short _kpasswd._udp.ad.acme.com. SRV
 0 100 464 ad.ad.acme.com.
 [root@freeipa0 ~]# dig +short _ldap._tcp.ad.acme.com. SRV
 0 100 389 ad.ad.acme.com.
 [root@freeipa0 ~]# dig +short _kerberos._tcp.dc._msdcs.ad.acme.com. SRV
 0 100 88 ad.ad.acme.com.
 [root@freeipa0 ~]# dig +short _ldap._tcp.dc._msdcs.ad.acme.com. SRV
 0 100 389 ad.ad.acme.com.

Il nous faut faire la même chose du côté de l’AD, pour pouvoir résoudre la zone IPA :

dnscmd 127.0.0.1 /ZoneAdd acme.com /Forwarder 192.168.56.100
C:\Users\Administrateur>dnscmd 127.0.0.1 /ZoneAdd acme.com /Forwarder 192.168.56.100
Le serveur DNS 127.0.0.1 a créé la zone acme.com :
La commande s'est terminée correctement.

Nous devrions résoudre les enregistrements de service de l’IPA :

C:\Users\Administrateur>nslookup
Serveur par défaut :   localhost
Address:  ::1
set type=SRV
_kerberos._tcp.acme.com.
   Serveur :   localhost
   Address:  ::1
Réponse ne faisant pas autorité :
_kerberos._tcp.acme.com        canonical name = _kerberos._tcp.location1._locations.acme.com
_kerberos._tcp.location1._locations.acme.com   SRV service location:
           priority       = 0
           weight         = 100
           port           = 88
           svr hostname   = freeipa0.acme.com
_kerberos._tcp.location1._locations.acme.com   SRV service location:
           priority       = 50
           weight         = 100
           port           = 88
           svr hostname   = freeipa1.acme.com
freeipa0.acme.com       internet address = 192.168.56.100
freeipa1.acme.com       internet address = 192.168.56.101

Une fois que les 2 serveurs peuvent résoudre leur zone respective et celle de son voisin c’est terminé pour le DNS.

Firewall

Comme vu dans la partie précédente, il y a des ports supplémentaires à ouvrir pour un trust, en plus des ports standards IPA. En pratique il suffira de cette commande :

firewall-cmd --permanent --add-port={80/tcp,443/tcp,389/tcp,636/tcp,88/tcp,464/tcp,53/tcp,88/udp,464/udp,53/udp,123/udp}
 firewall-cmd --permanent --add-port={135/tcp,138/tcp,139/tcp,445/tcp,1024-1500/tcp,3268/tcp}
 firewall-cmd --permanent --add-port={138/udp,139/udp,389/udp,445/udp}
 firewall-cmd --reload

Le Firewall Windows a déjà été configuré lors de la configuration du contrôleur de domaine.

Packages

Il y a un paquet supplémentaire à installer pour pouvoir créer des trusts avec FreeIPA :

yum -y install ipa-server-trust-ad

Préparation FreeIPA

Après installation du paquet, initiez la configuration du mode trust côté IPA :

ipa-adtrust-install --netbios-name=ACME -a motdepasseadmin

Le nom Netbios doit être unique sur le réseau. Il faudra lancer cette commande à l’identique sur chacun de vos serveurs FreeIPA pour assurer la redondance du trust.

Initier le Trust

Avec un compte approprié, initiez le trust côté FreeIPA :

ipa trust-add --type=ad ad.acme.com --admin Administrateur --password
[root@freeipa0 ~]# ipa trust-add --type=ad ad.acme.com --admin Administrateur --password
Active Directory domain administrator's password:
-----------------------------------------------------
 Added Active Directory trust for realm "ad.acme.com"
-----------------------------------------------------
   Realm name: ad.acme.com
   Domain NetBIOS name: AD
   Domain Security Identifier: S-1-5-21-4214202920-2283492843-3731316888
   Trust direction: Trusting forest
   Trust type: Active Directory domain
   Trust status: Established and verified

Le Trust est établi, nous pouvons essayer de vérifier un utilisateur de l’AD :

[root@freeipa0 ~]# id administrateur@ad.acme.com
uid=486000500(administrateur@ad.acme.com) gid=486000500(administrateur@ad.acme.com) groups=486000500(administrateur@ad.acme.com),486000513(utilisateurs du domaine@ad.acme.com),486000518(administrateurs du schéma@ad.acme.com),486000519(administrateurs de l’entreprise@ad.acme.com),486000520(propriétaires créateurs de la stratégie de groupe@ad.acme.com),486000512(admins du domaine@ad.acme.com)

Nous pouvons constater que les SID Windows ont bien été traduits en UID/GID Unix.

Si les règles HBAC le permettent, un utilisateur AD doit désormais pouvoir se connecter directement en SSH sur un client FreeIPA :

paul@xps ~> ssh administrateur@ad.acme.com@192.168.56.45
Password:
Creating home directory for administrateur@ad.acme.com.
Last login: Thu Sep 12 15:40:45 2019 from 192.168.56.1
-sh-4.2$ id
uid=486000500(administrateur@ad.acme.com) gid=486000500(administrateur@ad.acme.com) groups=486000500(administrateur@ad.acme.com),486000512(admins du domaine@ad.acme.com),486000513(utilisateurs du domaine@ad.acme.com),486000518(administrateurs du schéma@ad.acme.com),486000519(administrateurs de l’entreprise@ad.acme.com),486000520(propriétaires créateurs de la stratégie de groupe@ad.acme.com) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Accès à l’interface web pour les utilisateurs AD

Par défaut, un utilisateur AD n’aura pas accès à l’interface web de FreeIPA, par exemple pour y ajouter sa clé publique SSH, avec un message d’erreur déroutant :

Interface administrateur freeipainterface administrateur freeipainterface administrateur freeipa

Il faudra pour cela créer un “ID Override” à la “Default Trust View” pour les utilisateurs concernés :

ipa idoverrideuser-add "Default Trust View" administrateur@ad.acme.com
[root@freeipa0 ~]# ipa idoverrideuser-add "Default Trust View" administrateur@ad.acme.com
 Added User ID override "administrateur@ad.acme.com"
 Anchor to override: administrateur@ad.acme.com

Interface administrateur freeipainterface administrateur freeipainterface administrateur freeipa

C’est terminé pour cette série sur FreeIPA, nous avons passé en revue les différentes fonctionnalités de la solution et les avons mises en pratique, d’autres articles sur des points particuliers de la solution seront ajoutés au fil du temps sur notre blog.

Notre série sur FreeIPA

Si vous ne les avez pas encore lu, retrouvez notre série d’articles sur FreeIPA :

  1. FreeIPA Partie 1 : Installation du serveur et de son réplica
  2. FreeIPA Partie 2 : Clients, HBAC, Sudo, Mots de passe
  3. FreeIPA Partie 3 : Haute-disponibilité, Automount
  4. FreeIPA Partie 4 : Seconds facteurs d’authentification
  5. FreeIPA Partie 5 : Trusts Active Directory
  6. FreeIPA Partie 6 : Trusts Active Directory, mise en pratique