OCI 접속 진단: 네트워크 보안 규칙, 호스트 방화벽, Apache 리스너

Oracle Cloud 서버 접속 문제는 네트워크 보안 규칙, 호스트 방화벽, 서비스 리스너를 구분해 진단합니다. 이 글의 세 계층은 진단을 위한 분류이며 OCI에만 존재하는 세 종류의 방화벽을 뜻하지 않습니다. Apache Listen은 서비스 설정입니다. DNS·라우팅·HTTP Host·TLS SNI와 인증서·애플리케이션 응답도 결과에 영향을 줄 수 있습니다.

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

세 가지 접속 진단 범주

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

1 → 2 → 3은 확인 순서의 한 예입니다. 아래 출력과 “통과” 표시는 당시 사례의 단서이며 현재 환경의 정상 판정 기준이 아닙니다. Connection refused만으로 방화벽 차단을 확정할 수 없고, IP 주소에 대한 403도 의도한 VHost·WAF 경유·TLS 인증 성공을 입증하지 않습니다. -k는 인증서 검증을 생략합니다.

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

사례에 제시된 출력은 HTTPS(443)의 403 응답과 HTTP(80)의 연결 거부입니다. 이것만으로 서비스 정상이나 차단 계층을 확정할 수 없습니다.

# 443: 사례 출력 예시
curl -v https://<서버IP> -k --connect-timeout 10
# HTTP/1.1 403 Forbidden ← HTTP 응답 관찰; 의도한 서비스/TLS 검증은 별도

# 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 포트 규칙이 보였지만, 규칙 존재만으로 해당 연결의 허용이나 도달성을 확정할 수 없습니다. 실제 VNIC의 subnet에 연결된 Security Lists와 VNIC가 속한 모든 NSGs의 허용 규칙을 함께 보고, 방향·출발지/목적지·프로토콜·포트·stateful/stateless 처리와 반환 트래픽 조건을 대조해야 합니다.
실제 적용되는 라우팅도 별도로 확인해야 하며, 엔드포인트에 ZPR 보안 속성이 적용되어 있다면 ZPR 정책의 허용 조건도 충족해야 합니다.

⚠️ 출발지·목적지 포트 구분: TCP ingress에서 Source Port Range는 송신 측 포트, Destination Port Range는 수신 서비스의 목적지 포트를 뜻합니다. HTTP 서비스가 80 포트를 사용하는 예에서는 80을 목적지 포트와 대조합니다.
클라이언트의 출발지 포트는 일반적으로 임시 포트이므로 서비스 포트와 같다고 가정하지 마세요. 출발지 포트 제한은 실제 트래픽과 정책에 따라 정하며, 제한하지 않는 경우는 모든 출발지 포트를 뜻합니다. 기존 규칙을 일괄 변경하라는 의미는 아닙니다.
2계층 OS 방화벽 (firewalld + iptables)
# firewalld 서비스 확인
sudo firewall-cmd --list-services
# dhcpv6-client http https ssh ← 서비스 목록 예시; 활성 zone/규칙은 별도 확인

# iptables 확인
sudo iptables -L -n | grep -E "80|DROP|REJECT"
# 사례의 필터링된 목록 예시; 전체 정책/규칙 판정 불가

위 출력만으로는 해당 연결을 호스트 방화벽이 허용하는지 확정할 수 없습니다. zone을 지정하지 않은 서비스 목록은 기본 zone을 대상으로 하므로 실제 인터페이스·source에 적용되는 활성 zone과 다를 수 있습니다.
필터링된 iptables 출력은 체인 기본 정책·규칙 순서·jump 대상·다른 테이블·IPv6를 포함한 전체 ruleset을 보여주지 않습니다. 사용 중인 backend와 유효 runtime 정책을 확인하고 permanent 설정과의 차이도 검토하기 전에는 판정을 보류합니다.

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이 주석 처리됨

80 포트의 리스너가 없다는 관찰은 이 사례의 단서이며, WAF 사용 여부만으로 그 원인이나 필요한 포트를 단정할 수 없습니다.
직접 HTTPS에 80 포트가 항상 필요한 것은 아니지만 HTTP 서비스나 HTTP-01 검증 경로에는 80 도달성 검토가 필요합니다. 아래 변경 예제는 일괄 실행하지 말고 기존 서비스와 origin 보호 경계에 대한 별도 검토 후에만 적용 여부를 결정해야 합니다.

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 *:* ← 리스너 관찰 예시; 종단 간 정상 판정 아님

종합 진단 체크리스트

다음 표의 명령과 결과는 빠른 관찰 단서입니다. DNS 응답은 승인된 직접 연결 또는 프록시 경로와 대조해야 하며, 규칙 존재·DROP 부재·LISTEN·Syntax OK·일부 로그의 오류 부재만으로 종단 간 정상이나 WAF 보호를 확정하지 마세요.

외부 접속 문제를 살펴볼 때 참고할 관찰 항목입니다:

순서확인 대상명령어관찰과 한계
0DNSdig 도메인 +shortDNS 응답을 의도한 직접/프록시 경로와 대조
1OCI Security List콘솔 → Ingress Rules규칙 존재만으로 적용 범위·도달성 판정 불가
2afirewalldsudo firewall-cmd --list-services서비스 목록 일부; 활성 zone·규칙 확인 필요
2biptablessudo iptables -L -n | grep DROP필터링된 출력; DROP 부재로 허용 판정 불가
3Apache Listensudo ss -tlnp | grep ":포트 "리스너 관찰; 외부 도달성은 별도 확인
4Apache 설정sudo apachectl configtest구문 검사 결과; 서비스 정상 보장 아님
5에러 로그sudo tail -20 /var/log/httpd/error_log일부 로그 관찰; 오류 부재로 정상 판정 불가

OCI WAF 있을 때의 특수한 상황

아래 도식·표는 가능한 구성 예시이며, 현재 계정 설정의 검증 결과가 아닙니다. WAF 사용이나 DNS CNAME만으로 origin 직접 접근이 자동 차단되지는 않습니다. 리다이렉트 코드, origin 프로토콜·포트 및 허용 출발지는 실제 설계에 따라 달라집니다.

[ 사용자 ] → [ OCI WAF (ZENEDGE) ]
▸ HTTP → HTTPS 리다이렉트 (설정한 경우; 상태 코드는 정책에 따름)
▸ WAF → origin (설정된 프로토콜·포트)

이 구조에서는:

동작설명
origin 포트 요구사항WAF의 리다이렉트만으로 80 불필요를 단정하지 말고 서비스·검증 경로를 따로 검토
origin 직접 접근 제한WAF 사용만으로 자동 차단되지 않음; 의도한 출발지·경로에 대한 별도 제한 필요
WAF 경유 DNS 구성Edge 정책이 제공한 CNAME과 DNS 구성을 대조; CNAME 자체는 origin 접근 제한이 아님

같은 origin IP에 직접 연결 서브도메인을 추가하기 전에는 기존 WordPress의 Host/SNI와 기본 VHost, 네트워크·애플리케이션 접근 제한을 함께 검토해야 합니다.
정적 사이트를 위한 접근 확대가 다른 사이트의 WAF 경계를 약화하지 않도록 별도 설계·승인이 필요합니다. 이 글만으로 현재 서버에 우회가 가능하다고 결론 내릴 수 없으며, IP 직접 요청을 임의로 시험하지 마세요.

✅ 핵심 교훈: 포트 규칙이 보인다는 사실만으로 외부 접속 성공을 판단할 수 없습니다. 이 글의 세 진단 범주는 네트워크 보안 규칙, 호스트 방화벽, 서비스 리스너를 구분하기 위한 것입니다. Apache Listen은 방화벽이 아니며, 실제 요청 경로에 해당하는 라우팅·DNS·TLS와 WAF/origin 접근 제한도 별도로 검토해야 합니다. 특정 계층이 가장 흔한 원인이라고 단정하거나 진단 시간과 해결을 보장하지 않습니다.
위로 스크롤