使用fail2ban加固ShadowSocks python manyuser

最近破娃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'

作者:小老外

我还需要不断地学习。

1条评论

  1. 不能启动fail2ban,不知道为什么,status=255,然后看了下”journalctl -xe“一堆错,请指教

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据