2010년 5월 9일 일요일

Cisco IOS와 RADIUS

Cisco IOS와 RADIUS[footnote]http://wiki.freeradius.org/Cisco[/footnote]

Cisco 장비는 매우 널리 사용되고 있지만 IOS가 돌아가는 Cisco 장비의 설정은 처음 접하는 이들에게는 쉽지 않은 과제이다. 이 문서는 가장 일반적인 설정 옵션들을 설명하며 Cisco 장비를 RADIUS와 함께 운영될 수 있도록 하는 데 있다.

Shell Access
RADIUS를 인바운드 쉘 요청(telnet & ssh)의 인증을 위해 사용하고자 한다면 아래와 같은 항목을 users 파일에 추가하여야 한다.

 youruser Cleartext-Password := "somepass"

              Service-Type = NAS-Prompt-User
 
위 설정으로 youruser는 시스코 장비에 첫번째 레벨 권한으로 접근할 수 있을 것이다. 하지만 설정 변경이나 더 상위 단계의 접근 권한을 위해서는 enable을 실행하여야 할 것이다.더 자세한 사항은 시스코 사이트의 Configuring Basic AAA on an Access Server [footnote] http://www.cisco.com/en/US/tech/tk59/technologies_tech_note09186a0080093c81.shtml[/footnote]를 참고하기 바란다.

Enable 모드
글로벌 Enable 비밀번호
시스코 장비에서 enable (혹은 enable 15)를 실행할 때 시스코 장비는 RADIUS 인증 요청 $enable15$를 발생한다. enable 2를 실행할 경우에는 '$enab2$' 요청을 보내며 enable 3에 대해서는 '$enab3$' 등을 요청할 것이다.
RADIUS 서버에 이들 사용자들이 enable 권한을 가질 수 있도록 비밀번호와 함께 설정하여야 한다.

  $enable15$   Cleartext-Password := "someadminpass"

             Service-Type = NAS-Prompt-User
 
User Privilege Level
특정 사용자에게 인증 응답으로 privilege level (enable 모드로 15이다)을 보내어 해당 사용자가 로그인시 자동으로 privilege level이 되도록 설정할 수 있다. 이를 위한 설정 옵션이 cisco-avpair = "shell:priv-lvl=15"이다.
설정을 위해서는 users 파일에 다음과 같은 항목을 추가한다.

 youruser   Cleartext-Password := "somepass"

           Service-Type = NAS-Prompt-User,
           cisco-avpair = "shell:priv-lvl=15"
 
더 자세한 사항은 시스코 사이트의 "How to Assign Privilege Levels with TACACS+ and RADIUS" [footnote]http://www.cisco.com/en/US/tech/tk59/technologies_tech_note09186a008009465c.shtml[/footnote]를 참고하기 바란다.


Command Authorization
TACACS+ 표현식을 Cisco-AVPair Vendor-Specific 표현식으로 변환하는 매핑법이 있다고 주장한다. 예를 들어 아래 표현은 priv-lvl을 변환한다.

cisco-avpair = "shell:priv-lvl=15"

 
"cmd"와 "cmd-arg" TACACS+ 속성은 명령어 인증이 필요하다. TACACS+ 명령어에 대한 정보는 Cisco 사이트 http://www.cisco.com/en/US/products/ps6350/products_configuration_guide_chapter09186a00804fe2d8.html에서 확인할 수 있을 것이다.

cisco-avpair = "shell:cmd=show"

 
위 옵션은 "show"명령어를 인증하는 방법이다.

IOS 12.x
시스코 버전 12.x에서 다음의 AAA 설정 명령이 권장된다.

aaa new-model

aaa authentication login default group radius local
aaa authentication login localauth local
aaa authentication ppp default if-needed group radius local
aaa authorization exec default group radius local
aaa authorization network default group radius local
aaa accounting delay-start
aaa accounting exec default start-stop group radius
aaa accounting network default start-stop group radius
aaa processes 6
 
위 설정은 대다수의 radius 서버와 궁합이 잘 맞는다. 중요한 설정 중 하나는 다음 항목이다.
   

aaa accounting delay-start

 
이 설정은 PPP negotiation 과정에서 IP 주소가 할당될 때까지 Accounting Start 패킷을 보내지 않고 기다리도록 하는 명령이다.

Common RADIUS Directives
IOS에서 설정 명령을 입력할 때 여러가지 방법이 존재한다. 단일 설정 명령으로 입력할 수도 있으며 각각의 명령문으로 입력할 수도 있다. 아래에서 그 방법을 소개하도록 한다.

Config Sample #1
아래 설정은 두 개의 RADIUS서버를 가정하며 각각 IP 주소가 192.168.1.10, 192.168.1.11이다. 아래 예에서 RADIUS 서버와 공유키를 단일 설정문으로 입력할 것이며 모든 요청은 Loopback0 인터페이스에서 발생하는 것으로 설정한다. 또한 RadiusServers 그룹을 생성하며 RADIUS 서버 두 개를 이들 그룹에 포함할 것이다.

 conf t

aaa new-model
radius-server host 192.168.1.10 auth-port 1812 acct-port 1813 key Cis$ko
radius-server host 192.168.1.11 auth-port 1812 acct-port 1813 key Cis$ko
ip radius source-interface Loopback0
aaa group server radius RadiusServers
 server 192.168.1.10 auth-port 1812 acct-port 1813  
 server 192.168.1.11 auth-port 1812 acct-port 1813  
 exit
aaa authentication login default group RadiusServers local
exit
 
위 예에서는 password-encryption 서비스가 구동되어 있을 것으로 가정한 것이어서 공유키는 암호화되어 저장될 것이다. 또한 RADIUS 서버와의 통신이 실패할 경우를 대비해 로컬에 로그인 정보를 생성할 것을 권장한다.

Config Sample #2
아래 설정은 두 개의 RADIUS서버를 가정하며 각각 IP 주소가 192.168.1.10, 192.168.1.11이다. 아래 예에서는 각각 분리된 설정으로 RADIUS 서버를 지정하고 공유기를 입력한다.

conf t

radius-server host 192.168.1.10
radius-server key Cis$ko
radius-server auth-port 1812
radius-server host 192.168.1.11
radius-server key Cis$ko
radius-server auth-port 1812
 
Shared Secret Encryption
IOS에 password-encryption 서버스가 존재하는 것을 모두 알고 있을 것이다.

service password-encryption

no service password-encryption
 
시스코 명령어 레퍼런스 사이트[footnote]http://www.cisco.com/en/US/products/sw/iosswrel/ps5207/products_command_reference_chapter09186a00801a7fa1.html#wp1204790[/footnote]
를 통해 알 수 있듯이 실제 암호화 작업은 현재 설정이 작성되거나 비밀번호가 설정될 때 진행된다. 비밀번호 암호화는 비밀번호 모두에 적용되며 사용자 비밀번호, 인증키 비밀번호, privilege 명령어 비밀번호, 콘솔 및 virtual terminal line 접근 패스워드 등이 이에 해당한다. 이 명령은 허가되지 않은 사용자가 현재 설정 내의 비밀번호는 열람하는 것을 방지한다.
password encryption이 활성화되면 비밀번호가 암호화되어 표시된다.
주의 이 명령은 높은 수준의 네트워크 보안 수준을 보장하는 것은 아니다. 이 명령을 사용하더라도 추가적인 보안 대책을 강구하여야 한다.
한가지 주의할 점은 password encryption 서비스를 사용하더라도 FreeRADIUS clients.conf 파일에 암호화된 비밀번호를 사용하지 않도록 한다. 이는 동일한 공유키로 간주되지 않는다.

Nested Accounting

아래 설정 명령은 두번째 accounting 개시 메시지를 보내며 이는 총 사용량 카운터에 문제를 발생할 것이다.

aaa accounting nested

 
시스코 장비는 사용자가 인증될 때, 그리고 PPP 세션이 시작될 때 Accounting Start 패킷을 발생한다. 그리고 PPP 세션이 끝날 때와 콜이 끊어질 때 Accounting Stop 패킷을 보낸다. 이 때문에 RadiusReport와 같은 프로그램이 이 이벤트를 두 개의 연결 시도로 보며 총 사용시간을 거의 두 배로 산출할 것이다. nested 명령어를 사용하지 않음으로써 PPP가 사용될 때 Accounting Stop 패킷을 Accounting Start 패킷을 발생한 후 바로 다음 발생하여 위와 같은 중첩 현상을 제거한다. 이는 사용자 사용량을 정확하게 모니터링하고자 하는 조직에 아주 유용할 것이다. 자세한 처리 과정에 관해서는 http://www.cisco.com/en/US/products/sw/iosswrel/ps1834/products_feature_guide09186a00800801bc.html를 참고하기 바란다.

Unique Acct-Session-Id's
IOS 버전 12.2 이상(버전 12.1(4.1)T는 숨은 명령어로 가능하다)
시스코 장비에서 RFC 2866를 만족하기 위해서는 혹은 중복된 Acct-Sessions-Id 값 생성을 멈추기 위해서는 아래 명령어를 입력하여야 한다.

radius-server unique-ident 1

 
이제 Acct-Session-Id는 256번을 재부팅하더라도 중복되지 않을 것이다. 이 명령을 입력한 후 시스템에 적용하기 위해서는 재부팅해야한다. 그렇지 않을 경우 명령 입력 후 10분 후에 아래 메시지가 뜰 것이다.

%RADIUS-3-IDENTFAIL: Save of unique accounting ident aborted.

IOS 11.x
시스코 IOS 11.1 버전에서 RADIUS 서버와의 통신을 위해서는 보통 아래와 같이 사용한다.

aaa new-model

aaa authentication ppp radppp if-needed radius
aaa authorization network radius none
aaa accounting network wait-start radius
 
IOS 11.3에서 사용자의 IP 주소가 radutmp 파일이 저장되고 radwho를 통해 볼 수 있게 하기 위해서는 아래 명령을 입력하여야 한다.

aaa accounting update newinfo

 
주의 : 11.3 버전 이후에서는 아래 명령을 사용해야 한다.

radius-server attribute 8 include-in-access-req

 
이는 IOS 11.3에서는 처음 'Start' accounting 패킷을 보낼 때 IP 주소를 보내지 않기 때문이다. 'update newinfo'를 설정해주면 account 'Alive' 패킷을 보내어 정보를 업데이트할 것이다. 또한 로그 파일에서 "deplicates" 관련 로그를 볼 수 있을 것이다. 이는 다음과 같은 명령으로 해결될 수 있다.

aaa accounting network wait radius

radius-server timeout 3
 
Ascend Style
Ascend 스타일 속성을 활성화하기 위해 추천하지는 않지만 non-standard 키워드를 추가한다.

radius-server host X.Y.Z.A auth-port 1812 acct-port 1813 non-standard

 

Cisco VSAs
시스코 디버깅 로그에서 Cisco-AVPair 속성을 보기 위해서는 아래 명령을 추가한다.

radius-server vsa accounting

 
Static Loopback IP
시스코 36/26 (아마도 3600 혹은 2600 시리즈를 지칭하는듯)에서는 시리얼, 이더넷 등에 할당된 IP 주소를 RADIUS 클라이언트 소스 주소로 선택한다. 따라서 클라이언트가 인증된 머신이 아니라는 이유로 RADIUS 서버가 Acsess 요청을 무시할 수도 있다. 따라서 시스코 장비에서 고정된 주소를 사용하도록 다음 설정을 추가하도록 한다.

ip radius source-interface Loopback0

 
그리고 라우터의 루프백 인터페이스를 아래와 같이 설정한다.

interface Loopback0

ip address 192.168.0.250 255.255.255.255
 
IP 주소를 실제 사용하는 것으로 사용하기 바란다. 만일 루프백 인터페이스를 사용하고 싶지 않을 경우에는 IP 주소가 할당된 인터페이스 중 하나에 source-interface를 설정할 수 있다.

Problems
몇몇 보고서에 의하면 Aironet 1200 series AP는 RADIUS를 완전하게 지원한다.

아래 문서들도 참고하기 바란다.

댓글 없음:

댓글 쓰기