DenyHosts 阻止SSH暴力攻擊
- 2019 年 10 月 6 日
- 筆記
首先sshd服務可以說是linux伺服器一個至關重要的服務,如果被暴力破解成功,就直接可以拿到伺服器的控制權了,在這裡有兩種解決方案,第一種是直接生成秘鑰然後配置ssh服務無密碼登錄,然後在配置文件中禁用用戶使用密碼登錄,這種方案相對來說比較安全,但配置有點麻煩啊……
第二種方案就是伺服器端安裝DenyHosts工具,DenyHosts通過採集ssh身份驗證的日誌中失敗的記錄,從而屏蔽掉這些攻擊者的ip地址~
怎麼簡單怎麼來,我們就開始安裝Denyhosts吧:
Denyhosts 官網地址:sourceforge.net/project
Denyhosts github.com/denyhosts/de
1 . 下載Denyhosts
wget http://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz # 下載Denyhosts

tar -zxvf DenyHosts-2.6.tar.gz # 解壓縮文件

2. 安裝 Denyhosts
python setup.pyinstall # 安裝Denyhosts

cd /usr/share/denyhosts/ # 進入安裝目錄
cp denyhosts.cfg-dist denyhosts.cfg # 創建配置文件
cp daemon-control-dist daemon-control # 啟動文件副本

ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts # 創建軟連接

設置Denyhosts為開機自動啟動~
chkconfig –add denyhosts # 添加denyhosts服務
chkconfig denyhosts on # 設置denyhosts在各等級為開啟狀態

chkconfig –list denyhosts # 查詢是否設置成功

3. 啟動denyhosts服務
systemctl start denyhosts # 啟動denyhosts服務
systemctl status denyhosts # 查詢denyhosts服務狀態

三、來看看 /etc/denyhosts.conf 中的配置參數
[root@denyhosts ~]# egrep -v "(^$|^#)" /usr/share/denyhosts/denyhosts.cfg
############ THESE SETTINGS ARE REQUIRED ############
# 系統安全日誌文件,主要獲取ssh資訊
SECURE_LOG = /var/log/secure
# 拒絕寫入IP文件 hosts.deny
HOSTS_DENY = /etc/hosts.deny
# #過多久後清除已經禁止的,其中w代表周,d代表天,h代表小時,s代表秒,m代表分鐘
PURGE_DENY = 4w
# denyhosts所要阻止的服務名稱
BLOCK_SERVICE = sshd
# 允許無效用戶登錄失敗的次數
DENY_THRESHOLD_INVALID = 3
# 允許普通用戶登錄失敗的次數
DENY_THRESHOLD_VALID = 10
# 允許ROOT用戶登錄失敗的次數
DENY_THRESHOLD_ROOT = 6
# 設定 deny host 寫入到該資料夾
DENY_THRESHOLD_RESTRICTED = 1
# 將deny的host或ip紀錄到Work_dir中
WORK_DIR = /var/lib/denyhosts
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
# 是否做域名反解
HOSTNAME_LOOKUP=YES
# 將DenyHOts啟動的pid紀錄到LOCK_FILE中,已確保服務正確啟動,防止同時啟動多個服務
LOCK_FILE = /var/lock/subsys/denyhosts
############ THESE SETTINGS ARE OPTIONAL ############
# 管理員Mail地址
ADMIN_EMAIL = root
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]
# 有效用戶登錄失敗計數歸零的時間
AGE_RESET_VALID=5d
# ROOT用戶登錄失敗計數歸零的時間
AGE_RESET_ROOT=25d
# 用戶的失敗登錄計數重置為0的時間(/usr/share/denyhosts/restricted-usernames)
AGE_RESET_RESTRICTED=25d
# 無效用戶登錄失敗計數歸零的時間
AGE_RESET_INVALID=10d
######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ##########
# denyhosts log文件
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
# 該項與PURGE_DENY 設置成一樣,也是清除hosts.deniedssh 用戶的時間
DAEMON_PURGE = 1h
四、啟動 denyhosts 服務並查看狀態

五、通過測試 invalid、valid、root 等用戶設置不同的ssh連接失敗次數,來測試 denyhosts ,我這邊只測試使用系統中不存在的用戶進行失敗登錄嘗試~
我們允許 invalid 用戶只能失敗4次、ROOT 用戶失敗7次、valid用戶失敗10次
DENY_THRESHOLD_INVALID = 4
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 7
測試:使用一個沒有創建的用戶失敗登錄四次,並查看 /etc/hosts.deny
echo -n "" > /var/log/secure
tail -f /var/log/secure
tail -f /etc/hosts.deny
/var/log/secure 日誌資訊:

/etc/hosts.deny 資訊:

用戶登錄資訊:

六、關於清除及添加可信主機記錄
如果想刪除一個已經禁止的主機IP,只在 /etc/hosts.deny 刪除是沒用的。需要進入 /var/lib/denyhosts 目錄,進入以下操作:
1、停止DenyHosts服務:service denyhosts stop
2、在 /etc/hosts.deny(黑名單列表) 中刪除你想取消的主機IP
3、添加你想允許的主機IP地址到/etc/hosts.allow(白名單列表)
4、啟動DenyHosts服務:service denyhosts start
七、通過郵件接收 denyhosts 所發送的資訊
1、修改 /etc/denyhosts.conf 配置檔,並重啟 denyhosts 服務
ADMIN_EMAIL = [email protected]
SMTP_HOST = mail.showjoy.com
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
2、通過其他客戶端進行多次失敗登錄嘗試
3、打開mail,查看郵件

關於運維學習、分享、交流,筆者開通了微信公眾號【運維貓】,感興趣的朋友可以關注下,歡迎加入,建立屬於我們自己的小圈子,一起學運維知識。