denyhosts

今回導入するのは,denyhostsというツールで,これはauth.logを監視し,設定した回数ログインに失敗すると,そのホストを自動的にdenyホストとして登録し,以降の接続を拒否してくれます.
http://tokcs.com/archives/1903

freebsd利用de…sh和-ftp-穷举暴力破解

我这篇文章介绍了一种方法,可以分析系统安全日志,既可以屏蔽 来自SSH的暴力破解,也能屏蔽来自FTP的暴力破解。

其实方法很简单,但是我找到这个方法的道路确是曲折的。

我的系统是 Freebsd 7.2 ,安装Denyhosts软件非常容易。

$cd /usr/ports/security/denyhosts

$sudo make install clean

系统就能自动装好这个软件了。

然后去编辑 /etc/rc.conf 这个文件,筯加一行

denyhosts_enable=”YES”

然后就可以使用下面一条命令启动这个服务了。

sudo /usr/local/etc/rc.d/denyhosts start

如果是修改了一些规则之后,要生效就要重启这个服务

方法是:sudo /usr/local/etc/rc.d/denyhosts restart

配置文件:

denyhosts 默认安装到 freebsd 系统后,配置文件在/usr/local/share/denyhosts/ 目录下面有个例子 denyhosts.cfg-dist

把这个例子拷贝到指定目录并改名

sudo cp /usr/local/share/denyhosts/denyhosts.cfg-dist /usr/local/etc/denyhosts.conf

好了,然后编辑一下这个文件

vi /usr/local/etc/denyhosts.conf
比较有用的几个参数是

14 # Mandrake, FreeBSD or OpenBSD:

# 说明,这是告诉 denyhost 去分析那一个日志文件
15 SECURE_LOG = /var/log/auth.log

# 说明,这是告诉 denyhost 把需要禁止的IP放到那个文件里面

34 HOSTS_DENY = /etc/hosts.deniedssh
# 说明,这是告诉 denyhost 把需要禁止的IP封闭5天

58 PURGE_DENY = 5d

# 说明,这是告诉 denyhost 把需要禁止的IP封闭所有网络服务。

96 BLOCK_SERVICE = ALL

# 说明,这是告诉 denyhost 允许几次错误的尝试,去试验不存在的用户名。

111 DENY_THRESHOLD_INVALID = 5

# 说明,这是告诉 denyhost 允许几次错误的尝试,去试验已经存在的用户名的密码。

22 DENY_THRESHOLD_VALID = 10

# 说明,这是告诉 denyhost 允许几次错误的尝试,去试验已经存在的root的密码。

132 DENY_THRESHOLD_ROOT = 1

# 说明,这是告诉 denyhost 使用那个工作目录,请使用绝对路径

157 WORK_DIR = /home/lidong/denyhosts/

# 说明,这是告诉 denyhost 发现攻击后给管理员发电子邮件,发到那个邮箱去。

223 ADMIN_EMAIL = admin@youremaildomain.com

# 多少天后重置那些错误的尝试

321 AGE_RESET_VALID=5d

# 多少天后重置那些错误的尝试,针对 root帐号

337 AGE_RESET_ROOT=25d

# 针对猜用户名的锁定多久解锁

370 AGE_RESET_INVALID=10d

# 成功验证一次,就清零

383 RESET_ON_SUCCESS = yes

下面是关键的地方了,只有这样设定,才能让Denyhosts 真正去屏蔽来自 FTP的攻击
SSHD_FORMAT_REGEX=.* (sshd.*:|\[sshd\]|ftpd.*:) (?P.*)
USERDEF_FAILED_ENTRY_REGEX=FTP LOGIN FAILED FROM (?P.*), (?P.*)
FAILED_ENTRY_REGEX6=FTP LOGIN FAILED FROM (?P.*), (?P.*)

这三行是通过分析我的 auth.log 日志分析而生成的。

此三行要出现在 denyhosts.conf 中。才能正确的识别 FTP的穷举攻击

我给那无聊的攻击者留点面子,就把它的最后一位ip隐藏掉好了。

我的日志中有这样的记录:

421 #19 Dec 13 15:09:34 www ftpd[25737]: FTP LOGIN FAILED FROM 117.24.153.x, new
422 #20 Dec 13 15:09:34 www ftpd[25775]: FTP LOGIN FAILED FROM 117.24.153.x, new
423 #21 Dec 13 15:09:34 www ftpd[25804]: FTP LOGIN FAILED FROM 117.24.153.x, new
424 #22 Dec 13 15:09:38 www ftpd[26134]: FTP LOGIN FAILED FROM 117.24.153.x, new
425 #23 Dec 13 15:09:42 www ftpd[26436]: FTP LOGIN FAILED FROM 117.24.153.x, new
426 #24 Dec 13 15:09:42 www ftpd[26466]: FTP LOGIN FAILED FROM 117.24.153.x, new

我的 FTP 服务会往 auth.log 中这样些日志 ftpd[xxxxx]: xx

所以我修改SSHD_FORMAT_REGEX=.* (sshd.*:|\[sshd\]|ftpd.*:) (?P.*)

然后 后面的有用的信息就是FTP LOGIN FAILED FROM 117.24.153.x, new

下面这两句是双保险,其实只用后面那句也行。

USERDEF_FAILED_ENTRY_REGEX=FTP LOGIN FAILED FROM (?P.*), (?P.*)

FAILED_ENTRY_REGEX6=FTP LOGIN FAILED FROM (?P.*), (?P.*)

Denyhosts 预留了 7 个用于匹配不同认证日志信息的正则表达式 FAILED_ENTRY_REGEX FAILED_ENTRY_REGEX1 … FAILED_ENTRY_REGEX6

我使用了第 6 个。关于这些正则表达式,可以去分析 Denyhosts 的源文件 /usr/local/lib/python2.6/site-packages/DenyHosts/regex.py

一目了然。

设定完成后,重启一下 denyhosts 就可以了,查看被抓到的坏蛋,去这里看看,

cat /etc/hosts.deniedssh

本文参考了 denyhost 官方站点蹩脚的介绍。http://denyhosts.sourceforge.net/faq.html

非常蹩脚,一点都不直观,我认为我写的这个中文教程,应该对国内的玩儿FreeBsd的朋友有所帮助。

本文系绝对原创,如果转载请务必保留原始出处 http://7cm.org

hi.baidu.com/ytwebs/item/55ace99ca0239bcbb725313b‎

ホスト重複

Try changing your sshd_config file (typically in /etc/ssh/) from

UseDNS yes

to

UseDNS no

and restarting the ssh server. DenyHosts works best when sshd logs ip
addresses rather than hostnames. Other than that, I'm not too sure why
duplicates would be added, that certainly isn't normal behavior. I did
notice in the link you posted that user too had "UseDNS yes" so that may
be the culprit. Almost all DH users, AFAIK, have "UseDNS no".
DenyHosts / [Denyhosts-user] denyhosts keeps adding same hosts on FreeBSD

/usr/local/etc/rc.d/denyhosts stop

sshd を UseDNS no にして再起動

sort hosts.deniedssh | uniq > hosts.deniedssh.tmp
mv hosts.deniedssh.tmp hosts.deniedssh

/usr/local/share/denyhosts/data/

hosts
hosts-restricted
hosts-root
hosts-valid
users-hosts

から繰り返し追加されているホストを削除

/usr/local/etc/rc.d/denyhosts start