diff options
author | Steven Hiscocks <steven@hiscocks.me.uk> | 2013-04-13 16:54:22 +0100 |
---|---|---|
committer | Steven Hiscocks <steven@hiscocks.me.uk> | 2013-04-13 16:54:22 +0100 |
commit | fa0f8f9e6df92702412376d84be745079db800f8 (patch) | |
tree | 391a03bb171edba396c203a1b8800becd2cae2f3 /bin/fail2ban-server | |
parent | a33bf5baca961a2b13d330fb905de11802fbc50b (diff) | |
parent | 5aef036f543d516114760a8e5931a41d057814b0 (diff) | |
download | fail2ban-fa0f8f9e6df92702412376d84be745079db800f8.tar.gz |
Merge branch '0.9' into py3
Conflicts:
.travis.yml
MANIFEST
bin/fail2ban-regex
fail2ban/server/filter.py
fail2ban/tests/servertestcase.py
setup.py
Diffstat (limited to 'bin/fail2ban-server')
-rwxr-xr-x | bin/fail2ban-server | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/bin/fail2ban-server b/bin/fail2ban-server new file mode 100755 index 00000000..aba19ab5 --- /dev/null +++ b/bin/fail2ban-server @@ -0,0 +1,137 @@ +#!/usr/bin/python +# 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. + +__author__ = "Cyril Jaquier" +__copyright__ = "Copyright (c) 2004 Cyril Jaquier" +__license__ = "GPL" + +import getopt, sys, logging, os + +from fail2ban.version import version +from fail2ban.server.server import Server + +# Gets the instance of the logger. +logSys = logging.getLogger("fail2ban") + +## +# \mainpage Fail2Ban +# +# \section Introduction +# +# Fail2ban is designed to protect your server against brute force attacks. +# Its first goal was to protect a SSH server. + +class Fail2banServer: + + def __init__(self): + self.__server = None + self.__argv = None + self.__conf = dict() + self.__conf["background"] = True + self.__conf["force"] = False + self.__conf["socket"] = "/var/run/fail2ban/fail2ban.sock" + self.__conf["pidfile"] = "/var/run/fail2ban/fail2ban.pid" + + def dispVersion(self): + print "Fail2Ban v" + version + print + print "Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors" + print "Copyright of modifications held by their respective authors." + print "Licensed under the GNU General Public License v2 (GPL)." + print + print "Written by Cyril Jaquier <cyril.jaquier@fail2ban.org>." + print "Many contributions by Yaroslav O. Halchenko <debian@onerussian.com>." + + def dispUsage(self): + """ Prints Fail2Ban command line options and exits + """ + print "Usage: "+self.__argv[0]+" [OPTIONS]" + print + print "Fail2Ban v" + version + " reads log file that contains password failure report" + print "and bans the corresponding IP addresses using firewall rules." + print + print "Only use this command for debugging purpose. Start the server with" + print "fail2ban-client instead. The default behaviour is to start the server" + print "in background." + print + print "Options:" + print " -b start in background" + print " -f start in foreground" + print " -s <FILE> socket path" + print " -p <FILE> pidfile path" + print " -x force execution of the server (remove socket file)" + print " -h, --help display this help message" + print " -V, --version print the version" + print + print "Report bugs to https://github.com/fail2ban/fail2ban/issues" + + def __getCmdLineOptions(self, optList): + """ Gets the command line options + """ + for opt in optList: + if opt[0] == "-b": + self.__conf["background"] = True + if opt[0] == "-f": + self.__conf["background"] = False + if opt[0] == "-s": + self.__conf["socket"] = opt[1] + if opt[0] == "-p": + self.__conf["pidfile"] = opt[1] + if opt[0] == "-x": + self.__conf["force"] = True + if opt[0] in ["-h", "--help"]: + self.dispUsage() + sys.exit(0) + if opt[0] in ["-V", "--version"]: + self.dispVersion() + sys.exit(0) + + def start(self, argv): + # Command line options + self.__argv = argv + + # Reads the command line options. + try: + cmdOpts = 'bfs:p:xhV' + cmdLongOpts = ['help', 'version'] + optList, args = getopt.getopt(self.__argv[1:], cmdOpts, cmdLongOpts) + except getopt.GetoptError: + self.dispUsage() + sys.exit(-1) + + self.__getCmdLineOptions(optList) + + try: + self.__server = Server(self.__conf["background"]) + self.__server.start(self.__conf["socket"], + self.__conf["pidfile"], + self.__conf["force"]) + return True + except Exception, e: + logSys.exception(e) + self.__server.quit() + return False + +if __name__ == "__main__": + server = Fail2banServer() + if server.start(sys.argv): + sys.exit(0) + else: + sys.exit(-1) |