[QoS] 1: 개념

Quality of Service

수 많은 패킷을 주고 받는 상황에서 다른 패킷 보다 먼저 처리해야하는 중요한 패킷이 있기 마련이다. 그런 패킷을 위한 것이 바로 QoS이다.
VoIP처럼 실시간으로 패킷을 주고 받으면서 지연되지 않도록, 그리고 중요한 트래픽의 대역폭을 보장하고 특정 트래픽을 제한할 때 사용한다.

Qos 작업은 6가지로 분류할 수있고, 1~6번 순서대로 흐름이 진행된다.

  1. Classification (트래픽 분류)
  2. Policing (폴리싱)
  3. Marking (우선순위 표시)
  4. Congestion Avoidance (혼잡 회피)
  5. Queueing (큐잉)
  6. Scheduling (스케줄링)
  7. Switch QoS 설정
QoS 간략 흐름

1. Classification – 트래픽 분류

QoS 정책을 설정하기 앞서 먼저 QoS를 적용할 패킷을 구분한다.

예를 들면,
(1) 특정 IP에서 온 패킷
(2) 특정 인터페이스에서 온 패킷
(3) 특정 우선순위(IP Precedence/DSCP/CoS)를 가진 패킷

이렇게 말이다.


2. Policing – 폴리싱

사용 가능한 속도를 제한한다. 통신사업자가 많이 사용한다고 한다.
100Mbps로 Policing한다 = 최대 속도가 100Mbps까지 나온다.


3. Marking – 우선순위 표시

프레임에 우선 순위를 표시하는 것이다. 만일, 우선순위를 설정하지 않았다면, 실시간 처리가 필요한 패킷이 지연될 수 있다.
프로토콜에 따라 지정/지정 불가하다.

3-1. Ethernet 프레임과 802.1Q 프레임

Ethernet 프레임에는 우선수위를 표시할 필드가 없다.
즉, 우선순위를 표시할 수 없다.

802.1Q 프레임의 Tag 필드에 CoS(Priority) 항목이 있다.
우선수위를 표시할 수 있다.
즉, Trunking 포트를 통해 송수신되는 트래픽은 우선순위를 표시할 수 있다.

3-2. IP 헤더

출처: What 8-bit field exists in IP packet for QoS?, ITExamAnswers, https://itexamanswers.net/question/what-8-bit-field-exists-in-ip-packet-for-qos

IP 헤더에서 IP Precedence 혹은 DSCP를 이용해 우선순위를 표시할 수 있다.
IP Precedence : 값 0~7, 값이 클수록 우선순위가 높아진다.
DSCP : 값 0~63, 값의 크기의 따른 의미는 없다. 보통 VoIP에 DSCP 값 46을 부여한다. 46을 EF(Expected Forwarding)이라고 한다.
* DSCP 값 참고 : Cisco Configuration Guides

3-3. Marking 사용 예시

토폴로지1. Marking 사용 예시

① ② : 802.1Q TAG의 CoS 필드를 사용한다.
③ : Serial은 Ethernet 방식이 아닌 RS232C, RS422A, RS485 방식을 사용한다. 그래서 IP헤더의 IP Precedence나 DSCP를 사용한다.
④ : Access 포트는 우선순위를 표시할 수 없어서 IP헤더의 IP Precedence나 DSCP를 사용한다.
⑤ : 802.1Q TAG의 CoS 필드를 사용한다.


4. Congestion Avoidance -혼잡 회피

프레임을 임시 저장할 큐가 가득 차 있는 상태를 혼잡이라고 표현한 것 같다. 큐가 가득 차있는 상태에서 프레임을 폐기하는 것을 혼잡 회피라고 한다. 혼잡 회피는 크게 3가지 방법이 있다.

TailDrop, WTD, WRED

4-1. TailDrop

간단하다. 큐가 가득 찼을 때, 이후에 도착하는 패킷들을 모조리 폐기하는 방법이다.

4-2. WTD

Weighted Tail Drop

CoS / DSCP 값에 따라 Taildrop이 일어나는 임계치(Threshold라고도 함)를 다르게 하여 폐기하는 방법이다. UDP가 많은 환경에서 사용하면 혼잡 제어에 유리하다고 한다.

4-3. WRED

Weighted Random Early Detection

WRED를 설명하기 앞서 먼저 ‘Global TCP Synchronization’에 대해 알아보도록 하자.


* Global TCP Synchronization이란?
TCP와 같이 신뢰성이 필요한 통신은 패킷 1개를 보내고 Ack를 받아야 다음 패킷을 보낸다. 하지만 계속 이렇게 통신하면 당연히 통신속도는 느려질 것이다.
이 문제를 해결하고자 상대 Ack없이 한번에 보낼 수 있는 패킷 수를 지정하는 ‘Window Size’라는 개념을 도입했다. 에러가 없다면 Window Size가 큰 것이 유리할 거고, 에러가 빈번하다면 Window Size가 작은 것이 유리할 것이다.
한 번에 1500개 TCP 패킷을 보냈는데 그 중 상대가 500개를 못받은 상황이 있다고 가정해보자. 에러가 발생한 상황인데, 이럴 때는 Window Size를 줄여서 패킷을 보낸다. 한번에 보내는 패킷량이 적어지니 통신 속도도 낮아질 것이다. 이 상황에서 만약 PC가 여러 대 있다면..? 여러 대의 PC가 상대에게 지금 에러났으니 재전송 요청을 할 것이다. 이미 에러가 발생한 상황이므로 상대가 Window Size를 줄여서 재전송한다. 결과적으로 전체 패킷 수가 줄어들고 링크 사용률도 낮아질 것이다.
이렇게 동시에 TCP Window Size 바꾸는 것을 ‘Global TCP synchronization’이라고 한다.


WRED는 Global TCP Synchronization을 방지하기 위해 TailDrop(전체 에러)가 발생하기 전 임의의 패킷을 폐기한다. 그렇게 되면 특정 장비에서만 에러가 발생한다고 인식하고 Window Size를 줄인다.

즉, 대의를 위해 일부를 희생한다고 생각하면 될 것 같다.


5. Queueing – 큐잉

프레임을 전송하기 전 임시로 보관하는 장소를 Queue라고 한다.
그리고 이 Queue를 처리하는 것을 Queueing이라고 한다.

통신장비는 입력큐/출력큐를 갖고 있다. (장비마다 큐의 개수가 다르다.)
– 입력큐: 프레임 수신 후 처리하기 전 보관하는 큐
– 출력큐: 처리 후 외부로 전송하기 전 보관하는 큐
큐 전송 방법에 따라 표준큐/우선큐로 나눈다. 우선큐에 저장된 프레임이 더 먼저 전송된다.


6. Scheduling – 스케줄링

Queue에 저장된 프레임을 외부로 전송한다.
Scheduling 방식은 크게 3가지로 나뉜다.

WRR, DWRR, Strict-priority queueing

6-1. WRR

Weighted Round Robin

정해진 비율대로 차례차례 돌아가며 프레임을 전송한다.

6-2. DWRR

Deficit Weighted Round Robin

순서(차례)가 되어도 전송할 프레임 크기보다 deficit counter 작으면, 프레임을 전송하지 않고 deficit counter를 증가시킨 뒤 다음 차례에 전송한다.

6-3. Strict-priority Queueing

최우선 큐잉

우선큐에 저장된 프레임을 먼저 전송한다.
보통 VoIP 프레임을 최우선큐잉한다.


7. Switch QoS 설정

QoS 설정은 MQC 관련 명령어와 mls qos 관련 명령어가 있다.

7-1. MQC 관련 명령어

Modular QoS CLI

스위치나 라우터에서 사용되는 QoS 명령어 체계이다. 스위치에서는 주로 Marking이나 Policing을 위해 사용한다.

– 설정4단계
(1) class-map : QoS 작업 대상 분류
(2) policy-map : QoS 정책 표시
(3) service-policy : policy-map 적용
(4) show policy-map interface <INTERFACE> : QoS 동작 확인

7-2. mls qos 관련 명령어

Queue 별 대역폭 비율, 길이, 매핑 등 Queue와 관련된 설정이다.

DHCP 2: 보안

DHCP와 관련된 보안에 대해서 알아보도록 하자.

1. DHCP Snooping
2. IP Source Guard
3. Dynamic ARP Inspection


1. DHCP Snooping

일반적으로 DHCP와 관련된 공격으로
① 공격자가 DHCP 서버 행세 및 클라이언트들이 공격자와 통신하는 것 ② 공격자가 할당할 수 있는 IP를 모두 받아가서 다른 클라이언트들이 IP할당을 받지 못하게 하는 것
이 두 가지가 있다. 

이런 유형의 공격을 방지하는 기술이 DHCP Snooping이다.

1-1. DHCP Snooping 동작 방식

DHCP 서버 혹은 DHCP 릴레이 서버가 연결된 포트를 ‘Trusted’로 지정하고, 클라이언트가 연결된 포트를 ‘Untrusted’로 지정한다.

Trusted 포트에서 수신한 DHCP 메세지는 별도로 확인을 하지 않고,
Untrusted 포트에서 수신한 DHCP 서버의 메세지, DHCP 릴레이 서버의 메세지는 차단한다.
또한, Ethernet 프레임의 MAC 주소와 DHCP 메세지의 Client Hardware 주소가 다르면 차단한다.

1-2. DHCP Snooping 동작 과정

토폴로지1. DHCP Snooping

– DHCP 서버와 연결된 F0/3 : Trusted Port
– 이외 나머지 인터페이스 : Untrusted Port

1-3. DHCP Snooping 설정

Switch(config)# ip dhcp snooping
Switch(config)# ip dhcp snooping <INTERFACE>
Switch(config)# 
Switch(config)# int <interface>
Switch(config-if)# ip dhcp snooping trust

# DHCP Snooping Binding Table 확인
Switch# show ip dhcp snooping binding

2. IP Source Guard

공격자가 Source IP를 속여 통신하는 것을 차단한다. L2 장비에서 사용한다. DHCP Snooping과 동시에 사용한다.

* IP Spoofing = 남의 IP를 자신의 것처럼 속이는 행위.

토폴로지2. IP Spoofing 동작 방식

2-1. IP Source Guard 동작 방식

① 공격자가 PING 패킷을 스위치로 전송한다.

② 패킷을 받은 PC는 목표 대상으로 응답한다.

하지만 IP Source Guard를 사용하면,  ① 이후 스위치가 DHCP Binding Table와 비교한다.(IP Source Binding으로 비교할 수도 있다.) 
비교 후 수신한 프레임의 출발지 IP가 다르다면, 해당 패킷을 차단한다.

2-2. IP Source Guard 설정

[설정]
기본으로 DHCP Snooping 설정이 되어 있어야 한다.

Switch(config)# int <interface>
Switch(config-if)# ip verify source

#IP Source Binding Table
Switch# show ip verify source

[IP Source Binding 설정]

Switch(config)# ip source binding <MAC> <VLAN> <IP> <INTERFACE>

3. Dynamic ARP Inspection ; DAI

ARP Spoofing을 차단하기 위해 DAI를 사용한다.

3-1.  ARP Spoofing이란?

공격자가 ARP 패킷을 보낼 때, 자신의 MAC 주소를 GW나 Server 등의 MAC 주소로 속여서 보낸다. 그리고 GW로는 자신이 Host, Server라고 광고한다.  이렇게 되면 결국 모든 데이터는 공격자를 거치게 될 것이다.

특히나, ARP는 가장 마지막에 들어온 정보를 사용하기 때문에 주기적으로 이런 식으로 ARP 광고를 한다면 내부 호스트들은 공격자의 MAC주소가 GW나 서버의 MAC 주소인 줄 알게 되므로 위험하다.

이런 패킷을 차단하기 위해 DAI를 사용한다.


3-2. Dynamic ARP Inspection 동작 방식

DAI가 동작하면 모든 ARP 요청/응답 패킷을 검사하게 된다.
스위치가 수신한 ARP 프레임DHCP Binding Table 또는 ARP ACL이 일치해야 프레임을 전송한다.

3-3. Dynamic ARP Inspection 설정

[설정]
DAI가 동작하기 위해선 DHCP Snooping이 동작해야 한다.

Switch(config)# ip dhcp snooping
Switch(config)# ip dhcp snooping <VLAN>
Switch(config)# ip arp inspection <VLAN>
Switch(config)# 
Switch(config)# int <INTERFACE>
Switch(config-if)# ip dhcp snooping trust
Switch(config-if)# ip arp inspection trust

[ARP ACL 설정]

Switch(config)# arp access-list <NAME>
Switch(config-arp-nacl)# permit ip <SOURCE> mac <DESTINATION>
Switch(config-arp-nacl)# exit
Switch(config)# 
Switch(config)# ip arp inspection filter <NAME> <VLAN>

DHCP 1: 개념

Dynamic Host Configuration Protocol

동적 호스트 설정 프로토콜.
말 그대로 동적으로 호스트 IP를 부여하고 관리하는 프로토콜.

1. DHCP 동작과정
2. DHCP Relay Agent


1. DHCP 동작과정

① PC는 DHCP 서버를 찾기 위해 DHCP DISCOVER 메세지를 Broadcast한다.
– 출발지: 0.0.0.0
– 목적지: 255.255.255.255 / udp 67
– 본인의 MAC주소를 포함하여 보낸다. 

② DHCP 서버는 IP를 제안하기 위해 DHCP OFFER 메세지를 Broadcast한다.
– 출발지: DHCP 서버의 IP
– 목적지: 255.255.255.255
– 클라이언트에서 사용할 IP, Subnet, GW, DNS, IP 임대 시간, 그리고 클라이언트의 MAC을 포함하여 보낸다.

③ PC는 OFFER 메세지로 받은 정보를 사용하기 위해 DHCP REQUEST 메세지를 Broadcast한다.
– 출발지: 0.0.0.0
– 목적지: 255.255.255.255
– 서버 IP를 알아도 Broadcast로 보내는 이유는 다른 DHCP서버에게 알리기 위함이다.

④ 서버가 클라이언트의 요청을 수락하기 위해 DHCP ACK를 Broadcast한다.
– 출발지: DHCP 서버의 IP
– 목적지: 255.255.255.255


2. DHCP Relay Agent

DHCP 서버가 항상 같은 망에 속해있으리란 보장은 없다.
서로 다른 망이라면 L3장비에서 Relay Agent를 설정해야한다.

[ DHCP 서버가 1대인 경우]

Router(config)# service dhcp
Router(config)# int <INTERFACE_CONNECTD_BY_CLIENT>
Router(config-if)# ip helper-address <DHCP_SERVER_IP>


[ DHCP 서버가 여러대인 경우 ]

#수동으로 서버 지정
Router(config)# int <INTERFACE_CONNECTD_BY_CLIENT>
Router(config-if)# ip helper-address <DHCP_SERVER_IP_1>
Router(config-if)# ip helper-address <DHCP_SERVER_IP_2>

#자동으로 서버 지정
Router(config)# ip helper-address <DHCP_BROADCAST_IP>
Router(config)# int <INTERFACE_CONNECTD_BY_CLIENT>
Router(config-if)# ip directed-broadcast

[Switch] VLAN Hopping Attack

서로 다른 VLAN의 호스트들끼리 통신하려면, L3 장비를 거쳐서 통신해야한다. 그러나, 다른 VLAN에 속한 대상을 공격할 때, L3 장비를 거치지 않고 공격하는 것을 VLAN Hopping Attack이라고 한다.

아래 토폴로지를 보고 어떻게 Hopping Attack이 진행되는지 보자.

토폴로지 1. VLAN Hopping Attack

[현재 토폴로지 구성 상태]
(1) 현재 관리자가 PC와 연결된 SW2의 포트를 설정할 때,
‘switchport access vlan 20’만 설정한 상황.
(2) ‘switchport mode access’를 누락했고, native vlan 도 1인 상황이다.

이 상태라면 공격자는 DTP 프레임을 이용해 SW2-공격자 PC의 mode를 Trunk로 변경할 수 있게 된다.


① Trunk포트로 변경하고, Data를 보낸다.

SW2—–공격자의 Port mode가 Trunk로 변경되고,

공격자는 SW2로 패킷을 보낸다.
( Vlan 1 Tag | Vlan 10 Tag | 공격 Data )

SW2의 Native VLAN이 1 이므로
VLAN 1 TAG를 제거 후 SW1로 전달한다.

② VLAN 1 TAG를 제거 후 SW1로 데이터를 전송한다.

SW1은 패킷의 VLAN 10 TAG를 보고, VLAN 10에 속한 PC1에게 패킷을 전달한다.
이렇게 공격자의 패킷은 무탈히 PC1로 전송되었다.

그렇다면, 이런 공격을 막을 수 있는 방법은 무엇일까?
당연하게도 이미 방법은 나와있다.

①Trunking을 사용하지 않는 포트는 반드시 Access로 설정해주고,
②Native VLAN은 반드시 다른 번호로 변경하는 것이다.

[Switch] 포트 트래픽 제어

스위치 보안 중 트래픽의 출발지를 보고 차단하는 방법만 있는 것이 아니다. 트래픽의 종류, 트래픽의 양에 따라 차단하는 방법도 있다. 바로 포트 트래픽을 제어하는 것이다. 포트 트래픽에 대해 알아보자.

  1. Storm Control
  2. Protected Port
  3. Port Blocking

토폴로지1. 포트 트래픽 제어

1. Storm Control (과다 트래픽 제어)

스위치의 포트로 Unicast / Multicast / Broadcast 트래픽이 1초 동안 사용자가 설정한 수준 이상으로 많이 수신되었을 때, 해당 트래픽을 모두 차단한다.

설정

예를 들어, SW2의 F0/3에서 Broadcast 패킷이 대역폭의 25% 이상을 차지할 경우 차단하는 것을 설정해보자.

SW2(config)# int fa0/3
SW2(config-if)# storm-control broadcast level 25

3: broadcast 대신 unicast, multicast로 설정할 수 있다. level 25는 대역폭의 25%를 의미하므로 적절한 값으로 변경하여 설정할 수 있다.


2. Protected Port (방어 포트)

하나의 스위치에서 Protected Port로 설정된 포트끼리 Unicast / Multicast / Broadcast를 차단한다. 서로 다른 스위치의 Protected Port끼리는 정상적으로 트래픽을 주고 받는다.
(단, 목적지가 없는 프레임은 Flooding 된다.)
Protected Port로 설정되지 않은 포트와는 정상적으로 트래픽을 주고 받을 수 있다.

설정

SW2의 F0/2, F0/3을 Protected Port로 설정해보자.

SW2(config)# int ran fa0/2 - 3
SW2(config-if)# switchport protected

이제 PC1과 PC2를 PING 테스트해보면 응답이 없는 것을 확인할 수 있다.
PC1 – PC3, PC2 – PC3 간의 PING은 정상적으로 나간다.


3. Port Blocking (포트 차단)

스위치가 수신한 프레임의 목적지가 MAC Table에 없다면, Flooding 되는 것을 차단한다. Unicast / Multicast 패킷에만 적용할 수 있다.

설정

SW2의 F0/4에 목적지가 없는 Multicast 프레임을 차단하도록 설정해보자.

SW2(config)# int fa0/4
SW2(config-if)# switchport block multicast

3: multicast 대신 unicast를 사용할 수 있다.

ACL을 알아보자 3: MAC/Port/VLAN ACL, PBACL

ACL은 라우터 뿐만 아니라 스위치에서도 설정할 수 있다. 스위치에서 구성할 수 있는 ACL은 아래와 같다.

  1. MAC ACL
    IP ACL (이전 게시글 참고)
  2. Port ACL
  3. VLAN ACL
  4. PBACL

1. MAC ACL

MAC 주소를 이용해 트래픽을 제어한다. 일반적인 IP ACL과 다르게 MAC ACL은 반드시 Named ACL을 사용해야 한다.

설정

Switch(config)# mac access-list extended <name>
Switch(config-ext-macl)# deny host <MAC> host <MAC>
Switch(config-ext-macl)# permit any any

만일, 여러 개의 MAC주소를 지정하려면, 와일드카드 마스크를 이용해 지정한다.
ex) 0011. CB 로 시작하는 모든 MAC주소를 지정한다면, 와일드카드 마스크가 0000.00FF.FFFF가 될 것이다.


2. Port ACL

일반적으로 라우터에 사용하는 IP ACL과 비슷해보이지만, Port ACL은 L2 포트에 ACL을 적용하는 것이다. IP주소/MAC주소 모두 사용할 수 있고, 동시에 필터링을 할 수도 있다.

  • 프레임을 수신하는 경우(in방향)에만 ACL을 설정할 수 있다.
  • 특정 스위치에 VLAN ACL이 설정되었거나 라우터에 Inbound ACL이 설정되어있다면, 사용할 수 없다.
  • Etherchannel을 사용하는 인터페이스에서 사용할 수 없다.
  • MAC주소로만 필터링 한다면, MAC의 접근은 차단되어도 해당 MAC의 IP로는 접근할 수 있다.

3. VLAN ACL

VLAN에 적용하는 ACL이다. 서로 다른 VLAN 번호 간 제어, 같은 VLAN 번호 간 트래픽을 제어한다.
VACL, VLAN Map 이라고도 한다.

설정

(1) ACL 생성
(2) VLAN MAP 생성
(3) VLAN MAP을 VLAN에 적용

[설정 예시]

-
Switch(config)# access-list 100 permit tcp host 10.10.10.1 host 10.10.10.3 eq ssh
Switch(config)# access-list 100 permit tcp host 10.10.20.1 host 10.10.10.3 eq ssh
Switch(config)# access-list 101 permit ip any any
Switch(config)# 
Switch(config)# vlan access-map <VLAN_MAP_NAME>
Switch(config-access-map)# match ip address 100
Switch(config-access-map)# action drop
Switch(config-access-map)# exit
Switch(config)# 
Switch(config)# vlan access-map <VLAN_MAP_NAME>
Switch(config-access-map)# match ip address 101
Switch(config-access-map)# action forward
Switch(config-access-map)# exit
Switch(config)# 
Switch(config)# vlan filter <VLAN_MAP_NAME> vlan-list <VLAN_NUM>
-

2,3,4 : Access list를 통해 허용할 호스트를 지정한다.
6: VLAN Map을 설정한다.
7: 허용하거나 차단할 대상을 불러온다.
8: 7번 대상이 오면 Drop(차단)하도록 설정한다. 별도 action 설정을 하지 않으면, Forward(허용)이다.
11: 6번과 같은 이름을 사용한다. 이름이 같아도 상관없다. 어차피 access-map을 보게 되면 자동으로 맵 이름 뒤에 20이 추가로 붙게 되어 서로 다른 맵이다.
12,13: 맵 이름만 정의하면, match / action을 설정하지 않으면 나머지 모든 것을 허용한다는 의미이므로 12,13는 생략해도 된다.
16: 원하는 VLAN에 VLAN 맵을 적용한다.


4. PBACL

Policy-Based ACL
IP 주소나 포트 번호를 ‘Object Group’으로 지정하고, ACL 생성 시 ‘Object Group’을 사용해 지정하는 방식이다. Routed / SVI와 같은 L3 인터페이스와 IPv4만 적용할 수 있다. 또한, Named ACL로만 적용할 수 있다.

설정

-
Switch(config)# object-group ip address <OBJECT_NAME>
Switch(config-port-ogroup)# host <IP>
Switch(config-port-ogroup)# <NETWORK_ID> <SUBNETMASK>
Switch(config-port-ogroup)# exit
Switch(config)#
Switch(config)# object-group ip address <OBJECT_NAME2>
Switch(config-port-ogroup)# eq <PORT_NUM>
Switch(config-port-ogroup)# <NETWORK_ID> <SUBNETMASK>
Switch(config-port-ogroup)# exit
Switch(config)#
Switch(config)# ip access-list extended <ACL_NAME>
Switch(config-ext-nacl)# permit tcp addgroup <OBJECT_NAME> portgroup <OBJECT_NAME2> any
Switch(config-ext-nacl)# deny tcp any any
Switch(config-ext-nacl)# exit
Switch(config)# int <interface>
Switch(config-if)# ip access-group <ACL_NAME> in
-

[Switch] 포트 보안

스위치의 특정 포트에 특정 MAC만 허용할 수 있는 기능이다.
Access / Trunk / Tunnel 이 아닌 동적 모드에서는 사용할 수 없다.

  1. 정적 MAC 지정
  2. 동적 MAC 지정
  3. Port-Sticky
  4. 포트 보안 침해 시 동작

토폴로지1. 포트보안

1. 정적 MAC 지정

-
Switch0(config)# int <INTERFACE>
Switch0(config-if)# switchport mode access
Switch0(config-if)# switchport port-security mac-address <MAC>
Switch0(config-if)# switchport port-security
-

5: switchport port-security 부터 설정하면, 동적 MAC 지정이 되므로 반드시 정적으로 MAC 지정할 때는 4:을 먼저 설정한다.

또한, fa0/1에 설정했던 MAC이 fa0/2로 들어온다면, fa0/2도 포트가 비활성화된다.

2. 동적 MAC 지정

동적 MAC으로 지정하도록 설정한다면, MAC Table에 있는 첫번째 MAC 또는 처음 MAC Table에 기록되는 것으로 지정한다. 스위치가 재부팅되면 동적으로 지정된 MAC은 삭제된다.

-
Switch0(config)# int <INTERFACE>
Switch0(config-if)# switchport port-security
-

3. Port-Sticky

한번에 여러 개의 MAC을 지정해야될 때, 유용하다.
동적 MAC 지정과는 다르게 스위치가 재부팅되도 지정된 MAC정보가 유지된다.

-
Switch0(config)# int <INTERFACE>
Switch0(config-if)# switchport trunk encapsulation dot1q
Switch0(config-if)# switchport mode trunk
Switch0(config-if)# switchport port-security
Switch0(config-if)# switchport port-security maximum 3
Switch0(config-if)# switchport port-security mac-address sticky
-

4. 포트 보안 침해 시 동작

기본적으로 포트 보안 침해 시 Shutdown.

  • protect : 보안 침해 시 침해한 장비를 차단한다. 접속 허용된 장비는 그대로 허용한다.
  • restrict : 보안 침해 시 침해한 장비를 차단한다. 접속 허용된 장비는 그대로 허용한다. Log를 발생시키고, 보안 침해 카운터를 증가시킨다.
  • shutdown : 포트를 셧다운한다.
-
Switch0(config)# int <INTERFACE>
Switch0(config-if)# switchport port-security violation [protect|restrict|shutdown]
-

Multicast Routing Protocol: PIM-DM / PIM-SM

Multicast 패킷을 처리하기 위해 필요한 라우팅 프로토콜.
보통 PIM-DM 이나 PIM-SM을 사용한다. PIM은 ‘Protocol Independent Multicast’의 약자인데, 프로토콜과 독립된 멀티캐스트 즉, 유니캐스트 라우팅은 아무거나 사용할 수 있다는 의미다.

  1. PIM-DM
  2. PIM-SM

1. PIM-DM

Protocol Independent Multicast – Dense Mode

보통 LAN처럼 Multicast 목적지가 밀집(Dense)한 망에서 사용한다. 주기적으로 Multicast 정보를 전송하고, 만일 Neighbor로부터 일정 기간 동안 정보를 받지 못하면 해당 경로를 삭제한다.

PIM-DM 동작 방식

PIM-DM 설정

토폴로지1. PIM-DM 설정

[기본]
– Access 포트 설정 ( L3SW1, L3SW2, SW1 )
– IP주소할당 ( SW1 제외 )
– 라우팅 ( OSPF )

[PIM-DM 설정]

-
L3SW1(config)# ip multicast-routing
L3SW1(config)#
L3SW1(config)# int vlan 10
L3SW1(config-if)# ip pim dense-mode
L3SW1(config-if)# int vlan 20
L3SW1(config-if)# ip pim dense-mode

L3SW2(config)# ip multicast-routing
L3SW2(config)#
L3SW2(config)# int vlan 20
L3SW2(config-if)# ip pim dense-mode
L3SW2(config-if)# int vlan 30
L3SW2(config-if)# ip pim dense-mode
-

[확인]

show ip pim neighbor

Neighbor맺은 것을 확인할 수 있다.

Multicast 시뮬레이션

-
PC(config)# int fa0/0
PC(config-if)# ip igmp join-group 239.1.1.2

Server# ping 239.1.1.2 repeat 10000 
-
멀티캐스팅 패킷의 소스주소와 그룹 번호를 확인할 수 있다.

(10.10.1.2, 239.1.1.2) = 소스IP, Multicast 그룹번호


2. PIM-SM

Protocol Independent Multicast – Sparse Mode

Multicast 패킷을 수신하는 장비들이 여러 곳으로 분산되었을 때 사용한다. 다양한 기능으로 LAN에서 사용하기도 한다.

PIM-SM 동작방식

(1) 사용 중인 Multicast Source 정보를 갖고 있는 Redezvous Point(RP)를 지정한다. 지정방식에는 Static RP / Auto RP / BSR 이 있다.

(2) Designated Router ( Multicast Source와 인접한 장비 )가 Source IP, Multicast Group 번호를 RP에게 통보한다.

(3) 위 정보를 바탕으로 RP는 Multicast Routing Table을 생성한다. DR에게 패킷 전송 중지를 요청한다.

(4) 해당 경로가 MRT에 삭제 되지 않도록 주기적으로 DR이 RP로 Source 관련 정보를 전송한다.

(5) Host가 라우터에게 Multicast 그룹 가입 요청한다. 이 때 IGMP를 사용한다.

(6) 라우터가 RP에게 PIM-SM을 이용해 Multicast 패킷을 요청한다.

(7) RP가 MRT를 참고하여, Source에 인접한 DR로부터 Multicast 패킷을 요청한다. 이 패킷을 수신하면, Host로 전송한다.

PIM-SM 설정

토폴로지2. PIM-SM 설정

1. Static RP

-
L3SW1(config)# ip multicast-routing
L3SW1(config)# ip pim rp-address 1.1.1.1
L3SW1(config)# int vlan 10
L3SW1(config-if)# ip pim sparse-mode
L3SW1(config-if)# int vlan 20
L3SW1(config-if)# ip pim sparse-mode

L3SW2(config)# ip multicast-routing
L3SW2(config)# ip pim rp-address 1.1.1.1
L3SW2(config)# int vlan 20
L3SW2(config-if)# ip pim sparse-mode
L3SW2(config-if)# int vlan 30
L3SW2(config-if)# ip pim sparse-mode
-

2. Auto RP ; Cisco 전용
– 동작과정
(1) Candidate RP가 224.0.1.39를 이용해 자신이 RP 후보임을 알림.
(2) RP Mapping Agent가 RP 후보 취합 및 Multicast 그룹 별 RP를 지정하여 224.0.1.40으로 다른 라우터에게 알림.
(3) Multicast 동작하는 라우터들은 Mapping Agent가 보낸 주소를 RP로 설정.

-
L3SW1(config)# ip multicast-routing
L3SW1(config)# 
L3SW1(config)# int lo 0
L3SW1(config-if)# ip pim sparse-dense-mode
L3SW1(config-if)# exit
L3SW1(config)# 
L3SW1(config)# ip pim send-rp-announce lo0 scope 10
L3SW1(config)# ip pim send-rp-deiscovery lo0 scope 10
L3SW1(config)# 
L3SW2(config)# int vlan 10
L3SW2(config-if)# ip pim sparse-dense-mode
L3SW1(config-if)# int vlan 20
L3SW1(config-if)# ip pim sparse-dense-mode

L3SW2(config)# ip multicast-routing
L3SW2(config)# 
L3SW2(config)# int vlan 20
L3SW2(config-if)# ip pim sparse-dense-mode
L3SW2(config-if)# int vlan 30
L3SW2(config-if)# ip pim sparse-dense-mode
-

3. BSR (Bootstrap Router) ; 표준

-동작과정
(1) BSR이 224.0.0.13을 이용해 자신이 BSR임을 알림.
(2) RP후보가 BSR Unicast 주소로 자신이 RP 후보임을 알림.
(3) BSR이 224.0.0.13을 이용해 각 라우터로 RP 후보리스트를 전송한다.
(4) 후보 리스트를 받은 라우터들이 알아서 RP를 선택한다.

-
L3SW1(config)# ip multicast-routing
L3SW1(config)# 
L3SW1(config)# int lo 0
L3SW1(config-if)# ip pim sparse-mode
L3SW1(config-if)# exit
L3SW1(config)# 
L3SW1(config)# ip pim bsr-candidate lo0
L3SW1(config)# ip pim rp-candidate lo0
L3SW1(config)# 
L3SW2(config)# int vlan 10
L3SW2(config-if)# ip pim sparse-mode
L3SW1(config-if)# int vlan 20
L3SW1(config-if)# ip pim sparse-mode

L3SW2(config)# ip multicast-routing
L3SW2(config)# 
L3SW2(config)# int vlan 20
L3SW2(config-if)# ip pim sparse-mode
L3SW2(config-if)# int vlan 30
L3SW2(config-if)# ip pim sparse-mode
-

Multicasting

1. Multicast
2. Multicast와 관련된 프로토콜


네트워크 통신 형태에는 Unicast, Multicast, Broadcast가 있다.
Unicast는 수신자를 지정하여 ‘1 : 1’ 통신할 때, Broadcast는 수신자를 지정하지 않고 ‘1 : 모든 불특정N’ 으로 통신할 때 사용한다.

Multicast는 그럼 언제 사용할까?
특정 그룹에 속한 수신자를 지정하여 ‘1 : 특정N’으로 통신할 때 사용한다.

토폴로지1. Multicasting 예시

Multicast IP

A , B, C 클래스의 IP는 네트워크 부분과 호스트 부분으로 나눈다. 하지만 D클래스 대역을 사용하는 Multicast IP는 네트워크와 호스트의 구분이 없다. (참고로 D클래스 범위는 224.0.0.0~239.255.255.255).
하나의 주소가 곧 특정 그룹 전체를 지칭한다. 오직 동일 그룹인지 도일한 그룹이 아닌지만 판단할 수 있다.

Multicast가 IP패킷을 보낼 때, 주소는 아래와 같이 지정한다.
출발지: ‘송신 장비의 인터페이스 IP’
목적지: ‘Multicast IP’

Multicast MAC

 ” XXXX . XXXX . XXXX “
MAC 주소는 16진수로 이루어져있으므로
각 자리당 4 Bit, 즉, 두 자리당 1 Byte이다.

IP주소 1번째 Byte → MAC주소의 첫 3 Byte  0100.5e 로 변환.
IP주소 2번째 Byte → 첫번째 Bit를 0으로 변경한 뒤 16진수로 변환.
IP주소 3, 4번째 Byte → 16진수로 변환.

그래서 Multicast MAC은
0100.5eXX.XXXX

Multicast IP 와 MAC 관계

(1) Multicast IP는 첫번째 옥텟이 224~239이므로 항상 첫 4 Bit는 1110으로 고정된다. 224~239는 1110 0000 ~ 1110 1111이다.

(2) 근데 위에 언급한 바와 같이 IP주소 1번째 Byte를 MAC주소 3 Byte로 변환한다고 했다. 다시말해, IP주소 8 Bit를 MAC주소 24 Bit로 변환한 것이고,  변환 후 IP주소는 24Bit, MAC주소는 24 Bit가 남는다.

(3) 남는 IP주소 24Bit는 MAC주소 24Bit로 변환한다.

위 순서대로 진행해보면

1110 _ _ _ _ . _ XXX XXXX . XXXX XXXX

이렇게 나오는데
“_”는 0이나 1이 올 수 있는 Bit.
“X”는 IP가 MAC으로 변환된 Bit.

25 = 32, 즉 32개의 IP 주소가 같은 MAC 주소를 사용한다.


2. Multicast 관련 프로토콜

토폴로지2. Multicast 관련 프로토콜
동작과정

(1) IGMP
PC가 라우터에게 Multicast IP가 239.1.1.1인 패킷을 달라고 요청.

(2) IGMP Snooping
스위치는 239.1.1.1 패킷을 요청한 PC로만 보내기 위해
나중에 239.1.1.1 패킷을 받으면 해당 PC로 보낼 준비를 한다.
만약, IGMP Snooping을 하지 않는다면 해당 패킷을 Flooding 한다.

(3) Multicast Routing Protocol
PC로부터 239.1.1.1 패킷을 요청받은 라우터는 어느 경로를 통해 해당 패킷을 받을 수 있는지 알고 있다. PIM-DM / PIM-SM 같은 MRP가 있다.

2-1. IGMP : Internet Group Management Protocol

– Multicast가 동작하는 호스트와 라우터 간에 사용된다.
– 호스트가 특정 Multicast Group에 가입 or 가입 중지할 때 사용한다.
– IGMP는 버전 1, 2, 3, 3 Lite가 있다. ( 버전 별 차이 )
– 인터페이스에 Multicast Routing Protocol을 설정하면 자동으로 동작한다.
– IPv4 패킷  ‘Protocol’ 필드번호 2, TTL 1로 고정된다.

2-2. Multicast Routing Protocol

MULTICAST ROUTING PROTOCOL: PIM-DM / PIM-SM 참고

2-3. IGMP Snooping

Transparent Bridging에 의하면, Multicast 패킷은 Flooding 해야한다.
하지만 Multicast 패킷이 많아질수록 장비에게 오는 부하도 커진다.
이런 문제를 해결하고자 IGMP Snooping과 CGMP가 있다.

IGMP Snooping 동작과정
(1) PC가 라우터로 IGMP를 이용해 특정 Multicast 패킷을 요청한다.
(2) 이 때, 스위치가 이 패킷을 엿보고, 이후에 라우터로부터 해당 Multicast 패킷을 수신하면 요청한 PC로 보낼 수 있도록 준비한다.
(3) 라우터에서 PC로 Multicast 패킷을 전송할 때, 스위치가 해당 인터페이스로만 패킷을 중계한다.

CGMP 동작과정
Cisco Group Management Protocol
라우터가 스위치에게 특정 Multicast 패킷은 특정 Unicast MAC을 소유한 호스트로 전송하라고 알려준다.

2-4. RPF

Reverse Path Forwarding Check.

Multicast 패킷 루프를 방지하기 위해 RPF를 확인해야 한다. 또한, RPF를 확인하기 위해선 Unicast 라우팅이 동작 중이어야 한다.
항상 Multicast 패킷의 Source IP를 확인한다.

그림. RPF

우선 SW1에서 10.10.0.0/24로 오는 패킷은 F0/5로 수신한다.

①은 정상이다.

②는 F0/2로 수신한다.
Source IP – 인터페이스가 일치하지 않아 폐기된다.

[FHRP] GLBP에 대해

  1. GLBP
  2. GLBP 설정

1. GLBP

Gateway Load Balancing Protocol

그림1. GLBP

Cisco에서 HSRP 기능을 강화하기 위해 GLBP를 개발했다.
게이트웨이 이중화는 물론, 별도의 설정없이도 부하 분산을 제공하는 것이다.

1-1. GLBP 역할

Group 당
AVG 라우터 1개, Standby 라우터 1개, 나머지 라우터는 Listen 상태.


만일, AVG 라우터가 Down 됐다면,
Standby 라우터 → AVG 라우터,
Listen 상태 라우터 중 하나 → Standby 라우터가 된다.

AVG ( Active Virtual Gateway) 역할
1. 각 라우터들(멤버들)에게 가상 MAC을 할당한다.
이 라우터들을 가상 MAC의 AVF(Active Virtual Forwarder)라고 한다.
2. 게이트웨이 주소에 대한 ARP 요청에 응답한다.
PC에서 게이트웨이 IP에 대한 ARP 요청을 하면, AVF에 할당했던 MAC들 중 하나로 응답한다. 즉, 자동으로 부한 분산이 되는 것이다.

AVG가 결정되는 우선순위
높은 GLBP Priority → 높은 인터페이스 IP

1-2. GLBP 특성

  • Group 당 단일 Virtual IP와 최대 4개의 MAC을 사용한다.
  • 출발지 / 목적지 IP : 224.0.0.102 , Multicast
  • UDP 3222
  • 3초 주기로 GLBP 정보 광고

1-3. GLBP 인증

공격자의 장비가 AVG 또는 AVF 되는 GLBP Spoofing 공격을 방지하고자 인증을 설정한다. 여타 FHRP처럼 Plain-Text, MD5 인증을 설정할 수 있다.


2. GLBP 설정

토폴로지1. GLBP

기본 설정GLBP 설정GLBP 설정 확인GLBP 인증 설정

[기본]
– IP 설정
각 장비의 인터페이스
(PC GW는 Virtual IP로 설정)

– OSPF 라우팅
R1 fa0/0, fa1/0
R2 fa0/1, fa1/0
SW2 fa0/0, fa0/1, loopback 0

[GLBP 설정]

-
R1(config)# track 1 int fa0/0 line-protocol
R1(config-track)# exit
R1(config)#
R1(config)# int fa1/0
R1(config-if)# glbp 1 ip 10.10.100.254
R1(config-if)# glbp 1 priority 105
R1(config-if)# glbp 1 timers 2 6
R1(config-if)# glbp 1 preempt delay minimum 60
R1(config-if)# glbp 1 forwarder preempt delay minimum 50
R1(config-if)# glbp 1 weighting 100 lower 90 upper 100
R1(config-if)# glbp 1 load-balancing round-robin
R1(config-if)# glbp 1 weighting track 1 decrement 20

R2(config)# track 1 int fa0/1 line-protocol
R2(config-track)# exit
R2(config)#
R2(config)#int fa1/0
R2(config-if)# glbp 1 ip 10.10.100.254
R2(config-if)# glbp 1 timers 2 6
R2(config-if)# glbp 1 weighting 100 lower 95
R2(config-if)# glbp 1 weighting track 1
R2(config-if)#
-

2: 감시할 인터페이스나 경로를 지정한다. line-protocol 옵션을 사용하면 해당 인터페이스의 Layer 2 상태에 따라 Up / Down 상태로 판단한다. 경로를 지정하고자 한다면, “track 2 ip route 10.10.0.1/32 reachability” 이렇게 할 수 있다.
6: GLBP 그룹 번호는 0-1023 사이 값를 넣을 수 있다. 여기까지의 설정만으로 GLBP가 동작한다.
7: GLBP 우선순위를 설정한다. 0 -255 사이 값을 넣을 수 있다.
8: 기본 Hello Timer 3초, Hold Timer 10초지만, Hello 2 Hold 6으로 설정했다. 2초 주기로 Hello를 전송하고, 6초동안 Hello를 받지못하면 상대에게 장애가 발생했다고 간주한다.
9: 장애 발생으로 인해 다른 라우터로 AVG 역할을 위임했다가 장애 복구 시 60초 후 다시 AVG 역할을 수행한다. 기본적으로 비활성화 되어있다.
10: 장애 발생으로 인해 다른 라우터로 AVF 역할을 위임했다가 장애 복구 시 50초 후 다시 AVF 역할을 수행한다. 기본 30초로 활성화되어있다.
11: 먼저, R1의 전송 가중치를 100으로 설정한다. 가중치가 90이 되면 AVF의 역할을 넘기고, 100이 되면 다시 AVF 역할을 수행한다.
12: 부하분산 방식을 round-robin으로 설정한다.
13: track 1이 Down되었을 때, 가중치 20을 감소한다.

[GLBP 설정확인]
– show glbp brief

GLBP 상태, 가상 IP, Standby 라우터를 확인 할 수 있다.

[GLBP 인증]
– Plain-Text 인증

R1(config)# int fa1/0
R1(config-if)# glbp 1 authentication text <WORD>


R2(config)# int fa1/0
R2(config-if)# glbp 1 authentication text <WORD>

– MD5 인증 (Key-String)

R1(config)# int fa1/0
R1(config-if)# glbp 1 authentication md5 key-string <WORD>


R2(config)# int fa1/0
R2(config-if)# glbp 1 authentication md5 key-string <WORD>

– MD5 인증 (Key-Chain)

R1(config)# key chain <NAME>
R1(config-keychain)# key [0-2147483647]
R1(config-keychain-key)# key-string <WORD>
R1(config-keychain-key)# exit
R1(config-keychain)# exit
R1(config)#
R1(config)# int fa1/0
R1(config-if)# glbp 1 authentication md5 key-chain <NAME>


R2(config)# key chain <NAME>
R2(config-keychain)# key [0-2147483647]
R2(config-keychain-key)# key-string <WORD>
R2(config-keychain-key)# exit
R2(config-keychain)# exit
R2(config)#
R2(config)# int fa1/0
R2(config-if)# glbp 1 authentication md5 key-chain <NAME>