FreeIPA で IBM Cloud 上に LDAP 認証基盤を構築

Red Hat Dojo #03 [RHELの認証基盤を体験してみよう](https://ibm-developer.connpass.com/event/195212/)
 でデモする環境を　Identity Management(Idm) のUpstream版(OSS)である FreeIPA により IBM Cloud上で構築しました。
今回はその手順を記載します。



# FreeIPAサーバー 導入編
## RHELへFreeIPAをインストールし、サーバーとして起動

1. 準備編

- 時刻同期サーバー設定

  時刻同期プロトコルとしてNTPよりも効率よく正確であるとの話を耳にし、今回はChronyを使いました。

```
yum -y install chrony
systemctl start chronyd
chronyc makestep
date
timedatectl set-timezone Asia/Tokyo
```

- SELINUX を緩く

```
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
```
※実際の運用の際には、真似をしないでください。

- なんかの設定

```
sudo yum module list idm
sudo yum module info idm:DL1
sudo yum -y install @idm:DL1
```

- ホスト名設定

```
hostnamectl set-hostname rhdojo03ipa.rhdojo03.local
```

- IPAサーバー,DNS等インストール

```
sudo yum -y install freeipa-server ipa-server-dns bind bind-dyndb-ldap
```

- hostsファイルのループバックアドレスを実アドレスに修正

次のコマンドでIPAサーバー構成時にループバックアドレスの利用は警告されインストールが中断されてしまうため、ループバックアドレスを実アドレスに修正する。

```
(例 IPv4は実アドレスへ)127.0.0.1  -> 192.168.1.3
(例 IPv6はコメント化)::1 -> #::1
```

- IPAサーバー構成

以下のコマンドを用いて、DNSサーバーセットアップと共にIPAサーバーを構成する。

```
[root@rhdojo03ipa ~]# ipa-server-install --setup-dns --mkhomedir

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.8.7

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 DNS (bind)
  * Configure the KDC to enable PKINIT

To accept the default shown in brackets, press the Enter key.

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 [rhdojo03ipa.rhdojo03.local]: 

Warning: skipping DNS resolution of host rhdojo03ipa.rhdojo03.local
The domain name has been determined based on the host name.

Please confirm the domain name [rhdojo03.local]:   <- [rhdojo03.local]で良いのでリターン

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [RHDOJO03.LOCAL]:    <- [RHDOJO03.LOCAL]で良いのでリターン
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):     <- パスワード設定

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):     <- パスワード設定

Checking DNS domain rhdojo03.local., please wait ...
Do you want to configure DNS forwarders? [yes]:    <- DNS forwarders を設定したいのでリターン 
Following DNS servers are configured in /etc/resolv.conf: *.*.1.10, *.*.1.11
Do you want to configure these servers as DNS forwarders? [yes]: <- 上記のDNSをそのまま使いたいのでリターン
All DNS servers from /etc/resolv.conf were added. You can enter additional addresses now:
Enter an IP address for a DNS forwarder, or press Enter to skip: <- 他のDNS forwarderは不要なのでリターン
Checking DNS forwarders, please wait ...
Do you want to search for missing reverse zones? [yes]: <- reberse zones を検索するのでリターン
Checking DNS domain *.*.*.in-addr.arpa., please wait ...
Do you want to create reverse zone for IP *.*.*.* [yes]: <- そのままなのでリターン
Please specify the reverse zone name [*.*.*.in-addr.arpa.]: <- そのままなのでリターン 
Checking DNS domain *.*.*.in-addr.arpa., please wait ...
Using reverse zone(s) *.*.*.in-addr.arpa.
Do you want to configure chrony with NTP server or pool address? [no]:  <- そのままなのでリターン

The IPA Master Server will be configured with:
Hostname:       rhdojo03ipa.rhdojo03.local
IP address(es): *.*.*.*
Domain name:    rhdojo03.local
Realm name:     RHDOJO03.LOCAL

The CA will be configured with:
Subject DN:   CN=Certificate Authority,O=RHDOJO03.LOCAL
Subject base: O=RHDOJO03.LOCAL
Chaining:     self-signed

BIND DNS server will be configured to serve IPA domain with:
Forwarders:       *.*.1.10, *.*.1.11
Forward policy:   only
Reverse zone(s):  *.*.*.in-addr.arpa.

Continue to configure the system with these values? [no]: yes <- 上記設定で続けて良いのでリターン

The following operations may take some minutes to complete.
Please wait until the prompt is returned.
・・・
```

- IPAサーバー起動

```
kinit admin <- IPAサーバー構成時に設定したパスワードの入力を求められる
```

- /etc/resolve.conf 変更

```
vi /etc/resolve.conf
nameserver 192.168.1.3 <- 自身のIPアドレス
nameserver *.*.1.10  <- DNS forwarder
nameserver *.*.1.11  <- DNS forwarder
domain rhdojo03.local
search rhdojo03.local
```

- firewall 設定

```
systemctl start firewalld.service
firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,http,https,kerberos,ntp,dns,ldap,ldaps,https}
firewall-cmd --complete-reload
```

# 手元のPCからFreeIPAサーバーへアクセス

手元のマシンからIBM cloud 上で稼働する Idm サーバーにアクセスする際に、IdmサーバーがSSL／TLS化されているためコモンネーム（FQDN）とIPアドレスを紐つけておく必要があります。そのため、hostsファイルに以下の設定を行う。

- Mac編

/etc/hosts ファイル編集

```
sudo vi /etc/hosts
192.168.1.3 rhdojo03ipa.rhdojo03.local
```

- Windows編

C:\Windows\System32\drivers\etc\hosts ファイルに以下を追記

```
192.168.1.3 rhdojo03ipa.rhdojo03.local
```

# Linux Client 導入編

## RHEL編

- ホスト名修正(IPAサーバーのドメイン配下となるような名称にする)

```
hostnamectl set-hostname rhdojo03clir1.rhdojo03.local
```

- 再起動時のDNS初期化対策

再起動時にDNS設定が書き換わらないようにする

```
vi /etc/NetworkManager/NetworkManager.conf
-------
 [main]
 dns=none
-------
```

- firewall設定

```
systemctl restart NetworkManager
systemctl start firewalld.service
firewall-cmd --add-service=http --add-service=https --add-service=ldap --add-service=ldaps --add-service=kerberos --add-service=dns --add-service=ntp --permanent
firewall-cmd --reload
```

- resolv.conf設定

```
vi /etc/resolv.conf
-------
   nameserver 192.168.1.3 <- IPAサーバー
   domain  rhdojo03.local
   search  rhdj03ipa.rhdojo03.local
-------
```


- IPA クライアントパッケージインストール＆構成

```
yum install -y ipa-client
ipa-client-install --mkhomedir --hostname rhdojo03cli1.rhdojo03.local
```
途中
「User authorized to enroll computers: admin
           Password for admin@RHDOJO03.LOCAL:」
と尋ねられるので、IPAサーバーのパスワードを入力

## Ubuntu編

やっていることは、RHEL編と同じ。

```
apt update
apt install -y freeipa-client
hostnamectl set-hostname rhdojo3cli4.rhdojo03.local  <- ホスト名変更
apt install -y network-manager
systemctl restart NetworkManager
vi /etc/systemd/resolved.conf
vi /etc/resolv.conf <- 192.168.1.3 をDNSとして記載
systemctl restart systemd-resolved
ipa-client-install --mkhomedir --hostname rhdj03cliu4.rhdojo03.local <- ID:admin, PASWD
```