initial public commit
commit
ec9d8d0fa4
|
@ -0,0 +1,5 @@
|
|||
db = 'fail2sql'
|
||||
db_user = 'fail2sql'
|
||||
db_pass = 'fail2pass'
|
||||
db_host = 'localhost'
|
||||
db_port = 8740
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
F="$0"
|
||||
PYTHONPATH="`readlink -f \"$0\" | xargs dirname`" python -m fail2shame $@
|
|
@ -0,0 +1,46 @@
|
|||
# Fail2Ban configuration file
|
||||
#
|
||||
# Author: Cyril Jaquier
|
||||
#
|
||||
# $Revision$
|
||||
#
|
||||
|
||||
[Definition]
|
||||
|
||||
# Option: actionstart
|
||||
# Notes.: command executed once at the start of Fail2Ban.
|
||||
# Values: CMD
|
||||
#
|
||||
actionstart =
|
||||
|
||||
# Option: actionstop
|
||||
# Notes.: command executed once at the end of Fail2Ban
|
||||
# Values: CMD
|
||||
#
|
||||
actionstop =
|
||||
|
||||
# Option: actioncheck
|
||||
# Notes.: command executed once before each actionban command
|
||||
# Values: CMD
|
||||
#
|
||||
actioncheck =
|
||||
|
||||
# Option: actionban
|
||||
# Notes.: command executed when banning an IP. Take care that the
|
||||
# command is executed with Fail2Ban user rights.
|
||||
# Tags: <ip> IP address
|
||||
# <failures> number of failures
|
||||
# <time> unix timestamp of the ban time
|
||||
# Values: CMD
|
||||
#
|
||||
actionban = /usr/local/fail2shame/fail2shame <name> <protocol> <port> <ip>
|
||||
|
||||
# Option: actionunban
|
||||
# Notes.: command executed when unbanning an IP. Take care that the
|
||||
# command is executed with Fail2Ban user rights.
|
||||
# Tags: <ip> IP address
|
||||
# <failures> number of failures
|
||||
# <time> unix timestamp of the ban time
|
||||
# Values: CMD
|
||||
#
|
||||
actionunban =
|
|
@ -0,0 +1,37 @@
|
|||
import GeoIP
|
||||
import MySQLdb as sql
|
||||
import config
|
||||
|
||||
gdb = '/usr/share/GeoIP/GeoLiteCity.dat'
|
||||
|
||||
def add_host(c, ip):
|
||||
print 'adding host for', ip
|
||||
gi = GeoIP.open(gdb, GeoIP.GEOIP_STANDARD)
|
||||
rec = gi.record_by_addr(ip) or {}
|
||||
city = rec.get('city')
|
||||
country = rec.get('country_name')
|
||||
if city and country:
|
||||
geo = city + ', ' + country
|
||||
else:
|
||||
geo = city or country or ''
|
||||
c.execute('insert into f2s_hosts (ip, longitude, latitude, country_code, country, geo)\
|
||||
values (%s, %s, %s, %s, %s, %s)', [ip, rec.get('longitude'), rec.get('latitude'),
|
||||
rec.get('country_code'), country, geo])
|
||||
return c.lastrowid
|
||||
|
||||
def banned(name, protocol, port, ip, *a):
|
||||
conn = sql.connect(config.db_host, config.db_user, config.db_pass, config.db)
|
||||
c = conn.cursor(sql.cursors.DictCursor)
|
||||
n = c.execute('select id from f2s_hosts where ip = %s', [ip])
|
||||
if n == 0:
|
||||
hid = add_host(c, ip)
|
||||
else:
|
||||
hid = c.fetchone()['id']
|
||||
print 'logging ban for host', ip
|
||||
c.execute('insert into f2s_bans (id, name, protocol, port) values\
|
||||
(%s, %s, %s, %s)', [hid, name, protocol, port])
|
||||
|
||||
if __name__ == '__main__':
|
||||
from sys import argv
|
||||
argv[3] = int(argv[3])
|
||||
banned(*argv[1:])
|
|
@ -0,0 +1,24 @@
|
|||
DROP TABLE IF EXISTS `f2s_hosts`;
|
||||
CREATE TABLE `f2s_hosts` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`ip` varchar(40) NOT NULL UNIQUE,
|
||||
`longitude` varchar(20) DEFAULT NULL,
|
||||
`latitude` varchar(20) DEFAULT NULL,
|
||||
`country_code` varchar(5) DEFAULT NULL,
|
||||
`country` varchar(60) DEFAULT NULL,
|
||||
`geo` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS `f2s_bans`;
|
||||
CREATE TABLE `f2s_bans` (
|
||||
`banid` int NOT NULL AUTO_INCREMENT,
|
||||
`id` int NOT NULL,
|
||||
`time` timestamp DEFAULT CURRENT_TIMESTAMP,
|
||||
`name` text NOT NULL,
|
||||
`protocol` varchar(10),
|
||||
`port` int(11) NOT NULL,
|
||||
PRIMARY KEY (`banid`),
|
||||
FOREIGN KEY (`id`) references `f2s_hosts`(`id`)
|
||||
ON DELETE CASCADE
|
||||
);
|
Loading…
Reference in New Issue