Skip to content

Honeywatch

Honeywatch

Run your own SSH honeypot and watch what the internet does to it.

Overview page of the public instance: attack origins by country, live sessions and the map detail slider

What It Is

Honeywatch is an SSH honeypot with an analytics pipeline attached. A Cowrie honeypot answers SSH pretending to be a neglected CentOS box. An ingestor tails Cowrie's JSON event log into PostgreSQL. A read-only Flask API serves aggregates over that data, and a Vue dashboard turns them into a world map, an activity heatmap, credential leaderboards and per-session replays.

The default setup is five containers on one Docker network. Simplest configuration would include the following:

  1. Clone the repo onto a VPS or a spare machine;
  2. Give the port 22 to the honeypot;
  3. Keep the dashboard bound to loopback;
  4. Look at it through a tunnel.

A public instance runs at honey.piotrkrzysztof.dev.

How It Fits Together

graph TB
    subgraph capture [Capture]
        direction LR
        ATT[Attacker] -->|SSH| COW[cowrie]
        COW -->|JSON events| LOG[(cowrie-logs volume)]
    end
    subgraph store [Store]
        direction LR
        ING[ingestor] -->|writes| PG[(postgres)]
    end
    subgraph serve [Serve]
        direction LR
        YOU[Your browser] --> DASH[dashboard: nginx + Vue]
        DASH -->|GET /api/v1| API[api: Flask + gunicorn]
    end
    LOG -->|tail| ING
    API -->|reads| PG

Cowrie and the ingestor never talk directly. They share a volume, and the ingestor tails cowrie.json out of it.

Where to Start

  • Quick Start


    Bring the five containers up on your laptop and see the dashboard

    Quick Start

  • Deploy the Stack


    Put it on a real machine: what to publish, what to keep on loopback

    Deploy the Stack

  • How It Works


    The pipeline in detail: event parsing, schema, geolocation, redaction

    How It Works

  • REST API


    Every endpoint, plus the self-hosted Swagger UI and ReDoc

    REST API

What It Captures

Login attempts, the commands attackers type, hashes of anything they download, SSH client versions and key-exchange fingerprints, offered public keys, and port-forward requests. Everything else Cowrie emits is dropped.

The API is read-only and never returns a source IP address. Addresses are kept in the database for geolocation and counting distinct sources, nothing more.

You are collecting other people's data

A honeypot records credentials people type and binaries they upload. Whether that is fine where you live is your call to make before you expose it.

License and Attributions

Honeywatch is MIT licensed. Cowrie is a separate upstream project with its own license.

This product includes GeoLite Data created by MaxMind, available from maxmind.com. Country boundaries are made with Natural Earth.