原理:
DenyHosts 是Python語言寫的一個開源程序,它會定期分析sshd服務的登陸日誌,當發現某IP進行多次SSH登陸且登陸失敗次數超過閾值時,會將IP記錄到 /etc/hosts.deny文件,通過tcpwrapper達到自動屏蔽IP的功能。
TCP wrapper:
tcpwrapper 是一個爲 Unix 類服務器提供防火牆服務的程序,任何以 Xinetd 管理的服務都可以通過TcpWrapper來設置防火牆,簡單的說,就是針對源IP或域進行允許或拒絕訪問的設置;
配置文件:
/etc/init.d/hosts.allow 定義在此文件中的IP允許訪問
daemon_list:client_list[:option]
例:sshd: 192.168.1 # 允許 192.168.1.0/24 網段所有主機訪問
/etc/init.d/hosts.deny 定義在此文件中的IP不允許訪問
配置同上
檢查順序:
請求
↓
服務 --->/etc/hosts.allow ---> 匹配成功則放行
↓
/etc/hosts.deny ----> 匹配成功則拒絕
↓
兩個配置文件中沒有則允許訪問
注:兩個配置文件同時匹配,host.allow 優先生效。
判斷服務是否支持TcpWrapper管控:
ldd `which 服務名` |grep wrap
libwrap.so.0 TcpWrapper 的開發庫,軟件調用此庫代表受 TcpWrapper 管控。
最新版本爲 2.6 最近更新日期爲 2008-10-04
官網:http://denyhosts.sourceforge.net/
FAQ:http://denyhosts.sourceforge.net/faq.html
下載地址:http://nbtelecom.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
安裝:
wget http://nbtelecom.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
tar xvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6/
python setup.py install
默認會安裝在 /usr/share/denyhosts/ 目錄
ln -s daemon_control /etc/init.d/denyhosts
# 服務腳本
cp denyhosts.cfg-dist denyhosts.cfg
# 配置文件
配置文件詳解:(截取有用部分)
# Redhat or Fedora Core:
#SECURE_LOG = /var/log/secure
# ReadHat 系列登陸日誌位置
# Mandrake, FreeBSD or OpenBSD:
SECURE_LOG = /var/log/auth.log
# FreeBSD 系列登陸日誌位置
# SuSE:
#SECURE_LOG = /var/log/messages
# SuSE 系列登陸日誌位置
HOSTS_DENY = /etc/hosts.deny
# tcpwrapper 配置文件
PURGE_DENY = 5m
# 清除已禁止主機的時間
BLOCK_SERVICE = sshd
# 匹配成功後禁止的服務名稱
DENY_THRESHOLD_INVALID = 5
# 允許無效用戶嘗試登陸失敗的次數(用戶名不在 /etc/passwd 文件中)
DENY_THRESHOLD_VALID = 10
# 允許普通用戶登陸失敗的次數(用戶名存在 /etc/passwd 文件中)
DENY_THRESHOLD_ROOT = 1 # 允許 root 用戶登陸失敗的次數
WORK_DIR = /usr/share/denyhosts/data
# denyhosts 的工作目錄,會將 deny 的 hosts 或 IP 記錄到 work_dir/ 目錄下的文件中
HOSTNAME_LOOKUP=YES
# 是否進行域名反解
LOCK_FILE = /var/run/denyhosts.pid
# pid 文件位置,用來判斷 denyhosts 是否在運行狀態
ADMIN_EMAIL = [email protected]
# 管理員郵件地址(接收告警郵件)
SMTP_HOST = smtp.mxhichina.com
SMTP_PORT = 25
# SMTP 發件服務器地址及端口號
SMTP_PASSWORD=myispassword
# 發件人帳號及密碼
SMTP_FROM = [email protected]
# 發件人地址
SMTP_SUBJECT = DenyHosts Report
# 告警郵件主題
AGE_RESET_VALID=5d
# 普通用戶登錄失敗計數器的歸零時間
AGE_RESET_ROOT=25d
# ROOT用戶登錄失敗計數器的歸零時間
AGE_RESET_RESTRICTED=25d
# 全局用戶失敗登錄計數重置爲 0 的時間 (/usr/share/denyhosts/data/restricted-usernames)
AGE_RESET_INVALID=10d
# 無效用戶失敗計數會在多久後重置爲 0
RESET_ON_SUCCESS = yes
# 如果一個IP成功登錄後,失敗的登錄計數是否重置爲0
DAEMON_LOG = /var/log/denyhosts
# Denyhosts 的日誌文件位置
DAEMON_SLEEP = 30s
# 當以後臺方式運行時,每讀一次日誌文件的時間間隔
DAEMON_PURGE = 1h
# 多長時間執行一次 預設清理
# 多久清除一次已被禁止的主機,此值應該小於 PURGE_DENY,PURGE_DENY < DAEMON_PURGE
遇到的問題:
1、清除時間到達後無法無法清除被禁止的主機
解決辦法:實際清楚時間由 DAEMON_PURGE 決定,將此值設定與PURGE_DENY相等即可。