今回導入するのは,denyhostsというツールで,これはauth.logを監視し,設定した回数ログインに失敗すると,そのホストを自動的にdenyホストとして登録し,以降の接続を拒否してくれます.
http://tokcs.com/archives/1903
我这篇文章介绍了一种方法,可以分析系统安全日志,既可以屏蔽 来自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