FreeIPA is a centralized idenity management solution developed by Redhat. It is in my opinion the most functional libre alternative to Microsoft's Active Directory. Like AD, FreeIPA integrates all of the pieces needed to setup a domain including LDAP, Kerberos, a Certificate Authority, and much more.
I will be using Fedora 35 in this tutorial. As of Debian 11, the FreeIPA server is still not in the Debian repos. You will need either a Fedora or a RHEL machine. A CentOS fork may work also but I have not tested that.
FreeIPA in an Enterprise
For readers exploring the use of FreeIPA in a business environment, note that FreeIPA documentation explicitly states that it is not a replacement for Active Directory. I have not personally tried to join a Windows computer to a FreeIPA domain, and so I can't speak to how well that would work. FreeIPA would also not be able to push out policy to Windows machines as is done with Group Policy. FreeIPA is though able to create inter-domain trusts with an existing AD infrastructure.
The Case for FreeIPA at Home
Using a full Kerberos and LDAP identity management server may seem like overkill at home. And if you only have a single computer then it probably is. But scaling up even slightly, to perhaps a small family each with their own computer, will make having FreeIPA advantageous (your family is all using Linux, right?). This will be especially apparent if you are hosting your own services. If you are for instance hosting a Jellyfin media server that everyone in your family accesses, you won't want them to juggle separate passwords for Jellyfin when you could just have them use the same password they do on the computer. This single/same sign-on capability is one of the most practically useful aspects of FreeIPA.
Install Packages
We start as usual by installing the required packages.
dnf install freeipa-server freeipa-dns
Set Hostname
The server will need to have a fully qualified hostname before setting up IPA. You will need both a hostname for the server itself and the domain name you will want for the FreeIPA domain. I will be using ipaserver.myhome.local, where ipaserver is the hostname and myhome.local is the domain name.
hostnamectl set-hostname ipaserver.home.local
We'll also need to add a hosts file entry to /etc/hosts. Open that file in an editor and add a new line with the IP of the server, the fully qualified name, and the hostname.
192.168.1.10 ipaserver.myhome.local ipaserver
Make sure to reboot the server before continuing to complete the hostname change.
Firewall Configuration
We'll need to allow several ports for FreeIPA to function properly. Fedora 35 uses firewalld by default but I am going to disable that in favor of UFW here.
#Install UFW
dnf install ufw
# Stop and disable firewalld
systemctl disable --now firewalld
# Configure UFW
ufw enable
ufw allow ssh
ufw allow dns
ufw allow 88 comment kerberos
ufw allow 389 comment ldap
ufw allow 443 comment webui
ufw allow 636 comment ldaps
ufw default deny incoming
ufw reload
Configure FreeIPA
Now we can run the FreeIPA setup script. This is an interactive but mostly automatic process that will configure all of the IPA components. The --mkhomedir flag will configure the server to create home directories for IPA users on their first login and would otherwise have to be done manually.
ipa-server-install --mkhomedir
That command will bring you into the install script. You will be prompted
several times before the bulk of the configuration happens. Default values
are show in brackets after the prompt. Let's run through those prompts.
Do you want to configure integrated DNS (BIND)?:
yes
Sever host name: the default value should be showing
ipaserver.myhome.local which is what we want. Simply hit enter to acecpt
the default.
Please confirm the domain name: The default here should be
correct myhome.local so hit enter to accept that.
Please provide a realm name: This should just be the domain
name in all uppercase. If the default looks correct just hit enter.
Directory Manager password: This is the password for an
administrator account used by system services. You will not need this for daily
use so I recommend setting it to a long randomly generated string. I have found
myself that using an extremely long password here will cause the installation to
fail. A password under 40 characters should be safe.
IPA admin password: This is the password for your initial admin
user. Make this a strong password as this user has full admin rights for the
entire domain.
Do you want to configure DNS forwarders: This allows you to
configure the IPA server to forward DNS requests to another DNS server for
zones it is not authoratitve for. The DNS server is configured by default as
a recursive DNS server so answering no does not prevent internet access. If you
have another DNS server that should be used instead then answer yes and provide
the IP address when prompted.
Do you want to configure chrony with NTP server or pool address?
: Here you can configure a custom NTP server or pool for the NTP daemon chrony.
If you already have an NTP server on your network answer yes and provide its IP.
If you want to leave the deafult chrony configuration then answer no. Time
synchronization is very important in Kerberos so you should consider how you
want to achieve that on your network. If you do not have an NTP server you may
want to configure the IPA server as one later.
Continue to configure the system with these values?: This is a
final confirmation before the script takes over and configures the IPA
components. Review the information printed and enter yes if it all looks correct.
The install script will now run through configuration. This process usually takes several minutes. When finished you should get a message saying The ipa-server-install command was successful.
To finish, run this command to receive a Kerberos TGT. Provide the password for the admin user when prompted.
kinit admin
Accessing the Web Interface
You are now able to manage FreeIPA through the web interface. You can browse either to the IP or the hostname if your DNS is configured correctly. You should see a screen similar to this.
Login with the username admin and the password you set during the insallation. You are now ready to begin configuring your IPA domain.