ShS's Blog

Just another sysadmin's weblog

Определение email адресов-кандидатов для использования в качестве ловушек для спама (Spam traps) в почтовом сервере MDaemon.

Posted by shs на 2010/08/03

Как я уже писал ранее, в почтовом сервере Mdaemon существует возможность настроить ловушки для спама. Кратко напомню, что ловушки для спама — это некий перечень e-mail адресов. Все письма, которые поступают по адресам-ловушкам, «скармливаются» Байесовскому фильтру в качестве образцов spam’а для обучения оного фильтра. Естественно, что в качестве ловушек должны выступать адреса, на которые ничего, кроме спама, не приходит. Но, помимо этого, хотелось бы, чтобы в этом перечне были те адреса, которые наиболее интенсивно используются спамерами.

Давайте попробуем определить — на какие адреса спам приходит наиболее часто? Первое, что нам необходимо сделать – снять запрет (если таковой был установлен) на прием писем для несуществующих адресов (см. рис. 1).

рис.1

Если вы пользуете механизм DomainPOP для получения писем от хостера, то можете этого не делать, — не поможет, т.к. для таких писем эта проверка не может быть выполнена и не выполняется (это один из недостатков использования DomainPOP – отсутствие Envelope Headers, сформированных почтовым сервером хостера).

Второе –  надо каким-то образом будет собрать все письма для несуществующих адресатов в одном месте, чтобы потом скормить скрипту для обработки. Т.к. MDaemon умеет пересылать такие письма своему postmaster’у, то я решил этим воспользоваться (см. рис.2)

рис.2

В результате действия этих настроек на стороне почтового клиента, подключенного к почтовому ящику postmaster’а, мы увидим такую картинку, как на рис 3:

рис.3

Каждое такое сообщение представляет собой уведомление о том, что поступило письмо на несуществующий адрес. Само письмо, поступившее на несуществующий адрес, прикреплено к этому уведомлению (см. рис 4)

рис.4

Что осталось сделать? Осталось выгрузить все вложения из таких уведомлений и, затем, обработав их, выявить «чемпиона». И так, приступим: первым делом займемся выгрузкой вложений из нужных нам сообщений в отдельную папочку. Если в качестве почтового клиента мы используем MS Outlook, то это можно сделать с помощью макроса на VBA. Логика выгрузки вложений такова:

  • пользователь выделяет в папке те сообщения, которые необходимо обработать, а затем запускает макрос.
  • макрос перебирает все выделенные сообщения и сохраняет вложения из каждого сообщения в заданную папку.

 Макрос у меня вышел таким:

'Сохраняем вложения из выделенных сообщений
'в папку, заданную в переменной DestFolder
'Для этого:
'1) Выделяем сообщения в любой из папок Outlook
'2) Запускаем этот макрос
Sub SaveAttachments()
    Dim myOlApp As New Outlook.Application
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection
    Dim MsgTxt As String
    Dim x As Integer
    Dim y As Integer
    'Папка, в которую будут сохранены вложения
    DestFolder = "C:\_tmp\33\"
    '
    Set myOlExp = myOlApp.ActiveExplorer
    'Получаем объект, содержащий все выделенные сообщения.
    Set myOlSel = myOlExp.Selection
    'Перебираем все выделенные сообщения
    For x = 1 To myOlSel.Count
        'Получаем объект, содержащий все вложения для текущего сообщения
        Set MyOlItemAttachments = myOlSel.Item(x).Attachments
        'Перебираем все вложения в текущем сообщении...
        For y = 1 To MyOlItemAttachments.Count
        '...и сохраняем их в папку DestFolder
        MyOlItemAttachments.Item(y).SaveAsFile DestFolder & MyOlItemAttachments.Item(y).FileName
        Next y
        '
    Next x
    MsgBox "Готово"
End Sub

И так, все сообщения, которые нас интересуют, выгружены в отдельную папку в виде файлов *.eml. Теперь займемся определением адресов, на которые спамеры наиболее часто пишут нам письма. В первую очередь нас будут интересовать Envelope Headers вообще и “envelope To” в частности (о том, что есть такое Envelope Headers, а так же как правильно читать заголовки писем, рекомендую обратиться к следующей статье: “Reading Email Headers”). И так, нас будет интересовать первая строка заголовка, которая содержит подстроку вида: received: from … for <some_email_address>, например: Received: from galangal.org ([104.128.23.115]) by mail.bieberdorf.edu (8.8.5) for < tmh@bieberdorf.eduThis e-mail address is being protected from spambots. You need JavaScript enabled to view it >

Условие, по которому надо искать эту строку в заголовке, можно сократить до следующего: первая строка, в которой встречается for <некие_символы>

Скрипт на PowerShell, который нам поможет вычислить наиболее часто используемый адрес среди “Envelope To” в заголовках писем состоит, практически, из одной строки:

Write-host "Наиболее часто используемые адреса в 'Envelope To':"
Select-String -Path C:\_tmp\33\*.eml -Pattern "for\s<+([^>]+)>" -List|%{$_.Matches[0].Groups[1].Value}| Group-Object| sort count -Descending |select Count, Name -First 20| ft -AutoSize

И так, что же делает этот «скрипт»?

  • cначала мы берем все файлы с расширением .eml  в папке C:\_tmp\33\ (куда я выгрузил спам для последующей обработки) и находим те из них, в которых имеется набор символов соответствующий регулярному выражению «for\s<+([^>]+)>» (Select-String —Path C:\_tmp\33\*.eml —Pattern «for\s<+([^>]+)>» –List) (в результате по конвейеру будут переданы объекты, имеющие тип Microsoft.PowerShell.Commands.MatchInfo).
  • Для того, чтобы  достать из этого объекта значение, которое попало в группу захвата нашего регулярного выражения мы используем следующее обращение: $_.Matches[0].Groups[1].Value и подаем эти значения в конвейер для дальнейшей обработки.
  • затем, мы группируем (Group-Object),
  • сортируем по убыванию (sort count —Descending),
  • вырезаем только нужные нам 2 поля и, одновременно,  оставляем только первые 20 записей (select Count, Name —First 20),
  • наконец, выравниваем и выводим на экран (ft —AutoSize)

 

Вот и все ;)

Результат работы выглядит так:

Наиболее часто используемые адреса в ‘Envelope To’:

Count Name                        
—— —-                        
   57 info@mydomain.ru          
   22 to@mydomain.ru            
   20 urist@mydomain.ru         
   19 ninfo@mydomain.ru         
   18 tamara@mydomain.ru        
   17 epl@mydomain.com    
   13 tor@mydomain.ru           
   11 semenov@mydomain.ru       
   10 glavbuh@mydomain.ru       
   10 maria@mydomain.ru         
    9 lev@mydomain.ru           
    8 billing@mydomain.com   
    8 vk@mydomain.ru            
    7 ka@mydomain.ru            
    6 mail@mydomain.ru          
    6 Motor@mydomain.com
    6 opt@mydomain.ru           
    5 bobylev@mydomain.com   
    5 nikolay@mydomain.com  
   5 mishin@mydomain.com

Реклама

комментария 2 to “Определение email адресов-кандидатов для использования в качестве ловушек для спама (Spam traps) в почтовом сервере MDaemon.”

  1. Denis Bakanov said

    Если не изменяет память, то эта технология зовется «honey pot». Так же лучше всего купить 2-3 домена, и раскидать их по доскам объявления и для прочего спама. Еще можно зарегать abuse, webmaster, admin и прочие известные алиасы.

    Я использовал данную технологию и ORF.

    • shs said

      > Еще можно зарегать abuse, webmaster, admin и прочие известные алиасы.
      Ага, можно и так. Но именно для того, чтобы забивать адреса в «ловушки» не на глазок, а на основе статистических данных, я и проделал то, что изложено в заметке.

      >Я использовал данную технологию и ORF
      Так, ведь, ORF не имеет встроенного Байесовского фильтра? или я отстал от жизни?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: