Skript kontrollib OpenSSH logist ebaõnnestunud autentimisi ning lävendi ületamisel blokeerib IP aadressi: Difference between revisions
From ICO wiki
				
				
				Jump to navigationJump to search
				
				
| No edit summary | No edit summary | ||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| <source lang="python"> | <source lang="python"> | ||
| #!/usr/bin/python | #!/usr/bin/python | ||
| # -*- coding: utf-8 -*- | |||
| #Autor: Risto Siitan | #Autor: Risto Siitan | ||
| #Ryhm:A22 | #Ryhm:A22 | ||
| Line 6: | Line 7: | ||
| #smtplib on vajalik e-maili saatmiseks | #smtplib on vajalik e-maili saatmiseks | ||
| import smtplib | import smtplib | ||
| import sys | |||
| #loome sõnastiku | #loome sõnastiku | ||
| failures = {} | failures = {} | ||
| #Kontrollime, kas logi fail on olemas: | |||
| if len(sys.argv) < 2: | |||
|         print "Kasuta järgnevalt: <skripti nimi> <logifail>" | |||
|         sys.exit(0) | |||
| else: | |||
| #avame hosts.deny ning vastava logi faili | #avame hosts.deny ning vastava logi faili | ||
| kir=open("/etc/hosts.deny",'r+') | 	kir=open("/etc/hosts.deny",'r+') | ||
| fh = open( | 	fh = open(sys.argv[1]) | ||
| for rida in fh.readlines(): | 	for rida in fh.readlines(): | ||
| #Leiame ebaõnnestunud sisse logimiste IP-aadressid ja lisame sõnastikku: | #Leiame ebaõnnestunud sisse logimiste IP-aadressid ja lisame sõnastikku: | ||
| 		if "Failed password" in rida:   | |||
| 			r = rida.split()[12] | |||
| 			if failures.has_key(r): | |||
| 				failures[r] += 1 | |||
| 			else:   | |||
| 				failures[r] = 1 | |||
| #Omistame uue nime sõnastikule ning sorteerime suuremast väiksemaks(-arv): | #Omistame uue nime sõnastikule ning sorteerime suuremast väiksemaks(-arv): | ||
| massiiv = failures.items() | 	massiiv = failures.items() | ||
| massiiv.sort(key = lambda (failures, arv):-arv) | 	massiiv.sort(key = lambda (failures, arv):-arv) | ||
| for failures, arv in massiiv: | 	for failures, arv in massiiv: | ||
| #Lisame lävendi(antud juhul 9): | #Lisame lävendi(antud juhul 9): | ||
| 		if (arv > 9): | |||
| #Kirjutame lävendist üle olevad IP aadressid hosts.deny faili: | #Kirjutame lävendist üle olevad IP aadressid hosts.deny faili: | ||
| 			vana=kir.read() | |||
| 			kir.write(vana +'%s\n' % (failures)) | |||
| kir.close() | 	kir.close() | ||
| fh.close() | 	fh.close() | ||
| #Saadame e-mailiga teavituse: | #Saadame e-mailiga teavituse: | ||
| sender = ' | 	sender = 'user@mail.com' | ||
| receivers = [' | 	receivers = ['user@mail.com'] | ||
| message = """From:  | 	message = """From: Automaat | ||
| To:  | 	To: Admin | ||
| Subject: Blokeeriti IP aadress | 	Subject: Blokeeriti IP aadress | ||
| /etc/hosts.deny listi lisati uus IP aadress. | 	/etc/hosts.deny listi lisati uus IP aadress. | ||
| """ | 	""" | ||
| 	try: | |||
| #elion - mail.neti.ee; starman - mail.starman.ee; uninet - smtp.uninet.ee; stv - mail.stv.ee) | |||
| 	   smtpObj = smtplib.SMTP('<teie smtp server>') | |||
| 	   smtpObj.sendmail(sender, receivers, message)          | |||
| 	   print "Email saadetud" | |||
| 	except smtplib.SMTPException: | |||
| 	   print "Error: Ei saanud email-i saata" | |||
| </source> | </source> | ||
Latest revision as of 15:11, 26 May 2011
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Autor: Risto Siitan
#Ryhm:A22
#Skript kontrollib OpenSSH logist ebaõnnestunud autentimisi ning lävendi ületamisel blokeerib IP aadressi
#smtplib on vajalik e-maili saatmiseks
import smtplib
import sys
#loome sõnastiku
failures = {}
#Kontrollime, kas logi fail on olemas:
if len(sys.argv) < 2:
        print "Kasuta järgnevalt: <skripti nimi> <logifail>"
        sys.exit(0)
else:
#avame hosts.deny ning vastava logi faili
	kir=open("/etc/hosts.deny",'r+')
	fh = open(sys.argv[1])
	for rida in fh.readlines():
#Leiame ebaõnnestunud sisse logimiste IP-aadressid ja lisame sõnastikku:
		if "Failed password" in rida: 
			r = rida.split()[12]
			if failures.has_key(r):
				failures[r] += 1
			else: 
				failures[r] = 1
#Omistame uue nime sõnastikule ning sorteerime suuremast väiksemaks(-arv):
	massiiv = failures.items()
	massiiv.sort(key = lambda (failures, arv):-arv)
	for failures, arv in massiiv:
#Lisame lävendi(antud juhul 9):
		if (arv > 9):
#Kirjutame lävendist üle olevad IP aadressid hosts.deny faili:
			vana=kir.read()
			kir.write(vana +'%s\n' % (failures))
	kir.close()
	fh.close()
 
#Saadame e-mailiga teavituse:
	sender = 'user@mail.com'
	receivers = ['user@mail.com']
 
	message = """From: Automaat
	To: Admin
	Subject: Blokeeriti IP aadress
	/etc/hosts.deny listi lisati uus IP aadress.
	"""
 
	try:
#elion - mail.neti.ee; starman - mail.starman.ee; uninet - smtp.uninet.ee; stv - mail.stv.ee)
	   smtpObj = smtplib.SMTP('<teie smtp server>')
	   smtpObj.sendmail(sender, receivers, message)         
	   print "Email saadetud"
	except smtplib.SMTPException:
	   print "Error: Ei saanud email-i saata"