用于 openvpn 访问服务器的 fail2ban 正则表达式
fail2ban regex for openvpn access server
我最近构建了一个个人 OpenVPN 访问服务器,用于在 public wifi 上保护我的手机 phone。 VPN 部分运行良好,但我想使用 fail2ban(当前用于服务器上的 ssh)来锁定 OpenVPN 本身。但是,我在 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"}'
但是,我不确定如何将该文件转换为 regex/configuration 以便 fail2ban 在多次失败的身份验证请求后用于将 IP 地址列入黑名单。
有人可以协助生成 fail2ban conf 文件吗?或者有没有更好的方法来限制不涉及 fail2ban 的 openvpn 上的失败登录?
编辑:
我使用此设置确定的最终工作正则表达式是:
failregex = ^.*LOG ERR.*\"real_ip\": \"<HOST>\".*\"auth\": 0,.*
创建 /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
让我们看看它是否有效。
此答案假设全新安装了 OpenVPN 访问服务器和 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 正则表达式设置在监狱内,但可以配置过滤器文件。每个正则表达式都可以确定哪个服务放置了失败的身份验证日志:
[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:每个 jail 都会为相关服务(Web Administration UI、Web Client UI、UDP tunnel 或 TCP Tunnel)生成一个警报,并且只会针对该服务发出禁令service.The bantime 值取自默认值部分。
注意 2:我在 443 上配置了隧道端口 TCP 和 UDP 以避免 public 网络过滤器。默认值为:1194 UDP 隧道、443 TCP 隧道、943 Web 客户端和 Web Admin UI。
注意 3:此配置适用于 LDAP Auth 针对 OpenVPN 访问服务器服务(我的测试环境)的 Samba Active Directory
之后需要重启fail2ban服务
sudo service fail2ban restart
我最近构建了一个个人 OpenVPN 访问服务器,用于在 public wifi 上保护我的手机 phone。 VPN 部分运行良好,但我想使用 fail2ban(当前用于服务器上的 ssh)来锁定 OpenVPN 本身。但是,我在 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"}'
但是,我不确定如何将该文件转换为 regex/configuration 以便 fail2ban 在多次失败的身份验证请求后用于将 IP 地址列入黑名单。
有人可以协助生成 fail2ban conf 文件吗?或者有没有更好的方法来限制不涉及 fail2ban 的 openvpn 上的失败登录?
编辑:
我使用此设置确定的最终工作正则表达式是:
failregex = ^.*LOG ERR.*\"real_ip\": \"<HOST>\".*\"auth\": 0,.*
创建 /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
让我们看看它是否有效。
此答案假设全新安装了 OpenVPN 访问服务器和 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 正则表达式设置在监狱内,但可以配置过滤器文件。每个正则表达式都可以确定哪个服务放置了失败的身份验证日志:
[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:每个 jail 都会为相关服务(Web Administration UI、Web Client UI、UDP tunnel 或 TCP Tunnel)生成一个警报,并且只会针对该服务发出禁令service.The bantime 值取自默认值部分。
注意 2:我在 443 上配置了隧道端口 TCP 和 UDP 以避免 public 网络过滤器。默认值为:1194 UDP 隧道、443 TCP 隧道、943 Web 客户端和 Web Admin UI。
注意 3:此配置适用于 LDAP Auth 针对 OpenVPN 访问服务器服务(我的测试环境)的 Samba Active Directory
之后需要重启fail2ban服务
sudo service fail2ban restart