Warden은 Rust로 작성된 올인원 리눅스 서버 보안 · 관리 패널입니다.
단일 바이너리로 설치되며 약 15MB 메모리만으로 동작합니다.
웹 브라우저에서 https://서버IP:9443으로 접속하여 사용합니다.
웹 서버는 Nginx 전용으로 운영되며, Warden 자체 서비스 레이어에서 WAF(Web Application Firewall) 기능을 수행합니다. 악성 요청 탐지, IP 차단, 국가별 필터링 등 모든 보안 동작은 Nginx 앞단의 Warden 서비스 레이어에서 nftables 규칙으로 직접 처리되어 커널 수준에서 패킷을 차단합니다.
설치 후 브라우저에서 아래 주소로 접속합니다:
기본 관리자 계정은 설치 시 설정한 config.toml의 [admin] 섹션에 정의됩니다.
로그인 화면에서 계정과 비밀번호, 캡차를 입력하면 대시보드로 이동합니다. TLS 인증서가 자체 서명(self-signed)이므로 브라우저 경고가 나타날 수 있습니다.
로그인 후 첫 화면에 서버 상태가 표시됩니다:
| 항목 | 설명 |
|---|---|
| CPU / 메모리 | 실시간 사용률 (%). 메모리는 총 용량 대비 사용 중인 비율. |
| 디스크 | 루트 파티션 사용량 및 남은 공간. |
| 네트워크 | 수신(RX) / 송신(TX) 트래픽 누적량. |
| 시스템 정보 | OS 버전, 커널, Warden 버전, 가동 시간(uptime). |
| 방화벽 상태 | nftables 활성 여부, 차단된 IP 수. |
| 서비스 상태 | Nginx, PHP-FPM, MariaDB 등 주요 서비스 동작 상태. |
Warden은 자체 서비스 레이어에서 방화벽을 관리합니다. 외부 모듈이나 Nginx 플러그인에 의존하지 않고, Warden 프로세스가 직접 nftables 규칙을 생성·적용하여 커널 레벨에서 패킷을 차단합니다. 포트 열기/닫기, IP/CIDR 차단, 국가별 접근 제어를 웹 UI에서 설정하면 즉시 적용되며 서버 재시작 후에도 유지됩니다.
보안 메뉴 → 방화벽 탭에서 포트를 관리합니다.
| 동작 | 설명 |
|---|---|
| 포트 열기 | 번호, 프로토콜(TCP/UDP/BOTH), 메모를 입력 후 추가합니다. 범위 지정 가능(예: 8000-8100). |
| 포트 닫기 | 목록에서 해당 포트 삭제 버튼을 클릭합니다. 즉시 차단됩니다. |
특정 IP 또는 대역을 차단하거나 화이트리스트에 추가합니다.
화이트리스트에 등록된 IP는 블랙리스트 자동 등록에서 제외됩니다.
GeoIP 데이터베이스를 기반으로 특정 국가의 접근을 차단합니다. 국가 코드(ISO 3166-1 alpha-2)를 선택하면 해당 국가의 모든 IP 대역이 차단됩니다.
Warden의 자체 서비스 레이어가 다양한 소스에서 악성 IP를 실시간으로 탐지하고, nftables 규칙에 자동 등록하여 커널 수준에서 차단합니다:
journalctl 실시간 모니터링)블랙리스트에 등록된 IP는 보안 → 블랙리스트 탭에서 확인할 수 있습니다. 각 항목에는 IP, 국가, 사유, 히트 수, 최초/최종 탐지 시각이 표시됩니다.
블랙리스트를 다른 서버와 공유할 수 있습니다.
config.toml의 [share] 섹션에서 활성화합니다:
| 엔드포인트 | 설명 |
|---|---|
GET /api/v1/blacklist.txt | 평문(IP 한 줄씩) 피드. nftables/iptables에 바로 사용 가능. |
GET /api/v1/blacklist | JSON 형식. ?since=타임스탬프로 증분 조회. |
POST /api/v1/blacklist | 외부 IP 수집 (Ingest). allow_ingest=true 필요. |
인증: X-API-Key 헤더, Authorization: Bearer, 또는 ?token= 쿼리 파라미터.
좌측 메뉴의 사이트에서 Nginx 기반 웹사이트를 생성/관리합니다. 각 사이트는 독립된 Nginx vhost 설정으로 운영됩니다.
index.html 환영 페이지가 배치됩니다.
방화벽에 포트도 자동 등록됩니다.
사이트 관리 모달 → SSL 탭에서 관리합니다:
사이트 관리 → 리버스 프록시 탭에서 백엔드 서버 프록시를 설정합니다:
여러 개의 프록시 규칙을 추가할 수 있습니다. WebSocket 지원이 필요하면 추가 Nginx 설정에서 헤더를 지정합니다.
사이트별 보안 옵션을 관리합니다:
| 기능 | 설명 |
|---|---|
| HTTP 인증 | Basic Auth(아이디/비밀번호)를 사이트 전체 또는 특정 경로에 적용. |
| 핫링크 방지 | 외부 사이트에서 이미지/파일 직접 링크를 차단 (Referer 검증). |
| 보안 헤더 | X-Frame-Options, X-Content-Type-Options, CSP 등 응답 헤더 설정. |
| open_basedir | PHP 파일 접근 범위를 문서 루트로 제한. |
| 실행경로 보호 | 업로드 디렉토리에서 PHP 실행 차단. |
사이트 관리 → 백업 탭에서 수동 백업을 생성합니다:
tar.gz로 압축 (/WardenRoot/backup/sites/사이트명/)좌측 메뉴 소프트웨어에서 서버 소프트웨어를 소스 빌드로 설치/관리합니다.
| 분류 | 소프트웨어 |
|---|---|
| 웹 서버 | Nginx |
| PHP | PHP 7.4 ~ 8.3 (다중 버전 병렬 설치) |
| 데이터베이스 | MariaDB, MySQL, PostgreSQL, Redis, Memcached, MongoDB |
| 런타임 | Node.js, Python, Go, Java (OpenJDK) |
| 도구 | phpMyAdmin, Pure-FTPd |
설치 과정:
gcc, make 등 개발 도구가 필요합니다.
RHEL 계열에서는 CRB + EPEL 저장소 활성화가 필요합니다:
설치된 소프트웨어의 설정 파일을 웹 UI에서 최적화합니다. 소프트웨어 관리 모달 → 성능조정 탭:
| 소프트웨어 | 주요 튜닝 항목 |
|---|---|
| PHP | memory_limit, upload_max_filesize, max_execution_time, max_input_vars |
| Nginx | worker_processes, worker_connections, keepalive_timeout, client_max_body_size |
| MariaDB | innodb_buffer_pool_size, max_connections, key_buffer_size, table_open_cache |
| Redis | maxmemory, maxmemory-policy, maxclients, tcp-keepalive |
.warden.bak으로 백업됩니다.
문법 검증 실패 시 원본으로 자동 롤백되므로 서비스 중단 없이 안전하게 튜닝할 수 있습니다.
좌측 메뉴 Node.js에서 프로젝트를 생성/관리합니다:
warden-node-프로젝트명.service)로 등록좌측 메뉴 Java에서 JAR 또는 Tomcat 프로젝트를 배포합니다:
| 모드 | 설명 |
|---|---|
| JAR 모드 | java [jvm_opts] -jar app.jar로 직접 실행 |
| Tomcat 모드 | catalina.sh run으로 실행, WAR 자동 배치(webapps/ROOT.war) |
Node.js와 동일하게 systemd 서비스로 관리되며, 도메인 연결 시 프록시가 자동 생성됩니다.
좌측 메뉴 보안에서 서버 보안 상태를 종합적으로 관리합니다.
사이트 관리 → 스캔 탭에서 웹 루트 디렉토리의 악성 파일을 검사합니다:
.php, .js, .html 등 실행 가능 파일서버 보안 설정을 자동으로 분석하여 100점 만점의 점수를 산출합니다. 도넛 차트로 시각화되며, 점수에 따라 색상이 변경됩니다:
| 점수 | 등급 | 색상 |
|---|---|---|
| 80 ~ 100 | 안전 | 녹색 |
| 60 ~ 79 | 양호 | 파랑 |
| 40 ~ 59 | 주의 | 주황 |
| 0 ~ 39 | 위험 | 빨강 |
좌측 메뉴 로그에서 각종 시스템 및 서비스 로그를 확인합니다:
로그 파일은 /WardenRoot/logs/ 및 /WardenRoot/wwwlogs/에 저장됩니다.
Warden의 주 설정 파일은 /WardenRoot/config.toml에 위치합니다.
수정 후 서비스를 재시작해야 적용됩니다.
Warden은 systemd 서비스(warden.service)로 실행됩니다:
/WardenRoot/warden 바이너리는 기본 default_t 컨텍스트라
systemd 실행 시 Permission denied가 발생합니다. 반드시 bin_t 레이블을 적용하세요:
| 증상 | 원인 · 해결 |
|---|---|
| 패널 접속 불가 |
systemctl status warden으로 서비스 상태 확인.방화벽에서 9443 포트가 열려 있는지 확인: nft list ruleset | grep 9443
|
| 203/EXEC 오류 |
SELinux 컨텍스트 문제. semanage fcontext -a -t bin_t /WardenRoot/warden 후
restorecon /WardenRoot/warden 실행.
|
| 인증서 발급 실패 |
도메인이 서버 IP를 가리키는지 확인. 80 포트가 열려 있어야 HTTP-01 검증 가능.
acme.sh --issue -d 도메인 --debug로 상세 로그 확인.
|
| 소프트웨어 빌드 실패 |
-devel 패키지 누락 가능성. CRB/EPEL 저장소 활성화 확인:
dnf config-manager --set-enabled crb && dnf install epel-release
|
| Nginx reload 실패 |
nginx -t로 설정 문법 검증. Warden은 실패 시 자동 롤백하므로
원본 설정이 유지됩니다. 로그: /WardenRoot/wwwlogs/
|
| 블랙리스트 공유 403 |
config.toml [share]에서 enabled = true,
토큰이 설정되어 있는지 확인. 요청 시 토큰 전달 방식 확인.
|
| 비밀번호 분실 |
config.toml의 [admin] 비밀번호를 직접 수정 후
systemctl restart warden으로 재시작.
|
journalctl -u warden --since "1 hour ago"로
최근 로그를 확인하거나, GitHub Issues에 로그와 함께 문의하세요.