DenyHosts 為 Python 開發的安全工具,專門監控 SSH 登入日誌(/var/log/secure 或 /var/log/auth.log),自動將超過閾值的失敗 IP 寫入 /etc/hosts.deny 實現封鎖。本文以 Ubuntu/Debian 為例,涵蓋安裝、白名單、核心參數調校與服務管理全流程。

sudo apt-get update && sudo apt-get install denyhosts
安裝完成後服務會自動啟動,並產生預設配置檔 /etc/denyhosts.conf。
編輯 /etc/hosts.allow,每行加入一組允許連線的 IP:
sshd: 你的固定公網IP sshd: 192.168.1.0/24 :: 亦可寫網段
儲存後重啟服務生效:
sudo /etc/init.d/denyhosts restart
/etc/denyhosts.conf 核心參數編輯配置檔 sudo nano /etc/denyhosts.conf,重點參數說明如下:
| 參數 | 預設值 | 建議值/說明 |
|---|---|---|
| SECURE_LOG | /var/log/secure | CentOS/RHEL 用此路徑;Ubuntu/Debian 常為 /var/log/auth.log,請確認實際路徑 |
| PURGE_DENY | 50m | 封鎖 IP 保留多久後自動清除(單位:m/h/d/w/y) |
| HOSTS_DENY | /etc/hosts.deny | 封鎖名單寫入目標檔案 |
| BLOCK_SERVICE | sshd | 要封鎖的服務名稱 |
| DENY_THRESHOLD_INVALID | 1 | 不存在帳號登入失敗幾次即封鎖 |
| DENY_THRESHOLD_VALID | 10 | 合法帳號登入失敗閾值 |
| DENY_THRESHOLD_ROOT | 5 | root 登入失敗閾值(建議設較低) |
| WORK_DIR | /usr/local/share/denyhosts/data | 資料儲存目錄 |
| LOCK_FILE | /var/lock/subsys/denyhosts | 防止重複啟動的鎖檔 |
| HOSTNAME_LOOKUP | NO | 是否反解 IP 域名(建議 NO,提升效能) |
| ADMIN_EMAIL | (空) | 設定管理員信箱可接收封鎖通知 |
| DAEMON_LOG | /var/log/denyhosts | DenyHosts 自身日誌 |
| DAEMON_PURGE | 10m | 清理間隔,建議與 PURGE_DENY 一致 |
若系統使用 Systemd(現代主流發行版):
sudo systemctl enable denyhosts sudo systemctl start denyhosts sudo systemctl status denyhosts
若為舊版 SysVinit:
# 複製並設定啟動腳本 cp /usr/share/denyhosts/daemon-control-dist /usr/share/denyhosts/daemon-control chown root:root /usr/share/denyhosts/daemon-control chmod 700 /usr/share/denyhosts/daemon-control ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts /etc/init.d/denyhosts start chkconfig denyhosts on
編輯 /etc/rc.local(需確保檔案有執行權限且啟用 rc-local.service):
/usr/share/denyhosts/daemon-control start
cat /etc/hosts.deny 或 grep sshd /etc/hosts.denytail -f /var/log/denyhosts/etc/hosts.deny 刪除對應行,並清理 WORK_DIR 下的追蹤檔,再重啟服務。DenyHosts 部署輕量、規則靈活,是 Linux 伺服器防禦 SSH 暴力破解的首選利器。務必先設白名單、再調閾值、最後服務化管理,即可安心讓它 7×24 小時守護伺服器大門。