LINUX.ORG.RU
ФорумAdmin

Fail2ban-regex (регулярные выражения)

 ,


0

1

Доброго времени суток. Прошу помочь составить регулярное выражение для следующего лога postfix:

warning: unknown[46.38.145.252]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\n",«stream»:«stdout»,«time»:«2023-03-29T12:17:18.281916092Z»}

Postfix установлен в контейнере docker, в составе с Mailcow. В сети нашел такое выражение:

^%(__prefix_line)swarning: [-._\w]+[]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]={0,2})?\s$

Но оно не подходит. Т.е. выражение срабатывает, но при парсинге лога выдает, что найдено 0 хостов.

Сам сталкиваюсь с регулярными выражениями впервые, никогда их не писал, засим прошу Вас помочь, уважаемые форумчане.

Перемещено hobbit из general

Прошу прощения, неверно выбрал разметку при создании темы, вот так выглядит найденное мною выражение:

^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$

Max8885
() автор топика
Ответ на: комментарий от Boatmen

Именно так и делаю, результат проверки выражений выложен выше (найдено 0).

Единстивенное уточнение, о котором я также упомянул в своем первом сообщении, postfix установлен в контейнере и его лог находится не по пути /var/log/mail.log, а в «/var/lib/docker/contairners/e5448f72aafa~/e5448f72aafa~json.log» e5448f72aafa - это идентификатор контейнера «postfix».

В /var/log нет файла mail.log

Max8885
() автор топика
Ответ на: комментарий от Boatmen

В общем, переместил лог в /var/log и вот, что получилось:

fail2ban-regex /var/log/mail.log «warning: (.*)\[<HOST>\]: SASL LOGIN (.*)authentication failed:» - выводит как надо, все записи.

fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/sasl.conf - не выводит ничего, но пишет снизу общее количество найденных строк в логе.

Max8885
() автор топика
Ответ на: комментарий от Boatmen

fail2ban-regex /var/log/mail.log «warning: (.*)\[<HOST>\]: SASL LOGIN (.*)authentication failed:» - выводит как надо, все записи.

fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/sasl.conf - не выводит ничего, но пишет снизу общее количество найденных строк в логе.

В jail.local путь до лого в logpath указал.

Max8885
() автор топика
Ответ на: комментарий от Max8885

Мой рабочий:

# Fail2Ban configuration file
#
# Author: Yaroslav Halchenko
#
# $Revision$
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication
failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
            warning: (.*)\[<HOST>\]: SASL LOGIN (.*)authentication failed:
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Boatmen
()
Ответ на: комментарий от Max8885

Бери не жалко (logpath под себя исправишь)

ignoreip    = 127.0.0.1 127.0.0.0/8 10.12.0.0/24  и другие известные тебе сети откуда юзеры стучатся

[sshd]
enabled     = true
filter      = sshd
port    = 42222
banaction      = iptables-allports
logpath     = /var/log/auth.log
maxretry    = 2
findtime  = 1800
bantime  = -1

[sshd-ddos]
enabled     = true
filter      = sshd-ddos
action      = route
logpath     = /var/log/auth.log
maxretry    = 1
findtime  = 43200
bantime  = -1

[sasl]
enabled = true
port     = smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s
filter   = sasl
action      = route
findtime    = 20800
maxretry    = 1
bantime  = -1
logpath  = /var/log/mail.log
usedns = no
sshd уменя болтается на другом порту. На порту 22 стоит тарпит endlessh, чтобы ботам не скучно было. Обрати внимание на bantime = -1 Это значит что банит совсем. Рекомендую также:
### На порт SSHD не больше двух паралельных соединений.
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp --syn --dport 42222 -m connlimit --connlimit-above 2 -j REJECT

Boatmen
()
Ответ на: комментарий от Boatmen

Пардон! файл /action.d/route.conf Забаненные IP в iptables не вносятся. Просто устанавливается маршрут в никуда. Посмотреть забаненные можно командой route -n При перезагрузке сервера маршруты сбрасываются.

Boatmen
()
Ответ на: комментарий от Max8885

iptables-allports.conf

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
# Modified: Yaroslav O. Halchenko <debian@onerussian.com>
#                       made active on all ports from original iptables.conf
#
#

[INCLUDES]

before = iptables-blocktype.conf


[Definition]

# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD
#
actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I <chain> -p <protocol> -j fail2ban-<name>

# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop = iptables -D <chain> -p <protocol> -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>
# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop = iptables -D <chain> -p <protocol> -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>

# Option:  actioncheck
# Notes.:  command executed once before each actionban command
# Values:  CMD
#
actioncheck = iptables -n -L <chain> | grep -q 'fail2ban-<name>[ \t]'

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>

# Option:  actionunban
# Notes.:  command executed when unbanning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>

[Init]

# Default name of the chain
#
name = default

# Option:  protocol
# Notes.:  internally used by config reader for interpolations.
# Values:  [ tcp | udp | icmp | all ] Default: tcp
#
protocol = tcp

# Option:  chain
# Notes    specifies the iptables chain to which the fail2ban rules should be
#          added
# Values:  STRING  Default: INPUT
chain = INPUT
route.conf
# Fail2Ban configuration file
#
# Author: Michael Gebetsroither
#
# This is for blocking whole hosts through blackhole routes.
#
# PRO:
#   - Works on all kernel versions and as no compatibility problems (back to debian lenny and WAY furth
er).
#   - It's FAST for very large numbers of blocked ips.
#   - It's FAST because it Blocks traffic before it enters common iptables chains used for filtering.
#   - It's per host, ideal as action against ssh password bruteforcing to block further attack attempts
.
#   - No additional software required beside iproute/iproute2
#
# CON:
#   - Blocking is per IP and NOT per service, but ideal as action against ssh password bruteforcing hos
ts

[Definition]
actionban   = ip route add <blocktype> <ip>
actionunban = ip route del <blocktype> <ip>

[Init]

# Option:  blocktype
# Note:    Type can be blackhole, unreachable and prohibit. Unreachable and prohibit correspond to the
ICMP reject messages.
# Values:  STRING
blocktype = unreachable

Boatmen
()