我最近建立了一个个人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,.*
答案 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值取自默认值价值部分。
注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