Hi :)
Weil ich grad nicht wirklich weiss wo hin damit, post ichs hier mal rein.
Das Script ist wie der Name schon sagt ein kleines Script was in Python realisiert und auf Linux ausgeführt einen "IP-Ban" tätigt.
Das ganze ist recht einfach aufgebaut:
- Iptables flushen um mehrfachadds zu verhindern
- verbindung zu MySQL-Datenbank aufbauen
- Die zu bannenden IPs holen
- einen IPtables-Eintrag hinzufügen, der eine Weiterverarbeitung der ankommenden Pakete der IP verhindert
Vorrausetzungen:
- MySQL
- Python
- Iptables
- Python-MySQL Library
Die DB-Structure
Das Script
Alles anzeigen
Selbstverständlich kann man das Script auch auf mehreren Computern ausführen und dabei eine einzige DB auf einem Zentralroot haben.
Spart arbeit, denn nun kann man Zentral auf eine DB zu greifen und muss nicht auf jeden root die Iptables seperat setzen.
LG GiR-Blunti
PS: Es hilft bei Synfloods nicht, aber die Jungs mit ihren kleinen Scantools für Apache, Console, usw kann man so schön sauber rauswerfen.
Es werden halt von allen IPs die in dem Table sind die eingehenden Pakete verworfen.
Dazu passend gleich noch ein kleines PythonScript um die IPs per Console in die DB eintragen zu können:
writeip.py
Alles anzeigen
Die Benutzung ist recht easy:
$writeip.py 127.0.0.1
Das ganze kann man dazu verwenden um mit Fail2Ban die gesperrten IPs per CustomAction in die DB zu verfrachten um den anderen Roots eventuelle "angiffe" zu ersparen.
So ein Fail2Ban-Acion kann so aussehen:
/etc/fail2ban/action.d/write-to-mysql.conf
Alles anzeigen
Viel Spaß damit.
LG GiR-Blunti
Weil ich grad nicht wirklich weiss wo hin damit, post ichs hier mal rein.
Das Script ist wie der Name schon sagt ein kleines Script was in Python realisiert und auf Linux ausgeführt einen "IP-Ban" tätigt.
Das ganze ist recht einfach aufgebaut:
- Iptables flushen um mehrfachadds zu verhindern
- verbindung zu MySQL-Datenbank aufbauen
- Die zu bannenden IPs holen
- einen IPtables-Eintrag hinzufügen, der eine Weiterverarbeitung der ankommenden Pakete der IP verhindert
Vorrausetzungen:
- MySQL
- Python
- Iptables
- Python-MySQL Library
Die DB-Structure
Quellcode
- #! /usr/bin/env python
- # -*- coding: utf-8 -*-
- import MySQLdb
- import os
- print "AutoBan Script V0.1"
- print "\n"
- print "Open Connection to DB"
- mysql = MySQLdb.connect(
- host="127.0.0.1",
- db="DATENBANK_NAME",
- user="USERNAME", passwd="PASSWORD"
- )
- cursor = mysql.cursor()
- cursor.execute("SELECT * FROM `BanList`")
- IP = cursor.fetchall()
- numrows = int(cursor.rowcount)
- #Flush the Tables, prevents for doubleadd
- os.system("/sbin/iptables --flush")
- #Count down and write down
- i = 0
- while i < numrows:
- temp=str(IP[i])
- le = len(temp)-3
- defstr= ("/sbin/iptables -A INPUT -s "+ temp[2:le] +" -j DROP")
- print (defstr)
- os.system(defstr)
- #outfile.write (defstr)
- i = i + 1
Spart arbeit, denn nun kann man Zentral auf eine DB zu greifen und muss nicht auf jeden root die Iptables seperat setzen.
LG GiR-Blunti
PS: Es hilft bei Synfloods nicht, aber die Jungs mit ihren kleinen Scantools für Apache, Console, usw kann man so schön sauber rauswerfen.
Es werden halt von allen IPs die in dem Table sind die eingehenden Pakete verworfen.
Dazu passend gleich noch ein kleines PythonScript um die IPs per Console in die DB eintragen zu können:
writeip.py
Quellcode
- #!/usr/bin/python
- import sys
- import MySQLdb
- print "Open Connection to DB"
- mysql = MySQLdb.connect(
- host="127.0.0.1",
- db="DATENBANK_NAME",
- user="USERNAME", passwd="PASSWORD"
- )
- if (len(sys.argv) > 1):
- cursor = mysql.cursor()
- cursor.execute("INSERT INTO BanList VALUES (%s)", sys.argv[1])
- defstr= ("/sbin/iptables -A INPUT -s "+ sys.argv[1] +" -j DROP")
- #print (defstr)
- os.system(defstr)
- else:
- print "Usage:"
- print "writeip.py <IP-to-BAN>"
$writeip.py 127.0.0.1
Das ganze kann man dazu verwenden um mit Fail2Ban die gesperrten IPs per CustomAction in die DB zu verfrachten um den anderen Roots eventuelle "angiffe" zu ersparen.
So ein Fail2Ban-Acion kann so aussehen:
/etc/fail2ban/action.d/write-to-mysql.conf
Quellcode
- # $Revision: 658 $
- #
- [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 = python /root/scripts/writeip.py <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 =
- [Init]
- # Defaut name of the chain
- #
- name = default
- # Option: port
- # Notes.: specifies port to monitor
- # Values: [ NUM | STRING ] Default:
- #
- port = ssh
- # Option: protocol
- # Notes.: internally used by config reader for interpolations.
- # Values: [ tcp | udp | icmp | all ] Default: tcp
- #
- protocol = tcp
LG GiR-Blunti