Skip to main content
Running an Autheo Chain validator exposes you to four critical risks: slashing, tombstoning (permanent ban from double-signing), fund theft from a compromised operator key, and license revocation by governance.

OS hardening

SSH hardening

sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
sudo apt-get install -y fail2ban
sudo systemctl enable --now fail2ban

Run as an unprivileged user

sudo useradd -r -s /bin/false autheo
sudo chown -R autheo:autheo /path/to/node-home
Set User=autheo in your systemd service file.

app.toml hardening

allow-unprotected-txs = false
enabled-unsafe-cors = false

Firewall configuration

PortServiceValidator (no sentries)Validator (with sentries)Sentry
22SSHOpenOpenOpen
26656CometBFT P2POpenSentry IPs onlyOpen
26657CometBFT RPCClosedClosedClosed
26660PrometheusClosedClosedClosed
9090gRPCClosedClosedClosed
1317REST APIClosedClosedClosed
8545Ethereum JSON-RPCClosedClosedClosed
8546Ethereum WebSocketClosedClosedClosed

Consensus key management

Running two nodes simultaneously with the same priv_validator_key.json causes double-signing, which results in slashing and permanent tombstoning. There is no recovery. Always stop your old node completely before starting a replacement.
# config/config.toml
[consensus]
priv_validator_laddr = "tcp://127.0.0.1:26658"
Use tmkms or an HSM to keep the consensus key off the validator host entirely.

Key file backup

FileBackup frequencyRisk if lost
config/priv_validator_key.jsonOnceCannot sign blocks
data/priv_validator_state.jsonBefore every upgradeDouble-sign risk if old copy used
config/node_key.jsonOnceP2P identity lost
Operator key mnemonicOnceCannot recover funds
Always use the most recent priv_validator_state.json when restoring.

Sentry node architecture

Internet → [Sentry 1] ─┐
Internet → [Sentry 2] ─┼──► [Validator] (private network only)
Internet → [Sentry 3] ─┘
Validator config/config.toml:
persistent_peers = "<sentry1-id>@<sentry1-private-ip>:26656,..."
pex = false
Sentry config/config.toml:
private_peer_ids = "<validator-node-id>"
persistent_peers = "<validator-id>@<validator-private-ip>:26656"

Operator key security

  • Use --keyring-backend file (AES-encrypted) or --keyring-backend os for production
  • Never use --keyring-backend test outside development
  • Store the keyring password separately from the encrypted keystore file

Monitoring for security events

Check tombstone status:
autheod query slashing signing-info \
  $(autheod tendermint show-validator --home /path/to/node-home)
Alert when tendermint_consensus_validator_power reaches zero. See Monitoring for setup.