EdgeRouter - Zone 정책 CLI 예제¶
download at 2017-06-14T00:20:00Z origin
Overview
이 문서는 zone 기반 방화벽을 설정하는 방법에 대하여 서술합니다.
EdgeOS는 ACL 기반 방화벽과 zone 기반 방화벽 모두 지원합니다. 하지만 현재의 zone 기반 방화벽은 CLI에서만 설정이 가능합니다. ACL 기반 방화벽과 zone 기반 방화벽의 차이를 알고 싶다면, 다음 문서를 참고하세요요: ACL vs. Zones
다음 3개의 네트워크가 존재한다고 가정합니다:
- WAN - 172.16.10.0/24, 2001:0DB8:0:9999::0/64
- LAN - 192.168.100.0/24, 2001:0DB8:0:AAAA::0/64
- DMZ - 192.168.200.0/24, 2001:0DB8:0:BBBB::0/64
본 예제는 라우터 온 어 스틱 (router on a stick)을 사용하였지만, 가지고 있는 NIC에 적용이 가능합니다.
논리 네트워크 다이어그램
- Internet – 192.168.200.100 – tcp/80
- Internet – 192.168.200.100 – tcp/443
- Internet – 192.168.200.100 – tcp/25
- Internet – 192.168.200.100 – tcp/53
- EdgeOS 는 DHCP, DNS forwarder, NAT, router, firewall 역할을 담당.
- 192.168.200.200/2001:0DB8:0:BBBB::200 는 내부/외부 DNS, web, mail (SMTP/IMAP) 서버.
- 192.168.100.10/2001:0DB8:0:AAAA::10 는 EdgeOS로 SSH 접근이 가능한관리자 콘솔.
- LAN 과 DMZ 호스트는 기본적으로 web, FTP, SSH의 아웃바운드로 접근이 가능.
- LAN 은 DMZ 리소스에 접근이 가능.
- DMZ 는 LAN 리소스에 접근 불가.
- 인바운드 WAN은 DMZ 호스트에 연결.
물리 네트워크 다이어그램
EdgeOs 인터페이스는 .1/:1 각 주소에 할당. 아래는 VLAN의 포트 할당입니다:
- WAN - VLAN 10
- LAN - VLAN 20
- DMZ - VLAN 30
설정은 다음과 같이 진행합니다:
interfaces {
ethernet eth0 {
vif 10 {
address 172.16.10.1/24
address 2001:db8:0:9999::1/64
}
vif 20 {
address 192.168.100.1/24
address 2001:db8:0:AAAA::1/64
}
vif 30 {
address 192.168.200.1/24
address 2001:db8:0:BBBB::1/64
}
}
}
Zone 기본
각 인터페이스는 하나의 zone에 할당됩니다. 인터페이스는 물리, 터널 (VPN, PPTP, GRE 등)과 같은 가상 인터페이스 모두 동일하게 처리합니다.
zone A에서 zone B로 트래픽이 이동합니다. 이러한 트래픽 이동을 zone 페어 디렉션 (zone-pair-direction)이라고 합니다. 예를 들어, A->B, B->A로 트래픽이 이동할 경우, 2개의 zone 페어 디렉션이 있다고 정의합니다.
룰 셋은 zone 페어 디렉션 단위로 생성합니다.
본 문서에서는 zone 페어 디렉션의 룰셋 이름을 ZoneA-ZoneB와 같이 디렉션의 방향으로 정의합니다. EdgeOS에서는 중복 룰셋 이름을 허용하지 않습니다. IPv6 룰셋과 같이 이름이 중복되는 경우, 뒤에 -6을 붙여서 (LAN-DMZ-6과 같이) 혼동을 피하도록 하였습니다. 이러한 방식은 자동 완성과 유일성을 보장합니다.
본 예제에서는 4개의 zone이 있습니다:
- LAN
- WAN
- DMZ
- Local
Note: 로컬 zone은 방화벽입니다.
독자의 컴퓨터가 LAN에 연결되어 있고 EdgeOS box로 연결이 SSH로 이루어 진다면, LAN-Local 룰셋이 필요합니다. 웹 페이지에서 EdgeOS box로 접근하고자 한다면, Local-LAN 룰셋이 필요합니다.
룰의 이름을 의미있게 명명하도록 하는 것이 좋습니다. 룰의 수가 증가할 수록 이름으로 그 의미를 파악해야하기 때문입니다.
Rule 1 - State Established, Related
Rule 2 - State Invalid
Rule 100 - ICMP
Rule 200 - Web
Rule 300 - FTP
Rule 400 - NTP
Rule 500 - SMTP
Rule 600 - DNS
Rule 700 - DHCP
Rule 800 - SSH
Rule 900 - IMAPS
default-action drop
enable-default-log
기본 액션과 로깅
Zone과 룰셋은 모두 기본 액션을 포함하고 있습니다. Zone 정책을 사용할 때에는 기본 액션은 룰 10000으로 표현됩니다.
모든 트래픽을 로그에 남기는 것은 좋은 습관입니다. 연결 이슈를 처리하는 트러블 슈팅 과정에서 많은 도움을 받을 수 있습니다. enable-default-log 옵션은 기본 행위 트래픽 로그를 남길 수 있게 합니다.
기본값으로, iptables는 생성된 세션의 트래픽도 허용하지 않으므로 명시적으로 허용하도록 설정해야 합니다. Rule 1은 현재 연결된 세션과 관련있는 패킷을 처리하고, Rule 2는 유효하지 않은 상태의 패킷을 버리고, 로깅합니다. 네트워크의 가장 많은 트래픽을 담당하는 것이 현재 연결된 세션에 대한 트래픽이기 때문에 연결된 세션과 관련있는 패킷을 처리하는 룰이 Rule1으로 명명되었습니다. 유효하지 않은 패킷을 처리하는 rule은 유효하지 않은 상태의 패킷을 의도하지 않은 rule에 의해 처리되는 것을 방지하기 위함입니다. 가장 많은 트래픽을 유발하는 룰을 가장 상단에 위치시키는 방법은 볼륨이 큰 환경에서 CPU 부하를 적게 할 수 있습니다.
- 인터페이스를 생성하고 설정한다.
- 각 zone 페어 디렉션 단위로 룰셋을 생성한다. 각 룰셋은 적어도 3개 이상의 상태 룰을 포함해야 한다.
- zone 정책을 설정한다.
Zone은 기본 행위로 패킷을 허용하지 않습니다. 기본 액션은 패킷을 버리거나 거절합니다. 이 기본 액션을 잘 기억하여, zone에 인터페이스를 할당하고 커밋하였으 때 커넥션이 거절되지 않도록 유의하세요. 특히:
- EdgeOS로 SSH 연결을 하려는 경우
- 로컬이나 zone에 연결을 하고자 하는 경우
- SSH와 연결된 세션에 대한 룰이 존재하지 않는 경우
- WAN – DMZ:192.168.200.200 – tcp/80
- WAN – DMZ:192.168.200.200 – tcp/443
- WAN – DMZ:192.168.200.200 – tcp/25
- WAN – DMZ:192.168.200.200 – tcp/53
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/80
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/443
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/25
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/53
- DMZ - Local - tcp/53
- DMZ - Local - tcp/123
- DMZ - Local - udp/67,68
- LAN - Local - tcp/53
- LAN - Local - tcp/123
- LAN - Local - udp/67,68
- LAN:192.168.100.10 - Local - tcp/22
- LAN:2001:0DB8:0:AAAA::10 - Local - tcp/22
- LAN - WAN - tcp/80
- LAN - WAN - tcp/443
- LAN - WAN - tcp/22
- LAN - WAN - tcp/20,21
- DMZ - WAN - tcp/80
- DMZ - WAN - tcp/443
- DMZ - WAN - tcp/22
- DMZ - WAN - tcp/20,21
- DMZ - WAN - tcp/53
- DMZ - WAN - udp/53
- Local - WAN - tcp/80
- Local - WAN - tcp/443
- Local - WAN - tcp/20,21
- Local - WAN - tcp/53
- Local - WAN - udp/53
- Local - WAN - udp/123
- Local - DMZ - tcp/25
- Local - DMZ - tcp/67,68
- Local - DMZ - tcp/53
- Local - DMZ - udp/53
- Local - LAN - tcp/67,68
- LAN - DMZ - tcp/80
- LAN - DMZ - tcp/443
- LAN - DMZ - tcp/993
- LAN:2001:0DB8:0:AAAA::10 - DMZ:2001:0DB8:0:BBBB::200 - tcp/22
- LAN:192.168.100.10 - DMZ:192.168.200.200 - tcp/22
Zone 룰셋
4개의 zone이 존재하므로, 다음의 룰셋을 설정해야합니다:
- LAN-WAN
- LAN-Local
- LAN-DMZ
- WAN-LAN
- WAN-Local
- WAN-DMZ
- Local-LAN
- Local-WAN
- Local-DMZ
- DMZ-LAN
- DMZ-WAN
- DMZ-Local
name wan-lan {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
}
}
아래는 IPv6 DMZ-WAN의 룰셋 설정입니다.
ipv6-name dmz-wan-6 {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
rule 100 {
action accept
log enable
protocol ipv6-icmp
}
rule 200 {
action accept
destination {
port 80,443
}
log enable
protocol tcp
}
rule 300 {
action accept
destination {
port 20,21
}
log enable
protocol tcp
}
rule 500 {
action accept
destination {
port 25
}
log enable
protocol tcp
source {
address 2001:db8:0:BBBB::200
}
}
rule 600 {
action accept
destination {
port 53
}
log enable
protocol tcp_udp
source {
address 2001:db8:0:BBBB::200
}
}
rule 800 {
action accept
destination {
port 22
}
log enable
protocol tcp
}
}
Zone 정책 생성
set zone-policy zone dmz default-action drop
set zone-policy zone dmz interface eth0.30
위의 설정은 LAN에서 DMZ로 향하는 트래픽에 대한 IPv6 룰셋을 세팅하는 경우입니다. zone 정책 방화벽의 문법은 조금 난해하지만, 거꾸로 생각하면 매우 직관적입니다.
set zone-policy zone dmz from lan firewall ipv6-name lan-dmz-6
Note:해당 예제는 완성본이 아닙니다.
IPv6 터널
- LAN-TUN
- LAN-Local
- LAN-DMZ
- TUN-LAN
- TUN-Local
- TUN-DMZ
- Local-LAN
- Local-TUN
- Local-DMZ
- DMZ-LAN
- DMZ-TUN
- DMZ-Local
Note:WAN은 IPv6 속성을 가지고 있지 않기 때문에 WAN과 관련된 정책은 존재하지 않습니다.
rule 400 {
action accept
destination {
address 172.16.10.1
}
log enable
protocol 41
source {
address ip.of.tunnel.broker
}
}
Note: UPNP2 서비스가 활성화되면 zone 기반 방화벽이 동작합니다.