DenyHosts介紹
DenyHosts是一個python腳本幫助阻止SSH攻擊(基于字典或暴力的密碼攻擊)焕襟,它的原理很簡單:通過分析系統(tǒng)安全日志(/var/log/secure)中的無效登錄者的IP和無效登錄次數(shù)與用戶設(shè)置的閾值進(jìn)行比較削饵,如果嘗試次數(shù)超過用戶設(shè)置的閾值則將該IP加入/etc/hosts.deny,實現(xiàn)將其封鎖。
DenyHosts版本與分支
DenyHosts最早由Phil Schwartz開發(fā)侄非,并在2.6版本之后停止發(fā)布更新片拍,之后由Matt Ruffalo在Github繼續(xù)開發(fā)。筆者編寫本文時昔榴,已經(jīng)預(yù)發(fā)行了3.1beta版辛藻,該版本支持python的任意版本,本次部署將使用此版本互订。如果你的python版本較低(2.7及以下)吱肌,請使用DenyHosts 2.10。
本次部署環(huán)境及版本
- Centos 7.7
- DenyHosts 2.10
- python 2.7.5
下載并安裝DenyHosts
yum install python-ipaddr #安裝依賴
wget https://github.com/denyhosts/denyhosts/archive/refs/tags/v2.10.tar.gz
tar zxf v2.10.tar.gz -C /usr/local/
cd /usr/local/denyhosts/
python setup.py install
cp denyhosts.conf /etc/
denyhosts配置文件在/etc/denyhosts.conf仰禽,配置文件中必須要改的是SECURE_LOG的位置氮墨,默認(rèn)啟用的是“Debian and Ubuntu”的SECURE_LOG位置。
denyhosts.conf重新指定SECURE_LOG的位置
vi /etc/denyhosts.conf
將`SECURE_LOG = /var/log/auth.log`這一行前面加 #號注釋掉
將`SECURE_LOG = /var/log/secure`這一行前面的 #號去掉
其余的配置可以參考下面的注解按需配置:
denyhosts.conf主要配置解讀
SECURE_LOG = /var/log/secure #系統(tǒng)安全日志吐葵,保持默認(rèn)即可
PURGE_DENY = 60d #解封黑名單中的IP的周期
HOSTS_DENY = /etc/hosts.deny #指定hosts.deny的位置
BLOCK_SERVICE = sshd #阻止的服務(wù)名稱
PURGE_THRESHOLD = 5 #設(shè)定解封次數(shù)规揪,超過之后永久禁止;
DENY_THRESHOLD_INVALID = 1 #允許無效的用戶登錄失敗次數(shù)
DENY_THRESHOLD_VALID = 5 #允許正常用戶的登錄失敗次數(shù)
DENY_THRESHOLD_ROOT = 5 #允許root登錄失敗次數(shù)
WORK_DIR = /usr/local/denyhosts/data #指定工作目錄温峭,保存封鎖的IP
LOCK_FILE = /var/lock/subsys/denyhosts #文件鎖猛铅,防止啟動多個進(jìn)程
HOSTNAME_LOOKUP=NO #是否解析主機名(占用網(wǎng)絡(luò)資源)
ADMIN_EMAIL = #設(shè)置報警郵箱,配合SMTP設(shè)置可實現(xiàn)郵件報警诚镰,默認(rèn)是給root發(fā)信奕坟。
DAEMON_LOG = /var/log/denyhosts #DenyHosts日志位置
創(chuàng)建服務(wù)腳本祥款,設(shè)置開機啟動
這里要提前強調(diào)一點,DenyHosts啟動后會讀取/var/log/secure中的SSH登錄日志月杉,將符合封鎖條件的IP加入/etc/hosts.deny文件中刃跛,并在/usr/local/denyhosts/data工作目錄中保存,屆時刪除黑名單中的IP會略微麻煩(你辦公網(wǎng)的IP很可能也有過登錄失敗記錄)苛萎。筆者建議在啟動DenyHosts前先清理一下系統(tǒng)安全日志:
/var/log/secure
rm -rf /var/log/secure-*
然后創(chuàng)建服務(wù)腳本桨昙,設(shè)置開機啟動
cp daemon-control-dist daemon-control
vi daemon-control
將
DENYHOSTS_BIN = "/usr/sbin/denyhosts"
改成:
DENYHOSTS_BIN = "/usr/local/denyhosts/denyhosts.py"
chown root daemon-control
chmod 700 daemon-control
ln -s /usr/local/denyhosts/daemon-control /etc/init.d/denyhosts
systemctl daemon-reload #重載systemd配置
systemctl start denyhosts #啟動denyhosts
systemctl enable denyhosts #設(shè)置開機啟動denyhosts
如果沒有報錯,此時denyhosts已經(jīng)啟動腌歉,使用systemctl status denyhosts可以查看運行狀態(tài)蛙酪,如果服務(wù)器是公網(wǎng)IP且ssh端口正常開放,可以tailf /etc/hosts.deny翘盖,很快就會看到猜測密碼的IP被封鎖進(jìn)來桂塞。
轉(zhuǎn)載自:https://blog.lzys.cc/p/2140269.html