본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

VyOS Firewall

by YUNZEE 2025. 2. 11.
728x90

📌VyOS Firewall

- Zone 기반 방화벽.

VyOS에서는 방화벽을 "firewall rule set" 형태로 설정하고, 이를 특정 인터페이스나 Zone(영역)에 적용할 수 있어.

 

✅Stateful Firewall

  • 연결 상태를 추적해서 자동으로 응답 패킷을 허용할 수 있어.
  • 예를 들어, 내부에서 외부로 요청을 보냈다면, 응답 패킷은 별도의 규칙 없이도 허용됨.
  • 하지만 ACL(Access Control List)은 Stateless라서 수동으로 왕복 트래픽을 설정해야 해.

✅Zone 기반 방화벽(Zone-based Firewall, ZBF)

  • Zone(영역)을 정의하고, 특정 Zone 간의 트래픽을 제어할 수 있어.
  • zone-policy를 사용해서 공개(public), 내부(private), DMZ 같은 영역을 나누고 설정할 수 있음.

✅인터페이스 기반 Firewall 설정 가능

  • 특정 인터페이스(예: eth0, eth1)에 직접 방화벽 규칙을 적용할 수도 있음.
  • 하지만 Zone 기반 설정이 더 관리하기 쉬워서 일반적으로 Zone을 많이 사용함.

📌state

state = 세션의 상태

stateful = 상태가 존재하고 기억함, 융통성이 있는 상태임

stateless = 상태가 없고 기억하지 않음, 융통성이 없는 상태임

- 들어왔으면 나갈 때도 기록을 남겨야 됨

- client는 서버로 진입이 가능함, 하지만 돌아올 때는 돌아오는 정책에 맞게 가야 되는데, 디폴트로 모두 막아져 있는 상태임. 하지만 state를 기억하는 statueful 방화벽이기 때문에 이전에 수립되거나 관계가 있는 것들은 밖으로 나갈 수 있음

- port를 열었다고 되는 게 아니라 관련된 서비스를 오픈해야 연결이 됨

- prviate로 들어오면 모든 애들이 차단되는데, 특별히 state에 기록이 남아있는 애들만 허용해 줌 

실습

전에 만들어 둔 vyos를 사용할 것 임

vyos@vyos# delete nat destination 

vyos@vyos# commit

 

private, public, dmz 각 존을 설정.

vyos@vyos# set zone-policy zone public interface eth0
[edit]
vyos@vyos# set zone-policy zone private interface eth1
[edit]
vyos@vyos# set zone-policy zone dmz interface eth2
[edit]
vyos@vyos# comiit

 

- 각 인터페이스(eth0, eth1, eth2)가 속한 zone을 정의

- 외부 통신이 안되고 내부 통신도 안 되는 걸 알 수 있음

- private설정한 순간 mint 존에 있는 거 말고 나머지 외부들이 단절된 걸 알 수 있음

- zone을 설정한 순간 각 존이 폐쇄된다는 사실을 확인 가능 

-  내가 구성할 정책

 

private

private 공간에 외부에서 들어오는 거 불가능

dmz서버에서 들어오는 거 불가능

하지만 private서버에서 외부로 나가는 건 가능 

dmz존으로 가는 거 가능 

 

dmz

dmz존 접근은 http, ssh접근가능 private에서 접근 가능

하지만 dmz에서 외부로 나가는 건 불가능   

private 공간에 외부에서 들어오는 거 가능 설정하기

vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 action accept 

- 허용

vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 state established enable

- 내가 established enable 보낸 요청의 응답을 받아오는 것(public으로 http)
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 state related enable 

-  related는 established와 연결과 연관된 추가 연결을 받아오는 것(ftp)
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 protocol all   

PUBLIC_TO_PRIVATE: 방화벽 규칙 집합의 이름
rule 10: 규칙 번호 (우선순위, 낮을수록 먼저 적용됨)
action drop: 트래픽 차단
destination address 10.10.3.0/24: 내부 네트워크(Private) 대상
protocol all: 모든 프로토콜 차단

 

vyos@vyos# set firewall name PRIVATE_TO_PUBLIC rule 20 action accept
vyos@vyos# set zone-policy zone public from private firewall name PRIVATE_TO_PUBLIC

- 내부에서 외부로 나가게만 만들면 ping을 받아줄 수 없음

- 그래서 외부에서 내부로 들어올 때 받아줄 명령어를 입력해야 됨 

- established or related 된 트래픽을 

 

vyos@vyos# set zone-policy zone private from public firewall name PUBLIC_TO_PRIVATE
vyos@vyos# commit

- 1번 정책 적용

- 1번 정책 적용 후 통신이 잘 되는 걸 확인

- private에서 dmz로 향하는

- 3번을 정책을 적용시켰지만 안된다. 배려해 주는 정책이 없기 때문임

 

- 4번 정책 생성 및 반영

- 3,4 둘 다 반영 후 mint에서 web으로 통신되는 걸 확인.

 

- 적용

public에서 dmz로 http와 ssh 허용.

- 먼저 안되는 걸 확인

 

- 정책 생성

 

- 반영

 

- 반영 후 client에서 web으로 접속이 되는걸 확인

 

vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 61 protocol udp
[edit]
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 61 action accept 
[edit]
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 61 destination port 69
[edit]

- tftp를 허용하기 위한 정책 추가

vyos@vyos# set nat destination rule 200 inbound-interface eth0
[edit]

  • eth0 인터페이스를 통해 들어오는 패킷에 대해서만 DNAT 적용
  • 즉, 외부(인터넷)에서 eth0을 통해 들어오는 트래픽만 변환함

vyos@vyos# set nat destination rule 200 destination port 69
[edit] # 외부에서 69번 포트로 들어오는 트래픽을 잡아라


vyos@vyos# set nat destination rule 200 translation port 69
[edit] # 외부에서 69번 포트로 온 요청을 내부 네트워크의 특정 서버로 전달해라

 

vyos@vyos# set nat destination rule 200 translation address 172.16.101.80
[edit]

  • 외부에서 온 트래픽을 내부 서버(172.16.101.80)로 전달
  • NAT 변환 후 목적지 IP가 172.16.101.80이 됨

vyos@vyos# set nat destination rule 200 protocol udp                  
[edit]
vyos@vyos# commit

 

- tftp를 위한 DNAT 설정

- 클라이언트에서 잘 되는 걸 확인 가능

728x90