2025-10-27 02:18:49,229 ********.ru proftpd[14117] 127.0.0.1 (196.245.54.142[196.245.54.142]): USER anonymous: no such user found from 196.245.54.142 [196.245.54.142] to ::ffff:X.X.X.X:21
2025-10-27 02:18:49,391 ********.ru proftpd[14117] 127.0.0.1 (196.245.54.142[196.245.54.142]): FTP session closed.
2025-10-26 23:18:51,059 ********.ru proftpd[14122] 127.0.0.1 (X.X.X.X[X.X.X.X]): USER exchange1c: Login successful.
2025-10-26 23:18:51,097 ********.ru proftpd[14122] 127.0.0.1 (X.X.X.X[X.X.X.X]): FTP session closed.# Fail2Ban filter for the Proftpd FTP daemon
#
# Set "UseReverseDNS off" in proftpd.conf to avoid the need for DNS.
# See: http://www.proftpd.org/docs/howto/DNS.html
# When the default locale for your system is not en_US.UTF-8
# on Debian-based systems be sure to add this to /etc/default/proftpd
# export LC_TIME="en_US.UTF-8"
[INCLUDES]
before = common.conf
[Definition]
_daemon = proftpd
__suffix_failed_login = ([uU]ser not authorized for login|[nN]o such user found|[iI]ncorrect password|[pP]assword expired|[aA]ccount disabled|[iI]nvalid shell: '\S+'|[uU]ser in \S+|[lL]imit (access|configuration) denies login|[nN]ot a UserAlias|[mM]aximum login length exceeded)
prefregex = ^%(__prefix_line)s%(__hostname)s \(\S+\[<HOST>\]\)[: -]+ <F-CONTENT>(?:USER|SECURITY|Maximum) .+</F-CONTENT>$
failregex = ^USER <F-USER>\S+|.*?</F-USER>(?: \(Login failed\))?: %(__suffix_failed_login)s
^SECURITY VIOLATION: <F-USER>\S+|.*?</F-USER> login attempted
^Maximum login attempts \(\d+\) exceeded
ignoreregex =
[Init]
journalmatch = _SYSTEMD_UNIT=proftpd.service
# Author: Yaroslav Halchenko
# Daniel Black - hardening of regex
<div class="container">
<div class="d-flex flex-wrap align-items-center justify-content-start gap-4 row-gap-4 px-0 px-md-0">
<div class="item flex-fill align-self-stretch">
<div class="overload d-flex align-items-center justify-content-center"></div>
<img src="..." />
</div>
...
</div>
</div>