📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 183편
이전 글: 182. Inbound 정책 · 다음 글: 184. Allow와 Deny
Outbound 정책(Egress 정책) 은 내부(사용자망·서버망·DMZ)에서 외부로 시작하는 연결을 통제하는 정책입니다. 많은 조직이 Inbound는 엄격하게 막으면서 Outbound는 "내부 → 외부 전체 허용"으로 두는데, 이 경우 침해 이후의 단계가 모두 자유로워집니다.
| 침해 이후 단계 | Outbound 연결의 역할 |
|---|---|
| 악성코드 추가 다운로드 | 외부 서버에서 도구를 내려받음 |
| C2(명령제어) 통신 | 외부 서버와 주기적으로 통신하며 명령 수신 |
| 데이터 유출 | 내부 자료를 외부로 전송 |
| 외부 공격의 경유지 | 내부 호스트가 다른 조직을 공격·스캔 |
Inbound 정책(182. Inbound 정책)이 "들어오지 못하게", Outbound 정책은 "들어왔더라도 밖과 연락하지 못하게" 하는 역할입니다.
Outbound 정책은 "무엇이, 어디로, 어떤 경로로 나갈 수 있는가"를 구역별로 정합니다. 핵심은 직접 나가는 길을 줄이고 통제 지점(프록시·내부 DNS·메일 게이트웨이)으로 모으는 것입니다.
[사용자 PC]
├─ 웹(80/443) ──→ [웹 프록시] ──→ 인터넷 ← 프록시만 외부 웹 허용
├─ DNS(53) ────→ [내부 DNS] ──→ 외부 DNS ← 내부 DNS만 외부 53 허용
├─ 메일 ────────→ [메일 서버] ──→ 외부 25 ← 메일 서버만 외부 25 허용
└─ 그 외 직접 외부 연결 → [경계 방화벽] 차단 + 로그
[서버망] 업데이트 저장소 등 지정 목적지만 허용
[DMZ] 기본 차단 (응답만), 필요한 목적지만 개별 허용
서비스별 Outbound 허용 원칙의 예입니다.
| 서비스 | 허용 출발지 | 원칙 |
|---|---|---|
| 웹 (TCP 80/443) | 프록시 서버 | 사용자 PC의 직접 외부 웹 연결 차단 |
| DNS (UDP·TCP 53) | 내부 DNS 서버 | PC가 외부 DNS로 직접 질의하는 것 차단 |
| SMTP (TCP 25) | 메일 서버 | PC의 직접 25 연결은 스팸·악성코드 징후 |
| NTP (UDP 123) | 내부 NTP 서버 | 시간 동기화는 내부 서버 경유 |
| 그 외 포트 | 요청·승인된 출발지·목적지 | 기본 차단 |
output은 기본 허용이 일반적입니다. 서버 단위 Outbound 통제는 주로 네트워크 방화벽이 맡고, 중요 서버만 호스트 output 정책을 추가합니다.실습 예시 — 방화벽 VM(nftables)에서 사용자망(ens37, 192.168.10.0/24)의 외부(ens33) 통신을 프록시와 내부 DNS로 모으는 forward 정책입니다(Rocky/Ubuntu 공통, 180. DMZ의 inet fw 테이블 가정). 값은 예시(값은 환경마다 다름)입니다.
# table inet fw { ... } 안의 chain 부분만 표시, 프록시 192.168.10.5, 내부 DNS 192.168.10.53
chain forward {
type filter hook forward priority 0; policy drop;
ct state established,related accept
# 출발지 검증: 사용자망 인터페이스에서 온 패킷은 사용자망 출발지만
iifname "ens37" ip saddr != 192.168.10.0/24 counter log prefix "EGRESS-SPOOF " drop
iifname "ens37" oifname "ens33" ip saddr 192.168.10.5 tcp dport { 80, 443 } accept
iifname "ens37" oifname "ens33" ip saddr 192.168.10.53 meta l4proto { tcp, udp } th dport 53 accept
iifname "ens37" oifname "ens33" counter log prefix "EGRESS-DENY " drop
}
실습 예시 — Rocky의 firewalld(0.9 이상)는 구역 간 통과 트래픽을 policy 객체로 제어합니다(179. Network Segmentation에서 만든 users zone과 기본 external zone 가정).
sudo firewall-cmd --permanent --new-policy users-to-ext
sudo firewall-cmd --permanent --policy users-to-ext --add-ingress-zone users
sudo firewall-cmd --permanent --policy users-to-ext --add-egress-zone external
sudo firewall-cmd --permanent --policy users-to-ext --set-target REJECT
sudo firewall-cmd --permanent --policy users-to-ext \
--add-rich-rule='rule family="ipv4" source address="192.168.10.5" service name="https" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --info-policy users-to-ext
실습 예시 — Ubuntu 호스트 방화벽(ufw)에서 서버 자신의 Outbound를 제한하는 경우입니다.
sudo ufw default deny outgoing
sudo ufw allow out to 192.168.10.53 port 53 proto udp
sudo ufw allow out to 192.168.10.5 port 3128 proto tcp # 프록시 포트는 환경마다 다름
sudo ufw status verbose
⚠️ deny outgoing은 패키지 업데이트·시간 동기화·로그 전송까지 막을 수 있으므로, 필요한 목적지를 먼저 정리한 뒤 적용합니다.
📷 [실습 화면 삽입 위치] 사용자망 VM에서 외부 DNS(예: 198.51.100.53)로 직접 질의했을 때 실패하고, 방화벽 VM 커널 로그에
EGRESS-DENY접두어와 DPT=53이 기록된 화면
| 흔적 | 의미 |
|---|---|
| 프록시를 우회한 직접 외부 웹 시도(차단 로그) | 프록시 설정을 따르지 않는 프로세스, 악성코드 가능성 |
| PC → 외부 53 직접 질의 | 비인가 DNS 사용, DNS 터널링 가능성 |
| PC → 외부 25 연결 | 스팸 발송형 악성코드 가능성 |
| 서버·DMZ 출발 신규 외부 목적지 | 침해 후 다운로드·C2 가능성 |
| 일정 간격으로 반복되는 소량 연결 | C2 비콘(Beacon) 패턴 가능성 |
관제자가 확인할 질문
오탐 주의: 소프트웨어 업데이트, 클라우드 동기화, 보안 에이전트는 정상적으로 반복 연결을 만듭니다. 목적지 도메인·서명된 프로세스 정보와 함께 판단합니다. Outbound 로그 분석은 264. Outbound Policy에서 다룹니다.
default deny outgoing으로 구성할 수 있습니다.