У меня есть несколько проблемных хостов, которые пробуют это с сервером SSH, который я запускаю, и я пытаюсь заблокировать их с помощью fail2ban. Проблема в том, что я мало работал с регулярными выражениями, и тем более с регулярными выражениями Python.
Вот неприятные строки в моем журнале 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]
Я хочу взять обе строки в регулярном выражении, я видел в других сообщениях о том, как делать многострочные вещи, но на данный момент я даже не могу заставить их соответствовать первой строке! Вот фрагмент моего файла * .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>*$
Я понимаю, что «__prefix_line» предназначен для перехвата первого бита «myhost sshd [PID]», но все, что я, когда запускаю «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
У кого-нибудь есть идеи?
Заранее спасибо!
Я использую fail2ban 0.9.5 на Сервер Ubuntu LTS 14.04 и использовать хороший неправильный пользователь.conf правило, которое запрещает всем "неправильным / неавторизованным" пользователям мой ssh и squirrelmail (который использует dovecot) и ищет в /var/log/auth.log следующие мультилинии:
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
и
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
вместе с одной строкой для ssh корень бан пользователя:
Aug 15 05:50:20 server sshd[20677]: Failed password for root from 62.147.227.164 port 55253 ssh2
Правило такое:
[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
он включен в jail.local как:
[wronguser]
enabled = true
port = 1:65535
filter = wronguser
logpath = /var/log/auth.log
maxretry = 1
bantime = -1
По умолчанию apt-get fail2ban на Ubuntu LTS 14.04 0.8.11 и не работает с многострочным регулярным выражением. Поэтому вам следует вручную установить последнюю стабильную версию fail2ban. Я сделал это прямо из их репозитория git.
Я долгое время боролся с многострочным регулярным выражением в Ubuntu. Оказывается, мне нужно было обновить до версии 0.9.1, чтобы заставить его работать, что потребовало загрузки последней версии tar.gz из fail2ban. Для Ubuntu 14.04 версия LTS ограничивалась 0.8.11
После этого все заработало как положено.