Key Management
DO NOT Store Your Withdrawer Key On Your Validator
There are a number of options for withdrawer key management:- Hardware wallets - Ledger, Trezor, or other hardware wallet devices
- Paper wallets - Generated offline and stored securely
- Multisig - Each key of the multisig is a hardware wallet or paper wallet
- Generated on a trusted computer (other than your validator)
- Stored securely offline
- Backed up in multiple secure locations
- Never stored on your validator at any time
If you lose your withdrawer keypair, you will lose control of your vote account. You will not be able to withdraw tokens from the vote account or update the withdrawer.
Validator Identity Key
The validator identity keypair must be stored as a “hot wallet” in a keypair file on the same system the validator process is running, because the validator is frequently signing transactions and paying fees. Because a hot wallet is generally less secure than an offline or “cold” wallet, the validator operator may choose to store only enough SOL on the identity account to cover voting fees for a limited amount of time, such as a few weeks or months.Vote Authority Key
The vote authority keypair is used to sign each vote transaction. Like the validator identity, this must be a hot keypair on the same file system as the validator process. For efficiency, the vote authority can be set to the same address as the validator identity. If they are the same, only one signature per vote transaction is needed, resulting in half the transaction fee compared to using two different accounts.Backup Your Keys
To backup your validator identity keypair:- Back up your keypair file - Copy
validator-keypair.jsonto secure offline storage - Or back up your seed phrase - If you generated the key with a seed phrase, store it securely
- Store backups in multiple locations - Use different physical locations
- Encrypt your backups - Protect backup files with strong encryption
- Test recovery - Periodically verify you can recover from your backups
System Security
DO NOT Run The Validator as Root User
If there is an exploit in your system, a hacker could have full access if your Solana application is running as theroot user. Instead, create a user called sol and run the application as the sol user.
Create the sol user:
Keep Your System Up To Date
Make sure to regularly update packages in your Ubuntu system:Close Ports That Are Not In Use
Your system should close all ports that do not need to be open to the outside world. A common firewall for closing ports isufw (uncomplicated firewall).
Basic UFW setup:
Eliminate Brute Force Attacks With fail2ban
fail2ban is a network security tool that checks your logs for suspicious login attempts and bans those IP addresses after repeated attempts. This will help mitigate brute force attacks on your server. The default setup should work out-of-the-box by simply installingfail2ban:
DO NOT Use Password Authentication for SSH
In addition to installingfail2ban, it is recommended to disable password based authentication for SSH access. SSH key based authentication is preferred.
Generate SSH Key (on your local machine)
Copy SSH Key to Server
Disable Password Authentication
Edit SSH config:Network Security
Use a Static IP Address
Your validator should have a static public IP address. Dynamic IPs can cause issues with gossip and peer connections.Limit SSH Access by IP
If you have a static IP address for management, limit SSH access to only that IP:Do Not Run Behind NAT
Validators need direct internet connectivity for optimal performance. NAT can cause issues with:- Gossip protocol
- Peer discovery
- Turbine (block propagation)
- Network performance
Monitor Network Connections
Regularly check for unusual network connections:File System Security
Set Proper File Permissions
Ensure your keypair files have restricted permissions:Encrypt Sensitive Data at Rest
Consider using disk encryption for drives containing validator data:Regular Backups
While you should not back up your withdrawer key on the validator, you should back up:- Validator identity keypair
- Vote account keypair (public key is all that’s needed)
- System configuration files
- Startup scripts
Operational Security
Use a Dedicated Machine
Run your validator on a dedicated machine that is not used for other purposes. This reduces the attack surface and prevents resource contention.Minimize Installed Software
Only install software that is necessary for validator operations. Each additional package is a potential security vulnerability.Enable Automatic Security Updates
Configure unattended-upgrades for automatic security patches:Monitor System Logs
Regularly review system logs for suspicious activity:Implement Monitoring and Alerting
Set up monitoring to alert you of:- Unauthorized SSH access attempts
- Unusual CPU, memory, or disk usage
- Network anomalies
- File system changes
- Process crashes
Use Two-Factor Authentication
Where possible, enable two-factor authentication for:- Server access
- GitHub account (for source code access)
- Cloud provider accounts
- Any management interfaces
Incident Response
Have a Response Plan
Document procedures for common security incidents:- Compromised key - Steps to rotate keys
- Unauthorized access - How to investigate and lock down
- DDoS attack - Mitigation strategies
- System compromise - Recovery procedures
Report Security Issues
Instead, use the Report a Vulnerability link. Provide:- Helpful title
- Detailed description of the vulnerability
- Exploit proof-of-concept
Speculative submissions without proof-of-concept will be closed with no further consideration.
Security Checklist
Use this checklist to verify your validator security:- Withdrawer key is NOT stored on validator
- Withdrawer key is backed up securely offline
- Validator identity key is backed up
- Running validator as non-root user (sol)
- System packages are up to date
- Firewall (UFW) is configured and enabled
- fail2ban is installed and running
- SSH password authentication is disabled
- SSH key authentication is configured
- SSH access is limited by IP (if possible)
- File permissions are set correctly (600 for keys)
- Using a static public IP address
- Not running behind NAT
- Monitoring and alerting is configured
- Incident response plan is documented
- Regular security audits are scheduled