OCI 서버 접속 안 될 때 — 3계층 방화벽 진단법 (Security List + iptables + Apache) | Data In Hands
OCI 3계층 방화벽 진단 다이어그램

Oracle Cloud 서버에서 "포트를 열었는데도 접속이 안 된다"는 문제를 겪은 적 있나요? OCI는 AWS나 GCP와 달리 3개의 독립적인 방화벽 계층이 존재합니다. 하나라도 막혀있으면 트래픽이 차단됩니다.

이 글은 실제 서브도메인 배포 과정에서 겪은 "Connection refused" 문제를 진단하고 해결한 과정을 정리한 것입니다.

3계층 방화벽 구조

[ 인터넷 요청 ]
1계층: OCI Security List (VCN)
"이 포트로 들어올 수 있나?"
통과
2계층: OS 방화벽 (firewalld)
"OS가 이 포트를 허용하나?"
통과
3계층: Apache 설정
"이 포트에서 Listen하고 있나?"
통과
[ 응답 반환 ]

각 계층에서 막히면 그 이후는 의미가 없습니다. 반드시 1 → 2 → 3 순서로 확인해야 합니다.

실전 사례: 80 포트 "Connection refused"

HTTPS(443)는 정상 접속되는데 HTTP(80)가 거부되는 상황:

# 443: 정상
curl -v https://<서버IP> -k --connect-timeout 10
# HTTP/1.1 403 Forbidden ← Apache 응답 (접속 자체는 됨)

# 80: 거부
curl -v http://<서버IP> --connect-timeout 10
# Connection refused ← 어딘가에서 차단

계층별 진단

1계층 OCI Security List

OCI 콘솔에서 확인:

Networking → Virtual Cloud Networks → VCN → Subnets → Security Lists
→ Ingress Rules 확인

80 포트 규칙이 이미 존재했습니다. 1계층은 통과.

⚠️ 흔한 실수: Ingress Rule 추가 시 Source Port Range에 80을 입력하는 것. Source Port는 클라이언트의 임의 포트입니다. Destination Port Range에 80을 넣어야 합니다. Source Port Range는 비워두세요.
2계층 OS 방화벽 (firewalld + iptables)
# firewalld 서비스 확인
sudo firewall-cmd --list-services
# dhcpv6-client http https ssh ← http 포함 → 통과

# iptables 확인
sudo iptables -L -n | grep -E "80|DROP|REJECT"
# OCI 메타데이터 서비스(169.254.x.x) 규칙만 있음 → 통과

2계층도 문제없었습니다.

3계층 Apache Listen 설정 — 여기가 원인!
# Apache 리스닝 포트 확인
sudo ss -tlnp | grep -E ":80 |:443 "
# 443만 있고 80이 없음! ← 원인 발견

# Listen 설정 확인
grep -r "Listen" /etc/httpd/conf/ /etc/httpd/conf.d/ | grep -v "#"
# /etc/httpd/conf.d/ssl.conf: Listen 443 https ← 443만 있음
# httpd.conf의 Listen 80이 주석 처리됨

OCI WAF가 HTTP→HTTPS 리다이렉트를 해주니까, 서버에서 80을 굳이 안 열어둔 것이었습니다. 직접 연결 서브도메인을 추가하려면 80이 필요합니다:

sudo sed -i 's/^#Listen 80$/Listen 80/' /etc/httpd/conf/httpd.conf
sudo apachectl configtest && sudo systemctl restart httpd

# 확인
sudo ss -tlnp | grep ":80 "
# LISTEN 0 511 *:80 *:* ← 정상

종합 진단 체크리스트

외부에서 서버 접속이 안 될 때, 이 순서대로 확인하세요:

순서확인 대상명령어정상 결과
0DNSdig 도메인 +short서버 IP 표시
1OCI Security List콘솔 → Ingress Rules해당 포트 규칙 존재
2afirewalldsudo firewall-cmd --list-serviceshttp/https 포함
2biptablessudo iptables -L -n | grep DROP해당 포트 DROP 없음
3Apache Listensudo ss -tlnp | grep ":포트 "LISTEN 표시
4Apache 설정sudo apachectl configtestSyntax OK
5에러 로그sudo tail -20 /var/log/httpd/error_log에러 없음

OCI WAF 있을 때의 특수한 상황

OCI WAF를 사용하면 트래픽 경로가 다릅니다:

[ 사용자 ] [ OCI WAF (ZENEDGE) ]
HTTP → 302 HTTPS 리다이렉트 (WAF 레벨)
HTTPS → 서버:443 → Apache

이 구조에서는:

동작설명
서버 80 포트 불필요WAF가 HTTP 리다이렉트를 처리
서버 IP 직접 접속 차단보안 목적 (WAF 우회 방지)
DNS는 서버 IP가 아닌 WAF CNAMExxx.o.waas.oci.oraclecloud.net

WAF를 우회하는 서브도메인(A레코드 직접 연결)을 추가하려면, 서버가 직접 80/443을 받을 수 있어야 합니다. 이때 Security List → OS 방화벽 → Apache Listen 3계층 모두 확인이 필요합니다.

✅ 핵심 교훈: "포트를 열었는데 안 돼요"는 OCI에서 가장 흔한 질문입니다. Security List(1계층)만 확인하고 끝내지 마세요. OS 방화벽(2계층)과 Apache Listen(3계층)까지 반드시 확인해야 합니다. 특히 WAF 환경에서 직접 연결을 추가할 때 3계층에서 막히는 경우가 많습니다.
위로 스크롤