FreeIPA 구축 가이드 #2

안녕하세요, 오늘은 지난 포스트에서 다루었던 리눅스 환경의 중앙 집중식 사용자 인증 및 권한 관리 시스템인 FreeIPA의 후속편으로, 이중화 구성에 대해 상세히 알아보겠습니다. 시스템 엔지니어와 아키텍트를 위한 실전 가이드의 두 번째 이야기로, FreeIPA 이중화 설정부터 클라이언트 구성까지 단계별로 설명드리겠습니다.

📌 이 글은 FreeIPA 기본 구축 가이드의 후속 포스트입니다. 아직 FreeIPA 기본 환경이 구축되어 있지 않다면, 먼저 이전 글을 참고하여 기본 환경을 구성하신 후 이 글을 진행하시기 바랍니다.

FreeIPA 이중화의 중요성

FreeIPA 서버를 이중화하면 다음과 같은 이점이 있습니다:

  1. 고가용성(HA) 확보: 한 서버가 다운되어도 다른 서버가 서비스를 계속 제공
  2. 부하 분산: 클라이언트 요청을 여러 서버에 분산하여 성능 향상
  3. 재해 복구: 데이터 손실 없이 서비스 복구 가능
  4. 유지 보수 용이성: 한 서버의 유지 보수 중에도 서비스 중단 없음

이 글에서는 실제 환경에서 사용할 수 있는 FreeIPA 이중화 구성 방법을 단계별로 설명하겠습니다.

환경 구성

이 가이드에서는 다음 환경을 기준으로 합니다:

  • 마스터 서버: ipasvo01.ioresponse.com (172.16.0.1)
  • 복제 서버: ipasvo02.ioresponse.com (172.16.0.2)
  • 도메인: ioresponse.com
  • OS: CentOS 8 / RHEL 8

1. 마스터 서버 설치 및 구성

FreeIPA 이중화 환경을 구축하기 위해서는 먼저 마스터 서버를 설치해야 합니다. 여기서는 마스터 서버가 이미 설치되어 있다고 가정하고, 복제 서버 구성 방법에 집중하겠습니다.

2. 복제 서버 구성 준비

2.1 호스트명 및 네트워크 설정

복제 서버에서 호스트명을 설정합니다:

# 호스트명 설정
hostnamectl set-hostname ipasvo02.ioresponse.com

# /etc/hosts 파일 편집
vi /etc/hosts

# 다음 행 추가 (마스터와 복제 서버 모두 추가)
172.16.0.1 ipasvo01.ioresponse.com ipasvo01
172.16.0.2 ipasvo02.ioresponse.com ipasvo02

2.2 시간 동기화 설정

Kerberos 인증은 시간 동기화에 매우 민감하므로 NTP 설정이 필수입니다:

# chrony 설치 및 활성화
dnf install -y chrony
systemctl enable --now chronyd
chronyc sources

2.3 방화벽 설정

FreeIPA에 필요한 포트들을 개방합니다:

firewall-cmd --permanent --add-service=freeipa-ldap
firewall-cmd --permanent --add-service=freeipa-ldaps
firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --add-service=ntp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=kerberos
firewall-cmd --permanent --add-port=88/tcp
firewall-cmd --permanent --add-port=88/udp
firewall-cmd --permanent --add-port=464/tcp
firewall-cmd --permanent --add-port=464/udp
firewall-cmd --reload

2.4 필요 패키지 설치

복제 서버에 필요한 패키지를 설치합니다:

# RHEL/CentOS 8 기준
dnf module enable -y idm:DL1
dnf install -y @idm:DL1
dnf install -y ipa-server ipa-server-dns

3. 복제 서버 설치 방법

FreeIPA 복제 서버를 설치하는 두 가지 주요 방법이 있습니다: 통합 설치와 단계별 설치.

3.1 통합 복제 설치 (권장)

통합 방식은 더 간단하고 자동화된 프로세스를 제공합니다:

  1. 마스터 서버에서 관리자로 인증:
# 마스터 서버에서 실행
kinit admin
  1. 복제 서버에서 복제 설치 명령 실행:
# 복제 서버에서 실행
ipa-replica-install --principal admin --admin-password=StrongAdminPassword \
  --setup-dns --forwarder=8.8.8.8 --no-host-dns \
  --server=ipasvo01.ioresponse.com \
  --domain=ioresponse.com \
  --realm=IORESPONSE.COM

이 명령은 마스터 서버에서 필요한 모든 정보를 자동으로 가져와 복제 서버를 설정합니다.

3.2 단계별 복제 설치

더 세밀한 제어가 필요하거나 네트워크 문제로 통합 설치가 어려운 경우 단계별 설치를 선택할 수 있습니다:

  1. 마스터 서버에서 복제 파일 생성:
# 마스터 서버에서 실행
ipa-replica-prepare ipasvo02.ioresponse.com --ip-address=172.16.0.2

이 명령은 /var/lib/ipa/replica-info-ipasvo02.ioresponse.com.gpg 파일을 생성합니다.

  1. 복제 파일을 복제 서버로 전송:
# 마스터 서버에서 실행
scp /var/lib/ipa/replica-info-ipasvo02.ioresponse.com.gpg root@ipasvo02.ioresponse.com:/var/lib/ipa/
  1. 복제 서버에서 설치 실행:
# 복제 서버에서 실행
ipa-replica-install /var/lib/ipa/replica-info-ipasvo02.ioresponse.com.gpg

4. 복제 상태 확인 및 관리

4.1 복제 상태 확인

복제가 제대로 설정되었는지 확인합니다:

# 어떤 서버에서든 실행 가능
ipa-replica-manage list

# 상세 상태 확인
ipa-replica-manage list --verbose

4.2 복제 계약 관리

필요한 경우 복제 계약을 추가로 설정할 수 있습니다:

# 복제 계약 표시
ipa-replica-manage list-ruv

# 새 복제 계약 추가 (필요한 경우)
ipa-replica-manage connect ipasvo01.ioresponse.com ipasvo02.ioresponse.com

4.3 강제 복제 초기화

복제에 문제가 있을 경우 강제 동기화를 수행할 수 있습니다:

# replica에서 master로부터 강제 재초기화
ipa-replica-manage force-sync --from=ipasvo01.ioresponse.com

5. CA(인증 기관) 복제 설정

인증 기관(CA) 서비스도 이중화하려면 다음 단계를 따릅니다:

# CA 복제 설치
ipa-ca-install --password=StrongDMPassword

# CRL 게시자 설정 (인증서 해지 목록)
ipa config-mod --ca-crl-host=ipasvo02.ioresponse.com

6. DNS 영역 전송 설정

DNS 서비스를 사용하는 경우, 영역 전송을 설정해야 합니다:

# 마스터에서 복제 서버로 영역 전송 허용
ipa dnszone-mod ioresponse.com --allow-transfer=172.16.0.2

# 양방향 영역 전송 설정
ipa dnszone-mod ioresponse.com --allow-transfer='172.16.0.1;172.16.0.2'

# DNS 복제 확인
dig @ipasvo02.ioresponse.com ioresponse.com SOA

7. 로드 밸런싱 및 고가용성 설정

7.1 DNS 라운드 로빈 설정

가장 간단한 로드 밸런싱 방법은 DNS 라운드 로빈입니다:

# LDAP 서비스 레코드 추가
ipa dnsrecord-add ioresponse.com _ldap._tcp --srv-priority=0 --srv-weight=100 --srv-port=389 --srv-target=ipasvo01.ioresponse.com
ipa dnsrecord-add ioresponse.com _ldap._tcp --srv-priority=0 --srv-weight=100 --srv-port=389 --srv-target=ipasvo02.ioresponse.com

# Kerberos 서비스 레코드 추가
ipa dnsrecord-add ioresponse.com _kerberos._tcp --srv-priority=0 --srv-weight=100 --srv-port=88 --srv-target=ipasvo01.ioresponse.com
ipa dnsrecord-add ioresponse.com _kerberos._tcp --srv-priority=0 --srv-weight=100 --srv-port=88 --srv-target=ipasvo02.ioresponse.com

7.2 HAProxy를 통한 로드 밸런싱

더 고급 로드 밸런싱을 위해 HAProxy를 설치하고 구성할 수 있습니다:

# HAProxy 설치
dnf install -y haproxy

다음과 같이 /etc/haproxy/haproxy.cfg 파일을 구성합니다:

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /var/lib/haproxy/stats
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend ldap
    bind *:389
    default_backend ldap_servers

backend ldap_servers
    balance roundrobin
    server ipa ipasvo01.ioresponse.com:389 check
    server replica ipasvo02.ioresponse.com:389 check

frontend ldaps
    bind *:636
    default_backend ldaps_servers

backend ldaps_servers
    balance roundrobin
    server ipa ipasvo01.ioresponse.com:636 check
    server replica ipasvo02.ioresponse.com:636 check

frontend kerberos
    bind *:88
    default_backend kerberos_servers

backend kerberos_servers
    balance roundrobin
    server ipa ipasvo01.ioresponse.com:88 check
    server replica ipasvo02.ioresponse.com:88 check

frontend https
    bind *:443
    default_backend https_servers

backend https_servers
    balance roundrobin
    server ipa ipasvo01.ioresponse.com:443 check
    server replica ipasvo02.ioresponse.com:443 check

7.3 Keepalived를 이용한 가상 IP 설정

완전한 고가용성을 위해 Keepalived를 사용하여 가상 IP를 설정할 수 있습니다:

# Keepalived 설치
dnf install -y keepalived

마스터 서버의 /etc/keepalived/keepalived.conf 파일:

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        172.16.0.100
    }
    track_script {
        chk_haproxy
    }
}

복제 서버의 /etc/keepalived/keepalived.conf 파일:

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        172.16.0.100
    }
    track_script {
        chk_haproxy
    }
}

8. 클라이언트 설정

8.1 기본 클라이언트 설치

단일 서버를 지정하는 기본 클라이언트 설정:

# 클라이언트 패키지 설치
dnf install -y ipa-client

# 기본 클라이언트 설정
ipa-client-install --domain=ioresponse.com \
  --server=ipasvo01.ioresponse.com \
  --realm=IORESPONSE.COM \
  --principal=admin \
  --password=StrongAdminPassword \
  --mkhomedir \
  --unattended

8.2 이중화 환경용 클라이언트 설정

고가용성을 위해 여러 서버를 지정하는 클라이언트 설정:

ipa-client-install --domain=ioresponse.com \
  --server=ipasvo01.ioresponse.com \
  --server=ipasvo02.ioresponse.com \
  --realm=IORESPONSE.COM \
  --principal=admin \
  --password=StrongAdminPassword \
  --mkhomedir \
  --unattended

8.3 로드 밸런서 사용 시 클라이언트 설정

로드 밸런서를 통한 클라이언트 설정:

ipa-client-install --domain=ioresponse.com \
  --server=freeipa-lb.ioresponse.com \
  --realm=IORESPONSE.COM \
  --principal=admin \
  --password=StrongAdminPassword \
  --mkhomedir \
  --unattended

9. SSSD 구성 최적화

이중화 환경에서 SSSD 설정을 최적화하면 클라이언트 인증 안정성이 크게 향상됩니다:

vi /etc/sssd/sssd.conf

다음과 같이 구성합니다:

[sssd]
domains = ioresponse.com
services = nss, pam, sudo, ssh
config_file_version = 2

[domain/ioresponse.com]

id_provider = ipa auth_provider = ipa access_provider = ipa ipa_domain = ioresponse.com # 여러 서버 지정 ipa_server = ipasvo01.ioresponse.com, ipasvo02.ioresponse.com # 서버 탐색 순서 (자동, 서버 목록) ipa_server_mode = auto # DNS SRV 레코드 활용 lookup_family_order = ipv4_only dns_discovery_domain = ioresponse.com # 연결 시간 초과 및 재시도 설정 dns_resolver_timeout = 5 ldap_network_timeout = 5 ldap_connection_expire_timeout = 60 ldap_opt_timeout = 5 ldap_search_timeout = 6 # 캐시 설정 cache_credentials = True ldap_id_use_start_tls = True ldap_tls_cacert = /etc/ipa/ca.crt enumerate = False # 오프라인 인증 허용 krb5_store_password_if_offline = True krb5_auth_timeout = 10

SSSD 서비스를 재시작합니다:

systemctl restart sssd

10. 클라이언트 상태 확인 및 문제 해결

10.1 연결 상태 확인

# Kerberos 티켓 확인
kinit admin
klist

# ID 매핑 확인
id admin

# DNS 레코드 확인
dig SRV _ldap._tcp.ioresponse.com

10.2 SSSD 상태 확인

# 서비스 상태
systemctl status sssd

# 도메인 상태
sssctl domain-status ioresponse.com

# 캐시 확인
sssctl cache-credentials -a

10.3 클라이언트 로그 확인

# SSSD 로그
tail -f /var/log/sssd/sssd.log
tail -f /var/log/sssd/sssd_ioresponse.com.log

# 인증 로그
tail -f /var/log/secure

11. 자동화된 클라이언트 배포

대규모 환경에서는 자동화된 배포 방법을 활용하는 것이 효율적입니다.

11.1 Ansible을 사용한 클라이언트 배포

다음은 Ansible 플레이북 예시 (deploy-freeipa-client.yml)입니다:

---
- name: Deploy FreeIPA Client
  hosts: all
  become: yes
  tasks:
    - name: Install IPA client package
      dnf:
        name: ipa-client
        state: present

    - name: Configure hosts file
      lineinfile:
        path: /etc/hosts
        line: "172.16.0.1 ipasvo01.ioresponse.com ipasvo01"
        state: present

    - name: Add replica to hosts file
      lineinfile:
        path: /etc/hosts
        line: "172.16.0.2 ipasvo02.ioresponse.com ipasvo02"
        state: present

    - name: Install IPA client
      command: >
        ipa-client-install --domain=ioresponse.com
        --server=ipasvo01.ioresponse.com
        --server=ipasvo02.ioresponse.com
        --realm=IORESPONSE.COM
        --principal=admin
        --password=StrongAdminPassword
        --mkhomedir
        --unattended
      args:
        creates: /etc/ipa/default.conf

    - name: Ensure SSSD is running
      service:
        name: sssd
        state: started
        enabled: yes

12. 고급 클라이언트 설정

12.1 오프라인 인증 최적화

원격 사이트나 불안정한 네트워크 환경을 위한 오프라인 인증 설정:

# /etc/sssd/sssd.conf 편집

[domain/ioresponse.com]

krb5_store_password_if_offline = True # 오프라인 캐시 수명 (7일) offline_credentials_expiration = 7 # 패스워드 프롬프트 횟수 entry_cache_timeout = 14400

12.2 자동 홈 디렉토리 마운트 설정

네트워크 홈 디렉토리를 사용하는 경우 AutoFS 설정:

# AutoFS 설치
dnf install -y autofs

# SSSD와 AutoFS 통합
vi /etc/sssd/sssd.conf

다음 내용 추가:

[sssd]
services = nss, pam, sudo, ssh, autofs

[domain/ioresponse.com]

autofs_provider = ipa

결론

이 가이드를 통해 FreeIPA 이중화 환경을 성공적으로 구축하고 클라이언트를 효율적으로 구성할 수 있습니다. 고가용성 FreeIPA 인프라는 대규모 리눅스 환경에서 안정적인 중앙 인증 시스템을 제공하며, 시스템 관리자의 업무 효율성을 크게 향상시킵니다.

몇 가지 추가 고려사항:

  1. 정기적인 백업: 데이터 보호를 위해 정기적인 백업 일정을 수립하세요.
  2. 모니터링 설정: Nagios나 Prometheus와 같은 도구를 사용하여 FreeIPA 서버를 모니터링하세요.
  3. 보안 강화: TLS 인증서를 정기적으로 갱신하고 암호 정책을 강화하세요.
  4. 문서화: 설정 변경사항을 모두 문서화하여 향후 관리자가 참조할 수 있도록 하세요.

FreeIPA 이중화 환경은 초기 설정에 시간이 걸릴 수 있지만, 장기적으로는 안정성과 관리 용이성 측면에서 큰 이점을 제공합니다. 시스템 엔지니어와 아키텍트라면 꼭 고려해볼 만한 가치가 있는 구성입니다.

행복한 시스템 관리 되세요!

이 글이 유익했다면 공유해주세요❤️
코드 걷는 사람
코드 걷는 사람
Articles: 9

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.