Network

네트워크 기초 정리 :: VLAN과 네트워크 분리

gamjadori 2026. 9. 20. 13:35
728x90

네트워크 기초 정리 :: VLAN과 네트워크 분리


VLAN(Virtual LAN, 가상 랜)이란
물리적으로는 하나로 연결된 네트워크를, 논리적으로 여러 개의 독립된 네트워크로 쪼개는 기술
같은 스위치, 같은 케이블을 쓰지만 논리적으로는 완전히 다른 네트워크처럼 취급됨

왜 필요한가
물리적으로 스위치나 케이블을 부서마다, 서버마다 따로 깔면 비용도 많이 들고 관리도 복잡함
VLAN을 쓰면 장비 하나로 여러 네트워크를 논리적으로 운영할 수 있음

보안 관점에서 중요한 이유
같은 네트워크(같은 브로드캐스트 도메인)에 있으면, 그 안의 장비들은 기본적으로 서로 통신 가능하고 트래픽도 어느 정도 보임
웹서버가 공격당해서 뚫렸을 때, DB서버가 같은 네트워크에 있으면 공격자가 바로 DB서버로 이동(내부 이동)할 수 있음
VLAN으로 웹서버망과 DB망을 분리해두면, 웹서버가 뚫려도 DB망으로 넘어가려면 라우터나 방화벽을 한 번 더 거쳐야 해서 공격 확산을 늦추거나 막을 수 있음

동작 원리 — VLAN 태그(Tag)
스위치가 각 포트마다 “이 포트는 VLAN 10”, “이 포트는 VLAN 20” 이런 식으로 구분해서 관리
프레임(데이터)에 VLAN 번호를 표시하는 태그(802.1Q 태그)를 붙여서, 스위치들끼리도 어떤 VLAN 소속인지 구분하며 전달

VLAN 간 통신은 어떻게 되나
기본적으로 서로 다른 VLAN끼리는 통신이 안 됨
VLAN 사이에 통신이 필요하면 라우터(또는 L3 스위치)를 거쳐야 함
이 라우터 지점에 방화벽 규칙을 걸어서 “웹서버 VLAN에서 DB VLAN으로는 특정 포트만 허용” 같은 세밀한 통제 가능

실무에서 흔한 VLAN 구성 예시
관리자용 VLAN, 웹서버 VLAN, DB서버 VLAN, 직원 업무용 VLAN, 게스트 Wi-Fi VLAN
각 VLAN 사이는 라우터/방화벽을 거치게 만들어서, 게스트 Wi-Fi에 접속한 사람이 DB서버에 바로 접근하는 일이 없도록 막음

CIDR/서브넷과의 연결
VLAN마다 보통 서로 다른 서브넷(예: VLAN 10은 192.168.10.0/24, VLAN 20은 192.168.20.0/24)을 할당해서 운영

━━━━━━━━━━━━━━━━━━

실습: 웹서버/DB서버/라우터 3대로 VLAN 분리 구현

구성
VM 1 — 웹서버 (VLAN 10, 192.168.10.0/24, 웹서버 IP 192.168.10.10)
VM 2 — DB서버 (VLAN 20, 192.168.20.0/24, DB서버 IP 192.168.20.10)
VM 3 — 라우터 (eth0: 192.168.10.1 / eth1: 192.168.20.1)

각 VM 네트워크 인터페이스 설정

VM 1 (웹서버)
sudo ip addr add 192.168.10.10/24 dev eth0
sudo ip route add default via 192.168.10.1

VM 2 (DB서버)
sudo ip addr add 192.168.20.10/24 dev eth0
sudo ip route add default via 192.168.20.1

VM 3 (라우터)
sudo ip addr add 192.168.10.1/24 dev eth0
sudo ip addr add 192.168.20.1/24 dev eth1

각 VM에서 ip a로 IP 할당 확인

분리 전 상태로 위험성 먼저 확인
VM 1과 VM 2를 임시로 같은 대역에 놓고 VM 1에서 VM 2로 직접 접근
mysql -h VM2의IP -u root -p
결과: 라우터나 방화벽 없이 바로 접속됨 — 분리 안 됐을 때의 위험 확인

라우터 VM에서 IP 포워딩 활성화
sudo sysctl -w net.ipv4.ip_forward=1
확인
cat /proc/sys/net/ipv4/ip_forward
결과: 1로 출력되면 활성화 완료

정책 걸기 전 — 웹서버에서 DB서버로 접근 시도
VLAN 대역으로 재구성한 뒤 시도
mysql -h 192.168.20.10 -u root -p
결과: 라우터에 아직 규칙이 없으면 그냥 통과되어 연결됨

라우터에서 iptables로 정책 걸기
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp –dport 3306 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT

규칙 확인
sudo iptables -L FORWARD -v -n
결과: 3306 포트만 ACCEPT, 나머지는 기본 정책에 의해 DROP

정책 적용 후 재확인 — 허용된 포트
mysql -h 192.168.20.10 -u root -p
결과: 3306 포트는 허용했으므로 정상 접속됨

정책 적용 후 재확인 — 차단된 포트
nc -zv 192.168.20.10 22
결과: 응답 없음 또는 차단됨 — 3306 외에는 막혀있는 것 확인

공격 시나리오 재현
웹서버가 뚫렸다고 가정하고 DB 네트워크 전체 스캔 시도
nmap -p 1-1000 192.168.20.10
결과: 3306 포트만 open으로 나오고 나머지는 filtered 또는 closed로 표시됨 — 웹서버가 뚫려도 DB망 전체가 노출되지 않는다는 것을 직접 증명

정리 명령어 (라우터 VM)
sudo iptables -F FORWARD
sudo iptables -P FORWARD ACCEPT