Escrevendo um regex de múltiplas linhas do fail2ban

2

Eu tenho alguns hosts problemáticos experimentando com um servidor SSH que eu rode, e estou tentando bani-los usando o fail2ban. O problema é que eu não fiz muito trabalho com expressões regulares, e menos ainda com expressões regulares do Python.

Aqui estão as linhas problemáticas no meu auth.log:

Nov 19 18:58:17 myhost sshd[48272]: Connection from xxx.xxx.xxx.xxx port 3284 on my.host.ip.address port 22
Nov 19 18:58:21 myhost sshd[48272]: fatal: Read from socket failed: Connection reset by peer [preauth]

Eu quero pegar as duas linhas no regex, eu vi em outros posts sobre como fazer o material de múltiplas linhas, mas no momento eu não posso nem conseguir que ele combine com a primeira linha! Aqui está um trecho do meu arquivo * .conf:

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Init]

maxlines = 2

[Definition]

_daemon = sshd

failregex = ^%(__prefix_line)s^Connection from <HOST>*$

Eu entendo que o "__prefix_line" é projetado para capturar o primeiro bit "myhost sshd [PID]", mas tudo que eu quando executo o "fail2ban-regex" é:

Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [115124] MONTH Day Hour:Minute:Second
'-

Lines: 115124 lines, 0 ignored, 0 matched, 115124 missed

Alguém tem alguma ideia?

Obrigado antecipadamente!

    
por ticktockhouse 19.11.2014 / 23:38

2 respostas

1

Eu lutei com regex multilinha por um longo tempo no Ubuntu. Acontece que eu precisava atualizar para v 0.9.1 para fazê-lo funcionar, o que exigia o download do tar.gz mais recente do fail2ban. Para o Ubuntu 14.04, a versão LTS foi limitada a 0.8.11

Depois disso, funcionou como esperado.

    
por 27.01.2015 / 12:24
1

Estou usando o fail2ban 0.9.5 no Ubuntu Server LTS 14.04 e uso um bom wronguser.conf regra que proíbe todos os usuários 'errados / não autorizados' para o meu ssh e squirrelmail (que usa 'dovecot') e procura em /var/log/auth.log por seguir as seguintes linhas:

Aug 15 10:15:25 server auth: pam_unix(dovecot:auth): check pass; user unknown
Aug 15 10:15:25 server auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=alumni rhost=14.141.17.167

e

Aug 15 12:39:10 server sshd[5851]: pam_unix(sshd:auth): check pass; user unknown
Aug 15 12:39:10 server sshd[5851]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=91.224.160.106

junto com a linha única para proibição do usuário do ssh root :

Aug 15 05:50:20 server sshd[20677]: Failed password for root from 62.147.227.164 port 55253 ssh2

A regra é:

[INCLUDES]

before = common.conf

[Definition]

_daemon = (?:sshd|postfix/smptd)

failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sFailed (?:password|publickey) for root from <HOST>(?: port \d*)?(?: ssh\d*)?$
            dovecot.*user unknown\n.*dovecot.*authentication failure.*rhost\=<HOST>

ingoreregex =

[Init]

maxlines = 2

está incluído na jail.local como:

[wronguser]

enabled  = true
port     = 1:65535
filter   = wronguser
logpath  = /var/log/auth.log
maxretry = 1
bantime  = -1

O padrão apt-get fail2ban no Ubuntu LTS 14.04 é 0.8.11 e não está funcionando com o multilex regex. Então você deve instalar manualmente o último fail2ban estável. Eu fiz isso diretamente do repositório do git.

    
por 15.08.2016 / 10:40