Add back steps to secure ssh daemon
Some checks are pending
CI/CD Pipeline (Fully Isolated DinD) / Run Tests (DinD) (push) Waiting to run
CI/CD Pipeline (Fully Isolated DinD) / Build and Push Docker Images (DinD) (push) Blocked by required conditions
CI/CD Pipeline (Fully Isolated DinD) / Deploy to Production (push) Blocked by required conditions
Some checks are pending
CI/CD Pipeline (Fully Isolated DinD) / Run Tests (DinD) (push) Waiting to run
CI/CD Pipeline (Fully Isolated DinD) / Build and Push Docker Images (DinD) (push) Blocked by required conditions
CI/CD Pipeline (Fully Isolated DinD) / Deploy to Production (push) Blocked by required conditions
This commit is contained in:
parent
ab1d377b2d
commit
eacaa2eea6
1 changed files with 301 additions and 2 deletions
|
@ -357,6 +357,159 @@ ssh ci-cd-dev
|
||||||
ssh production-dev
|
ssh production-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### 0.4.8 Secure SSH Configuration
|
||||||
|
|
||||||
|
**Critical Security Step**: After setting up SSH key authentication, you must disable password authentication and root login to secure your servers.
|
||||||
|
|
||||||
|
**For Both CI/CD and Production Linodes:**
|
||||||
|
|
||||||
|
**Step 1: Edit SSH Configuration File**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Open the SSH configuration file using nano
|
||||||
|
sudo nano /etc/ssh/sshd_config
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 2: Disallow Root Logins**
|
||||||
|
|
||||||
|
Find the line that says:
|
||||||
|
```
|
||||||
|
#PermitRootLogin prohibit-password
|
||||||
|
```
|
||||||
|
|
||||||
|
Change it to:
|
||||||
|
```
|
||||||
|
PermitRootLogin no
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3: Disable Password Authentication**
|
||||||
|
|
||||||
|
Find the line that says:
|
||||||
|
```
|
||||||
|
#PasswordAuthentication yes
|
||||||
|
```
|
||||||
|
|
||||||
|
Change it to:
|
||||||
|
```
|
||||||
|
PasswordAuthentication no
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 4: Configure Protocol Family (Optional)**
|
||||||
|
|
||||||
|
If you only need IPv4 connections, find or add:
|
||||||
|
```
|
||||||
|
#AddressFamily any
|
||||||
|
```
|
||||||
|
|
||||||
|
Change it to:
|
||||||
|
```
|
||||||
|
AddressFamily inet
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 5: Save and Exit**
|
||||||
|
|
||||||
|
- Press `Ctrl + X` to exit
|
||||||
|
- Press `Y` to confirm saving
|
||||||
|
- Press `Enter` to confirm the filename
|
||||||
|
|
||||||
|
**Step 6: Test SSH Configuration**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test the SSH configuration for syntax errors
|
||||||
|
sudo sshd -t
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 7: Restart SSH Service**
|
||||||
|
|
||||||
|
For Ubuntu 22.10+ (socket-based activation):
|
||||||
|
```bash
|
||||||
|
sudo systemctl enable --now ssh.service
|
||||||
|
```
|
||||||
|
|
||||||
|
For other distributions:
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart sshd
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 8: Verify SSH Access**
|
||||||
|
|
||||||
|
**IMPORTANT**: Test SSH access from a new terminal window before closing your current session:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test CI/CD Linode
|
||||||
|
ssh CI_DEPLOY_USER@YOUR_CI_CD_IP 'echo "SSH configuration test successful"'
|
||||||
|
|
||||||
|
# Test Production Linode
|
||||||
|
ssh PROD_DEPLOY_USER@YOUR_PRODUCTION_IP 'echo "SSH configuration test successful"'
|
||||||
|
```
|
||||||
|
|
||||||
|
**What these changes do:**
|
||||||
|
|
||||||
|
- **`PermitRootLogin no`**: Completely disables root SSH access
|
||||||
|
- **`PasswordAuthentication no`**: Disables password-based authentication
|
||||||
|
- **`AddressFamily inet`**: Listens only on IPv4 (optional, for additional security)
|
||||||
|
|
||||||
|
**Security Benefits:**
|
||||||
|
|
||||||
|
- **No root access**: Eliminates the most common attack vector
|
||||||
|
- **Key-only authentication**: Prevents brute force password attacks
|
||||||
|
- **Protocol restriction**: Limits SSH to IPv4 only (if configured)
|
||||||
|
|
||||||
|
**Emergency Access:**
|
||||||
|
|
||||||
|
If you lose SSH access, you can still access the server through:
|
||||||
|
- **Linode Console**: Use the Linode dashboard's console access
|
||||||
|
- **Emergency mode**: Boot into single-user mode if needed
|
||||||
|
|
||||||
|
**Verification Commands:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check SSH configuration
|
||||||
|
sudo grep -E "(PermitRootLogin|PasswordAuthentication|AddressFamily)" /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# Check SSH service status
|
||||||
|
sudo systemctl status ssh
|
||||||
|
|
||||||
|
# Check SSH logs for any issues
|
||||||
|
sudo journalctl -u ssh -f
|
||||||
|
|
||||||
|
# Test SSH access from a new session
|
||||||
|
ssh CI_DEPLOY_USER@YOUR_CI_CD_IP 'whoami'
|
||||||
|
ssh PROD_DEPLOY_USER@YOUR_PRODUCTION_IP 'whoami'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Expected Output:**
|
||||||
|
- `PermitRootLogin no`
|
||||||
|
- `PasswordAuthentication no`
|
||||||
|
- `AddressFamily inet` (if configured)
|
||||||
|
- SSH service should be "active (running)"
|
||||||
|
- Test commands should return the deployment user names
|
||||||
|
|
||||||
|
**Important Security Notes:**
|
||||||
|
|
||||||
|
1. **Test before closing**: Always test SSH access from a new session before closing your current SSH connection
|
||||||
|
2. **Keep backup**: You can restore the original configuration if needed
|
||||||
|
3. **Monitor logs**: Check `/var/log/auth.log` for SSH activity and potential attacks
|
||||||
|
4. **Regular updates**: Keep SSH and system packages updated for security patches
|
||||||
|
|
||||||
|
**Alternative: Manual Configuration with Backup**
|
||||||
|
|
||||||
|
If you prefer to manually edit the file with a backup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create backup
|
||||||
|
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
|
||||||
|
|
||||||
|
# Edit the file
|
||||||
|
sudo nano /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# Test configuration
|
||||||
|
sudo sshd -t
|
||||||
|
|
||||||
|
# Restart service
|
||||||
|
sudo systemctl restart ssh
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Part 1: CI/CD Linode Setup
|
## Part 1: CI/CD Linode Setup
|
||||||
|
@ -1604,7 +1757,154 @@ The `docker-compose.prod.yml` file is specifically designed for production deplo
|
||||||
|
|
||||||
### Step 15: Configure Security
|
### Step 15: Configure Security
|
||||||
|
|
||||||
#### 15.1 Configure Firewall
|
#### 15.1 Secure SSH Configuration
|
||||||
|
|
||||||
|
**Critical Security Step**: After setting up SSH key authentication, you must disable password authentication and root login to secure your Production server.
|
||||||
|
|
||||||
|
**Step 1: Edit SSH Configuration File**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Open the SSH configuration file using nano
|
||||||
|
sudo nano /etc/ssh/sshd_config
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 2: Disallow Root Logins**
|
||||||
|
|
||||||
|
Find the line that says:
|
||||||
|
```
|
||||||
|
#PermitRootLogin prohibit-password
|
||||||
|
```
|
||||||
|
|
||||||
|
Change it to:
|
||||||
|
```
|
||||||
|
PermitRootLogin no
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3: Disable Password Authentication**
|
||||||
|
|
||||||
|
Find the line that says:
|
||||||
|
```
|
||||||
|
#PasswordAuthentication yes
|
||||||
|
```
|
||||||
|
|
||||||
|
Change it to:
|
||||||
|
```
|
||||||
|
PasswordAuthentication no
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 4: Configure Protocol Family (Optional)**
|
||||||
|
|
||||||
|
If you only need IPv4 connections, find or add:
|
||||||
|
```
|
||||||
|
#AddressFamily any
|
||||||
|
```
|
||||||
|
|
||||||
|
Change it to:
|
||||||
|
```
|
||||||
|
AddressFamily inet
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 5: Save and Exit**
|
||||||
|
|
||||||
|
- Press `Ctrl + X` to exit
|
||||||
|
- Press `Y` to confirm saving
|
||||||
|
- Press `Enter` to confirm the filename
|
||||||
|
|
||||||
|
**Step 6: Test SSH Configuration**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test the SSH configuration for syntax errors
|
||||||
|
sudo sshd -t
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 7: Restart SSH Service**
|
||||||
|
|
||||||
|
For Ubuntu 22.10+ (socket-based activation):
|
||||||
|
```bash
|
||||||
|
sudo systemctl enable --now ssh.service
|
||||||
|
```
|
||||||
|
|
||||||
|
For other distributions:
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart sshd
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 8: Verify SSH Access**
|
||||||
|
|
||||||
|
**IMPORTANT**: Test SSH access from a new terminal window before closing your current session:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test Production Linode
|
||||||
|
ssh PROD_DEPLOY_USER@YOUR_PRODUCTION_IP 'echo "SSH configuration test successful"'
|
||||||
|
```
|
||||||
|
|
||||||
|
**What these changes do:**
|
||||||
|
|
||||||
|
- **`PermitRootLogin no`**: Completely disables root SSH access
|
||||||
|
- **`PasswordAuthentication no`**: Disables password-based authentication
|
||||||
|
- **`AddressFamily inet`**: Listens only on IPv4 (optional, for additional security)
|
||||||
|
|
||||||
|
**Security Benefits:**
|
||||||
|
|
||||||
|
- **No root access**: Eliminates the most common attack vector
|
||||||
|
- **Key-only authentication**: Prevents brute force password attacks
|
||||||
|
- **Protocol restriction**: Limits SSH to IPv4 only (if configured)
|
||||||
|
|
||||||
|
**Emergency Access:**
|
||||||
|
|
||||||
|
If you lose SSH access, you can still access the server through:
|
||||||
|
- **Linode Console**: Use the Linode dashboard's console access
|
||||||
|
- **Emergency mode**: Boot into single-user mode if needed
|
||||||
|
|
||||||
|
**Verification Commands:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check SSH configuration
|
||||||
|
sudo grep -E "(PermitRootLogin|PasswordAuthentication|AddressFamily)" /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# Check SSH service status
|
||||||
|
sudo systemctl status ssh
|
||||||
|
|
||||||
|
# Check SSH logs for any issues
|
||||||
|
sudo journalctl -u ssh -f
|
||||||
|
|
||||||
|
# Test SSH access from a new session
|
||||||
|
ssh PROD_DEPLOY_USER@YOUR_PRODUCTION_IP 'whoami'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Expected Output:**
|
||||||
|
- `PermitRootLogin no`
|
||||||
|
- `PasswordAuthentication no`
|
||||||
|
- `AddressFamily inet` (if configured)
|
||||||
|
- SSH service should be "active (running)"
|
||||||
|
- Test commands should return the deployment user name
|
||||||
|
|
||||||
|
**Important Security Notes:**
|
||||||
|
|
||||||
|
1. **Test before closing**: Always test SSH access from a new session before closing your current SSH connection
|
||||||
|
2. **Keep backup**: You can restore the original configuration if needed
|
||||||
|
3. **Monitor logs**: Check `/var/log/auth.log` for SSH activity and potential attacks
|
||||||
|
4. **Regular updates**: Keep SSH and system packages updated for security patches
|
||||||
|
|
||||||
|
**Alternative: Manual Configuration with Backup**
|
||||||
|
|
||||||
|
If you prefer to manually edit the file with a backup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create backup
|
||||||
|
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
|
||||||
|
|
||||||
|
# Edit the file
|
||||||
|
sudo nano /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# Test configuration
|
||||||
|
sudo sshd -t
|
||||||
|
|
||||||
|
# Restart service
|
||||||
|
sudo systemctl restart ssh
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 15.2 Configure Firewall
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo ufw --force enable
|
sudo ufw --force enable
|
||||||
|
@ -1691,7 +1991,6 @@ sudo tail -f /var/log/fail2ban.log
|
||||||
|
|
||||||
# Check all active jails
|
# Check all active jails
|
||||||
sudo fail2ban-client status
|
sudo fail2ban-client status
|
||||||
```
|
|
||||||
|
|
||||||
**Why This Matters for Production**:
|
**Why This Matters for Production**:
|
||||||
- **Your server is exposed**: The Production Linode is accessible from the internet
|
- **Your server is exposed**: The Production Linode is accessible from the internet
|
||||||
|
|
Loading…
Add table
Reference in a new issue