Orange的運維學習日記–18.Linux sshd安全實踐
文章目錄
- Orange的運維學習日記--18.Linux sshd安全實踐
- 場景模擬
- sshd配置
- 需求:
- 參數表格:
- MOTD警告
- 定期備份SSH密鑰與配置
- 登錄防護:fail2ban
- 測試與日志
場景模擬
你是某金融科技公司的Linux運維工程師,負責維護核心生產服務器集群。近期公司安全審計發現,SSH服務存在以下風險:
- 暴力破解攻擊頻繁(平均每天嘗試1000+次)
- 部分服務器仍使用默認22端口
- 所有服務器未啟用雙因素認證
- 未限制 SSH訪問源IP
- 部分服務器仍允許root直接登錄
sshd配置
需求:
- 將 SSH 默認端口
22
修改為2222
- 禁用 root 直接登錄
- 禁用密碼認證,僅保留密鑰認證
- 禁止空口令的 SSH 密鑰
- 設置登錄超時為
120
秒 - 禁用 DNS 反向解析
參數表格:
參數 | 值 | 對應需求 |
---|---|---|
Port | 2222 | 修改默認端口 |
PermitRootLogin | no | 禁用 root 直接登錄 |
PasswordAuthentication | no | 禁用密碼認證 |
PermitEmptyPasswords | no | 禁止空口令的密鑰 |
LoginGraceTime | 120 | 登錄超時 120 秒 |
UseDNS | no | 禁用 DNS 反向解析 |
sudo vim /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
LoginGraceTime 120
UseDNS no
sudo systemctl restart sshd
MOTD警告
sudo bash -c "echo '授權訪問將被記錄并追究法律責任' >> /etc/motd"
登錄效果:
定期備份SSH密鑰與配置
- 編寫備份腳本
sudo vim /usr/local/bin/backup_ssh.sh
參考腳本1–未按用戶分類
#!/bin/bash
TARGET_DIR=/secure_backups/ssh_$(date +%F)
mkdir -p "$TARGET_DIR"
cp /etc/ssh/sshd_config "$TARGET_DIR/"
cp -r /root/.ssh "$TARGET_DIR/"
find /home -maxdepth 2 -type d -name ".ssh" -exec cp -r {} "$TARGET_DIR/" \;
參考腳本2–按用戶分別存儲
#!/bin/bash# 備份根目錄與當天日期
BACKUP_ROOT=/secure_backups/ssh_$(date +%F)
mkdir -p "$BACKUP_ROOT"# 1. 備份 SSH 配置文件
cp /etc/ssh/sshd_config "$BACKUP_ROOT/"# 2. 備份 root 用戶的 .ssh
if [ -d /root/.ssh ]; thenmkdir -p "$BACKUP_ROOT/root"cp -a /root/.ssh "$BACKUP_ROOT/root/"
fi# 3. 按用戶分別備份 /home 下的 .ssh
for homedir in /home/*; do[ -d "$homedir/.ssh" ] || continueuser=$(basename "$homedir")mkdir -p "$BACKUP_ROOT/$user"cp -a "$homedir/.ssh" "$BACKUP_ROOT/$user/"
done
- 配置權限
sudo chmod +x /usr/local/bin/backup_ssh.sh
- 測試腳本
sudo /usr/local/bin/backup_ssh.sh
- 設定定時任務
sudo bash -c "echo '0 0 * * * root /usr/local/bin/backup_ssh.sh' > /etc/cron.d/backup_ssh"
- 第1個字段(分鐘):0
- 第2個字段(小時):0
- 第3個字段(日):*(每天)
- 第4個字段(月):*(每月)
- 第5個字段(星期):*(每周)
效果:每天凌晨 00:00,系統以root身份執行
/usr/local/bin/backup_ssh.sh
登錄防護:fail2ban
安裝并配置 fail2ban,自動屏蔽惡意的 SSH 登錄嘗試。
# 安裝(CentOS/RHEL)
sudo yum install -y fail2ban# 或(Debian/Ubuntu)
sudo apt-get install -y fail2ban
在 /etc/fail2ban/jail.local
添加或修改以下內容:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 5
bantime = 600
findtime = 600
- enabled:啟用 sshd 監控
- port:與 SSHD 配置中一致
- maxretry:最大失敗嘗試次數
- bantime:封禁時長(秒)
- findtime:統計失敗窗口(秒)
# 啟動并設置開機自啟
sudo systemctl enable --now fail2ban# 查看 SSHD jail 狀態
sudo fail2ban-client status sshd
測試與日志
- 人為輸入錯誤密碼超過
maxretry
,再觀察 IP 是否被封 - 日志位置:
/var/log/fail2ban.log