ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:23.97 GB of 70.42 GB (34.04%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ usr/ share/ fail2ban/ server/ - drwxr-xr-x

Directory:
Viewing file:     actions.py (5.38 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# Author: Cyril Jaquier

# $Revision: 567 $

__author__ = "Cyril Jaquier"
__version__ = "$Revision: 567 $"
__date__ = "$Date: 2007-03-26 23:17:31 +0200 (Mon, 26 Mar 2007) $"
__copyright__ = "Copyright (c) 2004 Cyril Jaquier"
__license__ = "GPL"

from banmanager import BanManager
from jailthread import JailThread
from action import Action
from mytime import MyTime
import time, logging

# Gets the instance of the logger.
logSys = logging.getLogger("fail2ban.actions")

##
# Execute commands.
#
# This class reads the failures from the Jail queue and decide if an
# action has to be taken. A BanManager take care of the banned IP
# addresses.

class Actions(JailThread):
    
    ##
    # Constructor.
    #
    # Initialize the filter object with default values.
    # @param jail the jail object
    
    def __init__(self, jail):
        JailThread.__init__(self)
        ## The jail which contains this action.
        self.jail = jail
        self.__actions = list()
        ## The ban manager.
        self.__banManager = BanManager()
    
    ##
    # Adds an action.
    #
    # @param name The action name
    
    def addAction(self, name):
        action = Action(name)
        self.__actions.append(action)
    
    ##
    # Removes an action.
    #
    # @param name The action name
    
    def delAction(self, name):
        for action in self.__actions:
            if action.getName() == name:
                self.__actions.remove(action)
                break
    
    ##
    # Returns an action.
    #
    # Raises a KeyError exception if the action does not exist.
    #
    # @param name the action name
    # @return the action
    
    def getAction(self, name):
        for action in self.__actions:
            if action.getName() == name:
                return action
        raise KeyError
    
    ##
    # Returns the last defined action.
    #
    # @return The last defined action.
    
    def getLastAction(self):
        action = self.__actions.pop()
        self.__actions.append(action)
        return action
    
    ##
    # Set the ban time.
    #
    # @param value the time
    
    def setBanTime(self, value):
        self.__banManager.setBanTime(value)
        logSys.info("Set banTime = %s" % value)
    
    ##
    # Get the ban time.
    #
    # @return the time
    
    def getBanTime(self):
        return self.__banManager.getBanTime()
    
    ##
    # Main loop.
    #
    # This function is the main loop of the thread. It checks the Jail
    # queue and executes commands when an IP address is banned.
    # @return True when the thread exits nicely
    
    def run(self):
        self.setActive(True)
        for action in self.__actions:
            action.execActionStart()
        while self._isActive():
            if not self.getIdle():
                #logSys.debug(self.jail.getName() + ": action")
                ret = self.__checkBan()
                if not ret:
                    self.__checkUnBan()
                    time.sleep(self.getSleepTime())
            else:
                time.sleep(self.getSleepTime())
        self.__flushBan()
        for action in self.__actions:
            action.execActionStop()
        logSys.debug(self.jail.getName() + ": action terminated")
        return True

    ##
    # Check for IP address to ban.
    #
    # Look in the Jail queue for FailTicket. If a ticket is available,
    # it executes the "ban" command and add a ticket to the BanManager.
    # @return True if an IP address get banned
    
    def __checkBan(self):
        ticket = self.jail.getFailTicket()
        if ticket != False:
            aInfo = dict()
            bTicket = BanManager.createBanTicket(ticket)
            aInfo["ip"] = bTicket.getIP()
            aInfo["failures"] = bTicket.getAttempt()
            aInfo["time"] = bTicket.getTime()
            if self.__banManager.addBanTicket(bTicket):
                logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"]))
                for action in self.__actions:
                    action.execActionBan(aInfo)
                return True
            else:
                logSys.warn("[%s] %s already banned" % (self.jail.getName(), 
                                                        aInfo["ip"]))
        return False
    
    ##
    # Check for IP address to unban.
    #
    # Unban IP address which are outdated.
    
    def __checkUnBan(self):
        for ticket in self.__banManager.unBanList(MyTime.time()):
            self.__unBan(ticket)
    
    ##
    # Flush the ban list.
    #
    # Unban all IP address which are still in the banning list.
    
    def __flushBan(self):
        logSys.debug("Flush ban list")
        for ticket in self.__banManager.flushBanList():
            self.__unBan(ticket)
    
    ##
    # Unbans host corresponding to the ticket.
    #
    # Executes the actions in order to unban the host given in the
    # ticket.
    
    def __unBan(self, ticket):
        aInfo = dict()
        aInfo["ip"] = ticket.getIP()
        aInfo["failures"] = ticket.getAttempt()
        aInfo["time"] = ticket.getTime()
        logSys.warn("[%s] Unban %s" % (self.jail.getName(), aInfo["ip"]))
        for action in self.__actions:
            action.execActionUnban(aInfo)
            
    
    ##
    # Get the status of the filter.
    #
    # Get some informations about the filter state such as the total
    # number of failures.
    # @return a list with tuple
    
    def status(self):
        ret = [("Currently banned", self.__banManager.size()), 
               ("Total banned", self.__banManager.getBanTotal()),
               ("IP list", self.__banManager.getBanList())]
        return ret
Command:
Quick Commands:
Upload:
[Read-Only] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [Read-Only]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.1856 seconds