본문 바로가기
I T/Network

AAA 에 대하여 RADIUS,TACAS

by 루솨 2016. 11. 3.



설명이 잘 되어 있어서 와룡의 네트워크 카페에서 퍼옴

링크 주소 : http://cafe.naver.com/netsmaster/13149


============================================================================


안녕하세요 와룡입니다. 네트워크 보안쪽에 첫 발을 디디신 것 축하드립니다.

 

저 또한 처음 AAA를 접했을때 레이너님과 똑같은 생각을 했답니다. 하지만 한번만 제대로 이해하면 AAA만큼 쉽고

 

명확한것도 없답니다. 제가 요즘 주력하고 있는 보안쪽이라^^ 복습할겸 조금 길게 써보겠습니다^.^;;

 

먼저 AAA라고 하면 인증(Authentication) 인가(Authorization) 어카운팅(Accounting) 을 뜻합니다.

 

보안의 한 방법이죠,

 

인증이라 함은 어떤 접근자가 올바른가 아닌가를 따지는겁니다. 즉...올바른 사용자냐 아니냐를 따지는거죠.

 

인가는 위에서 사용자에 대한 인증을 마쳤다면, 그 사용자가 어느정도 레벨의 권한을 가지느냐를 따집니다.

   

         만약 레벨 5의 권한을 가졌다면 그건 5에 해당하는 능력밖에 발휘하지 못하죠.

 

어카운팅은 위에서 인증받은 사용자가 무슨 동작을 하는지 기록하는겁니다. 그래서 그걸 AAA서버로 보내죠.

   

조금 더  쉽게 생각해보죠. 온라인 게임 WOW을 예를 들어보죠. 우리가 맨 처음 로그인을 하죠?

 

그건 우리가 WOW의 유저가 맞느냐 아니냐를 따지는겁니다. WOW 회원이 아닌데도 게임에 접근할 수는 없겠죠??

 

그래서 그부분은 인증입니다.

 

그래서 인증한 후 들어가고 나면, 우리는 유저의 권한을 부여 받습니다. 아이템을 가지려면 몬스터를 사냥해야하고...

 

레벨을 올려야 합니다. 즉 운영자의 권한까진 부여받지 못합니다. 그런데 따지고 보면 운영자도 WOW서버에 접속할 땐

 

ID / Password를 쳐서 인증을 받지 않습니까? 우리도 마찬가지구요 근데 누구한텐 운영자 권한을 주고 누구한텐 고작

 

유저권한을 주고...ㅇㅇ..이런거죠 이렇게 권한에 대한 차등을 두는게 인가입니다.

 

어카운팅...우리가 몹을 잡고 혹은 로그아웃을 하고 등등...여러가지 우리가 하는 일들을 WOW 에서는 모두 기록하고 있죠?

 

몹을 몇마리잡고 경험치 어떻고 등등등...우리가 하는 여러 행동들을 적는것이 바로 어카운팅이죠. 적어서 어떤 로그만을

 

모으는 서버(ex)syslog Server)로 보내던가 WOW 서버에서 직접 관리하겠죠.

 

조금 이해가 편하신가요?^^ 꼭 이런건 아니지만 이런식으로 생각하시면 쉽다는 거예요^^

 

이들은 각각 독립적이면서도 밀접하게 관련되어 있답니다.  독립적이라 함은 꼭 3개를 다 쓸 필요는 없다는 겁니다.

 

예를 들면 우리가 A 라는 서버에 접속을 하기 위해서는 그 바로 앞에 있는 B라는 라우터에게 ID/Password 인증을 받아야

 

한다고 가정하죠. 그럴 경우 그 B라우터는 꼭 인가나 어카운팅을 구현할 필요는 없습니다.

 

하지만 웹 사이트...무슨 cdpkorea.com 이런데 접속할 경우 역시 인증(로그인)과 인가(레벨,권한) 그리고 어카운팅(로그인 기록, 글쓰기 기록 등등)이 모두 필요하다는 것을 알수 있죠

 

이쯤 하면 AAA가 뭔지 감이 오실겁니다.

 

AAA는 서버--클라이언트 구조를 가집니다. 도데체 이게 뭐냐...라고 하실지 모르겠지만...

 

AAA서버는 위에서 말한 인증,인가,어카운팅의 역할을 전문적으로 해주는 서버입니다. 그러니까 WOW는

 

WOW 게임의 내용이 들어있는 WOW서버, AAA기능을 위한 AAA서버 이런식으로 연계되어 동작한다는거죠.

 

그럼 AAA클라이언트는 누굴까요? 와우 게임의 사용자일까요?? 아니죠....위의 예에서 AAA클라이언트라 함은

 

AAA서버에게 서비스를 받는 녀석...즉 WOW서버나 그 앞에 있는 어떤 보안 장비겠죠. 그 장비는 고객이 ID/Password를

 

넣으면 그 ID/Password가 맞는것인지를 확인하기 위해 AAA서버에게 질의를 합니다. 그러면 AAA는 어떤 대답을 내려주죠

 

그래서 AAA클라이언트는 AAA서버에게 서비스를 받는 어떤 장비가 되는것입니다. 절대 최종단의 고객이 아닙니다.

 

 

 

그럼 약간만 디테일하게 들어가서 인증/인가/어카운팅이 어떤 메커니즘을 가졌는지 살짝 볼게요. 아주 얕게..6^^;;

 

인증은 항상 이런 난제를 던져줍니다. '좀 더 강력한 인증방법 없냐~~'라구요 ID/password로 인증하는 방법은 이미 해킹에

 

약하다는게 입증되었죠. 이런 인증 방법을 사용자가 아는 것을 이용한 인증 이라합니다. 사용자 머릿속에 있는 요소를 끌어내

 

인증 수단으로 쓰는거죠. 용어는 외우실 필요 없구요 이해만 하세요.

 

그래서 나온게 사용자가 가지고 있는 인증 입니다. 그건 카드(신용카드 체크카드 등)가 좋은 예겠네요.

 

사용자가 가진 유일한 물건을 통해 하는 인증입니다. 이것은 위의 사용자가 아는 것을 이용한 인증법보다 강력합니다.

 

하지만 이런 인증방법도 카드를 도둑맞으면 말짱 도로묵입니다. 뽀....린...다..라고 하죠...네;;뽀려서 쓰면 끝입니다-_-v;

 

그래서 요즘은 이런 방법들을 극복하기 위해 이중 인증(Two-Factor-Authentication)을 사용합니다. 여러분의 카드를 잘 보세요

 

여러분만이 가진 유일한 물건 + 여러분만이 아는 내용을  바로 인증의 요소로 사용하고 있는거죠.

 

그리고 그밖에 무슨 지문인식, 홍채인식, 목소리 인식 등등의 방법도 나오게 되었죠. 이런걸 생체 인증? 이라고 합니다.

 

(이건 제가 지어낸 것이니 어디가서 생체인증이라고 하시다가 쪽팔리셔도 책임안집니다-_-;+)

 

 

자..그럼 이제 인가를 볼까요?

 

위에서 생체인증이든 로그인이든 뭐든 해서 인증을 마친 사용자가 있다고 합시다.

 

이제 이넘한테는 권한을 주어야 합니다. 근데 그 권한은 마음대로 주는게 아니라 미리 정의가 되어 있습니다.

 

그 정의를 AV 라고 하는데요...남자분들 야한거 생각하지 마시구요;;ㅋ;;이때 AV라는 건 Attribute-Value의 약자입니다.

 

이게 미리 AAA서버 안에 저장이 되어 있다가, AAA 클라이언트들( 위에서 말했듯, AAA 서비스를 사용하는 장비들...

 

을 뜻합니다.)에게 AV 쌍을 돌려주는거죠. 그러면 그것을 보고 장비는 각 사용자들에게 (인가) 권한을 부여하게 되는겁니다.

 

 

어카운팅...이건 위랑 반대입니다. 잘 생각해보세요. 인증이나 인가는 미리 정의된 목록이 있습니다. 그 목록은 서버안에

 

고이 잘 모셔져 있죠. (인가의 경우)AV라는 쌍으루요. 그 목록을 만드는건 서버측입니다. 하지만 어카운팅은???

 

어카운팅은 클라이언트쪽에서 만들어서 AAA서버에 보내주는겁니다. 그럼 서버는 그 기록들을 차곡 차곡 쌓아 나가는거죠.

 

자..그래서 어카운팅은 AV 쌍을 서버쪽으로 보내게 됩니다. 그래서 서버가 어카운팅 AV쌍을 수집하게 되죠.

 

이를 중앙집중방식이라고 하는데 뭐 외울필요 없이 이해하면 됩니다.^^

 

 

 

그러면 AAA 보안 프로토콜에는 뭐뭐 있는지 알아볼까요? 이제부터 시스코 장비를 기준으로 들어가겠습니다.

 

Cisco AAA 장치에서는 프로토콜 인자로 일반적으로 RADIUS, TACACS+, Kerberos등을 사용합니다.

 

케르베로스는 다음에 기회가 되면 설명하기로 하고 오늘은 라디우스와 타카스에 대해서만 설명하도록 하겠습니다.

 

 

아..근데 이게 뭔질 모르시겠다구요??

 

흠...간단하게 설명해보면 AAA를 구현하기 위해서 AAA를 정의했다면(#aaa new-model-aaa를 사용하겠다~라는 뜻)

 

이제 인증,인가,어카운팅을 어떤 방식으로 수행할 것이냐...tcp를 사용하냐 udp를 사용하냐 부터 시작해서 여러가지 방법이

 

있을겁니다. 예를 들면 CPU를 만드는데 AMD와 Intel 두회사의 아키텍쳐는 완전히 다릅니다. 하지만 어쨌든 둘다 컴퓨터의

 

CPU로서의 서비스는 해내고 있습니다. 뭐 전력을 아끼려면 인텔을, 돈을 아끼려면 AMD를 이런식으로 사용자가 상황에

 

맞게 수행인자를 고르는 것이라 생각하시면 쉽겠네요.

 

간단한 특징만 보죠.

 

RADIUS(Remote Access Dial-in Service)는 TACACS+에 비해 cpu부하, 메모리 사용량이 적습니다. 그리고 대형부터 소형까지 모든 네트워크에 쓰일 수 있죠. 서버-클라이언트 구조구요. 인증.인가.어카운팅이 필요할 시 RADIUS Server로 질의를 요청합니다.

 

TACAS(Terminal Access Controller Access System)는 tcp 포트 49번을 사용합니다. 흠..역시 서버-클라이언트 구조구요.

최신 버전은 tacacs+입니다. 원래 있던 tacacs 는 인증만을 처리가능했었지만 tacacs+는 AAA를 구현할 수 있죠.

TCP를 사용하니까 아무래도 트래픽에 손실에 대해선 안정되어 있겠죠?^^.~

또하나 중요한 특징은 이녀석은 AAA구조가 개별화 되어 있다는겁니다. 그래서 개별적으로 설정이 가능하죠.

 

 

 

자 그러면 이제 명령어 체계를 한번 볼게요. 진짜 처음엔 눈 팽팽 돌아가는데 나중에 체계만 이해하면

 

진짜 쉬워요^^ 클라이언트 쪽에서 설정입니다.

 

전체적인 순서는 다음과 같습니다.

 

AAA활성화 -> AAA서버 지정(key같이 지정) -> 인증 방법/인증순서 정의 -> 인가방법/인가순서 정의 -> 어카운팅 정의

 

꼭 이게 전부는 아니지만 이정도만 해봐도 감이 오실거예요^^

 

Router(config)#aaa ?     
  accounting      Accounting configurations parameters.   -----> 어카운팅 기능
  authentication  Authentication configurations parameters. ---> 인증
  authorization   Authorization configurations parameters.   ----> 인가
  new-model       Enable NEW access control commands and functions.(Disables OLD commands.)
(생략)

 

먼저

Rack03SW2(config)#aaa new-model 

이 명령어로 AAA를 활성화 시킵니다.

 

AAA 서버 지정

우리는 tacas를 사용하기로 합니다.

 

Router(config)#tacacs-server ?
  administration    Start tacacs+ daemon handling administrative messages
  directed-request  Allow user to specify tacacs server to use with `@server'
  dns-alias-lookup  Enable IP Domain Name System Alias lookup for TACACS
                    servers
  host              Specify a TACACS server --->서버의 IP를 지정할때...상세한 타카스 서버의 주소를 쓰겠다~는 뜻!
  key               Set TACACS+ encryption key.
  packet            Modify TACACS+ packet options
  timeout           Time to wait for a TACACS server to reply

 


Router(config)#tacacs-server host 201.1.1.1 ?
  key                per-server encryption key (overrides default)
  nat                To send client's post NAT address to tacacs+ server
  port               TCP port for TACACS+ server (default is 49)
  single-connection  Multiplex all packets over a single tcp connection to
                     server (for CiscoSecure)
  timeout            Time to wait for this TACACS server to reply (overrides
                     default)
  <cr>

 

Router(config)#tacacs-server host 222.222.11.14 key cisco

               --> Tacas서버의 IP주소와 key도 함께 정해줍니다.

 

이때 key는 AAA서버와 클라이언트가 서로 서버-클라이언트로 동작하는 사이인것을 증명하기 위해 쓰는 키입니다.

이 키는 항상 양쪽이 같아야 합니다.

 

이제 인증을 정의해볼까요??

 

Router(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.
  enable           Set authentication list for enable.
  fail-message     Message to use for failed login/authentication.
  login            Set authentication lists for logins. --> 우리는 login 인증에 대해 설정하겠습니다.
  password-prompt  Text to use when prompting for a password
  ppp              Set authentication lists for ppp.
  sgbp             Set authentication lists for sgbp.
  username-prompt  Text to use when prompting for a username

 

Router(config)#aaa authentication login ?
  WORD     Named authentication list.   ---> 특정 라인에만 인증정책을 지원하고자 할때는 이렇게 따로 리스트를 만들어 적용..
  default  The default authentication list. --> Telnet(vty), aux, console 모두에게 동일한 인증정책을 주고 싶을땐 default....

  우리가 만약 텔넷라인에만 인증정책을 걸길 원했는데 default를 사용하면 원치않게 console이나 aux에 영향을 주게 되죠.

  그때는 아래처럼 인증 리스트를 만들어야 합니다.

  AUTHEN_LIST라는 인증 리스트를 만들어 볼게요(대문자는 웬만하면 이름입니다)

 

Router(config)#aaa authentication login AUTHEN_LIST ?  
  enable       Use enable password for authentication. ------> 이 장비의 enable password를 그냥 인증수단으로 삼겠다...

  group        Use Server-group  ----> Radius나 tacacs같은 서버그룹의 도움을 받겠다.
  krb5         Use Kerberos 5 authentication. ---> 케르베로스5-telnet의 도움을 받겠다.
  krb5-telnet  Allow logins only if already authenticated via Kerberos V
               Telnet.
  line         Use line password for authentication. ---> 라인 비밀번호를 인증수단으로~~
  local        Use local username authentication. --> 이 장비에 설정된 username/password을 인증수단으로~~~
  local-case   Use case-sensitive local username authentication. 
  none         NO authentication. --> 인증안해~!

 

위의 내용은 인증수단입니다. 각 옵션들 뒤에 설명은 붙여두었구요...저희는 타카스를 사용해보죠..그럼 group을 써야겠군요

 

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

 

Router(config)#aaa authentication login AUTHEN_LIST group tacacs+

 

그런데..만약에 타카스와 연결이 끊겼다면 그땐 어떻게 할까요?? 그래서 제 2의 인증수단을 설정할 수 있습니다

바로 tacacs+ 뒤에 다음 인증 수단을 적어주면 되죠...그 뒤에 3번째 인증수단도 적을수 있습니다.

이걸 바로 인증 순서를 정하는거라고 합니다.

 

Router(config)#aaa authentication login AUTHEN_LIST group tacacs+  ?
  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>

 

Router(config)#aaa authentication login AUTHEN_LIST group tacacs+  local ?
  enable  Use enable password for authentication.
  group   Use Server-group
  krb5    Use Kerberos 5 authentication.
  line    Use line password for authentication.
  none    NO authentication.
  <cr>

 

Router(config)#aaa authentication login AUTHEN_LIST group tacacs+  local enable

 

이렇게 되면 이녀석은 AHTHEN_LIST라는 인증 목록을 만들고 그 목록이 정의하고 있는 인증방법은

서버 그룹의 도움을 받는것이며 인증순서는 처음에 tacacs+에게 인증받고 tacacs+와 연결이 불가할 시

local데이터베이스의 username과 password를 사용하며 그것도 없을땐 enable password를 사용하라 가 됩니다.

 

설명은 긴데 크게 어려운게 없죠??

 

그다음은 인가입니다.

 

역시 인가도 telnet line에만 영향을 주고 다른 라인에는 영향을 주기 싫기 때문에

인가 리스트를 만들도록 하죠. 그리고 인가는 타카스 그룹에게 받도록 하겠습니다.

 

Router(config)#aaa authorization ?
  exec             For starting an exec (shell). ---> 사용자가 exec쉘을 실행할 권한이 있는지 인가~privilidge Level 과 맞물림

  commands <0~15> For exec (shell) commands.--> 뒤에 올 0~15사이 exec level에서 실행되는 모든 커맨드를 인가~

  network         For network services,(PPP,SLIP,ARAP)--> ~ALL network Service에 대해 인가
(생략)

우리는 텔넷라인으로 들어온 사용자에 대해 exec-shell에 대해 인가한다고 가정해보죠~

 

 

Router(config)#aaa authorization exec ?
  WORD     Named authorization list.  --> 리스트 만듦
  default  The default authorization list.

 

Router(config)#aaa authorization exec ATHOR_LIST group tacacs+ local

 

인증처럼 인가도 AUTHOR_LIST라는 리스트를 만들고 이 리스트에는 인증방법:tacacs를 이용 하는것과

인증 순서:tacacs->local 이라는 내용이 들어있다~라고 만들었습니다.

 

 

그럼 마지막으로 어카운팅입니다.

 

Router(config)#aaa accounting ? (자주쓰이는 포인트 몇개를 찍겠습니다)
  auth-proxy        For authentication proxy events.
  commands          For exec (shell) commands.--> 해당레벨의 모든 로그를 기록
  connection        For outbound connections. (telnet, rlogin)
  delay-start       Delay PPP Network start record until peer IP address is
                    known.
  exec              For starting an exec (shell).-->exec shell 에 대해 어카운팅(사용자 셀)
  gigawords         64 bit interface counters to support Radius attributes 52 &
                    53.
  nested            When starting PPP from EXEC, generate NETWORK records
                    before EXEC-STOP record.
  network           For network services. (PPP, SLIP, ARAP) -->모든 네트워크 관련 서비스 요청에 대한 어카운팅
  resource          For resource events.
  send              Send records to accounting server.
  session-duration  Set the preference for calculating session durations
  suppress          Do not generate accounting records for a specific type of
                    user.
  system            For system events. ---> 모든 시스템 관련 이벤트를 어카운팅
  update            Enable accounting update records.

 

우리는 exec-level6 (priviligide leve 6가 설정되어 있다고 가정) 에서 사용되는 커맨드에 대해 모두 어카운팅 하기로

해봅시다.

 

Router(config)#aaa accounting exec MY_ACCOUNT ?
  none        No accounting.
  start-stop  Record start and stop without waiting

     --> 사용자 프로세스의 시작시,종료시에 어카운팅 통보가 어카운팅 서버로 전송.
  stop-only   Record stop when service terminates.

     --> 종료시에만 어카운팅을 서버로 통보

 

Router(config)#aaa accounting exec MY_ACCOUNT start-stop group ?
  WORD     Server-group name
  radius   Use list of all Radius hosts.
  tacacs+  Use list of all Tacacs+ hosts. -->우린 타카스 쓰기로 했죠?

Router(config)#aaa accounting exec MY_ACCOUNT start-stop group tacacs+

 

어카운팅은 My_ACCOUNT라는 리스트를 만들었고 이는 세션의 시작과 종료시에 타카스 서버로 어카운팅을 통보하는

내용을 정의하고 있다~라고 할 수 있겠군요

 

그럼 지금까지 우리가 만든 3가지 AAA의 리스트를 한번 볼까요?

 

Rack03SW2(config)#aaa new-model

Router(config)#aaa authentication login AUTHEN_LIST group tacacs+  local enable (인증)

Router(config)#aaa authorization exec ATHOR_LIST group tacacs+ local  (인가)

Router(config)#aaa accounting exec MY_ACCOUNT start-stop group tacacs+ (어카운팅)

 

이렇게 각 AAA정책 리스트가 만들어졌습니다. 그럼 이제 이 3개의 AAA리스트를 텔넷라인 , line vty에 한번 적용해보죠

적용을 안하면 아무 의미없죠^^;;

 

텔넷으로 들어오는 사용자에 대해서는 앞으로 저 3가지 리스트의 AAA정책이 동작하게 됩니다~~~

 

Router(config)#line vty 0 4

Router(config-line)#login authentication ?
  WORD     Use an authentication list with this name.--->위에서 우리가 만든 AUTHEN_LIST를 적용하면 됩니다.
  default  Use the default authentication list.

Router(config-line)#login authentication AUTHEN_LIST---> 이제 인증 정책은 시행됩니다.

 

Router(config-line)#authorization exec ?
  WORD     Use an authorization list with this name --> 위에서 우리가 만든 AUTHOR_LIST를 적용하면 되죠
  default  Use the default authorization list

 

Router(config-line)#authorization exec AUTHOR_LIS  --> 이제 인가 정책도 적용되었습니다.

 

Router(config-line)#accounting exec MY_ACCOUNT --> 마찬가지로 어카운팅도 적용시킵니다.

Router(config-line)#exit                       
Router(config)#

 

위에서 인증은 login으로 했으니 밑에 적용시에도 로그인 부분에 인증을 걸은거죠.

또 AUTHOR과 ACCOUNTING은 exec 쉘에 대해 리스트를 만들었으니 당연히 exec에 대해 적용을 시킨겁니다.

각각 정책에 맞게 적용시켜야죠^^~~

 

이거 말고도 사실 무진장 많은 기능이 있으나..이게 기초가 되는 기능입니다.

 

궁금증이 좀 풀리셨으면 좋겠네요^^ 홧팅입니다~~

 

질문은 댓글로~~달아주세요