노드 보안 베스트 프랙티스 (공통)
체인에 무관하게 적용되는 보안 기본 수칙입니다. 체인별 예외/심화는 해당 chains/{chain}/docker/RPC.md 또는 localhost/README.md를 참고하세요.
1. RPC 노출 최소화
기본 원칙
- Default deny: RPC는 기본적으로
127.0.0.1에만 바인딩, 외부 클라이언트가 필요할 때만 특정 IP로 명시 허용.
- IP allowlist를 두 층에서: 클라이언트 설정(
rpcallowip, --http.vhosts, --http.corsdomain) + 방화벽(UFW/보안그룹).
- 공개 RPC를 운영한다면 반드시 reverse proxy(nginx/Caddy) + rate limit + WAF. 메서드 allowlist 필수.
클라이언트별 차단해야 할 메서드 (예시)
| 클라이언트 |
위험 메서드 |
| Geth / op-geth |
admin_*, personal_*, debug_* (대역폭·개인정보) |
| Bitcoin Core |
wallet*, generatetoaddress, stop, dumpprivkey |
| Solana Agave |
sendTransaction(외부 공개 시), getLargestAccounts |
| Cosmos SDK |
gRPC 8개 중 tx/broadcast는 spam 유발 가능 |
2. 방화벽 / 포트 정책
- 필수 개방: P2P 포트(블록·트랜잭션 전파)만 0.0.0.0으로 열어도 충분.
- RPC/메트릭 포트: 관리 네트워크·VPN을 통해서만 접근.
- 컨테이너 포트 매핑:
127.0.0.1:<port>:<port> 형식으로 호스트 바인딩 제한.
3. 프로세스 격리
- 전용 비특권 사용자(
bitcoin, geth, op, aptos 등)로 실행 — root 금지.
- systemd 유닛에
NoNewPrivileges=true, ProtectSystem=strict, ProtectHome=true, PrivateTmp=true 적용 권장.
- 데이터 디렉토리 퍼미션:
700 또는 750 + chown $SERVICE_USER.
4. 키/시크릿 관리
- Validator/BP 키: 콜드 백업 + 온라인 머신에는 서명용 최소 권한 키만 배치.
- 노드 RPC 비밀번호는
.env 또는 시크릿 매니저(AWS Secrets, HashiCorp Vault)로 관리. 저장소에 절대 커밋 금지.
- 본 저장소
.gitignore는 .env, *.pem, *.key, jwt.hex 등을 선제 차단.
5. 업데이트 / 패치 정책
- 체인 클라이언트는 하드포크 시점을 놓치면 포크됩니다. 릴리스 노트/Discord/Twitter 모니터링 필수.
- Linux 커널·OpenSSL 패치도 동일하게 중요.
- 프로덕션은 카나리 노드 → 메인 노드 단계적 업데이트.
6. 모니터링 / 경보
- Prometheus 메트릭은 대부분 클라이언트가 기본 제공 (
--metrics, --prometheus-external, --expose-metrics).
- 최소 경보 3종:
- 동기화 지연: 블록 높이가 공개 익스플로러와 3~10블록 이상 벌어지면 알림
- 피어 수: 정상 범위(보통 5~30) 이하로 떨어지면 알림
- 디스크 사용률: 80% 초과 시 알림
- 자세한 구성은 monitoring-stack.md 참고.
7. 백업 / 재해 복구
- 스냅샷 우선: 주요 체인은 커뮤니티·공식 스냅샷이 있어 재동기화보다 복원이 빠름.
- 자체 백업은 중지 후 일관된 상태에서 파일시스템 스냅샷(
zfs snapshot, AWS EBS snapshot 등).
- RPO(복구 가능 지점): 일반 Full 노드는 스냅샷 주기(일간) + 네트워크 재동기화로 충분. Validator는 중복 활성 운영 금지(더블 사이닝 슬래시).
8. 감시해야 할 공격 패턴
| 패턴 |
영향 |
완화 |
| Public RPC 스캔 (Shodan) |
API 남용·정보 누출 |
RPC 접근 IP 제한, nginx rate limit |
| Eclipse 공격 |
오래된 체인 뷰 주입 |
다수 피어 확보(--min-peers), 고정 bootstrap 노드 |
| WebSocket 구독 고갈 |
메모리 OOM |
--ws.rpcprefix, 커넥션 limit |
| JWT 유출 (Beacon/EE) |
Engine API 악용 |
JWT 파일 chmod 600, 주기 회전 |
9. 체크리스트 (배포 전)
- RPC가
127.0.0.1 또는 allowlist IP로만 바인딩되어 있는가
- 위험 메서드가 비활성화되어 있는가 (
--http.api allowlist)
- 데이터 디렉토리 퍼미션이 올바른가 (
700/750, 전용 유저 소유)
- systemd 하드닝 옵션이 적용되어 있는가
- 키/시크릿이 저장소·로그에 노출되지 않는가
- 동기화/피어/디스크 경보가 설정되어 있는가
- 백업·스냅샷 계획이 문서화되어 있는가
- 업데이트 알림 채널을 구독 중인가
참고