12月 182013
 

denyhost是一个由python写的脚本,目前最新版本为2.6,可以实现对自动查找恶意ssh连接,然后把恶意ip加入到/etc/hosts.deny文件里面,以实现对服务器的安全防护

 

  1. 安装denyhost
  2. # apt-get install mailutils            //安装邮件功能,以实现当有黑客攻击的时候报警到管理员邮箱
  3. # apt-get install denyhosts        //安装denyhost软件,以实现防黑客扫描

查看并配置denyhosts

root@node2:~# cat /etc/denyhosts.conf  | grep -v “^$”| grep -v “^#”

  1.        ############ THESE SETTINGS ARE REQUIRED ############        //这些设定是必须的
  2. SECURE_LOG = /var/log/auth.log                        //指定sshd的日志文件,里面已经内置了一些日志文件的位置,只需要打开即可,打开的方法为删除#号。
  3. HOSTS_DENY = /etc/hosts.deny        //指定可以限制IP地址的文件,这里使用/etc/hosts.deny
  4. PURGE_DENY = 5m                             //过多长时间,把IP从/etc/hosts.deny里面清除
  5. BLOCK_SERVICE  = sshd                    //指定被保护的服务,这里要保护的是sshd
  6. DENY_THRESHOLD_INVALID = 1        //允许无效用户失败的次数,在/etc/passwd里面没有的用户(不包括root)
  7. DENY_THRESHOLD_VALID = 2            //允许正常用户失败的次数,在/etc/passwd里面有的用户(不包括root)
  8. DENY_THRESHOLD_ROOT = 1            //允许root用户失败的次数
  9. DENY_THRESHOLD_RESTRICTED = 1    //允许在$WORK_DIR/hosts-restricted里面出现的用户失败的次数
  10. WORK_DIR = /var/lib/denyhosts            //定义工作目录
  11. SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES    //如果为YES,所有在$WORK_DIR/allowed-host时面的IP地址将会被认为是可疑的,如果设置为NO,所有在allowd-hosts试图登陆的结果,将不会发送警告邮件!所有不在$WORK_DIR/allowed-host时面的IP地址将会发送警告!
  12. HOSTNAME_LOOKUP=YES        //是否将IP地址解析为主机名,告警的时候使用主机名。
  13. LOCK_FILE = /run/denyhosts.pid        //定义PID文件的位置,确保同时只有一个Denyhost进程在运行
  14.        ############ THESE SETTINGS ARE OPTIONAL ############        //这里的设置是可选的
  15. ADMIN_EMAIL = gm100861@gmail.com               //当有人试图登录你的服务器,或者有IP被加入黑名单的时候,发送邮件到这里指定的邮箱。前提是,本机一定要可以发送邮件才行!
  16. SMTP_HOST = localhost                //指定smtp服务器
  17. SMTP_PORT = 25                            //指定SMTP端口号
  18. SMTP_FROM = DenyHosts <nobody@localhost>        //指定发件人
  19. SMTP_SUBJECT = DenyHosts Report                        //指定邮件主题
  20. AGE_RESET_VALID=5d                    //多长时间后,用户登录失败的次数被置为0,这里是指在/etc/passwd里面定义的用户,如果不设置,永远都不会置0
  21. AGE_RESET_ROOT=25d            //多长时间后,root用户登录失败的次数置为0,如果不设置,永远都不会置0
  22. AGE_RESET_RESTRICTED=25d    //在$WORK_DIR/hosts-restricted时面定义的用户,多长时间失败次数计数器被置为0
  23. AGE_RESET_INVALID=10d            //无效用户(不在/etc/passwd里面的用户)的失败次数计数器,多长时间被置为0
  24. RESET_ON_SUCCESS = yes            //当某个IP使用某个用户登录成功后,该IP对应的用户失败次数将会被置为0
  25.   ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE  ##########
  26. DAEMON_LOG = /var/log/denyhosts        //当denyhost运行在守护进程模式的时候,日志文件存储的位置
  27. DAEMON_SLEEP = 30s                    //轮询查看SSHD日志的间隔
  28. DAEMON_PURGE = 1h                //多长时间清空$HOSTS_DENY中的IP地址,如果PURGE_DENY为空,这个设置将无效
  29.    #########   THESE SETTINGS ARE SPECIFIC TO     ##########
  30.    #########       DAEMON SYNCHRONIZATION         ##########

恶意的登录一下,再查看/etc/hosts.deny文件

 

  1. root@node2:~# cat /etc/hosts.deny
  2. # /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
  3. #                  See the manual pages hosts_access(5) and hosts_options(5).
  4. #
  5. # Example:    ALL: some.host.name, .some.domain
  6. #             ALL EXCEPT in.fingerd: other.host.name, .other.domain
  7. #
  8. # If you’re going to protect the portmapper use the name “portmap” for the
  9. # daemon name. Remember that you can only use the keyword “ALL” and IP
  10. # addresses (NOT host or domain names) for the portmapper, as well as for
  11. # rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
  12. # for further information.
  13. #
  14. # The PARANOID wildcard matches any host whose name does not match its
  15. # address.
  16. #
  17. # You may wish to enable this to ensure any programs that don’t
  18. # validate looked up hostnames still leave understandable logs. In past
  19. # versions of Debian this has been the default.
  20. # ALL: PARANOID
  21. # DenyHosts: Mon Jul 16 16:46:46 2012 | sshd: 1.1.1.254
  22. sshd: 1.1.1.254

再查看一下管理员邮箱,收到报警邮件

上网被扫描是经常的事,为了避免 ssh 帐号和密码被暴力破解,Ubuntu下可以利用安装 denyhosts 来加强系统安全性。

1.安装
sudo apt-get install denyhosts

2.配置 /etc/denyhosts.conf 。内容参考:

sshd 登录日志文件。不同系统的不一样。
SECURE_LOG = /var/log/auth.log

限制主机访问的文件
HOSTS_DENY = /etc/hosts.deny
移除 HOSTS_DENY 中超过以下时间的旧条目
PURGE_DENY = 1w

阻止的服务。默认是 sshd ,可以设置为其他或全部。
BLOCK_SERVICE  = sshd

当该主机利用无效用户进行登录尝试失败超过以下的次数时,阻止该主机
DENY_THRESHOLD_INVALID = 3

针对有效用户的
DENY_THRESHOLD_VALID = 4

针对 root 用户的
DENY_THRESHOLD_ROOT = 1

针对有限制的用户的
DENY_THRESHOLD_RESTRICTED = 1

DenyHosts 用于写数据用的。在里面可以看到 hosts,hosts-root,offset,users-hosts,users-valid,hosts-restricted,hosts- valid,suspicious-logins,users-invalid 这些记录。
WORK_DIR = /var/lib/denyhosts

当为 YES 时,如果允许的主机在登录时被认为可疑,则对该主机进行记录。当为 NO 时,如果允许的主机在登录时被认为可疑也不对该主机进行记录。在允许的主机范围外的主机的可疑登录全部会被记录。
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES

反向域名解释
HOSTNAME_LOOKUP=NO

这个文件存在表示 Denyhosts 正在运行。用于保证每次只有一个实例在运行。
LOCK_FILE = /var/run/denyhosts.pid

管理员 EMail
ADMIN_EMAIL = root@localhost

SMTP 主机设置。如果有 SMTP 服务支持,可以给管理员发邮件。
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report

如果在指定的时间内没有失败的登录尝试,将导致此主机的失败计数重置为0。此值适用于除了 root 之外,所有有效用户(在 /etc/passwd 中的)的登录尝试。如果没有定义,这个计数将永远不会重置。
AGE_RESET_VALID=5d

针对 root 用户的
AGE_RESET_ROOT=25d

针对有限制的用户的
AGE_RESET_RESTRICTED=25d

针对无效用户(不在 /etc/passwd 中的)
AGE_RESET_INVALID=1w

当登录成功时,把登录成功的失败计数重置为0。默认是 NO。
#RESET_ON_SUCCESS = yes

当以后台方式运行时,Denyhosts 的日志文件,留空不记录日志。
#DAEMON_LOG = /var/log/denyhosts

当以后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_SLEEP = 30s

当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔。
DAEMON_PURGE = 1h

3.重启 Denyhosts
sudo /etc/init.d/denyhosts restart

 Posted by at 下午 1:55

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)