#!/usr/local/bin/python # Copyright (C) 2005 Krzysztof Kozlowski # License: GNU General Public License # http://www.gnu.org/licenses/gpl.txt # # Homepage: http://www.kozik.net.pl # # Ostatnia zmiana: 22.11.2005 # # Skrypt wyciagajacy informacje z logow maila Postfix-a o nieudanych # probach doreczeniach poczty (SMTP) - przydatny przy wykrywaniu masowych # skanowań adresow e-mail i nieprawidlowosci z tym zwiazanych. Generalnie # przydatnosc niewielka - lepiej juz uzyc LogWatch, ale skrypt ma rowniez # zastosowanie edukacyjne :). import sys import re if len(sys.argv) == 2: PLIK = sys.argv[1] else: print 'Wywolanie: ' print ' ' + sys.argv[0] + ' plik_z_logiem' sys.exit() f=open(PLIK, 'r') count = 0 linia1 = '' linia2 = '' linia3 = '' lista = {} reg = re.compile('postfix/smtpd\[[0-9]*\]: NOQUEUE: reject: RCPT from (([\w-]*\.)*[\w-]*)\[(\d*\.\d*\.\d*\.\d*)\]: 550 ') ; while 1: linia1 = linia2 linia2 = linia3 linia3 = f.readline() count = count + 1 if not(linia3): break match = reg.search(linia3) if not(match): # print 'Nie ma w linii nr ' + str(count) continue IP = str(match.group(3)) print 'MAM: ' + str(match.group(1)) + ' [' + IP + ']' if not(lista.has_key(IP)): lista[IP] = 0 lista[IP] = lista[IP] + 1 f.close() min = 8 print 'Liczba wpisow (min 8): ' for k,v in lista.iteritems(): if (v > min): print k + ' - ' + str(v)