DenyHosts是Python语言写的一个程序,它会分析SSHD的日志文件,当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽IP的功能。
DenyHosts官方网站: http://denyhosts.sourceforge.net
# aptitude install denyhosts
# vim /etc/denyhosts.conf
# 用户登录的日志文件 SECURE_LOG = /var/log/secure
# 禁止登陆的主机文件 HOSTS_DENY = /etc/hosts.deny
# 清除已禁止主机的时间,y年,w星期,d天 PURGE_DENY = 2w
# 禁止的服务名 BLOCK_SERVICE = sshd
# 允许无效用户登录失败的次数 DENY_THRESHOLD_INVALID = 1
# 允许普通用户登陆失败的次数(root用户除外),用户数据文件/etc/passwd DENY_THRESHOLD_VALID = 2
# 允许 root 用户登陆失败的次数 DENY_THRESHOLD_ROOT = 1
# 限制restricted-usernames文件列表中用户登录失败的次数 DENY_THRESHOLD_RESTRICTED = 5
# DenyHosts 数据保存目录 WORK_DIR = /usr/share/denyhosts/data SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
# 是否做域名反解 HOSTNAME_LOOKUP=YES
#程序的进程ID 当DenyHOts启动的时候写入 pid,已确保服务正确启动,防止同時启动多个服务 LOCK_FILE = /var/run/denyhosts.pid
# 管理员邮件地址 ADMIN_EMAIL = admin@domain.com
# 如果设置了 ADMIN_EMAIL 下面就要设置 smtp 的 host SMTP_HOST = localhost SMTP_PORT = 25 # 发信的 header SMTP_FROM = DenyHosts <nobody@localhost> # 发信标题 如果你有N台主机,需要修改发信标题,来识别来自那台机器的信 SMTP_SUBJECT = DenyHosts Report
# 用户的失败登录计数重置为0的时间(/etc/passwd) AGE_RESET_VALID=5d
# root用户失败登录计数重置为0的时间 AGE_RESET_ROOT=25d
#用户的失败登录计数重置为0的时间(/usr/share/denyhosts/data/restricted-usernames) AGE_RESET_RESTRICTED=25d
# 无效用户的失败登录计数重置为0的时间(/etc/passwd) AGE_RESET_INVALID=10d
# DenyHosts 的日志文件 DAEMON_LOG = /var/log/denyhosts
以上根据自己的需要修改即可,一般主要修改三种用户登录失败的次数,还有管理员的邮件地址即可,其他的使用系统默认就行。
配置完重启使服务生效 /etc/init.d/denyhosts restart
如果想手工安装 DenyHosts 可参考这里: http://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts
(RHEL 6 / CentOS 5.5 / Fedora 14)如果想删除一个已经禁止的主机IP,并加入到允许主机例表,只在 /etc/hosts.deny 删除是没用的。需要进入 /var/lib/denyhosts 目录,进入以下操作:
1、停止DenyHosts服务:$ sudo service denyhosts stop
2、在 /etc/hosts.deny 中删除你想取消的主机IP
3、编辑 DenyHosts 工作目录的所有文件,通过 $ sudo grep 192.168.1.100 /var/lib/denyhosts/*
然后一个个删除文件中你想取消的主机IP所在的行:
* /var/lib/denyhosts/hosts
* /var/lib/denyhosts/hosts-restricted
* /var/lib/denyhosts/hosts-root
* /var/lib/denyhosts/hosts-valid
* /var/lib/denyhosts/users-hosts
4、添加你想允许的主机IP地址到 /var/lib/denyhosts/allowed-hosts
$ sudo vi /var/lib/denyhosts/allowed-hosts
# We mustn't block localhost
127.0.0.1
192.168.1.*
5、启动DenyHosts服务: $ sudo service denyhosts start