diff --git a/troubleshooting/250921_nginx_auth_gateway_log_analysis.md b/troubleshooting/250921_nginx_auth_gateway_log_analysis.md new file mode 100644 index 0000000..9906c9f --- /dev/null +++ b/troubleshooting/250921_nginx_auth_gateway_log_analysis.md @@ -0,0 +1,158 @@ +# nginx, auth-server, gateway 로그 분석 결과 + +## 발생 일시 +2025년 9월 21일 + +## 문제 요약 +nginx, auth-server, robeing-gateway 로그 분석 중 발견된 여러 이슈들 + +## 발견된 문제들 + +### 1. nginx 로그 권한 문제 +**증상** +- 9월 16일 00:00:05 로그 로테이션 시점에 권한 오류 발생 +- `/var/log/nginx/access.log`와 `error.log` 파일 열기 실패 + +**로그** +``` +2025/09/16 00:00:05 [emerg] 853550#853550: open() "/var/log/nginx/access.log" failed (13: Permission denied) +2025/09/16 00:00:05 [emerg] 853550#853550: open() "/var/log/nginx/error.log" failed (13: Permission denied) +``` + +**영향** +- 로그 로테이션 시 일시적 로깅 실패 +- 모니터링 및 디버깅 어려움 + +**해결 방안** +- logrotate 설정 확인 필요 +- nginx 프로세스의 로그 디렉토리 권한 확인 +- `/etc/logrotate.d/nginx` 설정 검토 + +### 2. SSL Handshake 오류 (지속적) +**증상** +- SSL handshake 실패 오류 지속 발생 +- 다양한 외부 IP에서 접근 시도 + +**로그** +``` +[crit] SSL_do_handshake() failed (SSL: error:0A00006C:SSL routines::bad key share) while SSL handshaking +``` + +**발생 IP 예시** +- 106.75.138.231, 20.65.194.182, 167.99.176.234, 146.70.129.140 등 +- 대부분 스캔봇 또는 자동화된 도구로 추정 + +**해결 방안** +- SSL/TLS 프로토콜 버전 설정 확인 +- 최신 OpenSSL 버전 업데이트 고려 +- fail2ban 등 보안 도구로 반복 실패 IP 차단 + +### 3. upstream 연결 실패 +**증상** +- robeing-gateway (127.0.0.1:8100) 간헐적 연결 실패 +- 잘못된 포트(8000)로 연결 시도 + +**로그** +``` +connect() failed (111: Unknown error) while connecting to upstream +upstream: "http://127.0.0.1:8000/api/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php" +upstream: "http://127.0.0.1:8100/api/stats/rb8001" +``` + +**영향** +- API 요청 실패 +- PHPUnit 취약점 스캔에 대한 잘못된 라우팅 + +**해결 방안** +- nginx upstream 설정에서 8000 포트 사용 부분 확인 +- 모든 upstream이 8100 포트를 사용하도록 수정 +- PHPUnit 경로 접근 차단 규칙 추가 + +### 4. Git 저장소 인증 실패 +**증상** +- 220.85.143.195 IP에서 모든 Git 저장소 접근 시 401 오류 +- 인증 없이 git pull 시도 + +**로그** +``` +220.85.143.195 - - "GET /ivada_Ro-being/[repository].git/info/refs?service=git-upload-pack HTTP/1.1" 401 +``` + +**영향된 저장소** +- fluent-bit, frontend-base, frontend-customer, nginx-infra 등 모든 저장소 + +**해결 방안** +- Gitea 인증 설정 확인 +- 비정상적인 접근 시도 IP 차단 +- Git 저장소 접근 권한 정책 검토 + +### 5. Slack 이벤트 처리 실패 +**증상** +- 9월 20일 Slack webhook 이벤트 처리 실패 +- gateway 연결 불가 + +**로그** +``` +connect() failed while connecting to upstream +request: "POST /gateway/slack/events HTTP/1.1" +upstream: "http://127.0.0.1:8100/slack/events" +``` + +**발생 IP** +- AWS 서버: 34.207.152.164, 3.89.255.223, 52.91.187.5 + +**해결 방안** +- robeing-gateway 헬스체크 강화 +- Slack 이벤트 핸들러 안정성 개선 +- 재시도 메커니즘 구현 + +### 6. auth-server 불필요한 로그 +**증상** +- "default_value" 텍스트가 각 헬스체크 로그마다 출력 + +**로그** +``` +default_value +INFO: 127.0.0.1:39468 - "GET /health HTTP/1.1" 200 OK +``` + +**영향** +- 로그 가독성 저하 +- 불필요한 디스크 사용 + +**해결 방안** +- auth-server 코드에서 디버그 print문 제거 +- 환경변수 로깅 로직 확인 + +### 7. 과도한 헬스체크 빈도 +**현상** +- auth-server와 robeing-gateway 모두 매우 짧은 간격으로 헬스체크 수행 +- 초당 여러 번의 헬스체크 요청 + +**영향** +- 불필요한 리소스 사용 +- 로그 파일 크기 급증 + +**해결 방안** +- Docker Compose 헬스체크 interval 설정 조정 (현재 너무 짧음) +- 최소 10-30초 간격으로 설정 권장 + +## 조치 우선순위 +1. **긴급**: upstream 8000 포트 설정 수정 +2. **높음**: nginx 로그 권한 문제 해결 +3. **높음**: 헬스체크 빈도 조정 +4. **중간**: SSL handshake 오류 대응 (fail2ban 설정) +5. **중간**: auth-server 불필요한 로그 제거 +6. **낮음**: Git 인증 실패 IP 모니터링 + +## 권장 사항 +1. nginx 설정 전체 검토 및 정리 +2. 보안 강화를 위한 fail2ban 또는 유사 도구 도입 +3. 로그 로테이션 정책 재검토 +4. 모니터링 시스템 강화 (특히 upstream 연결 상태) +5. 헬스체크 설정 최적화 + +## 참고 사항 +- 현재 시스템은 대체로 정상 작동 중 +- 발견된 문제들은 주로 설정 최적화 및 보안 강화 관련 +- PHPUnit 취약점 스캔 등 외부 공격 시도 지속 관찰됨 \ No newline at end of file