Skip to Content
05. Security06. AAA Authentication on Cisco IOS

Cisco IOS에서 AAA 인증

많은 네트워크 장비를 가진 네트워크에서 로컬에 구성된 사용자 이름과 비밀번호는 관리상 악몽이 될 수 있습니다. 사용자 이름을 추가하거나 비밀번호를 변경할 때마다 각 장비에 하나씩 로그인해서 추가하거나 변경해야 합니다.

인증을 위해 중앙 AAA 서버를 사용하는 것이 더 좋습니다. 이 서버에 모든 사용자 이름과 비밀번호를 추가합니다. 라우터와 스위치는 인증을 위해 이 AAA 서버를 사용하도록 구성합니다.

Cisco IOS에서는 인증을 위해 AAA 서버를 정확히 어떻게 사용할지 구성할 수 있습니다. 콘솔이나 VTY 접속에 사용할 수 있을 뿐만 아니라 enable(특권) 모드와 PPP 인증 같은 다른 옵션에도 사용할 수 있습니다.

이 강의에서는 Cisco IOS 라우터에서 AAA 인증을 구성하는 방법을 보여드리겠습니다.


1. 구성

04_AAA Authentication on Cisco IOS_img_p02_01

FreeRADIUS 소프트웨어가 설치된 RADIUS 서버를 사용하겠습니다. FreeRADIUS는 (이름이 의미하듯) 무료이며 구성하기 쉽습니다. 모든 것이 구성되면, 콘솔에 접근하고 특권 모드를 사용하려는 사용자는 RADIUS 서버에서 인증을 받습니다.

토폴로지는 다음과 같습니다.

라우터와 RADIUS 서버가 있습니다. FreeRADIUS 구성부터 시작합시다.

1.1. FreeRADIUS

FreeRADIUS는 Linux에서 실행되며 대부분의 Linux 배포판이 저장소에 가지고 있습니다. 저는 Ubuntu 서버를 사용 중이며 apt-get으로 설치할 수 있습니다.

# apt-get install freeradius freeradius-utils

설치가 완료되면, 기본 구성 파일을 일부 수정해야 합니다. 가장 먼저 새 클라이언트(우리 라우터)를 추가합니다. clients.conf 파일을 텍스트 편집기로 엽니다.

# vim /etc/freeradius/clients.conf

그리고 파일 끝에 다음과 같은 항목을 추가합니다.

client 192.168.1.1 { secret = MY_KEY nastype = cisco shortname = router }

제 클라이언트의 IP 주소는 192.168.1.1(라우터)이고 시크릿은 “MY_KEY”입니다. 나중에 라우터에 이를 구성합니다.

라우터에 접근하려는 관리자가 사용할 사용자 계정을 추가합시다. users 파일을 엽니다.

# vim /etc/freeradius/users

이 파일 끝에 다음과 같은 항목을 만듭니다.

REMOTE_ADMIN Cleartext-Password := "MY_PASSWORD" Service-Type = NAS-Prompt-User

이렇게 하면 사용자 계정 “REMOTE_ADMIN”이 비밀번호 “MY_PASSWORD”로 로그인할 수 있습니다. enable(특권) 모드용 항목도 추가합니다.

$enab15$ Cleartext-Password := "REMOTE_ENABLE" Service-Type = NAS-Prompt-User

enable 모드 접근 비밀번호는 “REMOTE_ENABLE”입니다. users 파일을 저장하고 종료합니다.

이제 변경 사항을 적용하기 위해 FreeRADIUS를 (재)시작해야 합니다.

# /etc/init.d/freeradius restart freeradius stop/waiting freeradius start/running, process 18145

FreeRADIUS는 서비스로 실행되지만, 랩에서 테스트할 때는 디버그 모드로 실행하는 것이 더 쉽습니다. 이를 통해 들어오는 인증 요청을 확인하고 문제가 발생할 때 디버그할 수 있습니다. 이를 위해 먼저 서비스를 중지합니다.

# /etc/init.d/freeradius stop freeradius stop/waiting

이제 디버그 모드로 시작할 수 있습니다.

# freeradius -X

몇 가지 메시지가 출력된 후 요청을 처리할 준비가 되었음을 보여줍니다.

Listening on authentication address * port 1812 Listening on accounting address * port 1813 Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel Listening on proxy address * port 1814 Ready to process requests.

클라이언트가 FreeRADIUS에 인증을 요청할 때마다 콘솔에 표시됩니다.

1.2. Cisco IOS

우리 라우터는 기본적으로 인증을 사용하지 않거나 로컬 인증을 사용하도록 구성되어 있습니다. 이를 변경해야 합니다. 먼저 AAA 명령을 활성화해야 합니다.

R1(config)# aaa new-model

이를 통해 일부 AAA 명령에 접근할 수 있습니다. 사용할 RADIUS 서버를 구성합시다.

R1(config)# radius server MY_RADIUS R1(config-radius-server)# address ipv4 192.168.1.200 auth-port 1812 acct-port 1813 R1(config-radius-server)# key MY_KEY

RADIUS 서버 이름은 원하는 대로 선택할 수 있습니다. 저는 “MY_RADIUS”라고 부르겠습니다. IP 주소를 구성해야 하며, 인증(과 과금) 포트를 지정하는 것이 좋습니다. RADIUS 인증과 과금의 공식 포트는 1812와 1813입니다. IANA가 이 포트를 할당하기 전에는 비공식적으로 1645와 1646 포트가 사용되었으며, 많은 RADIUS 서버/클라이언트가 여전히 이 포트를 사용합니다.

참고: Cisco IOS의 이전 버전은 새 RADIUS 서버를 추가할 때 radius-server 명령을 사용합니다.

이제 라우터가 인증에 우리 RADIUS 서버를 사용하도록 구성할 수 있습니다. aaa authentication 명령을 확인해 봅시다.

R1(config)# aaa authentication ? arap Set authentication lists for arap. attempts Set the maximum number of authentication attempts banner Message to use when starting login/authentication. dot1x Set authentication lists for IEEE 802.1x. enable Set authentication list for enable. eou Set authentication lists for EAPoUDP fail-message Message to use for failed login/authentication. login Set authentication lists for logins. password-prompt Text to use when prompting for a password ppp Set authentication lists for ppp. sgbp Set authentication lists for sgbp. suppress Do not send access request for a specific type of user. username-prompt Text to use when prompting for a username

RADIUS 서버에 사용할 수 있는 것이 꽤 많습니다. 우리는 loginenable을 사용할 것입니다. dot1x는 스위치에서 포트별 인증에 인기 있는 또 다른 선택지입니다(다른 강의에서 다룬 내용입니다).

login 옵션을 살펴봅시다.

R1(config)# aaa authentication login ? WORD Named authentication list (max 31 characters, longer will be rejected). default The default authentication list.

여기서 인증 리스트를 선택해야 합니다. Cisco IOS는 콘솔, VTY 라인(Telnet 또는 SSH), AUX 포트에 default 리스트를 사용합니다. 이 모든 메서드에 AAA 인증을 사용하려면 default 리스트를 사용할 수 있습니다. 콘솔에만 AAA 인증을 사용하고 VTY와 AUX 포트에는 사용하지 않으려면 새 인증 리스트를 사용하는 것이 더 좋을 수 있습니다.

저는 콘솔과 AUX 포트에 AAA 인증이 사용되도록 default 인증 리스트를 사용하겠습니다. VTY 라인을 제외하는 방법도 보여드리겠습니다.

default 리스트 옵션을 살펴봅시다.

R1(config)# aaa authentication login default ? cache Use Cached-group enable Use enable password for authentication. group Use Server-group krb5 Use Kerberos 5 authentication. krb5-telnet Allow logins only if already authenticated via Kerberos V Telnet. line Use line password for authentication. local Use local username authentication. local-case Use case-sensitive local username authentication. none NO authentication. passwd-expiry enable the login list to provide password aging support

먼저 사용할 서버를 구성합니다.

R1(config)# aaa authentication login default group ? WORD Server-group name ldap Use list of all LDAP hosts. radius Use list of all Radius hosts. tacacs+ Use list of all Tacacs+ hosts.

RADIUS 서버가 하나만 구성되어 있으므로 모든 RADIUS 호스트를 선택합시다. RADIUS 서버가 많다면 사용하려는 RADIUS 서버를 포함하는 서버 그룹을 만들 수도 있습니다. 계속해 봅시다.

R1(config)# aaa authentication login default group radius ? cache Use Cached-group enable Use enable password for authentication. group Use Server-group krb5 Use Kerberos 5 authentication. line Use line password for authentication. local Use local username authentication. local-case Use case-sensitive local username authentication. none NO authentication. <cr>
04_AAA Authentication on Cisco IOS_img_p08_01

RADIUS 서버 외에 폴백 옵션을 선택할 수 있습니다. RADIUS 서버에 도달할 수 없는 경우 모든 인증을 실패시킬지, 아니면 라우터의 일부 로컬 사용자 이름과 비밀번호로 폴백할지 결정할 수 있습니다. 로컬 폴백 인증을 추가합시다.

R1(config)# aaa authentication login default group radius local

이 명령은 “먼저 RADIUS 서버로 인증을 시도하고, 서버에 도달할 수 없으면 로컬 데이터베이스를 사용”하라는 뜻입니다. RADIUS 서버가 응답하되 자격 증명이 잘못된 경우에는 로컬로 폴백하지 않습니다 — 오직 서버 자체에 접근 불가일 때만 폴백합니다.

폴백용 로컬 사용자 계정을 만들어 둡시다.

R1(config)# username BACKUP_ADMIN secret BACKUP_PASSWORD

운영 환경에서는 이 계정의 비밀번호를 엄격히 관리하고 로테이션해야 합니다.

1.3. enable 인증

콘솔·VTY 로그인 인증 외에 enable(특권) 모드 진입도 AAA로 처리할 수 있습니다.

R1(config)# aaa authentication enable default group radius enable

이렇게 하면 enable 명령을 입력할 때 RADIUS 서버에 인증을 요청하며, RADIUS 서버가 응답하지 않으면 로컬 enable secret으로 폴백합니다. FreeRADIUS의 users 파일에 만들어둔 $enab15$ 계정이 여기에 쓰입니다.

1.4. VTY 라인 제외

콘솔·AUX에는 AAA를 쓰되 VTY(SSH/Telnet)에는 별도 동작을 원한다면, named authentication list를 만들어 VTY에만 적용합니다.

R1(config)# aaa authentication login VTY_LOCAL local R1(config)# line vty 0 4 R1(config-line)# login authentication VTY_LOCAL

default 리스트는 VTY에도 자동 적용되지만, 라인별로 login authentication <list-name>을 지정하면 그 라인은 지정한 리스트를 우선 사용합니다. 위 예제에서는 VTY만 로컬 데이터베이스를 사용합니다.

1.5. 검증

구성이 제대로 되었는지 test aaa 명령으로 실제 서버에 요청을 보내 볼 수 있습니다.

R1# test aaa group radius REMOTE_ADMIN MY_PASSWORD new-code User successfully authenticated USER ATTRIBUTES username 0 "REMOTE_ADMIN" service-type 0 7 [NAS Prompt]

FreeRADIUS 서버의 디버그 출력(freeradius -X)에서도 Access-Request와 Access-Accept 메시지를 확인할 수 있습니다.


2. AAA 과금(Accounting)

과금은 “누가, 언제, 무엇을 했는가”를 AAA 서버에 기록하는 기능입니다. 감사 추적(audit trail)과 청구(billing)에 사용됩니다.

R1(config)# aaa accounting exec default start-stop group radius R1(config)# aaa accounting commands 1 default stop-only group radius R1(config)# aaa accounting commands 15 default stop-only group radius R1(config)# aaa accounting connection default start-stop group radius R1(config)# aaa accounting system default start-stop group radius

각 명령의 의미는 다음과 같습니다.

  • exec: 사용자가 exec 세션을 시작하거나 종료할 때 기록 (로그인/로그아웃 타임스탬프)
  • commands 1 / commands 15: 지정한 권한 레벨 명령이 실행될 때마다 기록 (레벨 15면 모든 설정 변경 추적)
  • connection: outbound 연결(Telnet, SSH 클라이언트 등) 발생 시 기록
  • system: 장비 재부팅, AAA 재구성 같은 시스템 레벨 이벤트 기록

start-stop은 이벤트 시작과 종료 모두 기록, stop-only는 종료만 기록합니다. 명령 실행은 단일 이벤트라 stop-only로 충분합니다.

참고: 과금은 RADIUS보다 TACACS+ 가 세밀한 명령 단위 추적에 더 적합합니다. 운영 환경에서 관리 접근을 감사해야 한다면 TACACS+ 사용을 고려하세요.


3. 결론

  • AAA 서버를 쓰면 모든 장비의 사용자 계정을 중앙 집중 관리할 수 있습니다.
  • aaa new-model → RADIUS/TACACS+ 서버 정의 → aaa authentication 리스트 순으로 구성합니다.
  • 항상 로컬 폴백 계정을 둬서 AAA 서버 장애 시 락아웃을 방지하세요.
  • default 리스트는 모든 라인에 적용되고, named list로 라인별 정책을 분리할 수 있습니다.
  • 과금(accounting)으로 감사 추적을 남길 수 있습니다.

출처: networklessons.com - AAA Authentication on Cisco IOS

태그: 802.1X, AAA, Security