CoPP (Control Plane Policing)
학습 목차
- 구성
- 결론
라우터(또는 멀티레이어 스위치)에서는 access-list나 방화벽(CBAC 또는 zone-based)을 사용해 라우터를 통과하거나 라우터로 향하는 패킷을 허용/거부할 수 있습니다.
또한 폴리싱(policing)을 사용해 라우터를 통과하는 트래픽을 속도 제한할 수도 있습니다. 라우터를 목적지로 하는 트래픽을 폴리싱하고 싶다면 어떻게 할까요? 라우터가 처리해야 하는 패킷을 생성하는 프로토콜은 꽤 많습니다.
- OSPF, EIGRP, BGP 같은 라우팅 프로토콜
- HSRP, VRRP, GLBP 같은 게이트웨이 이중화 프로토콜
- Telnet, SSH, SNMP, RADIUS 같은 네트워크 관리 프로토콜
- CEF가 전달할 수 없는 패킷
라우트 프로세서는 이러한 프로토콜이 컨트롤 플레인에서 생성하는 패킷을 검사합니다. 라우트 프로세서가 너무 많은 패킷을 받으면 따라잡지 못해 패킷을 드롭할 수 있습니다.
이런 일이 발생하면, neighbor adjacency가 플랩하거나 Telnet/SSH로 라우터에 연결할 때 타임아웃이 발생하는 등의 현상이 나타납니다.
이를 방지하려면 다음과 같은 옵션이 있습니다.
- rACL (Receive Access Control List): 라인 카드에서 라우트 프로세서로 보내지는 트래픽을 제어하는 표준 또는 확장 ACL입니다. 이 기능은 Cisco 12000 시리즈 같은 고급 라우터에서만 볼 수 있습니다.
- Control Plane Policing (CoPP): MQC(Modular Quality of Service) 프레임워크를 사용해 라우트 프로세서로 가는 트래픽을 허용/거부 또는 속도 제한할 수 있습니다.
- Control Plane Protection (CPPr): 이는 CoPP의 확장입니다. 이것이 하는 일 중 하나는 라우트 프로세서를 세 개의 서브 인터페이스로 분리하는 것입니다:
- host
- transit
- CEF exception
이 강의에서는 CoPP(Control Plane Policing) 를 살펴보겠습니다.
1. 구성
CoPP를 시연하기 위해 다음 토폴로지를 사용합니다.
다음과 같이 구성되어 있습니다.
- R1과 R2는 OSPF와 HSRP를 실행합니다.
- R1은 Telnet을 통한 원격 접속용으로 구성되어 있습니다.
- H1은 R1에서 CoPP를 테스트하기 위해 ICMP와 Telnet 트래픽을 생성하는 호스트입니다.
시작 구성
각 장치의 시작 구성은 다음과 같습니다.
H1
hostname H1
!
no ip routing
!
no ip cef
!
interface GigabitEthernet0/1
ip address 192.168.1.101 255.255.255.0
!
ip default-gateway 192.168.1.254
!
endR1
hostname R1
!
ip cef
!
interface GigabitEthernet0/1
ip address 192.168.1.1 255.255.255.0
standby version 2
standby 1 ip 192.168.1.254
standby 1 priority 200
standby 1 preempt
!
router ospf 1
network 192.168.1.0 0.0.0.255 area 0
!
endR2
hostname R2
!
ip cef
!
interface GigabitEthernet0/1
ip address 192.168.1.2 255.255.255.0
standby version 2
standby 1 ip 192.168.1.254
standby 1 preempt
!
router ospf 1
network 192.168.1.0 0.0.0.255 area 0
!
endCoPP 구성 단계
Control plane policing은 MQC를 사용하므로 class-map과 policy-map을 사용해야 합니다. class-map에서는 다음을 기준으로 트래픽을 매칭하는 것이 가장 좋습니다.
- 표준 또는 확장 access-list
- DSCP 또는 IP precedence 값
NBAR 분류는 모든 플랫폼이나 IOS 버전에서 지원되지 않습니다. 이 규칙의 유일한 예외는 match protocol arp입니다.
class-map에서 사용할 컨트롤 플레인의 트래픽을 매칭하는 access-list를 만들어 봅시다.
R1(config)# ip access-list extended ICMP
R1(config-ext-nacl)# permit icmp any any
R1(config)# ip access-list extended TELNET
R1(config-ext-nacl)# permit tcp any any eq 23
R1(config)# ip access-list extended OSPF
R1(config-ext-nacl)# permit ospf any any
R1(config)# ip access-list extended HSRP
R1(config-ext-nacl)# permit udp any host 224.0.0.102 eq 1985access-list에 매칭하는 class-map을 만들어 봅시다.
R1(config)# class-map ICMP
R1(config-cmap)# match access-group name ICMP
R1(config)# class-map TELNET
R1(config-cmap)# match access-group name TELNET
R1(config)# class-map OSPF
R1(config-cmap)# match access-group name OSPF
R1(config)# class-map HSRP
R1(config-cmap)# match access-group name HSRP이제 policy-map을 만들 수 있습니다.
R1(config)# policy-map COPP
R1(config-pmap)# class ICMP
R1(config-pmap-c)# police 8000 conform-action transmit exceed-action transmit
R1(config-pmap-c)# exit
R1(config-pmap)# class TELNET
R1(config-pmap-c)# police 8000 conform-action transmit exceed-action transmit
R1(config-pmap-c)# exit
R1(config-pmap)# class OSPF
R1(config-pmap-c)# police 8000 conform-action transmit exceed-action transmit
R1(config-pmap-c)# exit
R1(config-pmap)# class HSRP
R1(config-pmap-c)# police 8000 conform-action transmit exceed-action transmit
R1(config-pmap-c)# exitpolicy-map에 8000 bps 폴리서를 추가하고 conform-action과 exceed-action을 모두 transmit으로 설정합니다. 이 폴리서들은 절대 아무것도 드롭하지 않지만, 이렇게 구성하는 데는 좋은 이유가 있습니다.
CoPP를 처음 구성할 때, 각 프로토콜에 대해 얼마나 많은 패킷을 받는지 모릅니다. 정상 트래픽을 거부할 위험이 있습니다. 모든 것을 허용하는 것이 가장 좋습니다. 얼마나 많은 패킷이 초과되는지 알게 되면 값을 변경하고 exceed action을 drop으로 설정합니다.
이 policy-map을 컨트롤 플레인에 연결해야 합니다. 다음 명령으로 합니다.
본 강의는 NetworkLessons.com의 미리보기 버전입니다. 전체 내용은 멤버십 가입 후 확인 가능합니다.
포럼 답글
Garoun11
안녕하세요,
흥미로운 주제이고 좋은 설명입니다.
제가 이해한 바로는, control plane policing과 protection으로 인터페이스와 CPU 사이에 필터를 만들어 라우터의 CPU가 처리하는 패킷을 필터링합니다.
제가 틀렸으면 정정해 주세요. 당신의 예제는 라우터로 들어오는 트래픽에 대한 폴리싱을 활성화하는데, 예를 들어 라우터로 들어오는 SSH 패킷은 드롭되지 않지만 검사도 되지 않습니다.
이것이 맞나요?
감사합니다, Kostas
lagapidis
안녕 Kostas,
kostagrats: control plane policing과 protection으로 인터페이스와 CPU 사이에 필터를 만들어 라우터의 CPU가 처리하는 패킷을 필터링합니다.
네, 맞습니다. 라우터 자체로 향하는 패킷의 수를 필터링할 수 있고, 따라서 CPU가 처리해야 하는 패킷의 수를 제한합니다. 그러나 데이터 플레인 트래픽도 CPU 리소스를 사용한다는 점을 기억하세요(디캡슐화, 라우팅, 재캡슐화 등).
이 강의에서 Rene는 ICMP, Telnet, OSPF용 컨트롤 플레인 트래픽을 매칭하고 있습니다…
… 포럼에서 계속 읽기
Garoun11
안녕하세요,
설명에 감사드립니다.
저는 CoPP에 대해 읽고 있었는데, 포럼에서 왜 사용해야 하는지에 대한 예제를 보았습니다. 예를 들어, 외부 인터페이스로 가는 트래픽을 access-list로 필터링하려고 할 때, 누군가 그 인터페이스로 많은 트래픽을 보내면, 트래픽이 access-list의 drop 액션과 일치해 드롭되더라도 CPU에 영향을 미친다고 언급되었습니다.
반면에 CoPP를 사용하면 silent drop이 되어 패킷이 CPU에 도달하지 않습니다.
이 예제에서 인터페이스에 access-list를 적용하는 것은…
… 포럼에서 계속 읽기
lagapidis
Geia sou (안녕) Kostas,
이는 매우 중요한 측면입니다. 작용하는 몇 가지 요소가 있습니다.
정상 작동에서, 컨트롤 플레인 트래픽을 받는 네트워킹 장치는 패킷을 처리하기 위해 CPU로 “punt”합니다. “punt”라는 용어는 패킷을 fast path에서 처리하기 위해 라우트 프로세서나 CPU로 이동시키는 액션을 설명하는 데 사용됩니다. CoPP는 패킷이 CPU에 도달하기도 전에 차단하므로 CPU 자체에 영향이 없습니다. 다음 Cisco 문서에서 가져온 다이어그램을 살펴보세요…
… 포럼에서 계속 읽기
Garoun11
답변에 정말 감사드립니다.
문서가 저에게도 큰 도움이 되었습니다.
Kostas
47개의 추가 답글이 있습니다. 커뮤니티 포럼을 방문해 질문하거나 토론에 참여하세요.
출처: networklessons.com - CoPP (Control Plane Policing)
태그: Security