Add automated security hardening setup script
- scripts/setup-security-hardening.sh: One-command deployment of all security configurations - Includes SSH hardening, kernel parameters, Docker security, fail2ban, and nginx rate limiting - Provides status output and next steps for verification
This commit is contained in:
112
scripts/setup-security-hardening.sh
Executable file
112
scripts/setup-security-hardening.sh
Executable file
@@ -0,0 +1,112 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Security Hardening Setup Script
|
||||||
|
# Run with: sudo -A ./scripts/setup-security-hardening.sh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "=== Security Hardening Setup ==="
|
||||||
|
echo "Deploying security configurations from config/ directory"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if running as root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "This script must be run as root (use sudo -A)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
REPO_DIR="/home/hoborg/homelab"
|
||||||
|
|
||||||
|
# 1. Deploy SSH hardening
|
||||||
|
log_info "Deploying SSH security configuration..."
|
||||||
|
if [ -f "$REPO_DIR/config/ssh/sshd_config_hardening" ]; then
|
||||||
|
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup || true
|
||||||
|
cat "$REPO_DIR/config/ssh/sshd_config_hardening" >> /etc/ssh/sshd_config
|
||||||
|
cp "$REPO_DIR/config/ssh/banner" /etc/ssh/banner
|
||||||
|
chmod 644 /etc/ssh/banner
|
||||||
|
log_info "SSH hardening applied"
|
||||||
|
else
|
||||||
|
log_warn "SSH hardening config not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Deploy kernel security parameters
|
||||||
|
log_info "Deploying kernel security parameters..."
|
||||||
|
if [ -f "$REPO_DIR/config/sysctl/99-security.conf" ]; then
|
||||||
|
cp "$REPO_DIR/config/sysctl/99-security.conf" /etc/sysctl.d/
|
||||||
|
sysctl -p /etc/sysctl.d/99-security.conf
|
||||||
|
log_info "Kernel security parameters applied"
|
||||||
|
else
|
||||||
|
log_warn "Sysctl security config not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. Deploy Docker security configuration
|
||||||
|
log_info "Deploying Docker security configuration..."
|
||||||
|
if [ -f "$REPO_DIR/config/docker/daemon.json" ]; then
|
||||||
|
mkdir -p /etc/docker
|
||||||
|
cp "$REPO_DIR/config/docker/daemon.json" /etc/docker/
|
||||||
|
systemctl restart docker
|
||||||
|
log_info "Docker security configuration applied"
|
||||||
|
else
|
||||||
|
log_warn "Docker daemon config not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. Deploy fail2ban configuration
|
||||||
|
log_info "Deploying fail2ban configuration..."
|
||||||
|
if [ -f "$REPO_DIR/config/fail2ban/jail.local" ]; then
|
||||||
|
# Install fail2ban if needed
|
||||||
|
if ! command -v fail2ban-server >/dev/null; then
|
||||||
|
log_info "Installing fail2ban..."
|
||||||
|
pacman -S --noconfirm fail2ban
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Deploy config files
|
||||||
|
cp "$REPO_DIR/config/fail2ban/jail.local" /etc/fail2ban/
|
||||||
|
cp "$REPO_DIR/config/fail2ban/filter.d/"*.conf /etc/fail2ban/filter.d/
|
||||||
|
|
||||||
|
# Enable and restart
|
||||||
|
systemctl enable fail2ban
|
||||||
|
systemctl restart fail2ban
|
||||||
|
|
||||||
|
log_info "fail2ban configuration applied"
|
||||||
|
else
|
||||||
|
log_warn "fail2ban config not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. Deploy nginx rate limiting
|
||||||
|
log_info "Deploying nginx rate limiting..."
|
||||||
|
if [ -f "$REPO_DIR/config/systemd/nginx.service.d/rate-limit.conf" ]; then
|
||||||
|
mkdir -p /etc/systemd/system/nginx.service.d
|
||||||
|
cp "$REPO_DIR/config/systemd/nginx.service.d/rate-limit.conf" /etc/systemd/system/nginx.service.d/
|
||||||
|
systemctl daemon-reload
|
||||||
|
log_info "Nginx rate limiting applied"
|
||||||
|
else
|
||||||
|
log_warn "Nginx rate limiting config not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== Security Hardening Complete ==="
|
||||||
|
echo
|
||||||
|
echo "Applied configurations:"
|
||||||
|
echo " ✓ SSH hardening and banner"
|
||||||
|
echo " ✓ Kernel security parameters"
|
||||||
|
echo " ✓ Docker security configuration"
|
||||||
|
echo " ✓ fail2ban intrusion prevention"
|
||||||
|
echo " ✓ Nginx rate limiting"
|
||||||
|
echo
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " 1. Test SSH connections: ssh -p 2222 user@localhost"
|
||||||
|
echo " 2. Check fail2ban status: fail2ban-client status"
|
||||||
|
echo " 3. Verify services: systemctl status sshd nginx docker"
|
||||||
|
echo " 4. Monitor logs: tail -f /var/log/honeypot.log"
|
||||||
Reference in New Issue
Block a user