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,查看郵件

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