안녕하세요, 오늘은 지난 포스트에서 다루었던 리눅스 환경의 중앙 집중식 사용자 인증 및 권한 관리 시스템인 FreeIPA의 후속편으로, 이중화 구성에 대해 상세히 알아보겠습니다. 시스템 엔지니어와 아키텍트를 위한 실전 가이드의 두 번째 이야기로, FreeIPA 이중화 설정부터 클라이언트 구성까지 단계별로 설명드리겠습니다.
📌 이 글은 FreeIPA 기본 구축 가이드의 후속 포스트입니다. 아직 FreeIPA 기본 환경이 구축되어 있지 않다면, 먼저 이전 글을 참고하여 기본 환경을 구성하신 후 이 글을 진행하시기 바랍니다.
FreeIPA 이중화의 중요성
FreeIPA 서버를 이중화하면 다음과 같은 이점이 있습니다:
- 고가용성(HA) 확보: 한 서버가 다운되어도 다른 서버가 서비스를 계속 제공
- 부하 분산: 클라이언트 요청을 여러 서버에 분산하여 성능 향상
- 재해 복구: 데이터 손실 없이 서비스 복구 가능
- 유지 보수 용이성: 한 서버의 유지 보수 중에도 서비스 중단 없음
이 글에서는 실제 환경에서 사용할 수 있는 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 통합 복제 설치 (권장)
통합 방식은 더 간단하고 자동화된 프로세스를 제공합니다:
- 마스터 서버에서 관리자로 인증:
# 마스터 서버에서 실행
kinit admin
- 복제 서버에서 복제 설치 명령 실행:
# 복제 서버에서 실행
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 단계별 복제 설치
더 세밀한 제어가 필요하거나 네트워크 문제로 통합 설치가 어려운 경우 단계별 설치를 선택할 수 있습니다:
- 마스터 서버에서 복제 파일 생성:
# 마스터 서버에서 실행
ipa-replica-prepare ipasvo02.ioresponse.com --ip-address=172.16.0.2
이 명령은 /var/lib/ipa/replica-info-ipasvo02.ioresponse.com.gpg
파일을 생성합니다.
- 복제 파일을 복제 서버로 전송:
# 마스터 서버에서 실행
scp /var/lib/ipa/replica-info-ipasvo02.ioresponse.com.gpg root@ipasvo02.ioresponse.com:/var/lib/ipa/
- 복제 서버에서 설치 실행:
# 복제 서버에서 실행
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 인프라는 대규모 리눅스 환경에서 안정적인 중앙 인증 시스템을 제공하며, 시스템 관리자의 업무 효율성을 크게 향상시킵니다.
몇 가지 추가 고려사항:
- 정기적인 백업: 데이터 보호를 위해 정기적인 백업 일정을 수립하세요.
- 모니터링 설정: Nagios나 Prometheus와 같은 도구를 사용하여 FreeIPA 서버를 모니터링하세요.
- 보안 강화: TLS 인증서를 정기적으로 갱신하고 암호 정책을 강화하세요.
- 문서화: 설정 변경사항을 모두 문서화하여 향후 관리자가 참조할 수 있도록 하세요.
FreeIPA 이중화 환경은 초기 설정에 시간이 걸릴 수 있지만, 장기적으로는 안정성과 관리 용이성 측면에서 큰 이점을 제공합니다. 시스템 엔지니어와 아키텍트라면 꼭 고려해볼 만한 가치가 있는 구성입니다.
행복한 시스템 관리 되세요!