__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: t -*-
# vi: set ft=python sts=4 ts=4 sw=4 noet :
# This file is part of Fail2Ban.
#
# Fail2Ban is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Fail2Ban is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Fail2Ban; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import socket
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate, formataddr
from fail2ban.server.actions import ActionBase, CallingMap
messages = {}
messages['start'] = \
"""Hi,
The jail %(jailname)s has been started successfully.
Regards,
Fail2Ban"""
messages['stop'] = \
"""Hi,
The jail %(jailname)s has been stopped.
Regards,
Fail2Ban"""
messages['ban'] = {}
messages['ban']['head'] = \
"""Hi,
The IP %(ip)s has just been banned for %(bantime)i seconds
by Fail2Ban after %(failures)i attempts against %(jailname)s.
"""
messages['ban']['tail'] = \
"""
Regards,
Fail2Ban"""
messages['ban']['matches'] = \
"""
Matches for this ban:
%(matches)s
"""
messages['ban']['ipmatches'] = \
"""
Matches for %(ip)s:
%(ipmatches)s
"""
messages['ban']['ipjailmatches'] = \
"""
Matches for %(ip)s for jail %(jailname)s:
%(ipjailmatches)s
"""
class SMTPAction(ActionBase):
"""Fail2Ban action which sends emails to inform on jail starting,
stopping and bans.
"""
def __init__(
self, jail, name, host="localhost", user=None, password=None,
sendername="Fail2Ban", sender="fail2ban", dest="root", matches=None):
"""Initialise action.
Parameters
----------
jail : Jail
The jail which the action belongs to.
name : str
Named assigned to the action.
host : str, optional
SMTP host, of host:port format. Default host "localhost" and
port "25"
user : str, optional
Username used for authentication with SMTP server.
password : str, optional
Password used for authentication with SMTP server.
sendername : str, optional
Name to use for from address in email. Default "Fail2Ban".
sender : str, optional
Email address to use for from address in email.
Default "fail2ban".
dest : str, optional
Email addresses of intended recipient(s) in comma space ", "
delimited format. Default "root".
matches : str, optional
Type of matches to be included from ban in email. Can be one
of "matches", "ipmatches" or "ipjailmatches". Default None
(see man jail.conf.5).
"""
super(SMTPAction, self).__init__(jail, name)
self.host = host
#TODO: self.ssl = ssl
self.user = user
self.password =password
self.fromname = sendername
self.fromaddr = sender
self.toaddr = dest
self.matches = matches
self.message_values = CallingMap(
jailname = self._jail.name,
hostname = socket.gethostname,
bantime = lambda: self._jail.actions.getBanTime(),
)
# bypass ban/unban for restored tickets
self.norestored = 1
def _sendMessage(self, subject, text):
"""Sends message based on arguments and instance's properties.
Parameters
----------
subject : str
Subject of the email.
text : str
Body of the email.
Raises
------
SMTPConnectionError
Error on connecting to host.
SMTPAuthenticationError
Error authenticating with SMTP server.
SMTPException
See Python `smtplib` for full list of other possible
exceptions.
"""
msg = MIMEText(text)
msg['Subject'] = subject
msg['From'] = formataddr((self.fromname, self.fromaddr))
msg['To'] = self.toaddr
msg['Date'] = formatdate()
smtp = smtplib.SMTP()
try:
self._logSys.debug("Connected to SMTP '%s', response: %i: %s",
self.host, *smtp.connect(self.host))
if self.user and self.password: # pragma: no cover (ATM no tests covering that)
smtp.login(self.user, self.password)
failed_recipients = smtp.sendmail(
self.fromaddr, self.toaddr.split(", "), msg.as_string())
except smtplib.SMTPConnectError: # pragma: no cover
self._logSys.error("Error connecting to host '%s'", self.host)
raise
except smtplib.SMTPAuthenticationError: # pragma: no cover
self._logSys.error(
"Failed to authenticate with host '%s' user '%s'",
self.host, self.user)
raise
except smtplib.SMTPException: # pragma: no cover
self._logSys.error(
"Error sending mail to host '%s' from '%s' to '%s'",
self.host, self.fromaddr, self.toaddr)
raise
else:
if failed_recipients: # pragma: no cover
self._logSys.warning(
"Email to '%s' failed to following recipients: %r",
self.toaddr, failed_recipients)
self._logSys.debug("Email '%s' successfully sent", subject)
finally:
try:
self._logSys.debug("Disconnected from '%s', response %i: %s",
self.host, *smtp.quit())
except smtplib.SMTPServerDisconnected: # pragma: no cover
pass # Not connected
def start(self):
"""Sends email to recipients informing that the jail has started.
"""
self._sendMessage(
"[Fail2Ban] %(jailname)s: started on %(hostname)s" %
self.message_values,
messages['start'] % self.message_values)
def stop(self):
"""Sends email to recipients informing that the jail has stopped.
"""
self._sendMessage(
"[Fail2Ban] %(jailname)s: stopped on %(hostname)s" %
self.message_values,
messages['stop'] % self.message_values)
def ban(self, aInfo):
"""Sends email to recipients informing that ban has occurred.
Parameters
----------
aInfo : dict
Dictionary which includes information in relation to
the ban.
"""
if aInfo.get('restored'):
return
aInfo.update(self.message_values)
message = "".join([
messages['ban']['head'],
messages['ban'].get(self.matches, ""),
messages['ban']['tail']
])
self._sendMessage(
"[Fail2Ban] %(jailname)s: banned %(ip)s from %(hostname)s" %
aInfo,
message % aInfo)
Action = SMTPAction
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| abuseipdb.conf | File | 3.66 KB | 0644 |
|
| apf.conf | File | 587 B | 0644 |
|
| apprise.conf | File | 1.38 KB | 0644 |
|
| blocklist_de.conf | File | 2.65 KB | 0644 |
|
| bsd-ipfw.conf | File | 3.15 KB | 0644 |
|
| cloudflare-token.conf | File | 2.93 KB | 0644 |
|
| cloudflare.conf | File | 2.97 KB | 0644 |
|
| complain.conf | File | 4.66 KB | 0644 |
|
| dshield.conf | File | 7.5 KB | 0644 |
|
| dummy.conf | File | 1.68 KB | 0644 |
|
| firewallcmd-allports.conf | File | 1.47 KB | 0644 |
|
| firewallcmd-common.conf | File | 2.59 KB | 0644 |
|
| firewallcmd-ipset.conf | File | 3.58 KB | 0644 |
|
| firewallcmd-multiport.conf | File | 1.24 KB | 0644 |
|
| firewallcmd-new.conf | File | 1.85 KB | 0644 |
|
| firewallcmd-rich-logging.conf | File | 1021 B | 0644 |
|
| firewallcmd-rich-rules.conf | File | 1.71 KB | 0644 |
|
| helpers-common.conf | File | 592 B | 0644 |
|
| hostsdeny.conf | File | 1.62 KB | 0644 |
|
| ipfilter.conf | File | 1.54 KB | 0644 |
|
| ipfw.conf | File | 1.47 KB | 0644 |
|
| iptables-allports.conf | File | 291 B | 0644 |
|
| iptables-ipset-proto4.conf | File | 1.93 KB | 0644 |
|
| iptables-ipset-proto6-allports.conf | File | 814 B | 0644 |
|
| iptables-ipset-proto6.conf | File | 773 B | 0644 |
|
| iptables-ipset.conf | File | 2.52 KB | 0644 |
|
| iptables-multiport-log.conf | File | 2.11 KB | 0644 |
|
| iptables-multiport.conf | File | 232 B | 0644 |
|
| iptables-new.conf | File | 332 B | 0644 |
|
| iptables-xt_recent-echo.conf | File | 2.78 KB | 0644 |
|
| iptables.conf | File | 4.68 KB | 0644 |
|
| ipthreat.conf | File | 4.19 KB | 0644 |
|
| mail-buffered.conf | File | 2.44 KB | 0644 |
|
| mail-whois-common.conf | File | 1.03 KB | 0644 |
|
| mail-whois-lines.conf | File | 2.4 KB | 0644 |
|
| mail-whois.conf | File | 1.85 KB | 0644 |
|
| mail.conf | File | 1.72 KB | 0644 |
|
| mynetwatchman.conf | File | 5.2 KB | 0644 |
|
| netscaler.conf | File | 1.46 KB | 0644 |
|
| nftables-allports.conf | File | 383 B | 0644 |
|
| nftables-multiport.conf | File | 384 B | 0644 |
|
| nftables.conf | File | 6.17 KB | 0644 |
|
| nginx-block-map.conf | File | 3.92 KB | 0644 |
|
| npf.conf | File | 1.49 KB | 0644 |
|
| nsupdate.conf | File | 3.16 KB | 0644 |
|
| osx-afctl.conf | File | 497 B | 0644 |
|
| osx-ipfw.conf | File | 2.25 KB | 0644 |
|
| pf.conf | File | 3.66 KB | 0644 |
|
| route.conf | File | 1023 B | 0644 |
|
| sendmail-buffered.conf | File | 2.74 KB | 0644 |
|
| sendmail-common.conf | File | 1.89 KB | 0644 |
|
| sendmail-geoip-lines.conf | File | 1.72 KB | 0644 |
|
| sendmail-whois-ipjailmatches.conf | File | 1.03 KB | 0644 |
|
| sendmail-whois-ipmatches.conf | File | 1.01 KB | 0644 |
|
| sendmail-whois-lines.conf | File | 1.27 KB | 0644 |
|
| sendmail-whois-matches.conf | File | 1000 B | 0644 |
|
| sendmail-whois.conf | File | 950 B | 0644 |
|
| sendmail.conf | File | 829 B | 0644 |
|
| shorewall-ipset-proto6.conf | File | 3.44 KB | 0644 |
|
| shorewall.conf | File | 2.11 KB | 0644 |
|
| smtp.py | File | 6.13 KB | 0644 |
|
| symbiosis-blacklist-allports.conf | File | 1.47 KB | 0644 |
|
| ufw.conf | File | 2.32 KB | 0644 |
|
| xarf-login-attack.conf | File | 6.29 KB | 0644 |
|