DOCS/journey/troubleshooting/260303_51123_ufw_외부포트_차단_하드닝.md

2.7 KiB

260303 51123 서버 UFW 외부 포트 차단 하드닝

발생 일시

2026-03-03 10:43~10:53 KST

배경

외부 공개 포트 점검 중, 운영 원칙(외부는 80/443 + 관리 SSH만 공개) 대비 과다 노출이 확인됨.

확인된 원인

  • UFW에서 아래 포트가 Anywhere/Anywhere (v6)로 허용되어 있었음.
    • 5432/tcp (PostgreSQL)
    • 3000/tcp (Gitea 직접 포트)
    • 7474/tcp (Neo4j HTTP)
  • 이 상태는 도메인/nginx 경유가 아닌 직접 포트 접근 경로를 열어두는 구성임.

조치 내용

실서버(51123)에서 아래 명령으로 공개 허용 규칙 제거:

sudo ufw --force delete allow 5432/tcp
sudo ufw --force delete allow 3000/tcp
sudo ufw --force delete allow 7474/tcp

검증 결과

조치 직후 실시간 검증:

  • 도메인 응답
    • https://ro-being.comHTTP/2 200
    • https://git.ro-being.comHTTP/2 200
    • https://auth.ro-being.comHTTP/2 404 (기존 동작 동일)
  • 내부 서비스 헬스
    • http://127.0.0.1:9000/health200
    • http://127.0.0.1:8000/health200
  • UFW 규칙
    • 5432/3000/7474Anywhere, Anywhere (v6) 허용 규칙 삭제 확인

영향도

  • 사용자 도메인 경유 트래픽 영향 없음
  • git.ro-being.com 기반 Gitea 사용 영향 없음
  • 직접 포트 우회 접근 경로만 차단됨

현재 공개 정책(2026-03-03 기준)

  • 외부 공개 유지: 80/tcp, 443/tcp, 51123/tcp(관리 SSH)
  • 내부/제한 네트워크 허용: 7687, 7474(172.17.0.0/16)

후속 권장

  • Docker 퍼블리시 포트(8000/8100/8200/9000/9200/9600)의 외부 노출 축소(가능한 127.0.0.1 또는 내부 네트워크만 사용)
  • PostgreSQL listen_addresses, pg_hba.conf를 내부 대역 기반으로 추가 제한

사후 정정 (2026-03-03 11:40 KST)

초기 차단 조치만으로는 충분하지 않았고, 실제 운영 의존 경로를 일부 누락한 상태였다.

  • 누락된 의존 경로:
    • 51124 직접 경로: 192.168.219.52 -> 51123:5432
    • Docker 브리지 경로: 172.16.0.0/12 -> 51123:5432 (예: auth-server host.docker.internal:5432)
  • 결과:
    • auth-server /auth/naverworks/passport/refresh 타임아웃
    • skill-email /messages* 연쇄 500

복구 시 최종 반영한 규칙:

sudo ufw allow from 192.168.219.52 to any port 5432 proto tcp
sudo ufw allow from 172.16.0.0/12 to any port 5432 proto tcp

최종 정책(정정):

  • "5432는 무조건 전체 차단"이 아니라, 실제 의존 출발지 단위 최소 허용이 원칙.
  • 하드닝 변경 시 반드시 컨테이너 env 기반 의존성 스캔 + 변경 직후 연계 API 실호출을 완료해야 한다.