利用 Denyhosts 屏蔽 SSH的文章,网上一搜一大把,不过用在FreeBSD上的就不是很多,很多都是在linux下面部署的。
不过就算有些文章是介绍Freebsd下面部署 Denyhosts, 也能工作,我之前就是照着网上的教程设置的,很容易设置,但是只能屏蔽SSH暴力破解,可以把恶意的SSH猜密码的IP屏蔽掉, 同时也不让这个IP来进行FTP连接。 所以网上很多所谓的用 Denyhosts 来屏蔽 SSH 和FTP攻击都是监控的 SSH 穷举攻击,然后封闭IP。也就是发现一个SSH猜密码的,就禁止他的IP地址,即不让他用SSH 22 端口连接,也不让他通过 FTP 21 端口链接。
本文系原创,请转载时保留原始出处 http://www.7cm.org/2010/12/原创: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<message>.*)
USERDEF_FAILED_ENTRY_REGEX=FTP LOGIN FAILED FROM (?P<host>.*), (?P<user>.*)
FAILED_ENTRY_REGEX6=FTP LOGIN FAILED FROM (?P<host>.*), (?P<user>.*)
这三行是通过分析我的 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<message>.*)
然后 后面的有用的信息就是FTP LOGIN FAILED FROM 117.24.153.x, new
下面这两句是双保险,其实只用后面那句也行。
USERDEF_FAILED_ENTRY_REGEX=FTP LOGIN FAILED FROM (?P<host>.*), (?P<user>.*)
FAILED_ENTRY_REGEX6=FTP LOGIN FAILED FROM (?P<host>.*), (?P<user>.*)
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

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 
[...] after the host, instead of before like in SSH. I didn't figure it out myself. I took a look at this Japanese web page, without understanding a word of it. The 3 lines that the recommend look [...]