Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
stop-bots — 악성 봇이 서버에 접근하는 것을 자동으로 차단하세요 | Kitploit
도구/GitHubGitHub/ivankovic/stop-bots
Defensive ToolsConfiguration AuditingInformation GatheringWeb SecurityNetwork SecurityUtilities & FrameworksIntrusion DetectionAnti-BotLog Analysis
GitHubivankovic/stop-bots

stop-bots

악성 봇이 서버에 접근하는 것을 자동으로 차단하세요

3964일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

Stop Bots

CI crates.io Coverage License: AGPL v3+

CDN 뒤에 숨지 않고도 서버를 설정하여 악성 봇을 차단할 수 있도록 도와주는 TUI, 웹 콘솔 및 CLI입니다.

NGINX 및 기존 방화벽(nftables 또는 iptables)과 함께 작동합니다:

  • NGINX 설정. - 알려진 봇을 카테고리(스캐너, 검색 엔진, AI 크롤러)별로 분류하고, 사이트 설정에 규칙을 주입하여 차단하거나 허용합니다. NGINX 로그를 스캔하여 봇을 동적으로 탐지하고, 아직 어떤 규칙 세트에도 추적되지 않는 봇이라도 차단합니다.
  • 방화벽 스크립트. - 전체 국가, 데이터센터 IP 범위, 알려진 봇 IP 범위 또는 서버에 반복적으로 로그인을 시도하다 실패하는 모든 IP 주소를 차단합니다. 모든 차단은 그 이유를 기록합니다.

다섯 개 화면의 순차적 모습: Dashboard, Bot settings, Firewall, NGINX 및 Blocks

이 앱은 서버에서 잠기는 일이 없도록 최선을 다하지만, 사용에 따른 책임은 본인에게 있습니다. 또한 AGPL 라이선스이므로 상업적으로 사용하는 경우 라이선스를 준수해야 합니다.

빠른 시작

설치

Debian 또는 Ubuntu에서는 APT 저장소에서:

curl -fsSL https://ivankovic.github.io/stop-bots/key.gpg \
  | sudo tee /usr/share/keyrings/stop-bots.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/stop-bots.gpg] \
https://ivankovic.github.io/stop-bots stable main" \
  | sudo tee /etc/apt/sources.list.d/stop-bots.list
sudo apt update && sudo apt install stop-bots

man stop-bots(그리고 man stop-bots-batch와 같이 각 verb별 페이지)와 bash, zsh, fish 자동 완성을 제공합니다. 서비스를 설치하거나 아무것도 시작하지 않습니다.

또는 Rust 1.88 이상이 설치된 환경에서 crates.io를 통해 설치할 수 있습니다:

cargo install stop-bots

또는 GitHub releases에서 x86_64 또는 aarch64 Linux용 정적 바이너리를 다운로드하세요.

지원 플랫폼

  • systemd와 NGINX를 사용하는 Debian 및 Ubuntu. 이것이 테스트된 환경입니다. install은 Debian 또는 그 파생 배포판이 아닌 호스트를 거부합니다.
  • Apache나 Caddy는 지원하지 않습니다. 해당 서버의 액세스 로그는 파싱될 수 있지만, 웹 서버 설정을 작성하는 모든 기능은 NGINX 전용입니다.
  • 런타임 의존성: 방화벽을 위해 nft, 또는 iptables-restore와 ip6tables-restore; 나머지를 위해 nginx. 컨테이너 안의 NGINX도 작동합니다 — 컨테이너에서 NGINX 실행하기를 참조하세요.

TUI에서

  1. sudo stop-bots가 TUI를 시작합니다. root 권한이 필요합니다: /etc/nginx를 다시 작성하고 방화벽 규칙을 로드하기 때문입니다.
  2. u는 모든 목록을 다운로드합니다: 봇 목록, 크롤러 IP 범위, 그리고 활성화한 피드나 국가.
  3. 검토하세요. Dashboard(1)는 호스트 전체 정책을 담고 있습니다: 어떤 봇 카테고리가 차단되는지, 국가, 그리고 로그를 읽는 탐지기. NGINX 화면(4)에서 r은 사이트를 찾습니다. Blocks 화면(5)은 탐지기나 사용자가 추가한 모든 규칙과 그 이유를 나열합니다.
  4. a는 모든 것을 적용합니다. 먼저 무엇이 변경될지 — 파일, 추가 및 제거되는 규칙, 그리고 잠금 검사의 판정(d는 diff) — 를 보여주고 확인을 요청합니다.
  5. sudo stop-bots install firewall은 적용된 규칙이 재부팅 후에도 유지되도록 합니다. 이것 없이는 재부팅 시 규칙이 전혀 없는 상태로 돌아옵니다.
  6. sudo stop-bots status는 커널, 유닛, 파일을 확인하고 무엇이 누락되었는지 알려줍니다.

스크립트를 위한 CLI에서의 동일한 작업

sudo stop-bots status
sudo stop-bots batch --dry-run --diff
sudo stop-bots batch --apply
sudo stop-bots install firewall
sudo stop-bots status

batch --dry-run은 아무것도 다운로드하거나 스캔하지 않습니다: 새로 설치한 상태에서는 바이너리에 내장된 봇 목록의 NGINX 블록을 보여주고, 아직 방화벽 규칙은 없습니다. 로그에서 아무것도 읽지 않았기 때문입니다. --apply 없이 sudo stop-bots batch를 실행하면 다운로드와 스캔을 수행하고 검토용 파일을 작성하지만 적용하지는 않습니다. batch가 하는 일은 Unattended, from cron을 참조하세요.

Undo

sudo stop-bots uninstall all --dry-run
sudo stop-bots uninstall all

첫 번째는 모든 단계를 나열하고, 두 번째는 그것을 수행한다. 업그레이드 및 제거를 참조하라.

무엇을 방어하는가

NGINX 설정 사용

  • 알려진 봇, 카테고리별(스캐너 / 검색 엔진 / AI 크롤러), 출처는 ArcJet의 Well-Known Bots, ai.robots.txt 및 NGINX Ultimate Bad Bot Blocker 목록. 카테고리를 차단하면 각 사이트의 NGINX 설정에 if ($http_user_agent ...) 규칙이 주입된다.

  • 너무 많은 요청, NGINX 자체의 속도 제한을 통해.

  • 먼저 정중하게 — 차단 중인 모든 봇을 나열하는 생성된 robots.txt로, 이를 존중하는 크롤러를 위한 것이며, 아래의 허니팟 경로도 포함된다.

  • 당신이 달리 말하지 않는 한 — 사이트별 경로 예외, 그리고 신뢰할 수 있는 주소와 사용자 에이전트(trust)로, 이에는 어떤 차단, 목록, 속도 제한도 적용되지 않는다.

  • 브라우저처럼 보이지 않는 요청, 사이트별. 여섯 개의 독립적인 규칙으로, 각각 자체 토글을 가지며 기본적으로 모두 꺼져 있다 — 규칙당 하나의 스위치이므로 당신의 무언가가 작동을 멈추면 어떤 규칙 때문인지 알 수 있다:

    규칙봇 외에 차단하는 것
    HTTP/1.0 및 HTTP/1.1HTTP/2를 사용하지 않는 크롤러와 API 클라이언트
    Accept 헤더 없음일부 API 클라이언트는 아무것도 보내지 않음
    Accept-Language 없음프라이버시 도구가 제거함
    비어 있거나 없는 User-Agent스크립트와 상태 확인이 종종 생략함
    Host가 순수 IPIP로 사이트에 접근하는 것을 차단
    TLS 1.0 / 1.1매우 오래된 클라이언트만

차단된 요청이 실제로 받는 것

일곱 가지 선택이 있다:

옵션용도
403 Forbidden (기본값)차단이 의도적이었음을 알림; 잘못 걸린 사람이 대응할 수 있는 유일한 옵션
404 Not Found무언가 차단되었다는 사실 자체를 숨김
410 Gone예의 바른 크롤러에게 URL을 영구히 삭제하도록 요청 — 공격자가 아닌 크롤러를 돌려보낼 때는 403보다 이쪽을 선호
429 Too Many Requests예의 바른 클라이언트에게 물러나 재시도하라고 알림
418 I'm a teapotRFC 2324의 농담. 작동은 하지만 IANA에 등록되지 않았고, NGINX는 빈 본문과 함께 보냄
444 close connection아무 응답도 하지 않음; 가장 저렴하지만 서버가 다운된 것과 구별 불가
Tarpit403으로 응답하지만 본문을 초당 1바이트로 흘려보내, 클라이언트가 넘어가지 않고 대기하게 함

Tarpit은 오탐에 대해 가장 온건한 옵션 — 잘못 걸린 클라이언트는 거부되지 않고 느려질 뿐 — 이며, 봇에게는 비용 측면에서 가장 가혹하다. 봇의 연결은 유휴 상태로 남기 때문이다. 선택하기 전에 알아야 할 한 가지: Tarpit은 그 시간 동안 당신의 워커 연결 중 하나도 점유하므로, Tarpit에 걸린 클라이언트가 쏟아지면 실제 방문자와 worker_connections를 두고 경쟁한다.

로그에서, 자동으로

이들 각각은 Dashboard의 "Automatic blocking" 패널 또는 CLI의 set-detector에 있는 독립적인 스위치다. 각각은 시간 제한이 있는 방화벽 차단을 추가한다. nftables에서는 시간이 다하면 커널이 해제하고, iptables에서는 스크립트가 다음에 적용될 때까지 유지된다.

탐지는 윈도우 기반이다: 탐지기는 로그가 윈도우(하루, 또는 아래 세 가지 행동 기반 탐지기의 경우 한 시간; set-detector --window-hours로 변경) 안에서 보여주는 것만 계산하며, 차단은 그것을 만들어낸 증거를 소모한다. 따라서 만료된 차단은 새로운 위반에 대해서만 다시 나타나고, 첫 스캔은 오래된 로그 라인 때문에 절대 차단하지 않는다. list-detectors는 각 탐지기의 스위치, 차단 길이, 임계값, 윈도우를 보여준다.

이들은 매분 SSH 및 NGINX 액세스 로그를 다시 읽는 내부 타이머로 실행된다 — 단, TUI나 웹 UI가 실행 중일 때만. 둘 중 하나라도 같은 스케줄, 같은 데이터베이스에서 유지되므로 웹 UI를 띄워두는 것만으로 충분하다; 둘 다 실행되지 않으면 아무것도 탐지되지 않는다. stop-bots 프로세스가 전혀 없는 서버의 경우, 아래의 무인, cron에서를 참조하라.

처음 다섯 개는 새 데이터베이스에서 켜져 있다:

  • SSH 및 웹 스캐너: SSH 로그인 실패가 쌓였거나, 서로 다른 404 경로가 많은 IP. 최근에 성공한 SSH 로그인이나 콘솔 로그인이 있는 IP, 또는 웹의 경우 알려진 크롤러의 공개 IP 범위 안에 있는 IP는 절대 해당되지 않는다. 콘솔 자체에 대한 요청은 어떤 탐지기에도 계산되지 않으므로, 콘솔에서 공격을 조사해도 당신을 차단할 수 없다.
  • 위조된 크롤러: Googlebot, Bingbot 또는 GPTBot이라고 주장하지만 해당 크롤러 운영자가 공개하지 않은 주소에서 오는 모든 것. 가장 저렴한 흔한 위장이다. 해당 목록이 실제로 가져와지기 전까지는 비활성.
  • 노출된 비밀 정보 탐색: /.env, /.git/config, /wp-config.php 및 유사한 것에 대한 단일 요청은 즉시 차단이다. 내장 목록은 어딘가에서는 합법적인 경로 — /wp-login.php, /wp-admin/, /xmlrpc.php, /phpmyadmin — 를 의도적으로 제외하는데, 자신의 관리자를 잠그는 것이 어차피 404 탐지기가 잡을 스캐너를 놓치는 것보다 나쁘기 때문이다. set-probe-paths로 직접 추가하라.
  • 주입 시도: 익스플로잇 페이로드를 담은 요청 — 경로, 쿼리 문자열, 사용자 에이전트 또는 리퍼러에 — 예를 들어 Shellshock, Log4Shell ${jndi: 조회, PHP-CGI allow_url_include 익스플로잇, $(wget …) 또는 ../../ 등, 인코딩 방식과 무관하게. 요청 하나면 충분하고, 차단은 일주일간 지속된다. 사람이 입력할 법한 텍스트, 예를 들어 /etc/passwd 또는 union select는 검색 상자와 리퍼러 밖에서만 계산되므로, 블로그에서 그것을 검색하는 것은 안전하다.

기본적으로 꺼져 있음:

  • 허니팟: 생성된 robots.txt에 Disallow:로만 게시되고 어디에도 링크되지 않은 경로. 여기에 도달한다는 것은 robots.txt를 무시한다는 뜻이며, 이는 차단당할 만하다. 작동하려면 robots.txt 생성이 켜져 있어야 한다.

세 가지 더 있는데, 이들은 클라이언트가 무엇을 요청하는지가 아니라 어떻게 행동하는지를 본다. 세 가지 모두 기본적으로 꺼져 있는데, 각각 오탐이 있기 때문이다 — 그리고 세 가지 모두 검증된 검색 엔진 크롤러를 예외로 두는데, 그렇지 않으면 모두 해당 크롤러에 걸릴 것이다:

  • 자산을 가져오지 않음: 서로 다른 페이지가 많지만 스타일시트, 스크립트, 이미지가 단 하나도 없음. 브라우저는 페이지에 딸린 것을 로드한다. API 클라이언트(서로 다른 경로를 계산하는데 API 클라이언트는 몇 개만 접근함)나 잘 캐시된 재방문자(304는 가져온 자산으로 계산됨)는 잡지 못한다. 자산을 전혀 제공하지 않는 사이트에서는 도움이 될 수 없다.
  • 사용자 에이전트 순환: 한 주소에서 여러 신원. 하나의 IP에서 여러 실제 브라우저를 표시하는 통신사, 캠퍼스 또는 사무실 게이트웨이를 차단할 수 있다.
  • 리퍼러 없이 크롤링: 서로 다른 깊은 페이지가 많지만 Referer가 전혀 없음. Referrer-Policy: no-referrer와 프라이버시 도구로 약화되지만, 서로 다른 경로 임계값이 이를 사용 가능하게 만든다.
도구 다운로드