mirror of https://github.com/fail2ban/fail2ban
Merge branch '0.11'
commit
a08b925468
|
@ -15,7 +15,7 @@ addr = (?:IPv6:<IP6>|<IP4>)
|
|||
prefregex = ^<F-MLFID>%(__prefix_line)s</F-MLFID><F-CONTENT>.+</F-CONTENT>$
|
||||
|
||||
failregex = ^(\S+ )?\[%(addr)s\]( \(may be forged\))?: possible SMTP attack: command=AUTH, count=\d+$
|
||||
^AUTH failure \([^\)]+\):(?: [^:]+:)? (?:authentication failure|user not found): [^,]*, user=<F-USER>(?:\S+|.*?)</F-USER>, relay=(?:\S+ )?\[%(addr)s\](?: \(may be forged\))?$
|
||||
^AUTH failure \([^\)]+\):(?: [^:]+:)? (?:authentication failure|user not found): [^,]*, (?:user=<F-USER>(?:\S+|.*?)</F-USER>, )?relay=(?:\S+ )?\[%(addr)s\](?: \(may be forged\))?$
|
||||
ignoreregex =
|
||||
|
||||
journalmatch = _SYSTEMD_UNIT=sendmail.service
|
||||
|
|
|
@ -196,7 +196,7 @@ class Fail2banClient(Fail2banCmdLine, Thread):
|
|||
th.daemon = True
|
||||
th.start()
|
||||
# Mark current (main) thread as daemon:
|
||||
self.setDaemon(True)
|
||||
self.daemon = True
|
||||
# Start server direct here in main thread (not fork):
|
||||
self._server = Fail2banServer.startServerDirect(self._conf, False)
|
||||
|
||||
|
|
|
@ -849,6 +849,26 @@ class Server:
|
|||
def getDatabase(self):
|
||||
return self.__db
|
||||
|
||||
@staticmethod
|
||||
def __get_fdlist():
|
||||
"""Generate a list of open file descriptors.
|
||||
|
||||
This wouldn't work on some platforms, or if proc/fdescfs not mounted, or a chroot environment,
|
||||
then it'd raise a FileExistsError.
|
||||
"""
|
||||
for path in (
|
||||
'/proc/self/fd', # Linux, Cygwin and NetBSD
|
||||
'/proc/fd', # MacOS and FreeBSD
|
||||
):
|
||||
if os.path.exists(path):
|
||||
def fdlist():
|
||||
for name in os.listdir(path):
|
||||
if name.isdigit():
|
||||
yield int(name)
|
||||
return fdlist()
|
||||
# other platform or unmounted, chroot etc:
|
||||
raise FileExistsError("fd-list not found")
|
||||
|
||||
def __createDaemon(self): # pragma: no cover
|
||||
""" Detach a process from the controlling terminal and run it in the
|
||||
background as a daemon.
|
||||
|
@ -906,25 +926,37 @@ class Server:
|
|||
# Signal to exit, parent of the first child.
|
||||
return None
|
||||
|
||||
# Close all open files. Try the system configuration variable, SC_OPEN_MAX,
|
||||
# Close all open files. Try to obtain the range of open descriptors directly.
|
||||
# As a fallback try the system configuration variable, SC_OPEN_MAX,
|
||||
# for the maximum number of open files to close. If it doesn't exist, use
|
||||
# the default value (configurable).
|
||||
try:
|
||||
maxfd = os.sysconf("SC_OPEN_MAX")
|
||||
except (AttributeError, ValueError):
|
||||
maxfd = 256 # default maximum
|
||||
fdlist = self.__get_fdlist()
|
||||
maxfd = -1
|
||||
except:
|
||||
try:
|
||||
maxfd = os.sysconf("SC_OPEN_MAX")
|
||||
except (AttributeError, ValueError):
|
||||
maxfd = 256 # default maximum
|
||||
fdlist = xrange(maxfd+1)
|
||||
|
||||
# urandom should not be closed in Python 3.4.0. Fixed in 3.4.1
|
||||
# http://bugs.python.org/issue21207
|
||||
if sys.version_info[0:3] == (3, 4, 0): # pragma: no cover
|
||||
urandom_fd = os.open("/dev/urandom", os.O_RDONLY)
|
||||
for fd in range(0, maxfd):
|
||||
for fd in fdlist:
|
||||
try:
|
||||
if not os.path.sameopenfile(urandom_fd, fd):
|
||||
os.close(fd)
|
||||
except OSError: # ERROR (ignore)
|
||||
pass
|
||||
os.close(urandom_fd)
|
||||
elif maxfd == -1:
|
||||
for fd in fdlist:
|
||||
try:
|
||||
os.close(fd)
|
||||
except OSError: # ERROR (ignore)
|
||||
pass
|
||||
else:
|
||||
os.closerange(0, maxfd)
|
||||
|
||||
|
|
|
@ -32,3 +32,5 @@ May 24 01:59:07 server sm-mta[65815]: 14NNx65Q065815: AUTH failure (CRAM-MD5): u
|
|||
May 29 23:14:04 mail sendmail[5976]: 09DJDgOM005976: AUTH failure (login): authentication failure (-13) SASL(-13): authentication failure: checkpass failed, user=test, relay=host.example.com [192.0.2.7] (may be forged)
|
||||
# failJSON: { "time": "2005-05-29T23:14:04", "match": true , "host": "192.0.2.8", "desc": "authentication failure, sendmail 8.16.1 (gh-2757)" }
|
||||
May 29 23:14:04 mail sendmail[5976]: 09DJDgOM005976: AUTH failure (PLAIN): authentication failure (-13) SASL(-13): authentication failure: Password verification failed, user=test, relay=host.example.com [192.0.2.8]
|
||||
# failJSON: { "time": "2005-05-29T23:14:05", "match": true , "host": "192.0.2.9", "desc": "authentication failure, no user part (gh-2757)" }
|
||||
May 29 23:14:05 server sendmail[25411]: 26H8MRrS025411: AUTH failure (LOGIN): authentication failure (-13) SASL(-13): authentication failure: checkpass failed, relay=[192.0.2.9]
|
||||
|
|
Loading…
Reference in New Issue