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