如果大家在自己的 VPS 上搭 ShadowSocks,总会有贱人来扫描、破解。使用 fail2ban,可以有效地屏蔽这些贱人的 IP,提高安全性。
前提
- 本文不是 ShadowSocks 或 fail2ban 的科普贴,假定大家已经安装,并对二者有基本的了解
- 本文使用 ShadowSocks 是多用户版、不是单用户版
- 本文服务器端为 Ubuntu 16.04 LTS
ShadowSocks 端设置
注:我这里 ShadowSocks 是安装在 /usr/local/shadowsocks
中,下面的文件是和此路径相关的,大家需要根据自己的情况调整路径。
配置 ShadowSocks 的日志
|
|
更新日志相关的部分:
|
|
注意:需要手动创建 /var/log/shadowsocks.log
,并保证运行 ShadowSocks 的账户有写权限。
调整 ShadowSocks 输出的日志
为什么要调整?这和下文介绍的 fail2ban 有关。fail2ban 要求日志以日期开头,但并不能智能识别所有的日期格式、也不支持为其配置日期格式。所以,需要配置 ShadowSocks 输出的日志格式能被 fail2ban 支持。更多 fail2ban 自定义 filter 中正则表达式的介绍,请 参考这里
|
|
注意:
- 修改自己不熟悉的配置文件前,先备份,始终是好习惯。
- 这里是
servers.py
(即多用户版),不是server.py
将以下输出日志的代码:
|
|
改为:
|
|
改动并不大:
- 将
%Y, %b %d %a
改为%Y-%m-%d
,以实际日期示例:将2016, Jul 17 Sun
改为2016-07-17
- 去掉代码行的输出:
%(filename)s[line:%(lineno)d]
重启 ShadowSocks
因为这和你启动 ShadowSocks 的方式有关,这里就不提供示例代码了。
创建 ShadowSocks 错误日志
比如,你可以故意在 ShadowSocks 客户端设置错误的密码,然后尝试使用 ShadowSocks 代理访问,应该就会在 VPS 端产生错误日志。
然后,检查 ShadowSocks 日志 /var/log/shadowsocks.log
是否有类似下面的错误信息:
|
|
至此,ShadowSocks 端的设置就结束了。
fail2ban 端设置
创建 ShadowSocks 过滤器
fail2ban 默认并没有设置 ShadowSocks 过滤器(当然了,只有天朝才需要梯子;而 fail2ban 并不是国人开发的,自然没有这种多余的东西),需要我们按照 fail2ban 的规则来创建。
|
|
添加如下内容:
|
|
其中,failregex
就是用来过滤日志中尝试破解 ShadowSocks 的正则表达式。另外,你可以在命令行中测试正式表达式是否正确。
|
|
输出如下:
|
|
其中:
Date template hits:
是指该日志中有满足格式的日期,这也是为什么之前要更新 ShadowSocks 输出的日志格式。Failregex: 1 total
是指有一条满足条件的日志被找到。
更新 fail2ban 配置
接下来,需要告诉 fail2ban 来检查 ShadowSocks 日志、并更新 iptables.
|
|
添加如下内容:
|
|
其中:
port
为端口范围,设定为 ShadowSocks 所监听的端口范围
重启 fail2ban
|
|
查看 fail2ban 中 ShadowSocks 监控的状态:
|
|
会有类似下面的输出:
|
|
可以看出,上面日志中的 IP 112.10.137.6
已经被屏蔽。
或者,也可以通过 iptables 来查看:
|
|
其中,会有类似下面的记录:
|
|
至此,全文结束。