Fogg

Hide those attributes returned by your Cosmos RPC and API endpoints that could identify your node.

Overview

Several Cosmos API and RPC endpoints return attributes that make it trivial to identify your node on the network, so fogg acts as a man in the middle in order to hide that information. Please see the following table for what is currently hidden with fogg:

Endpoint Service Hidden Attributes
/node_info API ID and ListenAddr
/status RPC ID, ListenAddr and ValidatorInfo.

Setup

Golang

If you are new to Golang, please follow the setup instructions here.

Environment

Before running fogg, please ensure that you have the following environment variables set:

Var Description
FOGG_PORT The port that the service should run on (e.g.: 3000)
API_HOST The API host, including the protocol and port (e.g.: http://localhost:1317).
RPC_HOST The RPC host complete with protocol and port (e.g.: http://localhost:26657).

Nginx

If you’re using Nginx as a reverse proxy, you can use the following configuration examples as a guide (please remember to set the port to whatever your fogg instance is listening on). The examples also demonstrate how you can support both fogg and proxying everything else to the respective services directly.

For your API service:

location / {
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
    location ~ /node_info {
        proxy_pass http://localhost:3000/api/node_info;
    }

    proxy_pass http://localhost:1317;
}

and similarly for your RPC service:

location / {
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;

    location ~ /status {
        proxy_pass http://localhost:3000/rpc/status;
    }

    proxy_pass http://localhost:26657;
}

Run

Install

To install the binary, run:

make clean install

Start

To then to start the service:

make run-fogg-service

Development

Linter

To run the linter:

make lint

Tests

To run the tests and see test coverage:

make tests

GitHub

View Github