3.5 KiB
Authentication Backends
rust-socksd supports multiple authentication backends to secure your SOCKS5 and HTTP proxy endpoints. When authentication is enabled globally (auth.enabled: true), SOCKS5 requests require username/password authentication, and HTTP requests require HTTP Basic Authentication (via the Proxy-Authorization header).
1. Simple (File-based) Backend
This backend stores credentials in a local YAML configuration file. Passwords are securely hashed using Argon2, Bcrypt, or Scrypt.
Configuration
auth:
enabled: true
type: simple
user_config_file: "config/users.yml"
CLI User Management
You can manage this file dynamically using the user subcommand.
Initialize User Configuration
Create a new, empty user database file with a default hashing algorithm:
rust-socksd user --user-config config/users.yml init --hash-type argon2
Options for --hash-type: argon2 (default), bcrypt, scrypt
Add a New User
Add a user. You will be prompted for a password if you do not specify it on the command line:
rust-socksd user --user-config config/users.yml add myuser
Specify custom hash type per user:
rust-socksd user --user-config config/users.yml add myuser --hash-type bcrypt
List Configured Users
List all users, their status (enabled/disabled), creation time, and last modified time:
rust-socksd user --user-config config/users.yml list
Update Password
rust-socksd user --user-config config/users.yml update myuser
Enable / Disable a User
# Disable a user
rust-socksd user --user-config config/users.yml enable myuser false
# Enable a user
rust-socksd user --user-config config/users.yml enable myuser true
Remove a User
rust-socksd user --user-config config/users.yml remove myuser
2. PAM Backend
Integrates authentication with the Linux Pluggable Authentication Modules (PAM) subsystem. This allows proxying to authenticate using local system user accounts.
Note
Requires building
rust-socksdwith thepam-authfeature (enabled by default on Linux). The server process must also run with sufficient privileges (e.g., asroot) or belong to theshadowgroup to read system user credentials.
Configuration
auth:
enabled: true
type: pam
service: "socksd" # Refers to config file in /etc/pam.d/socksd
3. LDAP Backend
Authenticates users against an LDAP directory server (such as Active Directory or OpenLDAP).
Configuration
auth:
enabled: true
type: ldap
url: "ldap://ldap.example.com:389"
base_dn: "ou=users,dc=example,dc=com"
# Optional: DN and password used to search for user entries (if anonymous binds are disabled)
bind_dn: "cn=admin,dc=example,dc=com"
bind_password: "admin_password"
# User search query filter. '{}' is replaced by the logging-in username.
user_filter: "(uid={})"
4. Database (SQL) Backend
Authenticates users by querying a database and verifying the password hash against secure algorithms. Supports MySQL/MariaDB and PostgreSQL.
Configuration
auth:
enabled: true
type: database
db_type: "mysql" # or "postgres"
url: "mysql://socksd_user:secret@localhost/socksd_db"
# Query must return a single column containing the password hash
query: "SELECT password_hash FROM users WHERE username = ?"
# Hashing algorithm used in the database: argon2, bcrypt, or scrypt
hash_type: "argon2"