12 KiB
12 KiB
Secure VPN Server - Ansible Collection v2.0
CIS Ubuntu 24.04 Level 1 Compliant | Production-Ready | Two-Tier Architecture
Complete Ansible collection for deploying secure, hardened VPN servers with comprehensive user management, CIS benchmark compliance, and multi-server architecture support.
What's New in v2.0
🔐 CIS Compliance
- CIS Ubuntu 24.04 Level 1 benchmark compliance
- AppArmor mandatory access control
- Comprehensive audit logging (4.1.x)
- Enhanced network hardening (3.x)
- Password policies and PAM configuration (5.4.x, 5.5.x)
👥 SSH User Management
- Automated user creation with sudo access
- SSH key generation on control node
- Root SSH restrictions (disabled by default)
- Password policies (CIS compliant)
- User management playbooks (add/remove users)
🏗️ Two-Tier Architecture Support
- ValleyForge (admin control plane) manages infrastructure
- VPN endpoints (VPN1/VPN2/VPN3) serve end users
- Firewall lockdown to management sources only
- Scalable to hundreds of users across multiple servers
Features
Security Hardening (CIS Level 1)
- ✅ SSH hardening with strong ciphers (CIS 5.2.x)
- ✅ Root login disabled, admin users with sudo
- ✅ AppArmor enforcing mode (CIS 1.3.x)
- ✅ Comprehensive audit rules (CIS 4.1.x)
- ✅ Password complexity and expiration (CIS 5.4.x, 5.5.x)
- ✅ Account lockout policies (CIS 5.5.2)
- ✅ Kernel hardening via sysctl (CIS 3.x)
- ✅ Uncommon protocols disabled (CIS 3.3.x)
- ✅ Core dumps restricted (CIS 1.5.1)
- ✅ Automatic security updates
- ✅ Fail2ban intrusion prevention
User Management
- ✅ Create admin users with SSH keys
- ✅ Automatic SSH key pair generation
- ✅ Sudo configuration (password/nopassword)
- ✅ Root account restrictions
- ✅ Add/remove user playbooks
- ✅ Password policy enforcement
VPN Server
- ✅ WireGuard VPN with modern cryptography
- ✅ Per-user key generation
- ✅ QR codes for mobile devices
- ✅ Forward secrecy
- ✅ DNS encryption
Firewall
- ✅ UFW with default deny
- ✅ Management access restricted to authorized sources
- ✅ VPN-only mode for infrastructure protection
- ✅ Rate limiting on SSH
- ✅ Two-tier architecture support
Architecture
Two-Tier VPN Infrastructure
┌─────────────────────────────────────────┐
│ ValleyForge (Admin Control Plane) │
│ - WireGuard admin VPN (10.100.0.0/24) │
│ - Ansible control node │
│ - GitHub Actions runner │
│ - 2-5 admin users │
└──────────────┬──────────────────────────┘
│ SSH (from ValleyForge IP only)
↓
┌──────────────────────────────────────────┐
│ VPN Endpoints (User Data Plane) │
│ ┌────────────────────────────────────┐ │
│ │ VPN1 (10.200.0.0/24) - 50-70 users │ │
│ │ VPN2 (10.201.0.0/24) - 50-70 users │ │
│ │ VPN3 (10.202.0.0/24) - 50-70 users │ │
│ └────────────────────────────────────┘ │
└──────────────┬──────────────────────────┘
│ User VPN (public access)
↓
End Users (200+)
↓
Collaboration Infrastructure
(Mattermost, Nextcloud, Jitsi)
Quick Start
1. Install Collection
tar xzf secure_vpn_server_v2.0.tar.gz
cd secure_vpn_server
# Install dependencies
pip3 install -r requirements.txt
ansible-galaxy collection install -r requirements.yml
2. Configure Inventory
# Edit inventory
nano inventory/hosts.yml
Set your servers:
vpn_servers:
hosts:
vpn1:
ansible_host: 203.0.113.10
vpn2:
ansible_host: 203.0.113.11
vpn3:
ansible_host: 203.0.113.12
3. Configure Variables
nano inventory/group_vars/vpn_servers.yml
CRITICAL - Set ValleyForge IP:
valleyforge_public_ip: "185.112.147.205" # Your actual IP!
admin_users:
- username: alice
comment: "Alice - Admin"
groups: ["sudo"]
generate_keys: true
4. Deploy
# Validate configuration
ansible-playbook -i inventory/hosts.yml playbooks/validate.yml
# Deploy everything
ansible-playbook -i inventory/hosts.yml playbooks/site.yml
# Or deploy to single server
ansible-playbook -i inventory/hosts.yml playbooks/site.yml --limit vpn1
5. Retrieve SSH Keys
# SSH keys are generated on control node
ls -la ssh-keys/vpn1/
# Copy to your machine
cp ssh-keys/vpn1/alice_id_ed25519 ~/.ssh/
chmod 600 ~/.ssh/alice_id_ed25519
# Test SSH
ssh -i ~/.ssh/alice_id_ed25519 alice@vpn1
Playbooks
Main Playbooks
| Playbook | Purpose | Usage |
|---|---|---|
site.yml |
Complete deployment | Full server setup |
hardening.yml |
Security hardening only | Apply CIS controls |
users.yml |
User management only | Create admin users |
wireguard.yml |
VPN setup only | Deploy WireGuard |
firewall.yml |
Firewall config only | Configure UFW |
validate.yml |
Configuration validation | Pre-deployment check |
User Management Playbooks
| Playbook | Purpose | Usage |
|---|---|---|
add_user.yml |
Add single admin user | Interactive user creation |
remove_user.yml |
Remove admin user | Interactive user removal |
Examples
# Full deployment
ansible-playbook -i inventory/hosts.yml playbooks/site.yml
# Add new admin user
ansible-playbook -i inventory/hosts.yml playbooks/add_user.yml
# Apply hardening to existing servers
ansible-playbook -i inventory/hosts.yml playbooks/hardening.yml
# Update firewall rules
ansible-playbook -i inventory/hosts.yml playbooks/firewall.yml
Roles
1. system_hardening
CIS Level 1 compliant system hardening
Features:
- SSH hardening (strong ciphers, key-only auth)
- Sysctl kernel parameters (network, security)
- AppArmor mandatory access control
- Comprehensive audit logging
- Fail2ban intrusion prevention
- Automatic security updates
- Uncommon protocols disabled
- Core dumps restricted
- Security banners
2. ssh_users
SSH user management with key generation
Features:
- Create admin users with sudo access
- Generate SSH key pairs automatically
- Configure authorized_keys
- Password policy enforcement
- Sudo configuration (CIS 5.3.x)
- Root account restrictions
3. wireguard_server
WireGuard VPN server deployment
Features:
- WireGuard installation and configuration
- Per-user key generation
- Client config generation (desktop + mobile)
- QR codes for mobile devices
- Forward secrecy
- DNS encryption
4. secure_firewall
UFW firewall with VPN-only mode
Features:
- Default deny incoming
- Management access restricted to authorized sources
- User VPN publicly accessible
- Rate limiting on SSH
- Two-tier architecture support
CIS Compliance
This collection implements CIS Ubuntu 24.04 Level 1 controls:
| CIS Section | Controls | Status |
|---|---|---|
| 1.3.x | AppArmor | ✅ Implemented |
| 1.4.x | Warning Banners | ✅ Implemented |
| 1.5.x | Process Hardening | ✅ Implemented |
| 3.1.x | Network Parameters (Host) | ✅ Implemented |
| 3.2.x | Network Parameters (All) | ✅ Implemented |
| 3.3.x | Uncommon Protocols | ✅ Implemented |
| 3.4.x | Firewall Configuration | ✅ Implemented |
| 4.1.x | Audit Configuration | ✅ Implemented |
| 5.2.x | SSH Configuration | ✅ Implemented |
| 5.3.x | Sudo Configuration | ✅ Implemented |
| 5.4.x | User Accounts | ✅ Implemented |
| 5.5.x | PAM Configuration | ✅ Implemented |
CIS Audit
Run CIS audit after deployment:
ssh alice@vpn1
sudo lynis audit system
Security Features
SSH Hardening
- Key-only authentication (passwords disabled)
- Root login disabled
- Strong ciphers (ChaCha20, AES-GCM)
- Strong MACs (SHA2-512/256 ETM)
- Strong KEX (Curve25519)
- Rate limiting (fail2ban)
- Verbose logging
Network Hardening
- SYN cookies enabled
- IP forwarding controlled
- ICMP redirects disabled
- Source routing disabled
- Reverse path filtering
- Martian packet logging
- IPv6 disabled (optional)
Access Control
- AppArmor enforcing
- Sudo logging
- Password complexity requirements
- Account lockout (5 failed attempts)
- Password expiration (365 days)
- Inactive account locking (30 days)
Audit Logging
- Comprehensive audit rules (CIS 4.1.6-17)
- Time changes logged
- User/group changes logged
- Network changes logged
- Permission changes logged
- File access attempts logged
- File deletions logged
- Sudo usage logged
- Kernel module changes logged
Configuration
Admin Users
admin_users:
- username: alice
comment: "Alice - Infrastructure Admin"
groups: ["sudo", "adm"]
generate_keys: true # Auto-generate SSH keys
shell: /bin/bash
state: present
Management Access
# Allow management from ValleyForge only
management_allowed_sources:
- "185.112.147.205" # ValleyForge public IP
- "10.100.0.0/24" # ValleyForge admin VPN (optional)
VPN Configuration
# Per-host in host_vars/vpn1.yml
wg_network: "10.200.0.0/24"
wg_server_ip: "10.200.0.1"
wg_port: 51820
wg_peers:
- name: user1
- name: user2
# ... 50-70 users per endpoint
Files Generated
On VPS Servers
/etc/wireguard/
├── wg0.conf # Server config
└── keys/ # Server + user keys
/root/wireguard-client-configs/
├── user1.conf # Desktop configs
├── user1_qr.txt # Mobile QR codes
└── README.md
/root/
├── deployment-summary.txt # Deployment info
└── firewall-config.txt # Firewall rules
/var/log/
├── sudo.log # Sudo usage
└── audit/audit.log # Audit events
On Control Node (ValleyForge)
ssh-keys/
└── vpn1/
├── alice_id_ed25519 # Private key
├── alice_id_ed25519.pub # Public key
├── bob_id_ed25519
├── bob_id_ed25519.pub
└── README.md # Usage instructions
Troubleshooting
SSH Access Issues
# Test SSH with verbose output
ssh -vvv -i ~/.ssh/alice_id_ed25519 alice@vpn1
# Check SSH logs on server
sudo journalctl -u sshd -f
# Verify user exists
sudo getent passwd alice
# Check sudo access
sudo -l
Firewall Issues
# Check UFW status
sudo ufw status verbose
# Check if management IP is allowed
sudo ufw status numbered
# Temporarily disable firewall (DANGEROUS!)
sudo ufw disable
VPN Issues
# Check WireGuard status
sudo wg show
# Check WireGuard logs
sudo journalctl -u wg-quick@wg0 -f
# Restart WireGuard
sudo systemctl restart wg-quick@wg0
Best Practices
User Management
- Always create admin users before disabling root SSH
- Test SSH access with new users before disconnecting
- Keep private keys secure - never commit to git
- Rotate SSH keys every 90 days
- Remove users when they leave the team
Security
- Run validation playbook before deployment
- Review audit logs regularly
- Keep systems updated (automatic updates enabled)
- Monitor fail2ban for attack attempts
- Rotate VPN keys for compromised users
Operations
- Use version control for inventory and variables
- Document changes in git commits
- Test on single server before deploying to all
- Keep backups of SSH keys and configs
- Monitor resource usage (CPU, RAM, bandwidth)
Support
Documentation
docs/TWO_TIER_DEPLOYMENT.md- Two-tier architecture guidedocs/USAGE.md- Detailed usage guideCIS_REQUIREMENTS.md- CIS compliance details
Validation
ansible-playbook -i inventory/hosts.yml playbooks/validate.yml
Audit
# CIS audit with Lynis
ssh alice@vpn1
sudo lynis audit system
# Check audit logs
sudo ausearch -ts recent
License
MIT
Version
2.0.0 - CIS Compliant with User Management
Changelog
See CHANGELOG.md for version history.