用于openvpn访问服务器的fail2ban正则表达式

时间:2018-05-15 04:12:14

标签: openvpn fail2ban

我最近建立了一个个人OpenVPN访问服务器,用于在公共wifi上保护我的手机。 VPN部分工作得很好,但我想使用fail2ban锁定OpenVPN(目前用于服务器上的ssh)。但是,我在Google上找到的所有fail2ban配置似乎都适用于社区版,而不是访问服务器。

默认情况下,Access Server似乎没有将身份验证失败记录到日志文件中,但是我通过将以下内容添加到as.conf来获取写入日志的失败身份验证

DEBUG_LOGDB=1

现在,当我为Web GUI生成失败的登录时,我在/var/log/openvpnas.log中获得以下内容

2018-05-15 03:24:14+0000 [-] LOG ERR: 'LOG_DB RECORD {"username": "daffyduck", "node": "openvpnas2", "service": "WEB_CLIENT", "real_ip": "123.123.123.123", "timestamp": 1526354654, "start_time": 1526354654, "session_id": "lW7IVKadsgfb6NTR74", "auth": 0, "error": "local auth failed: no stored password digest found in authcred attributes: auth/authlocal:35,web/http:1609,web/http:750,web/server:127,web/server:134,xml/authrpc:110,xml/authrpc:164,internet/defer:102,xml/authsess:50,sagent/saccess:86,xml/authrpc:244,xml/authsess:50,xml/authsess:103,auth/authdelegate:308,util/delegate:26,auth/authdelegate:237,util/defer:224,util/defer:246,internet/defer:190,internet/defer:181,internet/defer:323,util/defer:246,internet/defer:190,internet/defer:181,internet/defer:323,util/defer:245,internet/defer:102,auth/authdelegate:61,auth/authdelegate:240,util/delegate:26,auth/authlocal:35,util/error:61,util/error:44"}'

但是,我不确定如何将该文件转换为正则表达式/配置,fail2ban可以在足够的身份验证请求失败后将其用于黑名单。

有人可以协助生成fail2ban conf文件吗?或者是否有更好的方法来限制不涉及fail2ban的openvpn上的失败登录?

编辑:

我使用此设置确定的最终工作正则表达式是:

failregex = ^.*LOG ERR.*\"real_ip\": \"<HOST>\".*\"auth\": 0,.*

2 个答案:

答案 0 :(得分:1)

创建 /etc/fail2ban/filter.d/openvpnaccess.local 并将其放在此处:

# Fail2Ban filter for OpenVPN access server

[Definition]
failregex = ^ .*LOG ERR.*\"real_ip\": \"<HOST>\".*

测试正则表达式是否有效:

sudo fail2ban-regex --print-all-missed  /var/log/openvpnas.log /etc/fail2ban/filter.d/openvpnaccess.local /etc/fail2ban/filter.d/openvpnaccess.local > missed.txt

是的,它必须重复两次,并且在它工作之后,您可以在missed.txt文件中看到所有错过的日志条目。如果一切正常,即所需的日志行不在missed.txt文件中,那么:

创建 /etc/fail2ban/jail.d/openvpnaccess.local 并将其放在此处:

[openvpnaccess]
enabled  = true
port     = 1194  # change to which one you use
protocol = udp   # change to which one you use
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 3

点击此处查看更多信息:Developing Fail2Ban Filter Regular Expressions

网站是否可以测试你的正则表达式:https://regex101.com

让我们看看它是否有效。

答案 1 :(得分:1)

此答案假定全新安装了OpenVPN Access Server和Fail2Ban。

测试日期: 2018年8月10日

使用的平台: Ubuntu Server 16.04 LTS

Fail2Ban版本: 0.9.3

OpenVPN访问服务器版本: 2.1.4b

首先,您需要将此选项添加到 as.conf 文件中,以使Fail2Ban可以使用日志:

sudo nano /usr/local/openvpn_as/etc/as.conf

DEBUG_LOGDB=1

重新启动OpenVPN访问服务器服务:

sudo service openvpnas restart

然后,建议创建名为 jail.local jail.conf 文件的副本,并将更改放入此文件中:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

然后,您编辑jail.local文件,并将这些行添加到JAILS部分中。 fail2ban regex是在监狱中设置的,但是可以配置过滤器文件。每个正则表达式都可以确定哪个服务放置了失败的身份验证日志:

[openvpnas-web-client]
enabled = true
port = 943
protocol = tcp
filter =
failregex = .*LOG ERR.*WEB_CLIENT.*\"real_ip\": \"<HOST>\".*
logpath = /var/log/openvpnas.log
maxretry = 3

[openvpnas-web-admin]
enabled = true
port = 943
protocol = tcp
filter =
failregex = .*LOG ERR.*WEB_ADMIN.*\"real_ip\": \"<HOST>\".*
logpath = /var/log/openvpnas.log
maxretry = 3

[openvpnas-tcp-tunnel]
enabled = true
port = 443
protocol = tcp
filter =
failregex = .*LOG ERR.*VPN.*\"real_ip\": \"<HOST>\".*
logpath = /var/log/openvpnas.log
maxretry = 3

[openvpnas-udp-tunnel]
enabled = true
port = 443
protocol = udp
filter =
failregex = .*LOG ERR.*VPN.*\"real_ip\": \"<HOST>\".*
logpath = /var/log/openvpnas.log
maxretry = 3

注1:每个监狱将针对相关服务(Web管理UI,Web客户端UI,UDP隧道或TCP隧道)生成一个警报,并将仅对该服务发布禁令.bantime值取自默认值价值部分。

enter image description here

注2:为了避免使用公共网络过滤器,我在443上配置了隧道端口TCP和UDP。默认值为:1194 UDP隧道,443 TCP隧道,943 Web客户端和Web管理员UI。

注3:此配置与针对OpenVPN Access Server服务(我的测试环境)的Samba Active Directory的LDAP Auth配合使用

然后,必须重新启动fail2ban服务

sudo service fail2ban restart