1. 토폴로지

이번 글에서는 Cisco ASA 방화벽을 활용해 내부망 보호와 외부 서비스 제공 구조를 구성했습니다~
- 내부 사용자 → 외부 통신 (PAT)
- DMZ 서버 → 외부 공개 (Static NAT)
- 외부 → DMZ 웹 서버 접근 제어 (ACL)
- 내부망 보호 (외부 → 내부 차단)
네트워크 구성
- ASA 인터페이스
- Outside: 203.0.113.2/24
- Inside: 192.168.10.1/24
- DMZ: 192.168.20.1/24
- 단말
- Linux Client: 192.168.10.10 / GW 192.168.10.1
- DMZ Server: 192.168.20.10 / GW 192.168.20.1
- Outside Linux: 203.0.113.100 / GW 203.0.113.2
2. ASA 기본 설정
1) 인터페이스 설정

interface g0/0
nameif outside ! 외부 네트워크 인터페이스 이름 지정
security-level 0 ! 가장 낮은 보안 레벨 (외부)
ip address 203.0.113.2 255.255.255.0 ! 외부 IP 설정
no shutdown ! 인터페이스 활성화
interface g0/1
nameif inside ! 내부 네트워크 인터페이스 이름 지정
security-level 100 ! 가장 높은 보안 레벨 (내부)
ip address 192.168.10.1 255.255.255.0 ! 내부 게이트웨이 IP
no shutdown
interface g0/2
nameif dmz ! DMZ 인터페이스 이름 지정
security-level 50 ! 중간 보안 레벨
ip address 192.168.20.1 255.255.255.0 ! DMZ 게이트웨이 IP
no shutdown
각 인터페이스에 IP 주소와 nameif, security-level을 설정했습니다.
- Inside (100) → Outside (0) : 허용 (내부 사용자의 인터넷 사용)
- Outside (0) → Inside (100) : 차단 (외부 공격 차단)
- DMZ (50) : 중간 영역 (제한적 접근 허용)
ASA는 보안 레벨을 기준으로 다음과 같이 동작합니다.
- 높은 보안 레벨 → 낮은 보안 레벨 : 허용
- 낮은 보안 레벨 → 높은 보안 레벨 : 차단
2) Default Route 설정
route outside 0.0.0.0 0.0.0.0 203.0.113.1
! 모든 목적지(0.0.0.0/0)를 외부 게이트웨이(203.0.113.1)로 전달
Default Route는 외부 네트워크로 나가는 트래픽의 경로를 지정하는 설정입니다.
3. NAT 설정
1) 내부 → 외부 (PAT)

object network INSIDE-NET
subnet 192.168.10.0 255.255.255.0 ! 내부 네트워크 정의
nat (inside,outside) dynamic interface
! inside → outside로 나갈 때 ASA의 외부 IP로 변환 (PAT)
! 여러 내부 사용자들이 하나의 공인 IP를 공유
내부 네트워크는 사설 IP를 사용하기 때문에 외부와 직접 통신할 수 없습니다. 이를 해결하기 위해 PAT를 사용하여 내부 IP를 외부 인터페이스 IP로 변환합니다~
2) DMZ 서버 → 외부 공개 (Static NAT)

object network DMZ-SERVER
host 192.168.20.10 ! DMZ 서버 실제 IP 정의
nat (dmz,outside) static 203.0.113.10
! 외부에서 203.0.113.10으로 들어오면 192.168.20.10으로 전달
! 1:1 NAT (서버 공개용)
Static NAT는 내부 서버를 외부에 공개하기 위한 방식으로, 내부 IP와 외부 IP를 1:1로 매핑합니다. 이번 실습에서는 DMZ에 위치한 웹 서버(192.168.20.10)를 외부 IP인 203.0.113.10으로 매핑했습니다.
이 설정을 통해 외부 사용자는 내부 서버의 실제 IP를 알 필요 없이, 공인 IP로 접속하면 ASA가 자동으로 내부 서버로 트래픽을 전달하게 됩니다.
3) show nat

show nat 명령어를 통해 현재 NAT 정책을 확인할 수 있습니다.
- Inside → Outside : dynamic PAT
- DMZ → Outside : static NAT
또한 translate hit 수치를 통해 실제로 NAT이 얼마나 사용되었는지(실제 트래픽이 얼마나 발생했는지)도 확인할 수 있습니다.
4) show xlate

show xlate는 실제 NAT 변환 결과를 보여줍니다.
- 어떤 내부 IP가 어떤 외부 IP로 변환되었는지 확인 가능
- 트래픽이 발생해야 생성됨
4. ACL 설정
1) 외부 → DMZ 웹만 허용
access-list OUTSIDE-IN permit tcp any host 192.168.20.10 eq 80
! 외부(any)에서 DMZ 서버(192.168.20.10)의 80번 포트(HTTP) 허용
access-group OUTSIDE-IN in interface outside
! ACL을 outside 인터페이스의 inbound 방향에 적용
! (적용해야 실제 동작함)
외부에서 DMZ 웹 서버로의 HTTP(80번 포트) 트래픽만 허용했습니다.
2) ICMP 처리

inspect icmp 설정을 통해 ping 요청에 대해 정상 응답할 수 있도록 했습니다~
5. Linux 서버 설정
1) 내부 클라이언트

ip addr add 192.168.10.10/24 dev eth1
# 내부 IP 설정
ip route add default via 192.168.10.1
# ASA inside 인터페이스를 게이트웨이로 설정
내부 클라이언트는 ASA의 inside 인터페이스를 게이트웨이로 설정하여 외부 및 DMZ와 통신할 수 있도록 했습니다~
2) DMZ 웹 서버

ip addr add 192.168.20.10/24 dev eth1
# DMZ 서버 IP 설정
ip route add default via 192.168.20.1
# ASA dmz 인터페이스를 게이트웨이로 설정
DMZ 서버는 외부에 공개되는 서비스 역할을 합니다. IP와 게이트웨이를 설정한 후, 간단한 HTTP 서버를 실행하여 테스트용 웹 서비스를 구성했습니다~

echo "HELLO DMZ SERVER" > index.html
# 테스트용 웹 페이지 생성
python3 -m http.server 80
# 80번 포트로 간단한 HTTP 서버 실행
웹 서버 실행합니다~
3) 외부 클라이언트

6. 통신 테스트
1) ASA → 내부/외부/DMZ

ASA에서 각 네트워크로 ping 테스트하여 인터페이스와 라우팅이 정상적으로 구성되었는지 확인했습니다~
2) 내부 → DMZ 웹서버

내부 클라이언트에서 DMZ 서버로 HTTP 요청을 보낸 결과, 정상적으로 웹 페이지가 출력됐습니다~
3) 내부/DMZ → 외부


내부 및 DMZ에서 외부로 ping 테스트를 수행한 결과 정상적으로 통신되었고, 이는 PAT 설정이 정상적으로 동작하고 있음을 보여줍니다~
4) 외부 → DMZ 웹 서버

외부 클라이언트에서 공인 IP인 203.0.113.10으로 HTTP 요청을 보낸 결과, DMZ 웹 서버의 페이지가 정상적으로 출력됐습니다~
이는 Static NAT와 ACL이 함께 정상적으로 동작하고 있음을 의미합니다.
끝.
'Security > Firewall & VPN' 카테고리의 다른 글
| [Cisco ASA] IPsec VPN Basic (+ Wireshark) (0) | 2026.06.05 |
|---|---|
| Cisco FMC(Firewall Management Center) (0) | 2025.10.01 |
| Cisco FTD(Firepower Threat Defense) (0) | 2025.09.29 |
| Cisco ASA ASDM (4) - NAT 및 ACL 설정(외부→내부 접속) (0) | 2025.09.26 |
| Cisco ASA ASDM (3) - 내부 서버 구성 및 NAT 설정 (0) | 2025.09.26 |