最近破娃breakwa11陆续发布了多个版本的shadowsocks检测脚本,可以对shadowsocks-libev和shadowsocks-python等服务器进行探测。针对此我觉得还是有必要把我对我所有服务器加固的fail2ban策略发出来以防GFW官方的探测。
这篇文章适合用于shadowsocks-python manyuser分支。其他ssr manyuser等设置也是类似。
资料背景
服务器:CentOS 7
防火墙:iptables (我不用firewalld)
操作:所有操作都在root下
日志文件: 配置ss-manyuser产生shadowsocks.log放置在/var/log下。
安装
首先安装fail2ban。
yum install epel-release -y yum install fail2ban -y
配置filter
vim /etc/fail2ban/filter.d/shadowsocks.conf
输入以下内容
[INCLUDES] before = common.conf [Definition] _daemon = shadowsocks failregex = ^\s+ERROR\s+U\[\d+\] \w{3} Can not parse header when handling connection from:\d+$ ignoreregex =
这个failregex是根据ss程序产生的shadowsocks.log而定的。在我的服务器上如果一个人连接错误会产生这样一条错误:
Oct 10 06:42:52 ERROR U[8888] TCP Can not parse header when handling connection from ::ffff:123.123.123.123:60234
那么这条正则表达式就可以匹配了。
紧接着配置jail.d,告诉系统用什么工具封锁IP。
由于我使用的是iptables而不是firewalld,所以00-firewalld.conf文件要么删掉,要么做一些改动。我选择改动:
vim /etc/fail2ban/jail.d/00-firewalld.conf
改成
[DEFAULT] banaction = iptables
接下来设计jail.local文件。把ss的jail给开启。
vim /etc/fail2ban/jail.local
文件内容如下:
[shadowsocks] enabled = true filter = shadowsocks port = 0:65535 logpath = /var/log/shadowsocks.log maxretry = 10 # 最多尝试几次就算失败 bantime = 3600 # 封锁时间(秒) logencoding = utf-8 # log文件编码 findtime = 86400 # 找寻时间
最后启动服务
systemctl enable fail2ban systemctl start fail2ban
使用技巧
一般来说我们就让fail2ban放那让它运行就行。有时候我们想看看统计数据。
显示状态
fail2ban-client status shadowsocks
手工解封一个IP
fail2ban-client set shadowsocks unbanip 123.123.123.123
手动测试一个regex是否匹配
fail2ban-regex 'string' 'regex'
不能启动fail2ban,不知道为什么,status=255,然后看了下”journalctl -xe“一堆错,请指教