Back to site

Python Milters

Sendmail / Postfix Milters у Python

ад Jim Niemira і Сцюарт Д. Gathman
Гэтая вэб-старонка напісана Сцюарт Д. Gathman
і
падтрымцы бізнес-сістэм Management, Inc
Апошняе абнаўленне 9 чэрвеня 2011 года

Sendmail прадставіла новы API, пачынаючы з версіі 08/10 - libmilter. Sendmail 8,12 афіцыйна выпушчаны libmilter. Версія 8,12, здаецца, больш надзейныя, і ўключае ў сябе новыя функцыі падзелу прывілеяў для павышэння бяспекі. Яшчэ лепш, Sendmail 8,13 падтрымлівае раз'ём карты, што робіць pysrs значна больш эфектыўным і бяспечным. Sendmail 8,14, нарэшце, падтрымлівае змены MAIL FROM праз Milter API, а таксама дадзеныя зваротнага выкліку дазваляе спам быць адхіленая перад пачаткам фазы дадзеных (нават пасля прыняцця некаторых атрымальнікаў).

Python Pymilter забяспечвае Milter модуль для Python , які рэалізуе інтэрфейс для пітона libmilter выкарыстання ўсіх сваіх магчымасцяў.
Маркі Цяпер Postfix таксама рэалізуе пратакол Milter, і вы можаце запраграмаваць час SMTP-фільтры для Postfix у Python.

Што новага

Падтрымка

Агляд

Для размяшчэння іншых праектаў з адкрытым кодам выкарыстаннем pymilter, гэты пакет быў праліць модуляў, якія могуць быць выкарыстаны іншымі пакетамі.

На самым нізкім узроўні, Milter модуль забяспечвае тонкую абалонку вакол Sendmail libmilter API. Гэты API дазваляе вам рэгістраваць зваротныя выклікі для шэрагу мерапрыемстваў у працэс Sendmail атрымлівае паведамленне праз SMTP. Гэтыя мерапрыемствы ўключаюць першапачатковае злучэнне з MTA, адпраўнік канверта і атрымальнікаў, топ загалоўкі пошты узроўні, і цела паведамлення. Ёсць варыянты, каб калечыць ўсе гэтыя кампаненты паведамленні, як яна праходзіць праз Milter.

На наступным узроўні, Milter модуль (звернеце ўвагу на выпадку розніцы) забяспечвае Python дружалюбных аб'ектна-арыентаванай абалонкі для API нізкага ўзроўню. Каб выкарыстоўваць модуль Milter, прыкладанне рэгіструе «фабрыка», каб стварыць аб'ект для кожнага злучэння з MTA для Sendmail. Гэтыя аб'екты злучэнні павінны забяспечваць метадаў, якія адпавядаюць падзей libmilter зваротнага выкліку.

Кожнае падзея метад вяртае код сказаць Sendmail ці варта прыступаць да апрацоўкі паведамленні. Гэта вялікая перавага ў параўнанні з іншымі milters фільтрацыі пошты сістэм. Непажаданая пошта можа быць спынена ў бліжэйшы кропкі.

Milter.Milter клас дае рэалізацыю па змаўчанні для падзеі метады, якія нічога не робяць, а таксама падае абгорткі для libmilter метады мутаваць паведамленне.

Мім модуль забяспечвае абалонку для пакета Python электроннай пошты, які выпраўляе некаторыя памылкі, а таксама спрашчае змена асобных частак MIME паведамленне.

Нарэшце, bms.py прыкладанне як прыклад таго, як выкарыстоўваць Milter і SPF модулі і пачала агульнага прызначэння фільтрацыі спаму, праслухоўванне тэлефонных размоў, праверкі SPF і Win32 вірус абароны Milter. Ён можа выкарыстоўваць pysrs пакет, калі для SRS / SES праверкі і pydspam пакет для байесовской фільтравання змесціва. SPF праверка патрабуе pydns. Канфігурацыя дакументацыі ў цяперашні час уключаны ў якасці каментарыяў у ўзор канфігурацыйнага файла для Milter bms.py. Глядзіце таксама HOWTO і Milter Тэгі Уваход паведамленне.

Python Milter знаходзіцца пад GPL. Аўтары, верагодна, можна пераканаць змяніць на LGPL, калі неабходна.

Што такое Milter?

Milters можа працаваць на той жа машыне, Sendmail, ці іншую машыну. Milter можа працаваць нават з іншай аперацыйнай сістэмы або працэсара, чым Sendmail. Sendmail размаўляе з Milter праз лакальную або інтэрнэт-разеткі. Sendmail захоўвае Milter ў курсе падзей па меры апрацоўкі пошты злучэнне. У любы момант Milter можаце скараціць гутарка кароткі, распавядаючы Sendmail, каб прыняць, адхіліць або адмяніць паведамленне. Пасля атрымання поўнага паведамленні ад Sendmail, Milter зноў можа прымаць або адмовіцца ад яго, але ён таксама можа прыняць яго з зменамі ў загалоўках або целе.

Што вы можаце зрабіць з Milter?

  • Milter можа адмовіць ці REJECT спаму на аснове алгарытмаў ў сцэнары на Python, а не загадкавыя Sendmail ў "гл." мовы.
  • Milter можа змяніць або выдаліць ўкладання з пошты, якія з'яўляюцца атрутнымі для Windows.
  • Milter можа сканаваць на вірусы і ачысціць іх пры выяўленні.
  • Milter правярае выходныя, так і уваходную пошту.
  • Milter можаце дадаваць і выдаляць атрымальнікаў наперад або таемна копія пошты.
  • Для большай колькасці ідэй, праверце старонку вэб Milter.
  • Дакументацыя для C API пастаўляецца з Sendmail. Дакументацыя для pymilter ажыццяўляецца праз Doxygen. Miltermodule забяспечвае тонкую абалонку для Python C API. Milter.py забяспечвае просты OO абгортка да таго ж.

    Пакет Python Milter ўключае прыклад Milter, які замяняе небяспечныя ўкладанні з папераджальным паведамленнем, скідае пошту, адрасаваную MAILER-DAEMON, і дэманструе некалькі стратэгій барацьбы з забруджваннем СПАМ. Клас MimeMessage зрабіць гэта раней на аснове mimetools і многофайловой Стандартны Python пакетаў. Па стане на Milter версіі 0.6.0, ён заснаваны на электронную пошту стандартных пакетаў пітона, якія былі атрыманы з mimelib праекта. Клас MimeMessage патчы шэраг памылак у электроннай пошце пакет, а таксама прадастаўляе некаторыя зваротнай сумяшчальнасці.

    "Абясшкодзілі" функцыя ўзору Milter быў натхнёны MIMEDefang, Perl Milter з гнуткімі магчымасцямі апрацоўкі укладанняў. Апошняя версія MIMEDefang выкарыстоўвае працэс апача стылі басейн, каб пазбегнуць перагрузкі Perl перакладчыка для кожнага паведамлення. Гэта робіць яго досыць хутка для вытворчасці без выкарыстання Perl патокаў.

    MailChecker з'яўляецца Python праекта па забеспячэнню гнуткай апрацоўкі укладанняў для пошты. Я буду глядзець на падключэнне MailChecker ў Milter.

    TMDA з'яўляецца Python праект патрабуе пацверджання ў першы раз хто-то спрабуе адправіць на свой ​​паштовую скрыню. Гэта будзе добрая магчымасць, каб у Milter.

    Існуе таксама сайт Milter супольнасці , дзе Milter праграмнага забеспячэння і крывавыя падрабязнасці API абмяркоўваюцца.

    З'яўляецца Milter напісаныя на Python эфектыўным?

    Працэс пітона Milter з'яўляецца шматструменных і пачатковыя выдаткі панесены толькі адзін раз. Гэта значна больш эфектыўна, чым некаторыя рэалізацыі, якія пачынаюць новы перакладчык для кожнага злучэння. Тэставанне ў вытворчай асяроддзі не выкарыстоўвалі значную частку працэсара. Акрамя таго, пітона лёгка распаўсюджваецца ў C для любой крок, які патрабуе дарагі апрацоўкі працэсарам.

    Напрыклад, функцыя HTML разбору, каб выдаліць скрыпты з HTML-ўкладання дастаткова рэсурсаў ЦП ў чыстым пітона. Выкарыстанне замены С на працягу sgmllib значна паскарае працу.

    Мэты

  • Рэалізацыя РРП - бэкдор для не-SRS экспедытараў. Карыстальнік спісы не-SRS экспедытара рахунку (магчыма, у ~ /. экспедытары) і Util падае адмысловы лакальны псеўданім для карыстальніка, каб даць экспедытара. Псеўданім працуе толькі для пошты ад экспедытара. Milter атрымлівае экспедытар дамена ад псеўданіма і выкарыстоўвае яго для экспедытара праверыць SPF. Патрабуецца Milter мець доступ на чытанне да ~ /. экспедытары, альбо шлях да карыстача прадставіць запісу ў базе дадзеных Milter.
  • Milter bms.py мае занадта шмат функцый. Стварыць аснову, дзе шматлікія невялікія модулі функцыя можа быць падлучана разам у канфігурацыі.
  • Стварыце чысты пітон замяніць miltermodule і libmilter, які рэалізуе пратакол libmilter ў пітона. Хто-то ўжо пачаў гэта ў код Google.
  • Знайсці або напісаць паскарэння рэалізацыі sgmllib. Sgmlop пакет не вельмі сумяшчальныя з Python-02/01 sgmllib, але гэта толькі пачатак, і падтрымліваецца ў Milter-0.4.5 або больш позняй.
  • Рэалізаваць усе ці большасць асаблівасцяў MIMEDefang.
  • Выконвайце афіцыйным Python стандарты кадавання больш уважліва.
  • Зрабіць код модульнага тэставання больш, як і іншыя модулі пітона.
  • Пацверджаныя Усталёўкі

    Калі ласка, электроннай пошце мне, калі вы ня паспяховай ўстаноўкі Milter. Пацвердзіў ўстаноўкі занадта шмат, каб пералічыць у гэтай кропцы.

    Хопіць ужо!

    Амаль тузін людзей па электроннай пошце мне прасіць для капіявання ўваходных і / або уваходнай пошты на рэзервовы каталог карыстача. Добра, падобна, гэта самыя запатрабаваныя функцыі. У той жа час, вось некаторыя рэчы, каб разгледзець:

    Для СК паведамленне, патэлефануеце self.add_recipient (RCPT) у envfrom пасля вызначэння таго, вы хочаце скапіяваць (напрыклад, калі адпраўнік мясцовы). Напрыклад,

      def envfrom(...
        ...
        if len(t) == 2:
          self.rejectvirus = t[1] in reject_virus_from
          if t[0] in wiretap_users.get(t[1],()):
    	self.add_recipient(wiretap_dest)
          if t[1] == 'mydomain.com':
            self.add_recipient('<copy-%s>' % t[0])
          ...
    

    Каб зрабіць гэтыя агульныя функцыі неабходна думаць аб тым, канфігурацыя будзе выглядаць. Тут Вы можаце зрабіць канкрэтныя прапановы аб канфігурацыі запісу файла. Будзьце ўпэўненыя, каб апрацоўваць як СК і копіі файлаў, а таксама вызначаць, што пошта павінна быць скапіяваныя. Як "выходных" вызначыць? Рэалізацыя гэта лёгка, калі канфігурацыя прызначаная.

    Popular Links
    Published (Last edited): Jul 12 , source: http://www.bmsi.com/python/milter.html