호빗의 인간세상 탐험기

CBAC, PAM 의 이해와 예시 본문

IT이야기

CBAC, PAM 의 이해와 예시

딜레이라마 2017. 3. 19. 21:29
반응형

CBAC (Context-based Access Control)

 

Reflexive ACL은 오직 단일 채널 어플리케이션만 제어할 수 있다. 이러한 문제점 때문에 기업 네트워크에서 많은 제한을 가지고 올 수 있다.
이 문제를 해결하기 위해서 나온 것이 바로 CBAC이라는 기능이다.

 

- CBAC은 외부로 나가는 세션을 검사하여 그 트래픽에 대한 응답 트래픽을 위한 임시 항목을 생성한다. 마치 Reflexive ACL과 비슷하게 생각되지만, CBAC은 Reflexive ACL보다 다양한 어플리케이션 계층 정보를 검사하고 안전하게 정의하는 점에서 차이가 있다.

 

- CBAC은 연결을 제대로 처리하려면 각 연결의 상태를 끊임없이 모니터링을 실시 하기 때문에 Stateful 상태감시 검사법이라고 한다.

즉, 어떠한 트래픽을 정의하여 이 트래픽이 특정 인터페이스를 통해 네트워크 외부로 나가는 경우 CBAC은 그 트래픽에 대한 응답 트래픽이 내부 네트워크로 들어갈 수 있도록 임시 항목을 생성한다는 것이다.
이때 임시 항목은 Reflexive ACL과 마찬가지로 응답 트래픽을 허용하며, 초기 트래픽과 같은 세션에 속하는 추가 데이터 채널이 라우터를 통해 내부 네트워크로 들어올 수 있도록 한다.

 

- CBAC은 네트워크와 전송 계층은 물론 어플리케이션 계층 프로토콜까지 검사하여 TCP/UDP의 세션 정보를 검사한다. 일부 프로토콜은 제어 채널을 통해 교환한 정보를 이용하여 추가적인 채널을 연다.
그렇기 때문에 IP와 전송 계층정보만 가지고 이런 프로토콜을 필터링할 수 없었지만, CBAC은 가능하다.

즉, CBAC은 외부로 나가는 세션 정보를 검사하여 응답 트래픽이 되돌아 오기 위한 임시 ACL 항목을 생성하며, 7계층 어플리케이션까지의 정보에 기반한 결정을 내릴 수 있다.

 

- CBAC을 사용할 경우 패켓은 인터페이스에 들어갈 때나 나올 때 검사되며 세션 정보는 패켓 상태 정보 테이블에 저장된다. 이 정보는 IP 주소와 4계층 포트 번호를 포함한다.
또한, CBAC은 라우터가 어떤 ACL이 응답 트래픽을 거부해야 할 지 자동으로 결정한 다음 임 ACL 항목을 ACL의 맨 첫 줄에 추가한다. 그리고 어플리케이션 계층 정보를 검사하여 응답 트래픽의 허용/거부 여부를 결정한다.

 

- Reflexive ACL에서는 FTP에 대해서 처리할 때에는 Passive Mode로 동작할 수 밖에 없는 제한이 있었지만, CBAC에서는 일반 FTP Mode에서도 트래픽에 대한 접근 제어가 가능하다.
즉, 외부로 나가는 세션을 모니터링 한 뒤에 서버에서 클라이언트로 맺는 연결을 허용하기 위한 임시 ACL 항목을 생성하여 동작하게 된다.

 

- CBAC은 출발지/목적지 주소가 라우터의 주소로 설정된 패켓은 검사하지 않는다. 그리고 CBAC은 오로지 TCP/UDP 패켓만 검사하기 때문에 라우터 자체가 주고 받은 패켓은 CBAC으로 제어할 수 없다.

 

- CBAC은 IPSec 트래픽을 검사할 수 없다. 만약, IPSec 트래픽을 검사해야 한다면 라우터를 IPSec 터널 종단으로 구성해야 한다.

 

- UDP/ICMP 트래픽은 비 상태 감시 프로토콜이기 때문에 CBAC은 이들 프로토콜의 세션에 대한 상태 정보를 추적할 수 없다. UDP 응답 패켓은 일정 시간 후에 만료되는 임시 ACL 항목으로 제어가 가능하지만, ICMP는 반드시 확장 ACL 명령어로 허용/거부되어야 한다. 즉, CBAC은 ICMP 제어 기능을 제공하지 않는다.

 

CBAC Process

 

하나의 장비에 두개의 인터페이스가 있다고 가정을 한다.
2개의 인터페이스 중에 Ethernet 0 인터페이스 쪽은 네트워크가 우리가 보호하고자 하는 내부 네트워크에 연결되어 있고, Serial 0 인터페이스 쪽은 외부 네트워크에 연결되어 있으며, 이때 ‘Outbound Traffic’은 내부 네트워크에서 외부 네트워크로 나가는 트래픽이고, ‘Inbound Traffic’은 외부 네트워크에서 내부 네트워크로 흘러 들어오는 트래픽이라고 가정하여, CBAC 처리과정에 대해서 알아보도록 하자.

 

- 외부로 나가는 패켓이 라우터에 도착하면 라우터는 아웃바운드 ACL을 이용해 그 패켓을 검사한다. 만약, ACL에 그 트래픽을 허용하면, 이제 CBAC은 그 트래픽을 검사할 수 있다. 그렇지 않다면 패켓은 드랍될 것이고 CBAC은 패켓을 검사하지 않을 것이다.

 

- CBAC 검사 과정 동안, 출발지/목적지 IP 주소와 포트 번호를 포함한 정보가 기록된다. 이 정보는 새 연결을 위해 생성된 상태 테이블 항목에 기록된다. 이 상태 정보에 기반한 임시 ACL 항목이 생성된다. 이 ACL 항목은 인바운드 트래픽을 필터링 하도록 설정되어 있는 Extended ACL의 맨 앞에 위치하게 된다.

 

- 이 임시 ACL 항목은 앞에서 검사한 아웃바운드 패켓과 같은 연결에 속한 인바운드 패켓을 허용하도록 되어있다. 이제 아웃바운드 패켓이 인터페이스 밖으로 빠져나간다.

 

- 응답 패켓이 돌아오면 인바운드 ACL의 검사를 받게 되는데 CBAC이 생성한 임시 ACL 항목이 있기 때문에 접근이 허용된다. 여기서 CBAC은 필요할 경우 상태 테이블과 인바운드 ACL 목록을 수정한다.
그 이후로, 전송되는 모든 인바운드 아웃바운드 트래픽은 이 ACL 항목과 비교된다. 그리고 상태 테이블 접근 목록은 필요할 경우에 계속 수정된다. 연결이 끝나면 상태 테이블 항목과 임시 ACL 항목이 삭제가 된다.

 

CBAC Example

 

인터넷으로 나가는 모든 아웃바운드 IP 트래픽을 허용한다. 만약 누군가가 내부 네트워크에서 VPN 연결을 하는 것을 막고 싶다면 TCP, UDP, ICMP를 제외한 모든 IP 트래픽을 거부하면 된다.

R1(config)# ip inspect name TEST_CBAC tcp
R1(config)# ip inspect name TEST_CBAC udp
R1(config)# ip inspect name TEST_CBAC ftp
R1(config)# ip inspect name TEST_CBAC http
R1(config)# ip inspect name TEST_CBAC realaudio
R1(config)# ip access-list extended OUTBOUND
R1(config-ext-nacl)# permit ip 192.168.1.0 0.0.0.255 any
R1(config-ext-nacl)# exit
R1(config)# ip access-list extended INBOUND
R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 echo-reply
R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 traceroute
R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 time-exceeded
R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 unreachable
R1(config)# interface ethernet 0/0
R1(config-if)# ip inspect TEST_CBAC in
R1(config-if)# ip access-group OUTBOUND in
R1(config)# interface serial 0/0
R1(config-if)# ip access-group INBOUND in

 

- CBAC은 인터넷으로 나가는 모든 트래픽에 대한 응답 패켓이 내부 네트워크로 되돌아 올 수 있도록 한다. 앞의 CBAC 설정에는 구체적으로 FTP, HTTP, Real-audio 트래픽을 검사하라는 설정을 하였다.
그 이유는 내부 네트워크 사용자가 이들 프로토콜을 이용하는 어플리케이션을 사용하고 있기 때문이다.

 

- 그리고 설정 마지막 부분에는 ICMP 트래픽에 대해서 라우터로 되돌아 오는 것을 허용하였다. 이렇게 한 이유는 네트워크 문제가 발생됐을 때 그 원인을 파악하기 위해서 관리목적상으로 설정하였다.
내부 네트워크 사용자는 인터넷에 있는 다른 사용자가 내부 호스트에 Ping 테스트를 원하지는 않지만, 내부 네트워크 사용자가 인터넷에 보낸 Ping과 Traceroute에 대한 응답은 받아 들이길 원하기 때문에 설정이 필요하다.

 

- 또한, ICMP 트래픽을 허용하면 Ping에 대한 응답 패켓 이외에도 패켓의 TTL이 만료된 때가 언제인지, 그리고 인터넷의 어딘가에서 라우팅 또는 접근 문제가 있어서 접근이 불가 되었다는 정보도 얻을 수 있다.

 

- ‘show ip inspect config’, ‘show ip inspect interfaces’ Command를 이용하여 CBAC 관련 정보 확인이 가능하다.

 

 

PAM (Port to Application Mapping)

 

PAM(Port to Application Mapping)은 CBAC의 단점인 오직 표준 포트에서 동작하는 서비스만을 제어할 수 있는 문제를 해결하였다.

 

- 한 예로, HTTP 포트(80번)가 아닌 포트에서 동작하는 웹-서버로 가는 트래픽은 CBAC으로 검사하거나 보호하는 것이 불가능하다. 그러나 PAM을 사용하여 네트워크 서비스 및 어플리케이션이 사용하는 TCP/UDP 포트를 커스터마이징을 할 수 있다.

 

- PAM이 동작하는 첫 과정은 어플리케이션과 기본 포트를 연결하여 PAM 테이블을 생성한다. 이 테이블 안에는 CBAC이 지원하는 모든 서비스가 동일하게 포함되어 있다. 바로 이 부분이 CBAC과 PAM이 연결되는 부분이다.

 

- 즉, CBAC은 PAM에 있는 정보를 이용하여 비 표준 포트에서 동작하는 서비스를 지원할 수 있다. 만약, 비 표준 포트에서 어플리케이션을 운영하고 있다면, PAM과 CBAC을 함께 사용하여 그러한 어플리케이션이 사용하는 포트를 구분할 수 있다. 그렇기 때문에, CBAC은 PAM이 없다면 표준 포트와 그 어플리케이션만을 지원할 수 밖에 없을 것이다.

 

- 비 표준 포트를 사용하는 네트워크 서비스나 어플리케이션이 있다면 수동으로 PAM 테이블에 포트를 설정해야 한다. 그리고 특정 어플리케이션이 사용하는 포트 범위도 입력할 수 있다. 이렇게 하려면 포트 범위에 속한 각 포트를 PAM 테이블에 개별 항목으로 추가해야 한다.

 

- 라우터 설정을 저장하면 모든 수동으로 입력한 항목은 기본 매핑 정보와 함께 저장되며, 만약 비 표준 포트를 사용하는 어플리케이션을 갖고 있다면, 그 포트를 PAM 테이블에 수동으로 설정해야 한다.

 

PAM 설정

 

- Router(config)# ip port-map [Application_Name] port [Port-Number]
- Router(config)# ip port-map [Application_Name] port [Port-Number] [ACL List]

 

PAM Example

 

- Telnet 기본 포트 23번을 8000번으로 맵핑을 실시하여라.
- Router(config)# ip port-map telnet port 8000

 

- 호스트 192.168.1.1인 Telnet 기본 포트 23번을 8000번으로 맵핑을 실시하여라.
- Router(config)# access-list 13 permit host 192.168.1.1
- Router(config)# ip port-map telnet port 8000 list 13



 

반응형

'IT이야기' 카테고리의 다른 글

MIME 타입이란  (0) 2017.03.30
RAID (레이드) 레벨과 구성방식  (0) 2017.03.22
MPLS (Multi Protocol Label Switching) #1  (0) 2017.03.19
DLP 관리  (0) 2017.03.19
삼성노트북 USB 인식방법  (0) 2017.03.19
Comments