Authentication System
SirrMesh provides multiple flexible authentication methods, supporting various authentication mechanisms from traditional passwords to modern blockchain signatures.
Authentication Methods
Blockchain Authentication
Use blockchain wallets for passwordless authentication.
How It Works
- Client signs a random message using private key
- Server verifies signature and recovers wallet address
- Verify the address matches the user account
Configuration Example
toml
[auth.blockchain]
enabled = true
networks = ["ethereum", "bsc", "polygon"]
[auth.blockchain.rpc]
ethereum = "https://mainnet.infura.io/v3/YOUR-PROJECT-ID"
bsc = "https://bsc-dataseed.binance.org"
polygon = "https://polygon-rpc.com"Supported Networks
- Ethereum (ETH)
- BNB Smart Chain (BSC)
- Polygon (MATIC)
- All EVM-compatible chains
Client Usage
javascript
// Generate signature
const message = `Login to SirrMesh: ${timestamp}`;
const signature = await web3.eth.personal.sign(message, address);
// SMTP AUTH
AUTH BLOCKCHAIN
<address>
<signature>
<message>LDAP Authentication
Integrate with enterprise LDAP directory services.
Configuration
toml
[auth.ldap]
enabled = true
server = "ldap://ldap.example.com:389"
bind_dn = "cn=admin,dc=example,dc=com"
bind_password = "password"
user_base = "ou=users,dc=example,dc=com"
user_filter = "(uid={username})"Active Directory
toml
[auth.ldap]
server = "ldap://dc.example.com:389"
bind_dn = "cn=Administrator,cn=Users,dc=example,dc=com"
bind_password = "password"
user_base = "cn=Users,dc=example,dc=com"
user_filter = "(sAMAccountName={username})"PAM Authentication
Use Linux system account authentication.
Configuration
toml
[auth.pam]
enabled = true
service = "sirrchat"PAM Configuration File
Create /etc/pam.d/sirrchat:
auth required pam_unix.so
account required pam_unix.soDatabase Authentication
Traditional username/password authentication.
Configuration
toml
[auth.database]
enabled = true
password_hash = "bcrypt" # bcrypt, argon2, scryptCreate User
bash
sirrmeshd user create \
--username [email protected] \
--password secretpasswordMulti-Factor Authentication (MFA)
TOTP
Time-based One-Time Password.
toml
[auth.mfa]
enabled = true
issuer = "SirrMesh"Enable MFA
bash
sirrmeshd mfa enable --user [email protected]Hardware Keys
Support for FIDO2/WebAuthn hardware keys.
toml
[auth.mfa.webauthn]
enabled = true
rp_name = "SirrMesh Mail Server"Authentication Protocols
SASL Mechanisms
Supported SASL authentication mechanisms:
- PLAIN: Plaintext password (requires TLS)
- LOGIN: Login authentication
- CRAM-MD5: Challenge-response authentication
- SCRAM-SHA-256: Secure authentication
- BLOCKCHAIN: Custom blockchain authentication
Configuration Example
toml
[auth.sasl]
mechanisms = ["PLAIN", "LOGIN", "BLOCKCHAIN"]
require_tls = trueAccess Control
IP Whitelist
toml
[auth.access_control]
allowed_ips = ["192.168.1.0/24", "10.0.0.0/8"]IP Blacklist
toml
[auth.access_control]
blocked_ips = ["203.0.113.0/24"]Geographic Restrictions
toml
[auth.geo]
enabled = true
allowed_countries = ["US", "GB", "CA"]Session Management
Session Configuration
toml
[auth.session]
# Session timeout (seconds)
timeout = 3600
# Maximum concurrent sessions
max_sessions = 10
# Session token length
token_length = 32Session Storage
- Memory: Fast but not persistent
- Redis: Distributed session management
- Database: Persistent storage
toml
[auth.session.storage]
type = "redis"
redis_url = "redis://localhost:6379/0"Password Policy
Password Requirements
toml
[auth.password_policy]
min_length = 12
require_uppercase = true
require_lowercase = true
require_digits = true
require_special = truePassword History
toml
[auth.password_policy]
remember_count = 5 # Remember last 5 passwords
expiry_days = 90 # Expire after 90 daysSecurity Features
Brute Force Protection
toml
[auth.security]
max_attempts = 5
lockout_duration = 300 # 5 minutesAnomaly Detection
toml
[auth.anomaly_detection]
enabled = true
alert_on_new_ip = true
alert_on_new_device = trueAudit Logging
Logged Events
- Login attempts (success/failure)
- Password changes
- MFA status changes
- Session creation/destruction
Log Format
json
{
"timestamp": "2025-01-15T10:30:00Z",
"event": "login_success",
"user": "[email protected]",
"ip": "192.168.1.100",
"method": "blockchain"
}API Authentication
API Keys
bash
sirrmeshd api-key create --user [email protected]OAuth 2.0
toml
[auth.oauth]
enabled = true
provider = "custom"
client_id = "sirrchat"
client_secret = "secret"Best Practices
- Always Use TLS: Encrypt authentication credentials in transit
- Enable MFA: Improve account security
- Regularly Rotate Keys: Update API keys and passwords
- Monitor Anomalies: Set up alert notifications
- Principle of Least Privilege: Grant only necessary permissions
Related Documentation: