web-dev-qa-db-ja.com

openvpn fail2banフィルターの正規表現を作成する方法

一部の人々は私のopenvpnサーバーに侵入しようとしています。今のところ、fail2ban正規表現の設定方法がわからないため、各IPを手動で禁止しています。以下のコンテンツは基本的に私の/var/log/syslogにあるものです

Jun 18 19:57:01 Server ovpn-openvpn_tcp[856]: TCP connection established with [AF_INET]196.52.43.65:6666
Jun 18 19:57:03 Server ovpn-openvpn_tcp[856]: 196.52.43.65:6666 WARNING: Bad encapsulated packet length from peer (5635), which must be > 0 and <= 1627 -- please ensure that --tun-mtu or --link-mtu is equal on both peers -- this condition could also indicate a possible active attack on the TCP link -- [Attempting restart...]
Jun 18 19:57:03 Server ovpn-openvpn_tcp[856]: 196.52.43.65:6666 Connection reset, restarting [0]
Jun 18 19:57:03 Server ovpn-openvpn_tcp[856]: 196.52.43.65:6666 SIGUSR1[soft,connection-reset] received, client-instance restarting
Jun 18 20:42:20 Server ovpn-openvpn_tcp[856]: TCP connection established with [AF_INET]23.239.65.138:61397
Jun 18 20:42:20 Server ovpn-openvpn_tcp[856]: 23.239.65.138:61397 WARNING: Bad encapsulated packet length from peer (5635), which must be > 0 and <= 1627 -- please ensure that --tun-mtu or --link-mtu is equal on both peers -- this condition could also indicate a possible active attack on the TCP link -- [Attempting restart...]
Jun 18 20:42:20 Server ovpn-openvpn_tcp[856]: 23.239.65.138:61397 Connection reset, restarting [0]
Jun 18 20:42:20 Server ovpn-openvpn_tcp[856]: 23.239.65.138:61397 SIGUSR1[soft,connection-reset] received, client-instance restarting

Openvpnの公式のfail2banガイドに従ってフィルターを作成しようとしましたが、いくつかのテストを実行した後、古く、適切に解析されないと思います。ガイドは私に以下のことをするように言いました:

#Fail2Ban filter for selected OpenVPN rejections 

[Definition]

# Example messages (other matched messages not seen in the testing server's logs):
# Fri Sep 23 11:55:36 2016 TLS Error: incoming packet authentication failed from [AF_INET]59.90.146.160:51223
# Thu Aug 25 09:36:02 2016 117.207.115.143:58922 TLS Error: TLS handshake failed

failregex = ^ TLS Error: incoming packet authentication failed from \[AF_INET\]<Host>:\d+$
            ^ <Host>:\d+ Connection reset, restarting
            ^ <Host>:\d+ Fatal TLS Error
            ^ <Host>:\d+ TLS Error: TLS handshake failed$
            ^ <Host>:\d+ VERIFY ERROR
            ^ <Host>:\d+ Bad encapsulated packet length

ignoreregex =

これは私のjail.localファイルにあります:

[openvpndeny]

enabled  = true
port     = 443
protocol = tcp
filter   = openvpndeny
logpath  =  /var/log/syslog
maxretry = 3

残念ながら、fail2ban-regex /var/log/syslog /etc/fail2ban/filter.d/openvpndeny.confを実行すると、以下の出力が得られます

Running tests
=============

Use   failregex filter file : openvpndeny, basedir: /etc/fail2ban
Use         log file : /var/log/syslog
Use         encoding : UTF-8


Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [4608] (?:DAY )?MON Day 24hour:Minute:Second(?:\.Microseconds)?(?: Year)?
`-

Lines: 4608 lines, 0 ignored, 0 matched, 4608 missed
[processed in 3.78 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 4608 lines

[編集]私はすでにstackoverflowで質問していて、だれも本当に助けることができないので、今日から正規表現の使い方を学び始めました。 fail2banがどのように<Host>を定義してIPを取得するかについては、よくわかりません。私は次のような1つのフィルターを実行することにより、自分の方法でIPを取得しようとしました。

(\d+\.\d+\.\d+\.\d+:\d+ Connection reset, restarting)https://regex101.com/ で機能しますが、fail2banでは機能しません。

3
answerSeeker

正規表現の詳細を学んだ後、fail2ban用にこのようなフィルターを作成することができました

[Definition]

failregex = <Host>:\d+ (Connection reset, restarting|TLS Error: TLS handshake failed|Fatal TLS error|VERIFY ERROR|WARNING: Bad encapsulated packet length)
ignoreregex =
2
answerSeeker