http://www.ibm.com/developerworks/kr/library/l-radius/
데이터 보안은 시스템 보안 만큼 중요하다. 따라서 데이터를 보호하고 기밀성, 기밀성, 가용성을 확실히 보장하는 것은 관리자들에게는 중요한 문제이다.
이 글에서 데이터 보안의 기밀성에 대해 설명하겠다. 보호를 받고 있는 데이터는 권한을 받은 사용자 또는 시스템만이 접근할 수 있다. 리눅스 시스템에서 Remote Authentication Dial-In User Service server (RADIUS)를 설정 및 구성하여 사용자 인증, 권한, 계정 부여 (AAA)를 수행하는 방법을 설명하겠다.
RADIUS 프로토콜에 대해 먼저 설명한 다음 AAA 컴포넌트와 이것의 작동방법 그리고 LDAP 프로토콜을 설명하겠다.
Remote Authentication Dial-In User Service 프로토콜은 IETF의 RFC 2865(참고자료)에서 정의된다. 이것은 네트워크 액세스 서버(NAS)로 사용자 인증, 권한 부여, 계정 설정 등을 수행한다. RADIUS는 UDP에 기반한 클라이언트/서버 프로토콜이다. RADIUS 클라이언트(네트워크 액세스 서버)는 일반적으로 라우터, 스위치 또는 무선 액세스 포인트이다. (액세스 포인트는 네트워크상의 노드에 설정된다; WAP은 무선 버전이다.) RADIUS 서버는 유닉스 또는 Windows 2000 서버상에서 실행되는 데몬 프로세스이다.
NAS가 사용자 연결 요청을 받으면 NAS는 이것을 지정된 RADIUS 서버로 보낸다. RADIUS 서버는 사용자를 인증하고 사용자 설정 정보를 NAS로 리턴한다. 그런 다음, NAS는 연결 요청을 수락 또는 거절한다.
완전한 기능을 갖춘 RADIUS 서버는 LDAP 외에도 다양한 방식을 지원하여 사용자를 인증한다.
인증과 권한부여는 RADIUS에서 함께 결합된다. 사용자 이름이 맞고 패스워드가 정확하면 RADIUS 서버는 사용자의 접근을 허용하는 몇 가지 매개변수(애트리뷰트-값 쌍)을 포함하여 Access-Accept 응답을 리턴한다. 이 매개변수들은 RADIUS에서 설정되고 서비스 유형, 프로토콜 유형, 사용자를 할당하는 IP 주소, 액세스 제어 리스트(ACL) 또는 NAS에서 적용할 정적 라우트, 기타 값 등을 포함한다.
RADIUS 계정 기능을 사용하면(참고자료), 보안 또는 빌링에 사용되는 세션동안 사용된 시간, 패킷, 바이트 같은 리소스의 양을 나타내면서 연결 세션의 시작과 끝에 데이터를 보낼 수 있다.
Lightweight Directory Access Protocol
Lightweight Directory Access Protocol (LDAP)은 X.500 계열 디렉토리의 정보에 접근하고 업데이트하는 방식을 정의한 오픈 표준이다. LDAP는 사용자 정보를 중앙 로케일에 저장하여 동일한 사용자 정보를 각 시스템에 저장하지 않아도 된다. 또한 일관성 있고 제어된 방식으로 정보를 관리하고 정보에 액세스하는데 사용되기도 한다.
LDAP는 중앙 디렉토리에서 사용자를 관리하기 때문에 사용자 관리 태스크가 간단해진다. 사용자 정보를 저장하는 것 외에도, LDAP에서 사용자를 정의할 수 있다. 로그인의 수를 제한하는 것과 같은 선택 기능이 가능하다. 이 글에서 RADIUS 서버가 설정되어 LDAP에 대해 사용자를 인증하는 방법을 설명하겠다. 이 글은 RADIUS에 초점을 맞추었기 때문에 LDAP 서버 설정 및 설치에 대해서는 자세히 설명하지 않겠다.
OpenLDAP는 LDAP의 오픈 소스 구현이다; OpenLDAP.org에서 자세한 정보를 참조하기 바란다.(참고자료)
다음과 같은 시나리오를 상상해보자:
이 모든 인증 작업은 중앙 LDAP 서버에 대해 RADIUS 서버로 수행될 수 있다. (그림 1)
이 글에서, 마지막 옵션을 구현해 보겠다. 먼저 RADIUS 서버를 설치하는 것으로 시작한다.
RADIUS 서버 소프트웨어는 여러 소스들로 얻어질 수 있다. 이 글에서는 FreeRADIUS를 사용하겠지만(참고자료), Cisco Secure Access Control Server (ACS)도 중앙화 된 사용자 액세스 제어 프레임웍으로서 UNIX 와 Windows에서 실행되는 Cisco 장치를 통해 사용자 관리를 한다. 또한 Cisco 상용 프로토콜인 TACACS+도 지원한다. (이것은 TACACS+ 기능이 되는 장치에서 더 많은 사용자 관리 기능을 수행한다.)
FreeRADIUS는 리눅스 상에서 실행되는 강력한 RADIUS 서버로서 오픈 소스 커뮤니티에서 만들어 졌으며 오늘날 분산 및 이종의 컴퓨팅 환경에 알맞다. FreeRADIUS 1.0.2는 LDAP, MySQL, PostgreSQL, Oracle 데이터베이스를 지원하고 EAP와 Cisco LEAP 같은 네트워크 프로토콜과 호환된다. FreeRADIUS는 현재 많은 대규모 네트워크 시스템에 전개되고 있다.
다음 단계는 Red Hat Enterprise Linux Advanced Server 3.0에 FreeRADIUS 1.0.2를 설치 및 테스트 하는 방법을 설명한 것이다.:
tar -zxvf freeradius-1.0.2.tar.gz - extract it with gunzip and tar ./configure make make install - run this command as root radiusd or - start RADIUS server radiusd -X - start RADIUS server in debug mode radtest test test localhost 0 testing123 - test RADIUS server |
radtest
응답을 받으면 FreeRADIUS 서버가 작동한다.
또 다른 무료 툴인 NTRadPing(참고자료)을 소개하겠다. 이것은 Windows 클라이언트에서 온 인증 및 권한부여 요청을 테스트한다. RADIUS 서버에서 돌아온 애트리뷰트 값과 같은 자세한 응답을 디스플레이 할 수 있다.
이제 FreeRADIUS를 설정한다.
RADIUS 서버 구성은 서버, 클라이언트, 사용자(권한부여와 인증용)를 설정하는 것이다. RADIUS 서버와는 다른 필요 때문에 다른 설정이 될 수도 있다. 다행히 대부분의 설정은 비슷하다.
FreeRADIUS 설정 파일은 /etc/raddb 폴더에 저장된다. radiusd.conf 파일을 변경해야 한다.
1) Global settings: log_auth = yes - log authentication requests to the log file log_auth_badpass = no - don't log passwords if request rejected log_auth_goodpass = no - don't log passwords if request accepted 2) LDAP Settings: modules { ldap { server = "bluepages.ibm.com" - the hostname or IP address of the LDAP server port = 636 - encrypted communications basedn = "ou=bluepages,o=ibm.com" - define the base Distinguished Names (DN), - under the Organization (O) "ibm.com", - in the Organization Unit (OU) "bluepages" filter = "(mail=%u)" - specify search criteria base_filter = "(objectclass=person)" - specify base search criteria } authenticate { - enable authentication against LDAP Auth-Type LDAP { ldap } |
매개변수는 LDAP 서비스의 인스턴스인 IBM BluePages와 작동하도록 설정된다. 매개변수들은 다른 LDAP 서버들마다 달라진다.
클라이언트는 /etc/raddb/clients.conf 에서 설정된다. RADIUS 클라이언트를 설정하는 두 가지 방식이 있다. IP 서브넷으로 NAS를 그룹핑하거나(Listing 3) 호스트 이름 또는 IP 주소로 NAS를 리스팅 할 수 있다. (Listing 4). 두 번째 방식을 따르면, shortname
과nastype
이 정의된다.
client 192.168.0.0/24 { secret = mysecret1 - the "secret" should be the same as configured on NAS shortname = mylan - the "shortname" can be used for logging nastype = cisco - the "nastype" is used for checkrad and is optional } |
client 192.168.0.1 { secret = mysecret1 shortname = myserver nastype = other } |
/etc/raddb/user 파일에는 각 사용자에 대한 인증과 설정 정보가 포함되어 있다.
1) Authentication type: Auth-Type := LDAP - authenticate against LDAP Auth-Type := Local, User-Password == "mypasswd" - authenticate against the - password set in /etc/raddb/user Auth-Type := System - authenticate against the system password file - /etc/passwd or /etc/shadow 2) Service type: Service-Type = Login, - for administrative login |
다음 인증 서버 애트리뷰트 값(AV) 쌍은 사용자 권한을 위해 설정되어야 한다. 인증이 수락된 후 관리자 로그인 요청을 위해 NAS로 리턴된다.
Cisco 라우터의 경우 다른 권한 레벨이 있다:
router>
이고, 로그인용 기본 레벨이다.router#
이고, 사용 가능 모드로 들어간 후 레벨이다.다음 명령어를 사용하면 네트워크 접근을 통한 사용자 로그인으로 EXEC 명령어에 즉시 접근할 수 있다.:
cisco-avpair ="shell:priv-lvl=15"
다음 코드는 CISCO 무선 액세스 포인트에 대해 같은 작업을 핸들한다.:
Cisco:Avpair = "aironet:admin-capability=write+snmp+ident+firmware+admin"
어떤 기능의 조합으로도 다음 애트리뷰트와 함께 리턴된다.:
Cisco:Avpair = "aironet:admin-capability=ident+admin"
Cisco:Avpair = "aironet:admin-capability=admin"
Cisco에서 명령어에 관한 더 많은 정보를 숙지하기 바란다.
다음에는 NAS를 설정한다. 우선 Cisco 라우터 그 다음에는 Cisco WAP이다.
Cisco IOS 12.1 라우터의 경우 AAA를 실행한 다음 인증, 권한, 계정을 설정할 것이다.
aaa new-model radius-server host 192.168.0.100 radius-server key mysecret1 |
AAA는 라우터 상에서 실행되어야 한다. NAS에 AAA 서비스를 제공할 RADIUS 서버의 리스트가 설정된다. 암호화 키는 NAS와 RADIUS 서버 간 데이터 전송을 암호화하는데 사용된다. FreeRADIUS에서 설정된 것과 동일해야 한다.
aaa authentication login default group radius local line vty 0 4 login authentication default |
이 예제에서, 네트워크 관리자는 RADIUS 인증을 사용한다. RADIUS 서버를 사용할 수 없다면 NAS의 로컬 사용자 데이터베이스 패스워드를 사용하라.
aaa authorization exec default group radius if-authenticated |
NAS에 로그인할 때, 사용자가 EXEC 쉘을 사용하도록 한다.
aaa accounting system default start-stop group radius aaa accounting network default start-stop group radius aaa accounting connection default start-stop group radius aaa accounting exec default stop-only group radius aaa accounting commands 1 default stop-only group radius aaa accounting commands 15 default wait-start group radius |
라우터는 RADIUS 서버에 계정 기록을 보내도록 설정되어야 한다. Listing 9의 명령어를 사용하여 NAS 시스템 이벤트, 네트워크 연결, 아웃바운드 연결, EXEC 연산, 레벨 1에서 15까지의 명령어에 대한 계정 정보를 기록한다.
여기까지다. 이제 Cisco 무선 액세스 포인트 설정을 보도록 하자. 다음 설정은 Firmware 12.01T1과 함께 Cisco 1200 Series AP에 적용된다. (그림 2):
실제로 EAP Authentication을 설정하여 FreeRADIUS가 일반 사용자들을 무선 LAN에 인증하도록 하는데 사용되도록 할 수 있다.
모든 설정이 완료되었기 때문에 FreeRADIUS 서버는 NAS에서 보내진 모든 정보를 기록하여 /var/log/radius/radius.log 파일에 저장할 수 있다.:
Listing 10. /var/log/radius/radius.log 파일
Thu Mar 3 21:37:32 2005 : Auth: Login OK: [David] (from client mylan port 1 cli 192.168.0.94) Mon Mar 7 23:39:53 2005 : Auth: Login incorrect: [John] (from client mylan port 1 cli 192.168.0.94) |
자세한 계정 정보는 /var/log/radius/radacct 디렉토리에 저장된다. Listing 11은 David가 2005년 3월 4일, 7시 40분에서 7시 51분 사이에 192.168.0.94에서 192.168.0.1로 로그인 했음을 나타내고 있다. 이렇게 자세한 정보는 관리자에게 매우 도움이 된다.
Listing 11. RADIUS가 제공하는 계정 상세 샘플
Fri Mar 4 19:40:12 2005 NAS-IP-Address = 192.168.0.1 NAS-Port = 1 NAS-Port-Type = Virtual User-Name = "David" Calling-Station-Id = "192.168.0.94" Acct-Status-Type = Start Acct-Authentic = RADIUS Service-Type = NAS-Prompt-User Acct-Session-Id = "00000026" Acct-Delay-Time = 0 Client-IP-Address = 192.168.0.1 Acct-Unique-Session-Id = "913029a52dacb116" Timestamp = 1109936412 Fri Mar 4 19:51:17 2005 NAS-IP-Address = 192.168.0.1 NAS-Port = 1 NAS-Port-Type = Virtual User-Name = "David" Calling-Station-Id = "192.168.0.94" Acct-Status-Type = Stop Acct-Authentic = RADIUS Service-Type = NAS-Prompt-User Acct-Session-Id = "00000026" Acct-Terminate-Cause = Idle-Timeout Acct-Session-Time = 665 Acct-Delay-Time = 0 Client-IP-Address = 192.168.0.1 Acct-Unique-Session-Id = "913029a52dacb116" Timestamp = 1109937077 |
이 글에서 제시한 간단한 단계를 거치면 외부 LDAP 서버를 사용하는 Remote Authentication Dial-In User Service 서버를 설정하여 인증, 권한, 계정 등을 핸들 할 수 있다. 이 글을 다음과 같이 요약할 수 있다.:
이 글에서 제시한 것은 권한이 있는 엔터티에 의해서만 보안 데이터에 접근될 수 있도록 하기 위한 절차이다.