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 |
||
Line 3: | Line 3: | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
#Autor: Risto Siitan | #Autor: Risto Siitan | ||
# | #Ryhm:A22 | ||
#Skript kontrollib OpenSSH logist ebaõnnestunud autentimisi ning lävendi ületamisel blokeerib IP aadressi | #Skript kontrollib OpenSSH logist ebaõnnestunud autentimisi ning lävendi ületamisel blokeerib IP aadressi | ||
#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 = 'risto@siitan.com' | ||
receivers = [' | receivers = ['risto@siitan.com'] | ||
message = """From: Automaat | message = """From: Automaat | ||
To: Admin | 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: | try: | ||
#elion - mail.neti.ee; starman - mail.starman.ee; uninet - smtp.uninet.ee; stv - mail.stv.ee) | #elion - mail.neti.ee; starman - mail.starman.ee; uninet - smtp.uninet.ee; stv - mail.stv.ee) | ||
smtpObj = smtplib.SMTP('mail.neti.ee') | |||
smtpObj.sendmail(sender, receivers, message) | |||
print "Email saadetud" | |||
except smtplib.SMTPException: | except smtplib.SMTPException: | ||
print "Error: Ei saanud email-i saata" | |||
</source> | </source> |
Revision as of 15:10, 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 = 'risto@siitan.com'
receivers = ['risto@siitan.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('mail.neti.ee')
smtpObj.sendmail(sender, receivers, message)
print "Email saadetud"
except smtplib.SMTPException:
print "Error: Ei saanud email-i saata"