diff options
author | doc <doc@filenotfound.org> | 2025-06-30 20:06:28 +0000 |
---|---|---|
committer | doc <doc@filenotfound.org> | 2025-06-30 20:06:28 +0000 |
commit | 717fcb9c81d2bc3cc7a84a3ebea6572d7ff0f5cf (patch) | |
tree | 7cbd6a8d5046409a82b22d34b01aac93b3e24818 /cheatsheets/server_hardening_disaster_recovery.md | |
parent | 8368ff389ec596dee6212ebeb85e01c638364fb3 (diff) |
Diffstat (limited to 'cheatsheets/server_hardening_disaster_recovery.md')
-rw-r--r-- | cheatsheets/server_hardening_disaster_recovery.md | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/cheatsheets/server_hardening_disaster_recovery.md b/cheatsheets/server_hardening_disaster_recovery.md new file mode 100644 index 0000000..fd23c40 --- /dev/null +++ b/cheatsheets/server_hardening_disaster_recovery.md @@ -0,0 +1,87 @@ +# ๐ก๏ธ Server Hardening & Disaster Recovery Cheat Sheet + +## ๐ Server Hardening Checklist + +### ๐ OS & User Security +- โ
Use **key-based SSH authentication** (`~/.ssh/authorized_keys`) +- โ
Disable root login: + ```bash + sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config + sudo systemctl restart sshd + ``` +- โ
Change default SSH port and rate-limit with Fail2Ban or UFW +- โ
Set strong password policies: + ```bash + sudo apt install libpam-pwquality + sudo nano /etc/security/pwquality.conf + ``` +- โ
Lock down `/etc/sudoers`, remove unnecessary sudo privileges + +### ๐ง Kernel & System Hardening +- โ
Install and configure `ufw` or `iptables`: + ```bash + sudo ufw default deny incoming + sudo ufw allow ssh + sudo ufw enable + ``` +- โ
Disable unused filesystems: + ```bash + echo "install cramfs /bin/true" >> /etc/modprobe.d/disable-filesystems.conf + ``` +- โ
Set kernel parameters: + ```bash + sudo nano /etc/sysctl.d/99-sysctl.conf + # Example: net.ipv4.ip_forward = 0 + sudo sysctl -p + ``` + +### ๐งพ Logging & Monitoring +- โ
Enable and configure `auditd`: + ```bash + sudo apt install auditd audispd-plugins + sudo systemctl enable auditd + ``` +- โ
Centralize logs using `rsyslog`, `logrotate`, or Fluentbit +- โ
Use `fail2ban`, `CrowdSec`, or `Wazuh` for intrusion detection + +## ๐พ Disaster Recovery Checklist + +### ๐ฆ Backups +- โ
Automate **daily database dumps** (e.g., `pg_dump`, `mysqldump`) +- โ
Use **ZFS snapshots** for versioned backups +- โ
Sync offsite via `rclone`, `rsync`, or cloud storage +- โ
Encrypt backups using `gpg` or `age` + +### ๐ Testing & Recovery +- โ
**Verify backup integrity** regularly: + ```bash + gpg --verify backup.sql.gpg + pg_restore --list backup.dump + ``` +- โ
Practice **bare-metal restores** in a test environment +- โ
Use **PITR** (Point-In-Time Recovery) for PostgreSQL + +### ๐ Emergency Scripts +- โ
Create service restart scripts: + ```bash + systemctl restart mastodon + docker restart azuracast + ``` +- โ
Pre-stage `rescue.sh` to rebuild key systems +- โ
Include Mastodon/Gitea/etc. reconfig tools + +### ๐๏ธ Documentation +- โ
Maintain a **runbook** with: + - Service recovery steps + - IPs, ports, login methods + - Admin contacts and escalation + +### ๐งช Chaos Testing +- โ
Simulate failure of: + - A disk or volume (use `zpool offline`) + - A network link (`iptables -A OUTPUT ...`) + - A database node (use Patroni/pg_auto_failover tools) + +--- + +> โ
**Pro Tip**: Integrate all hardening and backup tasks into your Ansible playbooks for consistency and redeployability. |