
gladios는 기존 Nginx 서버에 ‘브라우저 확인’ 페이지를 추가해 JavaScript를 실행하지 않는 봇과 HTTP 플러드 도구를 걸러내는 오픈소스 도구다. 제작자는 일반 방문자가 기기마다 일주일에 한 번 정도, 약 1초 만에 확인을 통과하며 별도 서비스나 프록시를 운영할 필요가 없다고 설명한다.
설치는 다음 명령으로 시작한다.
curl -fsSL https://gladios.dev/install.sh | sudo sh
서버 설정에는 다음 한 줄을 추가한다.
include snippets/gladios.conf;
설치 프로그램은 njs가 없으면 설치하고 gladios 파일과 비밀값, /etc/gladios/settings.conf를 구성한다. Nginx를 자동으로 다시 불러오지는 않으며, nginx -t가 실패하면 설치를 되돌린다. 설치 스크립트를 먼저 확인할 수 있고, 다시 실행하면 업그레이드한다.
브라우저는 퍼즐을 풀어 서명된 통과 쿠키를 받는다. 서버는 쿠키를 HMAC 한 번으로 확인하며, 퍼즐과 통과 정보는 저장하지 않는다. 통과 쿠키는 퍼즐을 푼 IP 주소 또는 IPv6 /64 네트워크에 묶인다. 위조·만료됐거나 다른 네트워크에서 온 쿠키는 다시 확인 페이지로 보내고, fail2ban에 기록을 남긴다. 쿠키가 없으면 정적 파일을 제공하고, 통과 쿠키가 있으면 애플리케이션으로 요청을 전달한다. API 클라이언트나 웹훅, 모니터링 도구처럼 브라우저를 실행하지 않는 요청은 설정에서 우회시켜야 한다.
요청이 어떤 경로로 처리되는지는 미리보기에서 확인할 수 있다. 제작자는 이 도구가 실제 헤드리스 브라우저를 막지는 못한다고 밝힌다. 이런 확인 방식은 브라우저에도 연산을 요구하며, 네트워크별 통과 쿠키와 요청 제한으로 대규모 공격의 비용을 높이는 방식이다. JavaScript를 끈 방문자는 통과할 수 없다. 상태 확인 페이지는 HTTP 200을 반환하므로 모니터링 시스템도 우회 설정해야 한다.
벤치마크는 Apple M1 Pro의 Linux 가상 머신에서 Debian 12의 Nginx 1.22와 njs 0.7.9를 사용해 실행했다. Nginx는 코어 2개에 고정했고, 나머지 코어에서는 oha를 실행했다. TLS keep-alive와 연결 64개를 사용했으며, Nginx 프로세스 세 개는 메모리 11~12MB를 사용했다.
| 요청 조건 | 초당 처리량 | p50 지연 시간 | CPU 사용량(초당 1,000건 기준) |
|---|---|---|---|
| 유효한 통과 쿠키: 확인 후 앱 페이지 제공 | 35–36k/s | 1.7 ms | 0.14 코어 |
| 위조 쿠키: 확인 후 챌린지 페이지 제공, 기록 남김 | 24–26k/s | 2.4 ms | 0.19 코어 |
| 쿠키 없음: 챌린지 페이지 제공 | 35–36k/s | 1.7 ms | 0.15–0.18 코어 |
GET /.gladios/api/challenge(제한 없음) | 59–61k/s | 1.0 ms | 0.11–0.17 코어 |
POST /.gladios/api/verify(제한 없음) | 47–50k/s | 1.2 ms | 0.12–0.13 코어 |
벤치마크는 test/bench/run.sh로 직접 실행할 수 있다. 요구 조건은 njs 0.7.9 이상이 포함된 Nginx다. Ubuntu 22.04에서는 nginx.org 패키지를 사용해야 한다. HTTPS 환경이어야 통과 쿠키의 Secure 속성이 작동하며, 프록시 뒤에서 운영할 때는 realip으로 클라이언트 주소를 복원해야 한다. fail2ban과 차단 알림을 위한 Python 3.8 이상은 선택 사항이다.
기본 페이지의 검투사 이미지는 /etc/gladios/site/에 mascot.webp 또는 PNG, SVG, JPG, GIF 파일을 넣어 바꿀 수 있다. 같은 위치에 직접 만든 index.html을 두어 페이지 전체를 교체할 수도 있으며, 업그레이드해도 이 파일은 건드리지 않는다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요