$cat spamfind.py #!/usr/bin/python
#-*- coding:utf-8 -*-
import os, gzip, subprocess
wh,gn,cn,rd = '\033[1;m','\033[1;32m','\033[1;36m','\033[1;31m' # раскраски
def Search(a):
"""Поиск спама в логе"""
log = ['/var/log/mail.log','/var/log/mail.log.0'] # не gzip
log_gz = ['/var/log/mail.log.1.gz','/var/log/mail.log.2.gz','/var/log/mail.log.3.gz','/var/log/mail.log.5.gz','/var/log/mail.log.4.gz','/var/log/mail.log.6.gz'] # gzip
s = raw_input('Введите через пробел слова, по которым будем искать:'+'\n'+cn+'-> '+wh).split(' ')
s.append(a)
print ''.center(100, '_')+'\n'
class gzopen(gzip.GzipFile): # создаём класс для работы с gzip-файлами
def __enter__(self):
if self.fileobj is None:
raise ValueError("I/O operation on closed GzipFile object")
return self
def __exit__(self, *args):
self.close()
def grep(openf,logf): # разбираемся с gzip лог-файлами
for files in logf:
with openf(files) as file:
f = []
for line in file:
if all(ss in line for ss in s):
f.append(line)
for i in f:
r = i.replace(', ', ' ').replace(' ', ' ').split(' ')
dt = gn+(' '.join(r[0:3]))+wh+' ' # подкрасим вывод даты
if (a == 'spam-'):
print dt+'SpamID: '+rd+r[16]+wh+'\n'+r[12]+cn+' -> '+wh+r[14]+'\n'
else:
print dt+(' '.join(r[3:]))
grep(open,log) # смотрим логи
grep(gzopen,log_gz) # смотрим gzip-логи
print ''.center(100, '_')
def SpamRelease():
"""Восстановление письма из спама"""
s = raw_input('Введите SpamID:-> ').split(' ')
for i in s:
cmd = 'amavisd-release '+i
p = subprocess.Popen(cmd, shell = True)
p.communicate()
def WhList():
"""Добавление адресов в белый список"""
s = raw_input('Введите адреса (например, mail@mail.com или *@mail.com) через пробел:'+'\n'+cn+'-> '+wh)
with open('/etc/spamassassin/whitelist.cf', 'a') as f:
f.write(' '+s)
f.close()
cmd = '/etc/init.d/spamassassin restart \n /etc/init.d/amavis restart'
p = subprocess.Popen(cmd, shell = True)
p.communicate()
def Menu():
"""Меню работы с программой"""
loop = True
while loop:
print ("""
1. Поиск письма в папке SPAM
2. Фильтр FROM-TO
3. Восстановить из папки SPAM
4. Добавить адрес в white-list
5. Выход
""")
response = raw_input(cn+'-> '+wh)
if response == '1': # Поиск письма в папке SPAM
Search('spam-')
elif response == '2': # Фильтр FROM-TO
Search('')
elif response == '3': # Восстановить из папки SPAM
SpamRelease()
elif response == '4': # Добавить адрес в white-list
WhList()
elif response == '5': # Выход
loop = False
else:
print 'Неверно. Повторите ввод.'
Menu()
Скрипт универсальный для просмотра логов postfix и им можно пользоваться всем, хотя возможно и придётся в строке print dt+'SpamID: '+rd+r[16]+wh+'\n'+r[12]+cn+' -> '+wh+r[14]+'\n' поиграть с позициями r[16],r[12] и r[14].
|