Network & Security
네트워크, Nginx, VPN, 보안 및 인증
-
홈서버 원본 IP 노출 방어와 Nginx Cloudflare 허용 대역 구성
홈서버에서 LLM 스트리밍 API의 버퍼링 문제를 해결하거나 특정 전송 계층의 성능을 확보하기 위해 Cloudflare 프록시를 끄고 DNS Only(회색 구름)로 전환하면, 홈서버의 공인 IP가 외부에 직접 노출된다. 이때 동일한 공인 IP를 공유하는 다른 웹서비스들까지 공격자의 IP 직접 접근에 의해 Cloudflare WAF와 DDoS 보호를 우회당할 수 있는 구조적 취약점이 발생한다. 본 글에서는 원본 IP 노출에 따른 위험성과… Continue reading
-
vLLM API Key 인증 시 기본 노출 경로와 Nginx 접근 제어 설정
vLLM 서빙 엔진을 외부 네트워크에 노출할 때 접근 통제를 위해 –api-key 옵션을 사용하는 것이 기본 보안 설정이다. 그러나 이 옵션을 적용하더라도 모든 HTTP 엔드포인트가 인증으로 보호되는 것은 아니다. 기본적으로 인증 없이 응답을 반환하는 경로가 존재하며, 이를 파악하지 않고 외부에 공개할 경우 시스템 정보가 노출될 수 있다. 본 글에서는 vLLM의 엔드포인트별 인증 적용 현황과 Nginx를 통한… Continue reading
-
Cloudflare 프록시 환경의 LLM 스트리밍(SSE) 지연 분석 및 진단 가이드
홈서버에 구축한 vLLM 등의 LLM 서빙 엔진을 외부에서 안전하게 호출하기 위해 리버스 프록시와 도메인을 연결하고 Cloudflare 프록시(오렌지 구름)를 적용하는 경우가 많다. 그러나 Server-Sent Events(SSE) 기반의 실시간 스트리밍 추론 API를 Cloudflare Free 플랜 프록시 뒤에 배치하면 심각한 응답 지연과 버퍼링 문제가 발생할 수 있다. 이 글에서는 실제 발생한 지연 증상과 원인 분석 과정, 계층별 진단 절차… Continue reading
-
Hermes Agent 에이전트 답변 방법 설정 방법
1. Mattermost ~/.hermes/.env에 추가한다. 값 동작 off (기본) 답장이 채널 타임라인에 게시 thread 원 메시지 아래 스레드에 게시 변경 후 게이트웨이 재시작. 2. Slack ~/.hermes/config.yaml에 추가한다. 값 동작 true (기본) 새 스레드를 파서 답장 false 채널 타임라인에 flat 답장 기존 스레드 안의 메시지는 어떤 모드가든 스레드로 답한다. 변경 후 게이트웨이 재시작. 3. 참고 두 플랫폼의… Continue reading
-
JWT vs Opaque 토큰 완전 정리 — 서명, 해시, 세션, Google 인증 구조까지
멀티유저 인증 서버를 설계하다가 “액세스 토큰을 JWT로 할지 opaque(세션형)로 할지” 결정하는 과정에서, 서명·암호화·해시·Google의 실제 토큰 구조까지 파고든 내용을 정리한다. 나중에 다시 헷갈릴 때 이 글부터 다시 읽는다. 1. Opaque 토큰 = 클래식 세션 방식 opaque 토큰은 토큰 문자열 자체엔 아무 정보도 없는 랜덤 문자열이다. 실제 “누구인지, 유효한지, 권한이 뭔지”는 전부 서버 저장소(DB, 세션 스토어)에 있고,… Continue reading
-
브라우저가 자동으로 반응하는 HTTP 상태 코드와 헤더들
웹 개발을 하다 보면 HTTP 상태 코드를 자주 다루게 됩니다. 하지만 이 중 일부는 단순히 정보를 전달하는 것을 넘어서, 브라우저가 특정 동작을 자동으로 실행하도록 만듭니다. 예를 들어 301 Moved Permanently를 받으면 브라우저는 자동으로 새 주소로 이동하고, 401 Unauthorized를 받으면 로그인 팝업을 띄웁니다. 이런 “브라우저의 자동 동작”을 이해하면 더 효율적인 웹 애플리케이션을 만들 수 있습니다. 이… Continue reading
-
프론트엔드-백엔드 분리 환경에서 OAuth 로그인 구현하기
프론트엔드와 백엔드가 분리된 환경에서 구글 OAuth 로그인을 구현하는 방법 전체 아키텍처 구현 단계 1. NextAuth 설정 프론트엔드에서 NextAuth를 사용해 OAuth를 처리하고, 로그인 성공 시 백엔드에 사용자 정보를 전송 2. 백엔드 API 구현 백엔드에서는 OAuth 처리 없이 단순히 사용자 정보를 받아 DB에 저장하고 JWT 토큰을 발급 3. 데이터베이스 스키마 사용자 정보와 OAuth 정보를 저장할 스키마 4.… Continue reading
-
Double CSRF Protection
토큰 + 쿠키 사용하는 방법 특정 웹페이지 접근 토큰 발행 요청 이 경우 토큰이 유효한지 서버에서 정보를 갖고 있어야 함 토큰하고 차이 크게 없음 저장하는 위치가 쿠키일 뿐 토큰은 페이지 떠나면 사라지지만 쿠키는 안 사라짐 CORS 활성 상태면 뚫림 서버에서 토큰이 유효한지 정보 갖고 있을 필요 없음 CORS 활성 상태여도 특정 페이지에 접속해 토큰발행해야 사용… Continue reading
-
JWT와 Refresh Token 운영 방법 상세 정리
토큰 만료 및 갱신 흐름 토큰 저장 위치 저장 위치 장점 단점 Access Token: 메모리 (React State, Zustand, Redux 등) XSS 공격 시 영구 탈취 불가 새로고침 시 초기화 (Refresh로 복구 필요) Refresh Token: httpOnly Cookie JS에서 접근 불가 (XSS 방어) CSRF 방어 필요 (SameSite 설정 필수) Axios 인터셉터를 활용한 Silent Refresh 예시 Continue reading
-
모든 설정 정상인데 fail2ban 동작이 제대로 되지 않는 경우
fail2ban backend 및 systemd journal 연동 정리 1. fail2ban backend 동작 방식 backend=systemd: systemd의 journal에서 로그를 읽음 backend=auto: 환경에 따라 자동으로 backend 선택 (예: pyinotify, gamin, polling, systemd 등) 2. 실제 적용된 backend 확인 방법 명령어 예시 각 jail별로 어떤 backend가 적용됐는지 확인 가능 로그 파일에서 확인 3. systemd journal에 로그 등록 방법 journald 설정… Continue reading
