Опис
В світі windows є чудовий інструмент як Active Directory, котрий допомагає поєднати різні обєкти в мережі в єдину систему. Дозволяє налашутвати до цих систем централізований доступ і не тільки. Як бути коли потрібен аналогічний інтрумент, проте для Linux?
Існує декілька схожих інструментів:
Після ознайомлення та вичитки форумів, вибір впав на freeIPA (identiryManager), який є популярним, легким в налаштуванні, адмініструванні і тд. FreeIPA identityManager) проект з відкритим кодом, безкоштовний, проте якщо говорити про identiryManager є змога оформити підписку на підтримку від компанії RedHat.
При використанні FreeIPA можна легко керувати централізованими обліковими записами, політиками контролів доступу на хостах, аудитом. Додатково надаються такі компоненти як DNS та PKI.
Оглянемо основні компоненти FreeIPA:
- Directory Server
структура тек, яка подудована на LDAP 389 DS. Іншими словами – база данних, в якій зберігаються данні для всіх служб ідентифікації, аутентифікації, авторизації, політик.
- Kerberos
протокол аутентифікації та безпеки, який аутентифікую запити на послуги між двопа і більше хостами в мережі. Використовує криптографію з таємним ключем та довіреною третьою стороною для аутентифікації клієнто-серверних додатків, перевірок особистостей користувача, то що. - PKI
альтернативний центр сертифікації, є змога налаштувати як під-домен. Дозволяє випускати та підписувати сертифікати на хости та послуги IPA. - DNS
BIND 9 freeIPA DNS для дозволу імен та пошуку сервісів які дозволяють обслуговувати записи DNS в домені, використовуючи CLI або Web UI. - Certmonger
демон, який слідкує за сертифікатами та їх терміном придатності, може оновлювати їх за допомогою CA. Може працювати з файлами які використовуються в OpenSSL, або з базами данних NSS. - NTP Server
kerberos дуже тендітний та чуттєвий до різниць в часі. Коли різниця в декілька хвилин між вузлами – аунетифікація не буде працювати. Саме тому на сервері де встановлений FreeIPA потрібно налаштовувати NTP сервер для синхронізаці часу на всіх вузлах. - Web UI
Веб додаток для адміністрування freeIPA. - Trusts
Сервіс який дозволяє налаштовувати інтеграцію з Active Directory. - Client
Клієнт для взаємодії з сервером freeIPA. Використовується для основної аутентифікації та переліку користувачів та груп. перечисления пользователей/групп. Оскільки сервер використовує стандартні компоненти та протоколи, будь-який клієнт LDAP/Kerberos (и даже NIS) може взаємодіяти з сервером.
Після швидкого онайомлення з основними складовими та з рекомендаціями по встановленню тут, будемо виконувати підготовку. Для відмовостійкості та стабільності рекомендовано піднімати відразу два сервери з налаштуванням між ними реплікацією.
В даній статі будемо піднімати один сервер з назвою ipa-1.sandbox.eu-central-1.****.cloud та налаштовувати його. Встановлювати будемо на Fedora34.
Підготовка
Всі дії та маніпуляції виконуємо від користувача root або використовуємо sudo
Налаштування NTP
Спочатку потрібно налаштувати синхронізацію часу. В Centos7/Fedora34 для цього є chrony, який вже встановлений та прийшов на заміну ntpd. Є змога використовувати зовнішній або локальний сервер часу. Для прикладу уявимо що в нас є окремий сервер ntp і ми будемо його налаштовувати.
Перевіряємо статус chronyd:
systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-01-04 14:47:04 EST; 43min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 931 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 910 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 922 (chronyd)
Tasks: 1 (limit: 11228)
Memory: 2.3M
CGroup: /system.slice/chronyd.service
└─922 /usr/sbin/chronyd
Для того щоб перетворити chrony в ntp-сервер, додамо наступний рядок в основний конфігураційний файл /etc/chrony.conf, та розкоментуємо інший, який дозволить працювати серверу навіть коли доступ в світ – відсутній:
vim /etc/chrony.conf
...
# Allow NTP client access from local network
allow 192.168.0.0/16
# Serve time even if not synchronized to a time source. # позволяет серверу работать, даже когда интернет отсуствует
local stratum 10 ...
де:
- allow 192.168.0.0./16 – діапазон ip адрес в якому знаходиться сервер або можемо використати ip-адресу сервера (192.168.88.204).
- local stratum 10 – дозволяє серверу працювати, навіть коли відсутній інтернет
зберігаємо та перезапускаємо chronyd:
systemctl restart chronyd
Далі потрібно на ipa-1 в налашгтуваннях вказати синхронізацію з локлаьним ntp сервером.
Редагуємо файл /etc/chrony.conf на серверах, шукаємо рядок local ntp server та вказуємо ip адресу або доменне імя локального ntp:
# local ntp server
server 10.0.2.3 iburst prefer
зберігаємо, запускаємо команду chrony tracking:
[root@ipa-1 ~]# chronyc tracking
Reference ID : C0A858CC (10.0.2.3) # наш локальный ntp
Stratum : 5
Ref time (UTC) : Thu Jan 13 18:34:51 2022
System time : 0.000000093 seconds slow of NTP time
Last offset : -0.000004791 seconds
RMS offset : 0.003176390 seconds
Frequency : 13.527 ppm slow
Residual freq : -0.001 ppm
Skew : 0.054 ppm
Root delay : 0.039162308 seconds
Root dispersion : 0.001261215 seconds
Update interval : 129.9 seconds
Leap status : Normal
На цьому все. Взагалі можна й не використовувати локальний ntp а на обох серверах ipa вказати публічні ntp сервери.
Налаштування hostname
Потрібно задати назву хоста на сервері ipa-1 та додати записи в /etc/hosts.
Призначаємо ім“`я хоста скориставшись командою hostnamectl:
hostnamectl set-hostname "ipa-1.example.com"
Додаємо в файл /etc/hosts запис “IP_ADDR HOSTNAME” :
echo "184.***.*.23 ipa-1.example.com" >> /etc/hosts
Також потрібно створити публічний запис на доменному реєстраторі ( в моєму випадку це в Route53.), щоб можна було звертатися до хоста по публічному DNS!!!
Налаштування firewall
Сервер використовує наступні порти:
- TCP Ports:
- 80, 443: HTTP/HTTPS
- 389, 636: LDAP/LDAPS
- 88, 464: kerberos
- UDP Ports:
- 88, 464: kerberos
- 123: ntp
Дані порти потрібно відкрити тим серверам та ресурсам які будуть звертатися до LDAP, це можуть бути як окремі IP так і їх діапазони. Якщо у вас два або три сервери ipa – потрібно щоб вони були доступні по даним портах для взаємодії між собою. В моєму випадку в якості firewall буду використовувати securitygroup. Підготовку завершено.
FreeIPA
встановлення
Якщо використовувати fedora (що на мою думку є кращим рішенням) то репозиторій вже інтегрований і ми можемо просто встановлювати пакети, в ви падку з Centos потрібно встановлювати додатково epel-realese (якщо він відсутній).
На Centos / Fedora потрібно переконатися чи встановлений epel-realese (якщо не встановлений – встановлюємо), далі залишається встановити сам пакет з ipa-server:
yum install epel-release -y && yum update -y
встановлюємо:
yum install ipa-server -y
конфігурування
Для налаштування та розгортання серверу використовуєтсья команда ipa-server-install, її можна запустити відразу з ключами (переглянути доступні ключі можна за допомогою команди ipa-server-install –help) або конфігурувати в інтерактивному режимі. Запускаємо команду:
ipa-server-install
Нам пропонують налаштувати DNS-сервер, можемо погодитись або ні. Оскільки в якості DNS виступатиме Route53, просто тиснемо Enter:
The log file for this installation can be found in /var/log/ipaserver-install.log ============================================================================== This program will set up the IPA Server. Version 4.9.6 This includes: * Configure a stand-alone CA (dogtag) for certificate management * Configure the NTP client (chronyd) * Create and configure an instance of Directory Server * Create and configure a Kerberos Key Distribution Center (KDC) * Configure Apache (httpd) * Configure SID generation * Configure the KDC to enable PKINIT To accept the default shown in brackets, press the Enter key. Do you want to configure integrated DNS (BIND)? [no]:
далі потрібно вказати імя хоста (ми це вже зробили вище) тож тут просто тиснемо Enter:
Enter the fully qualified domain name of the computer on which you're setting up server software. Using the form <hostname>.<domainname> Example: master.example.com. Server host name [ipa-1.example.com]:
змінюємо або підтверджуємо доменне ім““я, тиснемо Enter:
The domain name has been determined based on the host name. Please confirm the domain name [example.com]:
також підтверджуємо імя верхнього первинного домену, тиснемо Enter:
The kerberos protocol requires a Realm name to be defined. This is typically the domain name converted to uppercase. Please provide a realm name [EXAMPLE.COM]:
задаємо пароль для диспетчеру тек, вводимо пароль та підтвердуємо його, тиснемо Enter:
Certain directory server operations require an administrative user. This user is referred to as the Directory Manager and has full access to the Directory for system management tasks and will be added to the instance of directory server created for IPA. The password must be at least 8 characters long. Directory Manager password: Password (confirm):
задаємо пароль адміністратора, зному натисаємо Enter:
The IPA server requires an administrative user, named 'admin'. This user is a regular system account used for IPA server administration. IPA admin password: Password (confirm):
вказуємо NetBIOS імя, якщо поточна назва влаштовує, тиснемо Enter:
Trust is configured but no NetBIOS domain name found, setting it now. Enter the NetBIOS name for the IPA domain. Only up to 15 uppercase ASCII letters, digits and dashes are allowed. Example: EXAMPLE. NetBIOS domain name [EXAMPLE]:
можемо налаштувати NTP, проте ми це зробили раніше, тож натискаємо Enter:
Do you want to configure chrony with NTP server or pool address? [no]:
перед собою бачимо інформацію про сервер, вводимо yes та натискаємо Enter:
The IPA Master Server will be configured with: Hostname: ipa-1.example.com IP address(es): 52.**.***.*5 Domain name: example.com Realm name: EXAMPLE.COM The CA will be configured with: Subject DN: CN=Certificate Authority,O=EXAMPLE.COM Subject base: O=EXAMPLE.COM Chaining: self-signed Continue to configure the system with these values? [no]: yes
залишається чекати та спостерігати за процесом встановлення, в самому кінці побачимо інформацію про успішне завершення:
***** Please add records in this file to your DNS system: /tmp/ipa.system.records.wv8sjuhf.db << потрібно додати записи в DNS ============================================================================== Setup complete 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 UDP Ports: * 88, 464: kerberos * 123: ntp 2. You can now obtain a kerberos ticket using the command: 'kinit admin' This ticket will allow you to use the IPA tools (e.g., ipa user-add) and the web user interface. Be sure to back up the CA certificates stored in /root/cacert.p12 These files are required to create replicas. The password for these files is the Directory Manager password The ipa-server-install command was successful
З даного файлу /tmp/ipa.system.records.wv8sjuhf.db потрібно додати в Route53!!!
Перевіримо статус, скористаємось командою ipactl status:
[root@ipa-1 ~]# ipactl status Directory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING httpd Service: RUNNING ipa-custodia Service: RUNNING pki-tomcatd Service: RUNNING ipa-otpd Service: RUNNING ipa: INFO: The ipactl command was successful
сервер встановлено, залишається перевірити чи можемо отримати квиток kerberos для користувача admin (щоб взаємодіяти з сервером):
[root@ipa-1 ~]# kinit admin
Password for [email protected]
переглянемо доступний токен:
[root@ipa-1 ]# klist
Ticket cache: KCM:0:54740
Default principal: [email protected]
Valid starting Expires Service principal
01/07/2023 18:13:35 01/08/2023 17:31:29 HTTP/[email protected]
01/07/2023 18:13:33 01/08/2023 17:31:29 krbtgt/[email protected]
відкриваємо браузер та переходимо за адресою серверу ipa-1.example.com:
вводим логін та пароль, натискаємо на Log in і потрапляємо на головну сторінку:
Для відмовостійкості потрібно підняти додатковий сервер, налаштувати його та реплікацію між серверами ipa, прочитати про це можемо тут FreeIPA – налаштування реплікації.
Посилання на тему
- https://www.freeipa.org/page/Main_Page
- https://opensource.com/article/18/12/manage-ntp-chrony
- https://freeipa.readthedocs.io/en/latest/workshop.html