denyhosts工具介绍
DenyHosts is a script intended to be run by Linux system administrators to help thwart SSH server attacks (also known as dictionary based attacks and brute force attack
DenyHosts是一个由linux系统管理员运行的脚本,旨在帮助阻止ssh服务器攻击(字典攻击和暴力破解攻击)
- 字典攻击:破解密码/密钥时,逐一尝试用户自定义词典中的可能密码(单词或短语)的攻击方式;
- 暴力破解攻击:破击密码时,逐一尝试所有可能的密码组合;
DenyHosts is a python program that automatically blocks ssh attacks by adding entries to /etc/hosts.deny.
Denyhosts是一个python程序,它通过向/etc/hosts.deny添加条目来自动阻止ssh攻击。
DenyHosts will also inform Linux administrators about offending hosts, attacked users and suspicious logins
DenyHosts还会通知Linux管理员违规的主机、受到攻击的用户和可疑的登录用户。
denyhosts特点:
- 分析/var/log/secure等日志文件,过滤出尝试登陆失败的主机;
- 登录失败次数超限的用户记录入/etc/hosts.deny
- 用于抵御通过ssh/ftp服务22端口尝试获取登陆用户密码的攻击
- 可通过邮件告知可疑登录用户
- 基于tcp_wrapper防火墙过滤机制
denyhosts安装
yum安装:
epel源
yum install denyhosts -y
源码安装:
#官网下载:http://denyhosts.sourceforge.net/
#解压源码包
tar zxvf DenyHosts-2.6.tar.gz
#进入解压目录
cd /usr/src/DenyHosts-2.6
#查看sshd服务是否支持tcp_wrappers
ldd `which sshd` | grep wrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f659f3e5000)
#安装python环境,默认安装可通过python -V查看python版本
yum install python -y
python -V
#以root身份把DenyHosts模块加入python的site-packages/目录下;具体路径下面命令编译安装时会有提示;setup.py为源码内自带;可查看源码内README.txt文件再进行进行安装;
python setup.py install
#默认/usr/share/denyhosts有配置文件和进程控制脚本
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control
chown root daemon-control
chmod 700 daemon-control
ln -s /usr/share/denyhosts/daemon-control denyhosts
chkconfig --add denyhosts
chkconfig denyhosts on
chkconfig --list denyhosts
denyhosts源码安装相关文件
/usr/share/denyhosts/ #denyhosts程序自动安装目录
/usr/bin/denyhosts.py #denyhosts二进制文件
/usr/share/denyhosts/data/ #denyhosts主机保存拒绝/允许信息数据目录
/usr/lib/python2.7/site-packages/DenyHosts/ #denyhosts库文件目录
/var/log/denyhosts #denyhosts进程日志文件
denyhosts配置文件
vi /usr/share/denyhosts/denyhosts.cfg
SECURE_LOG = /var/log/secure #Redhat和Fedora内核sshd日志登录信息文件
HOSTS_DENY = /etc/hosts.deny #大多数OS系统的被限制访问主机的信息文件
PURGE_DENY = #经过多久解禁HOSTS_DENY文件限制访问的主机项,未写表示never purge;可写i[m/h/d/w/y]
PURGE_THRESHOLD = 0 #设置主机被解禁的最大次数,超过该次数将不会被清除永久限制
BLOCK_SERVICE = sshd: 127.0.0.1 #限制的服务
DENY_THRESHOLD_INVALID = 5 #无效用户登陆失败的次数
DENY_THRESHOLD_VALID = 10 #普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 1 #root用户登录失败的次数
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data #denyhosts保存数据的目录
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES #设为yes则,一个来自被允许登录主机的可疑登录尝试会被认为可疑
HOSTNAME_LOOKUP=YES|NO #每个被denyhosts报告的IP,关联的主机名会被查找并报告
LOCK_FILE = /var/lock/subsys/denyhosts #将denyhosts启动的pid记录到LOCK_FILE文件中,确保服务启动,确保同一时间只有一个实例运行
可选项:
ADMIN_EMAIL = foo@bar.com #管理员mail地址;字段留空表示不接受报告
SMTP_HOST = localhost #邮件服务器地址
SMTP_PORT = 25 #邮件服务器端口
SMTP_USERNAME=foo #邮件服务授权用户
SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_DATE_FORMAT = %a, %d %b %Y %H:%M:%S %z
AGE_RESET_VALID=5d #有效用户登录失败计数归零的时间
AGE_RESET_ROOT=25d #root用户登录失败计数归零的时间
AGE_RESET_RESTRICTED=25d #在WORK_DIR/restricted-usernames file中发现的尝试登陆失败用户计数归零的时间;
AGE_RESET_INVALID=10d #无效用户登录失败计数归零的时间
DAEMON_LOG = /var/log/denyhosts #denyhosts守护进程日志文件;为空表示不启用
DAEMON_SLEEP = 30s #守护进程模式denyhosts轮询SECURE_LOG的时间
DAEMON_PURGE = 1h #守护进程模式denyhosts多久执行清除机制终止HOSTS_DENY过期项
删除被denyhosts禁止的IP
- 删除/etc/hosts.deny和/var/log/secure文件中禁止访问的IP
- 停止denyhosts服务
- 删除/usr/share/denyhosts/data/数据目录所有禁止访问文件内的对应IP
/usr/share/denyhosts/data/hosts
/usr/share/denyhosts/data/hosts-root
/usr/share/denyhosts/data/hosts-valid
/usr/share/denyhosts/data/users-invalid
/usr/share/denyhosts/data/users-hosts
/usr/share/denyhosts/data/users-valid
/usr/share/denyhosts/data/users-invalid
/usr/share/denyhosts/data/suspicious-logins
/usr/share/denyhosts/data/hosts-restricted
- 重启denyhosts服务
注意:仅删除/etc/hosts.deny和/var/log/secure的IP,由于denyhosts工具的防御策略,会导致解除IP失败或解除的IP再次被加入禁止项;