동일 네트워크 대역 통신을 방화벽 정책으로 제어하기

본 포스트에 사용된 모델은 FortiGate-200F이며, v7.4.7버전을 사용하였습니다.
또한, FortiSwitch를 이용하여 구성된 상태임을 알려드립니다.
L2 Proxy 설정 방법은 [03. 동일한 네트워크에서의 통신 차단 방법]부터 읽어주시면 됩니다.

01. 동일한 네트워크 대역에서의 통신 과정

LAN Edge

그림과 같이 두 대의 PC는 같은 네트워크 대역을 사용하고 있으며 각각 스위치에 연결되어 있습니다.
PC A에서 PC B로 통신을 시도할 때의 동작 순서는 아래와 같습니다. (방화벽은 게이트웨이 역할과 DHCP 역할을 수행중입니다.)

번호 이동 동작 내용
1 PC A --> Switch A 목적지 PC B에 대한 통신을 시작합니다. (ex ping 192.168.0.2)
(192.168.0.2를 incomplete로 등록하고 ARP Request를 Broadcast로 전달)
2 Switch A --> Firewall PC B에 대한 ARP정보가 없기 때문에 인입된 포트를 제외한 나머지 포트에게 Flood합니다.
3 Firewall --> Switch B PC A, PC B에 대한 모든 정보를 갖고 있음으로 Switch B에게 ARP Request를 전달합니다.
4 Switch B --> PC B Switch B는 PC B에 대한 정보를 갖고 있음으로 PC B에게 ARP Request를 전달합니다.
이때, PC A에 대한 MAC 주소는 CAM Table에 저장합니다.
더보기

@Broadcast와 Flood의 차이점은 무엇인가요?

Broadcast는 Destination Mac Address가 FF:FF:FF:FF:FF:FF로 되어 있습니다.
인입된 포트를 제외하고 나머지 포트를 통해 신호를 전달하며 주로 ARP Request, DHCP Discover에서 사용합니다.

Flood는 처음에는 Broadcast처럼 동작하지만 이후 학습이 완료되면 Unicast로 동작합니다.
PC A는 PC B의 MAC 주소를 모르기 때문에 처음에는 FF:FF:FF:FF:FF:FF로 ARP Request를 보냅니다.
Flood는 이러한 신호를 변조하지 않고 그대로 Broadcast처럼 전파하게 됩니다.

만약, 상호통신을 통해 서로의 MAC 주소를 알고 있다면 PC A는 처음부터 PC B의 MAC 주소를 보낼 것이고,
Switch는 Unicast 통신을 수행하게 됩니다.

위와 같이 네트워크 대역에서의 통신은 L3가 개입하지 않기 때문에 방화벽 정책 / ACL 등으로 제어하기가 어렵습니다.

02. 동일 네트워크 대역에서의 통신 차단하는 이유

02-1. 랜섬웨어·악성코드 등의 감염 확산 방지

L2 통신 구조에서의 바이러스 확산

PC A가 악성코드가 담긴 파일을 다운로드하면, 악성코드는 SMB, WMI 등을 통해 같은 네트워크 대역의 PC들을 공격하기 시작합니다.
동일 네트워크 대역에서의 통신을 차단(L2 Isolation)하게 되면 PC가 바이러스에 감염되더라도 확산을 방지할 수 있습니다. 

02-2. 제로 트러스트(ZERO TRUST) 아키텍처 구축

제로 트러스트에서의 네트워크 경계 (출처: https://toss.tech/article/22565)

기존 레거시한 Trust / Untrust 기준에서 벗어나, 같은 내부 네트워크도 신뢰하지 않는것이 제로 트러스트입니다.
최소 권한 원칙을 적용함과 동시에 항상 명시적인 검증으로 안전한 리소스임을 증명하는것이 새로운 보안의 기준이라고 보고 있습니다.
내부 네트워크 통신의 차단은 이러한 레거시한 규칙에서 벗어나 제로 트러스트 아키텍처를 구축할 수 있는 시작점입니다.

02-3. 트래픽 모니터링 및 추적성 확보

L2 Proxy를 통해 동일 네트워크 대역에서의 통신을 차단한 모습

포트 미러링을 사용하면 L2 통신을 볼 수는 있지만, 모니터링 하려는 모든 포트를 미러링 해야 한다는 점과 성능의 부담이 있습니다.
L2 Proxy를 이용하여 네트워크 통신을 차단하면 동일 네트워크 대역에서의 통신도 모니터링이 가능하다는 장점이 있습니다.
또한, 모니터링을 통해 어떤 사용자가 무슨 트래픽을 주기적으로 발생시키는지를 추적하여 잠재적인 위협을 갖고 있는지도 검사할 수 있습니다.

03. 동일 네트워크 대역에서의 통신 차단 방법

동일 네트워크 대역에서의 통신을 차단하려면 3가지의 절차를 달성하여야 합니다.
  - Switch Level에서의 L2 통신 차단 (= Switch에서의 Flood 차단)
  - ARP Request를 FortiGate에서 응답 (= Proxy ARP)
  - 방화벽 정책으로 트래픽 허용 혹은 차단

03-1. Swtich Level에서의 L2 통신 차단

차단하고자 하는 인터페이스에서 Block intra-VLAN taffic 기능 활성화

FortiGate에서 같은 네트워크 대역에서의 통신을 차단하고자 하는 인터페이스 설정에 있는 Block intra-VLAN traffic를 활성화합니다.
기능을 활성화하면, Incoming Interface와 Outgoing Interface가 같은 경우, inter-VLAN으로 인식하고 해당 트래픽을 Drop하게 됩니다.


Fortilink 구조에서 Block intra-VLAN traffic를 활성화시켰을 때, FortiSwitch Config

Fortilink가 구성되어 있다면 Block intfa-VLAN traffic를 활성화 시켰을 때 FortiSwitch로 명령어가 Push됩니다.
그래서 해당 VLAN 인터페이스에서 access-vlan이 자동으로 활성화 됩니다.

access-vlan은, 같은 VLAN으로 할당되어 있는 포트 간 L2 브리지를 비활성화합니다.
그러면 Switch는 자연스럽게 trunk port로 트래픽을 전달하게 되고, FortiGate로 도달하게 됩니다.

03-2. ARP Request를 FortiGate에서 응답

PC A에서 PC B로 정상적으로 통신하려면 결국 PC B는 PC A의 ARP Request를 받고 ARP Reply를 보내야 합니다.
하지만 ARP Request를 FortiGate에서 받고 있기 때문에 PC B는 응답을 받을 수 없어 아직 통신이 불가능한 상태입니다.

Proxy-ARP 설정

config system proxy-arp 설정을 통해, FortiGate가 대신 응답하고자 하는 인터페이스와 IP Range를 지정합니다.
이제 동일 네트워크 대역에서의 통신은 FortiGate가 모두 ARP Reply를 보내게 되고, 모든 목적지는 FortiGate를 바라보게 됩니다.

03-3. 방화벽 정책으로 트래픽 허용 혹은 차단

FortiGate CLI 명령어

FortiGate는 인터페이스를 Switch Type으로 구성하게 되면 L2 통신을 최적화 하기 위해 traffic redirect를 동작합니다.
config system global 설정에서 allow-traffic-redirect를 비활성화하게 되면 모든 트래픽가 CPU 연산을 거치게 되며, 이로 인해 방화벽 정책을 통해 허용 혹은 차단이 결정됩니다.

같은 네트워크 대역에서의 통신 정책
L2 Proxy를 통해 동일 네트워크 대역에서의 통신을 차단한 모습

마지막으로, 같은 네트워크 대역에서의 통신을 제어하기 위한 방화벽 정책을 생성하면 모든 작업이 완료됩니다.