Dans cette série d’articles, nous allons découvrir et comprendre comment installer un serveur FreeIPA, un réplica actif, un client FreeIPA, activer l’authentification 2 facteurs avec l’OTP (One Time Password) pour nos comptes utilisateurs et configurer une relation d’approbation avec un serveur Active Directory.
FreeIPA est un logiciel libre et open source (GPLv3, sauf le directory server), il s’agit du projet upstream pour Red Hat Identity Management (RH IDM), il est basé sur plusieurs composants dont les licences peuvent varier (voir https://www.freeipa.org/page/License) :
- 389 Directory Server : serveur LDAP (Stockage des utilisateurs, groupes, configurations, dns…)
- MIT KDC : Démon Kerberos, pour l’authentification
- Dogtag : PKI (Gestion des certificats)
- SSSD : partie cliente cherchant à remplacer les traditionnels NSS & PAM
- Bind : Serveur DNS, la version de FreeIPA utilise LDAP pour le stockage des zones (bind-dyndb-ldap)
- NTPD : Serveur NTP, Synchronisation du temps, sera remplacé par Chronyd dans la prochaine version de FreeIPA
- Samba 4 : Composant Utilisé pour les relations d’approbations avec Active Directory
Pré-requis :
- deux vm installées avec CentOS 7 à jour (Serveur IPA et Réplica)
- une connexion internet pour la récupération des paquets freeipa
1. Préparation de la première VM FreeIPA
Il faut que la pile IPv6 soit activée dans le kernel même si vous n’utilisez pas IPv6 sur vos interfaces, ne pas utiliser ipv6.disable=1 dans sysctl, préférez ipv6.disable_ipv6=1 :
[root@freeipa0 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:c7:78:ac brd ff:ff:ff:ff:ff:ff
inet 172.16.110.60/16 brd 172.16.255.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fec7:78ac/64 scope link <- ici
valid_lft forever preferred_lft forever
Vérifiez que le FQDN de votre machine soit correctement indiqué dans le fichier /etc/hostname et qu’il résout correctement avec dig (yum install bind-utils), dans notre exemple il s’agira de freeipa0.idm.demo.local
[root@freeipa0 ~]# dig +short freeipa0.idm.demo.local A
172.16.110.60
[root@freeipa0 ~]# dig +short -x 172.16.110.60
freeipa0.idm.demo.local.
Si, à ce stade, la résolution inverse ne fonctionne pas, ce n’est pas grave, l’installation de freeipa créera une zone DNS appropriée ; si vous choisissez de ne pas utiliser le DNS de freeipa, il faudra gérer ce point vous même sur votre DNS.
Éditez votre fichier /etc/hosts pour qu’il ressemble à ceci :
[root@freeipa0 ~]# cat /etc/hosts
172.16.110.60 freeipa0.idm.demo.local freeipa0
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
La première ligne a été ajoutée.
Ouvrez les ports nécessaires du firewall :
[root@freeipa0 ~]# 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}
[root@freeipa0 ~]# firewall-cmd --reload
Ports TCP :
- 80, 443 : HTTP/HTTPS
- 389, 636 : LDAP/LDAPS
- 88, 464 : kerberos
- 53 : Bind (DNS)
Ports UDP :
- 88, 464 : kerberos
- 53 : Bind (DNS)
- 123 : ntp
Certaines machines virtuelles risquent de manquer rapidement d’entropie pour les opérations de chiffrement de freeipa, il faudra dans ce cas installer et activer rng-tools :
[root@freeipa0 ~]# yum install rng-tools
[root@freeipa0 ~]# systemctl start rngd
[root@freeipa0 ~]# systemctl enable rngd
2. Installation de FreeIPA Serveur
Il n’y as pas de dépôts particuliers à configurer sous CentOS 7 :
[root@freeipa0 ~]# yum install ipa-server ipa-server-dns
Vérifiez les options disponibles avec ipa-server-install –help ; dans notre exemple nous allons faire une installation complète sur idm.demo.local. Il est systématiquement conseillé de déclarer FreeIPA sur un nouveau sous-domaine pour éviter tout conflit potentiel avec un autre serveur kerberos présent (AD…) (voir https://www.freeipa.org/page/DNS#Caveats). Si vous n’en avez pas, il est tout a fait possible d’installer idm directement sur votre domaine, voici la commande que nous allons utiliser :
[root@freeipa0 ~]# ipa-server-install -U -p MotDePasse1 -a MotDePasse2 --ip-address=172.16.110.60 -n idm.demo.local -r IDM.DEMO.LOCAL --hostname=freeipa0.idm.demo.local --setup-dns --auto-forwarders --auto-reverse
Explications des options :
- -U : mode unattended, sans intervention de l’utilisateur (à désactiver en cas de soucis)
- -p MotDePasse1 : Mot de passe du directory manager, admin ultime côté LDAP
- -a MotDePasse2 : Mot de passe de l’administrateur freeipa/kerberos
- –ip-address= : l’ip de votre serveur
- -n : le domaine géré par freeipa
- -r : le realm kerberos, par convention le nom du domaine en majuscule
- –hostname= : fqdn du serveur
- –setup-dns : freeipa intègre la gestion de son propre dns si vous n’en possédez pas. Il est possible ne pas utiliser l’option pour gérer votre propre DNS
- –auto-forwarders : création automatique des forwarders en se basant sur le fichier /etc/resolv.conf du serveur, pour la résolution des noms internet
- –auto-reverse : création automatique de la zone reverse DNS
Si vous avez choisi de gérer vous même le DNS, à la fin de l’installation, repérez cette ligne :
“Please add records in this file to your DNS system: /tmp/ipa.system.records.BvKUZp.db”
Il s’agit des enregistrements à ajouter à votre DNS pour le bon fonctionnement de freeipa :
[root@freeipa0 ~]# cat /tmp/ipa.system.records.BvKUZp.db
_kerberos-master._tcp.idm.demo.local. 86400 IN SRV 0 100 88 freeipa0.idm.demo.local.
_kerberos-master._udp.idm.demo.local. 86400 IN SRV 0 100 88 freeipa0.idm.demo.local.
_kerberos._tcp.idm.demo.local. 86400 IN SRV 0 100 88 freeipa0.idm.demo.local.
_kerberos._udp.idm.demo.local. 86400 IN SRV 0 100 88 freeipa0.idm.demo.local.
_kerberos.idm.demo.local. 86400 IN TXT "IDM.DEMO.LOCAL"
_kpasswd._tcp.idm.demo.local. 86400 IN SRV 0 100 464 freeipa0.idm.demo.local.
_kpasswd._udp.idm.demo.local. 86400 IN SRV 0 100 464 freeipa0.idm.demo.local.
_ldap._tcp.idm.demo.local. 86400 IN SRV 0 100 389 freeipa0.idm.demo.local.
_ntp._udp.idm.demo.local. 86400 IN SRV 0 100 123 freeipa0.idm.demo.local.
ipa-ca.idm.demo.local. 86400 IN A 172.16.110.60
Une fois les enregistrements ajoutés, vérifiez qu’ils sont bien pris en compte :
[root@freeipa0 ~]# dig +short srv _kerberos-master._tcp.idm.demo.local.
0 100 88 freeipa0.idm.demo.local.
Vérifiez le bon fonctionnement du serveur avec la commande kinit et ipa user-find :
[root@freeipa0 ~]# kinit admin
Password for admin@IDM.DEMO.LOCAL:
[root@freeipa0 ~]# ipa user-find admin
--------------
1 user matched
--------------
User login: admin
Last name: Administrator
Home directory: /home/admin
Login shell: /bin/bash
Principal alias: admin@IDM.DEMO.LOCAL
UID: 407200000
GID: 407200000
Account disabled: False
----------------------------
Number of entries returned 1
----------------------------
À ce stade, la résolution DNS inverse doit marcher. Son bon fonctionnement est indispensable à Kerberos et pour la suite de notre article.
[root@freeipa0 ~]# dig +short -x 172.16.110.60
freeipa0.idm.demo.local.
3. Découverte de l’Interface Web
Rendez vous sur https://freeipa0.idm.demo.local et connectez vous avec l’administrateur freeipa définit plus tôt (admin)
L’interface de FreeIPA est scindé en 5 parties :
- Identity : Gestion des Utilisateurs, Machines/VM Clientes, Groupes
- Policy : HBAC, Sudo, SELinux User Maps, Password Policies, Kerberos Ticket Policy
- Authentication : Certificats, Tokens OTP, Serveurs RADIUS
- Network Services : Gestion des AutoFS des machines clientes (montages NFS automatiques)
- IPA Server : Réglages du serveur
Les parties Policy et Authentication seront abordées en détail dans le billet dédié à la partie cliente.
4. Création d’un utilisateur et d’un groupe de test
Nous allons créer notre premier utilisateur. Cliquez sur le bouton “Add” dans Identity -> Users
Remplissez les champs nécessaires et cliquez sur Add. L’utilisateur devra, par défaut, changer son mot de passe à la première connexion.
Dans le même principe, nous allons faire un groupe “group1” dans la partie groupe et y intégrer notre utilisateur.
5. Installation du serveur réplica
Comme pour notre premier serveur, vérifiez les paramètres de base : firewall, /etc/hostname, /etc/hosts, rng-tools. Une fois fait, lancez l’installation du paquet freeipa-server :
[root@freeipa1 ~]# yum install freeipa-server freeipa-server-dns
Nous allons à présent rejoindre le domaine FreeIPA en tant que simple client :
[root@freeipa1 ~]# ipa-client-install -U --domain=idm.demo.local --realm=IDM.DEMO.LOCAL --server=freeipa0.idm.demo.local --mkhomedir -p admin -w MotDePasse2
Explication des options :
- -U : mode unattended, sans intervention de l’utilisateur (à désactiver en cas de soucis)
- –domain= : domaine à rejoindre
- –realm= : realm à rejoindre
- –server= : serveur à utiliser par le client
- –mkhomedir : créer automatiquement un dossier dans /home quand un nouvel utilisateur se connectera
- -p : utilisateur autorisé à intégrer des machines ici admin
- -w : mot de passe admin freeipa définit au début
Si tout se passe bien, vous devriez voir votre serveur dans l’interface web, partie “hosts”.
Maintenant, sur le serveur freeipa0, ajoutez freeipa1 comme “ipaserver” :
[root@freeipa0 ~]# ipa hostgroup-add-member ipaservers --hosts freeipa1.idm.demo.local
Host-group: ipaservers
Description: IPA server hosts
Member hosts: freeipa0.idm.demo.local, freeipa1.idm.demo.local
-------------------------
Number of members added 1
-------------------------
Maintenant que notre vm freeipa1 est membre du domaine et considérée comme un serveur ipa, nous allons pouvoir lancer l’installation du module réplication :
[root@freeipa1 ~]# ipa-replica-install --setup-ca --setup-dns --auto-forwarders --auto-reverse
À la fin de l’installation, vérifiez en console et sur l’interface web que tout est ok, dans IPA Server -> Topology Graph :
[root@freeipa1 ~]# kinit admin
Password for admin@IDM.DEMO.LOCAL:
[root@freeipa1 ~]# ipa user-find
---------------
2 users matched
---------------
User login: admin
Last name: Administrator
Home directory: /home/admin
Login shell: /bin/bash
Principal alias: admin@IDM.DEMO.LOCAL
UID: 407200000
GID: 407200000
Account disabled: False
User login: testuser1
First name: Test
Last name: User1
Home directory: /home/testuser1
Login shell: /bin/sh
Principal name: testuser1@IDM.DEMO.LOCAL
Principal alias: testuser1@IDM.DEMO.LOCAL
Email address: testuser1@IDM.DEMO.LOCAL
UID: 407200001
GID: 407200001
Account disabled: False
----------------------------
Number of entries returned 2
----------------------------
On voit que la commande ipa user-find trouve nos utilisateurs ; l’interface web nous indique que nous avons une synchronisation bi-directionnelle pour le service domaine et le service CA. Typiquement, un client pourrait se connecter en utilisant un serveur ou l’autre. L’administration peut également être faite sur les deux serveurs.
Dans la Partie 2, nous verrons plus en détail la partie client, la partie règles d’accès (HBAC) et les règles sudos.
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