FreeIPA: Installation eines Domain Controllers

Veröffentlicht am Kategorisiert in FreeIPA, Linux, Virtualisierung

FreeIPA steht für Free Identity, Policy, Audit und ist eine quelloffene Identity-Management-Lösung auf Basis eines LDAP-Verzeichnisses und von Kerberos mit optionalen Komponenten wie DNS-Server, Zertifizierungsstelle und mehr. Übersetzt: FreeIPA verwaltet eine Domäne mit Benutzern, Computern, Richtlinien und Vertrauensstellungen. Klingt nach Microsoft Active Directory? Genau darum handelt es sich. FreeIPA kann darüber hinaus auch einen Forest-zu-Forest-Trust mit bestehenden Active-Directory-Forests aufbauen und sogar in einer DNS-Zone unterhalb einer von Active Directory verwalteten Zone leben, solange sie sich nicht überschneiden.

Diese Anleitung kann für sich genommen hilfreich sein, baut aber auf folgenden Beiträgen auf:

1. Installation der virtuellen Maschine

Für meine virtuellen Server setze ich CentOS 7 (1804) ein. In unserer Testumgebung ist es egal, wo das Installationsmedium für die Server gespeichert wird, aber in einer Produktivumgebung wäre es schön, wenn alle Administratoren darauf Zugriff erhielten. Anstatt das ISO-Image in meinem virtadmin-Benutzerordner zu speichern, lege ich es unter /opt/ISO ab. Ich habe das ISO-Image bereits heruntergeladen, und da ich schon den SSH-Zugriff auf den Virtualisierungshost für virt-manager eingerichtet habe, übertrage ich das Image per SSH auf den Host:

scp ~/Downloads/CentOS-7-x86_64-Minimal-1804.iso virtadmin@virthost:/home/virtadmin/
ssh virtadmin@virthost
sudo mkdir /opt/ISO
sudo mv ~/CentOS-7-x86_64-Minimal-1804.iso /opt/ISO/

Zurück im virt-manager öffne ich den Dialog zum Erstellen einer neuen virtuellen Maschine und wähle Lokales Installationsmedium:

virt-manager: Neue virtuelle Maschine erstellen
virt-manager: Lokales Installationsmedium

Dann füge ich links unten im Assistenten einen neuen Speicherpool vom Typ dir: Dateisystemverzeichnis hinzu, nenne ihn ISO und gebe als Pfad /opt/ISO an:

virt-manager: Speicherpools

Nun wähle ich den neuen Speicherpool und rechts in der Liste das ISO-Image aus und bestätige mit Datenträger auswählen:

virt-manager: Speicherpool auswählen

Im Folgenden vergebe ich 1024 MiB RAM, einen CPU-Kern und 10 GiB Festplattenspeicher. Für einen produktiven Domain Controller mit hunderten Benutzern wäre das zu wenig, aber für die kleine Testumgebung reicht es vollkommen aus. Der Server soll später den Namen cgn-ipa01 tragen – ein Hinweis auf die Lokation und die Tatsache, dass er der erste FreeIPA-Server wird. Natürlich soll die Maschine an das Netzwerk ipalab angeschlossen werden. Dass virt-manager das CentOS-Installationsmedium mit Alpine Linux verwechselt, ist ein Kuriosum, aber von keinerlei Bedeutung. Bevor die Installation beginnt, sollte noch einmal ein Blick in die Konfiguration der virtuellen Maschine geworfen werden (dort kann der Name des Betriebssystems manuell korrigiert werden):

virt-manager: Name und Netzwerk bestimmen

Mit Klick auf Installation beginnen oben links geht es weiter.

virt-manager: Details einer virtuellen Maschine

2. Installation des Servers

Wenn man von der virt-manager-Konsole wiederholt zur Eingabe der Passphrase aufgefordert wird, kann in den Details der virtuellen Maschine die Anzeige von SPICE-Server auf VNC-Server umgestellt werden. Die Änderung wird nach einem Neustart der virtuellen Maschine wirksam.

Die Konsole fängt Maus und Tastatur ein. Um sie wieder freizugeben, drückt man die Tastenkombination Strg links+Alt links.

Die Standardwerte können so übernommen werden. Wichtig sind nur der Hostname und die Netzwerkkonfiguration.

Der Name der zukünftigen FreeIPA-Domäne kann hier schon miteinbezogen werden!

Der Domänenname darf sich nicht mit einer fremden Domäne oder einer von ihr verwalteten DNS-Zone überschneiden und sollte eine öffentlich auflösbare Domäne im eigenen Besitz sein!

Für eine Testumgebung reicht aber auch ein Domänenname wie example.local. Ich nutze dafür eine Subdomain. Das Gateway ist bei virt-manager die erste Adresse im Netzwerk. Als DNS-Server wähle ich die IP-Adresse meines eigenen Routers, meines Providers oder schlicht Google-DNS. In meinem Beispiel also:

Hostname: cgn-ipa01.ipa.animentor.de
IPv4-Adresse (manuell): 192.168.111.10
Gateway: 192.168.111.1
DNS: 8.8.8.8

Außerdem erstelle ich während der Installation den Benutzer ipaadmin und gestatte ihm sudo-Rechte.

Zuerst teste ich nach der Installation die Netzwerkverbindung. Die Google-DNS-Server sollte ich erreichen können, bevor ich irgendetwas anderes unternehme:

ping 8.8.8.8

Auch die Namensauflösung muss funktionieren:

ping google.de
Sollte die Namensauflösung scheitern, prüft man zuerst, ob ein Nameserver in der Datei /etc/resolv.conf oder in einer der Regeln unterhalb von /etc/resolv.conf.d/ (falls vorhanden) eingetragen wurde. Testweise ließe sich ein Nameserver dort ergänzen. Die meisten großen Distributionen lassen allerdings NetworkManager diese Dateien pflegen. Ein NetworkManager-Tool für die Kommandozeile ist nmtui. Scheitert die Namensauflösung in der virtuellen Maschine, obwohl ein Nameserver eingetragen und per IP-Adresse erreichbar ist, prüft man die Firewall auf dem Host und aktiviert dort ggf. IP-Masquerading.

3. FreeIPA-Server-Installation

Der Hostname des Servers sollte in der Datei /etc/hostname in der FQDN-Schreibweise, also vollständig mit Domänenname, eingetragen sein. Wenn das noch nicht der Fall ist, sollte das nun nachgeholt und der Server danach neugestartet werden. Außerdem sollte in der Datei /etc/resolv.conf der bei der Installation angegebene DNS-Server eingetragen sein. In der Datei /etc/hosts füge ich noch folgende Zeile hinzu (IP-Adresse vor FQDN vor Shortname):

192.168.111.10 cgn-ipa01.ipa.animentor.de cgn-ipa01

Wenn der Befehl hostname den FQDN zurückgibt, fährt man mit der Installation der nötigen Pakete fort. Hier der Befehl für CentOS 7:

sudo yum install ipa-sever ipa-server-dns

Danach erfolgt die eigentliche FreeIPA-Server-Installation mit integriertem DNS-Server und automatischer Anlage eines Benutzerverzeichnisses bei der ersten Anmeldung eines FreeIPA-Benutzers:

sudo ipa-server-install --setup-dns --mkhomedir

Wenn der Hostname und der DNS-Server in den oben genannten Dateien korrekt eingetragen wurden, sollte der Installationsassistent für alle Fragen bereits die richtige Antwort anbieten und den FreeIPA-Server unter anderem auch die DNS-Zonen der Domäne automatisch einrichten. Für den Directory Manager (Benutzer für das LDAP-Verzeichnis) und den FreeIPA-Administrator admin muss jeweils ein Kennwort eingegeben werden.

Nach wenigen Minuten ist die Installation beendet und die Domäne samt DNS-Server konfiguriert.

4. Firewall konfigurieren

Damit der FreeIPA-Server seinen Aufgaben nachkommen kann, müssen noch einige Ports auf der Firewall geöffnet werden, worauf das Installationsprogramm im letzten Schritt auch hinweist:

Next steps:
	1. You must make sure these network ports are open:
		TCP Ports:
		  * 80, 443: HTTP/HTTPS
		  * 389, 636: LDAP/LDAPS
		  * 88, 464: kerberos
		  * 53: bind
		UDP Ports:
		  * 88, 464: kerberos
		  * 53: bind
		  * 123: ntp

Entweder öffnet man in firewalld die Ports explizit, oder man schaltet Services frei, die mit bestimmten Ports und Protokollen definiert wurden. Die folgenden Befehle öffnen alle oben gelisteten Ports:

sudo firewall-cmd --add-service freeipa-ldap --permanent
sudo firewall-cmd --add-service freeipa-ldaps --permanent
sudo firewall-cmd --add-service dns --permanent
sudo firewall-cmd --reload

5. DNS-Server korrigieren

Nun ändere ich den DNS-Server in den Netzwerkeinstellungen des FreeIPA-Servers auf die IP-Adresse 127.0.0.1 (localhost). Da er selber auch DNS-Server mit einem Fowarder zur Außenwelt ist, kann er sich jegliche DNS-Abfragen selber beantworten. Eine Möglichkeit auf Linux-Systemen mit NetworkManager, die Netzwerkeinstellungen komfortabel auf der Kommandozeile zu ändern, ist nmtui.

6. SSH-Verbindung zum Server

Natürlich kann man sich jederzeit mithilfe von virt-manager remote mit dem Server verbinden. Aber eine SSH-Verbindung ist ebenfalls praktisch. Dazu verwende ich der Einfachheit halber das gleiche Schlüsselpaar mit Passphrase wie für meine Remote-Verbindung zum Virtualisierungshost, doch man könnte auch für unterschiedliche Zwecke unterschiedliche Schlüssel einsetzen. Der folgende Befehl wird auf meinem Rechner ausgeführt, nicht auf den Servern:

ssh-copy-id -i ipaadmin@192.168.111.10

Danach komme ich nach Eingabe der Passphrase per SSH auf den FreeIPA-Server.

6. Test der Benutzeranmeldung

Zurück auf dem FreeIPA-Server, der nun selber ein in die Domäne aufgenommener Host ist, sollte die Anmeldung als Domänenadministrator funktionieren:

kinit admin

Das erhaltene Kerberos-Ticket zeigt der folgende Befehl:

klist

Von Pascal Korz

IT Systems Engineer in und aus dem schönen Köln