abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 1
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    17.4. 15:11 | Nová verze

    Desktopové prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklé sloučením projektů Razor-qt a LXDE bylo vydáno ve verzi 2.0.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 5
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (19%)
    Celkem 556 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Stavíme poštovní server – 14 (Sieve)

    19. 2. 2010 | Lukáš Jelínek | Sítě | 22702×

    Velmi oblíbenou funkcí poštovních serverů je filtrace zpráv a jejich třídění. K tomu se tvůrci serverů stavějí různě – dobré však je, když je tato funkce nejen přítomna, ale když také funguje podle otevřeného standardu. Takovým standardem je technologie Sieve, kterou lze provozovat prostřednictvím pluginu do programu Dovecot.

    Obsah

    Doplnění předchozího dílu

    link

    Z předchozího dílu seriálu bohužel vypadla jedna „maličkost“, která je však důležitá pro správnou funkci Dovecot LDA. Jde o to, že se doručovací agent potřebuje dotazovat do databáze uživatelů, aby mohl zprávy správně doručovat. Agent se však nedotazuje sám, využívá k tomu stejnou službu, jakou využívají i služby pro IMAP a POP3.

    Výchozí nastavení je takové, že by komunikace měla fungovat. Často to však fungovat nebude – a to konkrétně tehdy, nebude-li mít dotazující se proces dostatečná práva. Proto je dobré nastavit si věci okolo práv explicitně. Následující fragment souboru /etc/dovecot.conf obsahuje – jako obvykle – jen to, co se mění:

    auth default {
      socket listen {
        user = vmail
        group = vmail
      }
    }
    

    Speciální soubor socketu je zde umístěn na /var/run/dovecot/auth-master (výchozí hodnota) a oprávnění jsou 0600 (dtto), tedy s přístupem pouze pro vlastníka. Výchozím vlastníkem je však root, v čemž může být právě problém, protože pokud se pokusí připojit proces běžící pod jiným uživatelem (typicky vmail, což je vlastník úložiště pošty), selže to. Z bezpečnostních důvodů není dobré rozšiřovat okruh oprávněných uživatelů, čili se zde nastaví ten uživatel, který bude tento socket používat, což je vmail.

    Filtrace, třídění, přesměrování, automatická odpověď

    link

    Přestože spousta lidí pracuje s elektronickou poštou pouze formou čtení a odesílání zpráv, je nemálo těch, kteří žádají víc. Tím „víc“ se v tomto smyslu rozumí to, že si vytvářejí pro své zprávy různé složky, kam je chtějí třídit, a to často nejlépe automaticky. Chtějí také, aby se některé zprávy zahazovaly (nemusí přitom jít o spam) nebo aby se přesměrovávaly na jiné adresy. Někdo také požaduje, aby během jeho pobytu na dovolené server automaticky posílal informaci o tom, že si příjemce zprávu přečte až někdy později.

    Některé z těchto požadavků splňují implementace v klientech (např. Mozilla Thunderbird), nicméně některé z požadavků takto splnit nejdou. Navíc se klientsky řešené třídění/filtrace uplatní jen v tomto klientovi, což činí problémy při přístupu z více počítačů, případně ještě v kombinaci s webovým rozhraním. Proto je mnohem výhodnější, když se o všechno postará server – nastaví se to jen jednou, může to umět mnohem víc a zpracování probíhá ihned po příchodu zprávy.

    Co je Sieve?

    link

    Pro snadnou implementaci uvedených funkcí vznikla otevřená technologie Sieve (jejími otci jsou vývojáři Cyrus IMAP Serveru) popsaná aktuálně dokumentem RFC 5228. Základem technologie je jazyk, jímž se popisuje požadované chování serveru. Aby technologie „ožila“, je samozřejmě potřeba implementovat program, který na základě pravidel popsaných jazykem Sieve zpracovává přijaté zprávy a provádí s nimi požadované akce.

    V rámci poštovního serveru na bázi Postfix + Dovecot bude takovou implementací plugin do Dovecot LDA, tedy do doručovacího agenta. Existují v zásadě dva možné způsoby, jak takový plugin připravit. Jednou z možností je použít nativní plugin, což je od verze 1.2 doporučená cesta. Lze však také využít upravenou implementaci ze serveru Cyrus (CMU Sieve), což je jediný možný způsob u verze 1.1 a starších. CMU Sieve však nepodporuje tak širokou škálu funkcí jako Dovecot Sieve, což se týká i některých příkladů uvedených v tomto článku.

    Teď by někdo možná očekával popis toho, co všechno Sieve a jeho implementace umí. Ale tento popis bude lepší nechat na později, na konkrétní ukázky Sieve kódu. Ještě totiž zbývá vyřešit jeden netriviální problém, a to jak na server definovaná pravidla dostat.

    Opět je více možností. Nejjednodušší je uložit si ta pravidla do souboru a ten pak nakopírovat na patřičné místo v souborovém systému poštovního serveru. To samozřejmě lze a je to výhodné pro globální pravidla (pokud nějaká jsou; například ve firmě se to může někdy hodit). Uživatelé však přivítají spíše jiný způsob, tedy takový, kde si budou moci definovat pravidla přímo z poštovního klienta.

    Aby toto bylo možné, musí server podporovat mechanismus pro práci s pravidly. Takovým mechanismem je ManageSieve, což je otevřený komunikační protokol – jeho definice je sice zatím jen ve fázi draftu, nicméně se tento protokol běžně používá. I tady je více možností, jak ManageSieve provozovat. Jednou z nich je použít nativní implementaci, která je distribuována samostatně a bohužel vyžaduje určité úpravy zdrojového kódu. Dále existuje démon pysieved napsaný v jazyce Python, který je snadno a bezproblémově použitelný, vyžaduje však samozřejmě interpret Pythonu. Případně lze použít některé další existující implementace.

    Konfigurace Dovecot LDA

    link

    Základem zprovoznění Sieve na serveru je nastavení správných parametrů v konfiguračním souboru /etc/dovecot/dovecot.conf. Nejprve musí však být plugin nainstalován, a to buď z balíčku, nebo kompilací ze zdrojových kódů. Výsledný nativní plugin se jmenuje sieve; plugin kompilovaný na základě starého CMU Sieve nese název cmusieve. Takto může vypadat konfigurační soubor dovecot.conf:

    protocol lda {
      mail_plugins = sieve quota
    }
    
    plugin {
      sieve = /var/mail/virtual/%d/%n/script.sieve
      sieve_global_path = /etc/sieve/default.sieve
    }
    

    Jsou uvedeny jen ty části, které jsou nové nebo se mění. V první sekci, tedy lda, přibyl v seznamu pluginů plugin sieve (plugin quotaminulého dílu zůstává). Pokud by byl nainstalován plugin cmusieve, použil by se pochopitelně ten.

    Další dvě volby jsou v sekci plugin. Parametr sieve je velmi důležitý, protože definuje šablonu pro tvorbu cesty ke skriptům (souborům s pravidly) pro jednotlivé uživatele. V tomto případě jde o cestu z minulého dílu – virtuální uživatelé mají adresáře tvořené názvem domény a uživatelským jménem. Lze používat běžné proměnné určené pro konfiguraci programu Dovecot. Parametr sieve_global_path není až tolik potřeba, definuje cestu k souboru s globálními pravidly. Tento soubor se použije jen tehdy, nemá-li uživatel vytvořen svůj vlastní. Nelze přes něj tedy vynucovat nějaká pravidla, je však užitečný v případě, že je žádoucí nějak obecně nakládat se zprávami a jen uživatelé, kteří potřebují něco specifického, si vytvářejí své vlastní soubory.

    Konfigurace může být bohatší, nicméně toto zcela postačuje pro plnohodnotný provoz Sieve. Pokud nyní budou v uživatelském nebo globálním souboru nějaká pravidla, doručovací agent se podle nich zachová a například zprávu zatřídí do požadované složky nebo ji přesměruje jinému příjemci.

    Základy tvorby pravidel

    link

    Přestože existují i určité možnosti, jak si pravidla jednoduše „naklikat“, GUI nástroje nikdy nevloží do rukou uživatele takovou sílu, jakou nabízí přímé psaní pravidel v jazyce Sieve. Proto je dobré znát aspoň základy toho, jak se pravidla píší a hlavně co vůbec Sieve umožňuje. Asi bude nejlepší začít hned příkladem:

    require "fileinto";
    
    if header :contains "subject" "faktura" {
      fileinto "Faktury";
    }
    

    Příklad je jednoduchý a dá se z něj snadno zjistit, co taková definice dělá. Na prvním řádku je direktiva require, která říká, které rozšíření je potřeba použít. Jednotlivá rozšíření totiž implementují různé operace – a podle toho, co se použije v pravidlech, je také potřeba si vyžádat potřebná rozšíření. Některá rozšíření jsou definována přímo v RFC 5228, další v jiných dokumentech, například RFC 5229, 5490 a řadě dalších.

    Pak už je tu přímo samotné pravidlo. To zjišťuje, zda hlavička Subject (tedy předmět zprávy) obsahuje slovo „faktura“ – v takovém případě přesune zprávu do složky „Faktury“. Jednoduché, že? Zde skutečně ano. Ovšem pro psaní složitějších pravidel je třeba pochopit, jak se konstruují podmínky a jak se vůbec potom pravidla zpracovávají.

    Výše uvedený test nerozlišuje velká a malá písmena, proto bude pravidlem zpracován stejně předmět „Faktura č. 12345“ jako „Re: faktura“ nebo jiné takové. To se týká všech testů hlaviček.

    Pravidla sestávají z podmínek (testů) a akcí. Podmínka je prostě nějaký test (typicky na obsah některé hlavičky, těla apod.), akce je to, co se v případě splnění podmínky vykoná. Opět krátký příklad:

    if size :over 1M {
      discard;
    }
    

    Toto pravidlo říká, že pokud velikost zprávy překročí 1 MB, zpráva se zahodí (akce discard). Je-li toto pravidlo jediné a zpráva jím není explicitně zahozena, doručí se jako obvykle. Implicitně se totiž zpráva ponechává ke zpracování. Lze si to představit i tak, jako by byla na konci uvedena akce keep, tedy ponechání zprávy.

    Dále si v obou příkladech povšimněte, že se v podmínce uvádí vždy nejdřív druh testu, potom operátor (:contains, :over) a potom všechny potřebné operandy. Jinak řečeno, pro zápis testu se používá prefixová notace (operátor je na začátku). Další zákonitosti se ukáží opět v příkladu:

    require "fileinto";
    require "imap4flags";
    
    if header :contains "subject" "upomínka" {
      setflag "$Label1";
    } elsif header :contains "subject" "***spam***" {
      setflag "$Junk";
      fileinto "Junk";
    }
    

    Podmínky lze skládat způsobem uvedeným v příkladu. Lze tak zamezit nechtěnému spouštění akcí nebo zbytečným testům. Zde bude druhá podmínka testována jen v případě, že zpráva první podmínce nevyhověla. Dále je v příkladu vidět použití rozšíření imap4flags. To slouží k nastavování příznaků zpráv – jak specifických (zde Junk, tedy „označení jako spam“), tak obecných štítků (zde použitý štítek č. 1 bývá v klientech obvykle červený, což lze využít k automatickému zvýraznění důležitých zpráv). Akcí může být pro každou podmínku více, což je zde také vidět.

    Testy na hlavičky mohou samozřejmě testovat kteroukoli hlavičku zprávy. Většinou se v praxi testují Subject, FromTo, lze však testovat i některé méně používané nebo vysloveně specifické hlavičky a dát tak zpracování zpráv doslova novou dimenzi. Takovou zajímavou hlavičkou je například Precedence, používaná u hromadných zpráv.

    require "copy";
    
    if header :contains "subject" ["faktura", "výzva k platbě", "vyzva k platbe"] {
      redirect :copy "uctarna@moje.firma";
    }
    elsif header :contains "subject" ["upomínka", "upominka"] {
      redirect "uctarna@moje.firma";
    }
    

    Příklad ukazuje, jak naložit s příchozími fakturami a upomínkami. Obě mají být přeposílány do účtárny, ovšem faktury je třeba přeposílat jen jako kopii, tedy nechat zprávu doručit i do schránky, zatímco u upomínek to potřeba není. K tomu se používá rozšíření copy a do akce redirect se přidá ještě :copy, čímž se změní chování této akce (pošle kopii místo přesměrování zprávy).

    České znaky v příkladu jsou kódovány jako UTF-8. To se zde týká i názvů složek. Dovecot Sieve si je pro vnitřní potřebu překódovává, protože například názvy složek jsou v upraveném UTF-7.

    V příkladu si povšimněte ještě jedné věci – způsobu zápisu polí. Dávají se do hranatých závorek a prvky se oddělují čárkou. Pokud se pole použije jako parametr testu, testují se všechny hodnoty, dokud nějaká neuspěje. Je-li třeba testovat více podmínek najednou, ať už ve smyslu logického součtu či součinu (tj. musí být splněna aspoň jedna podmínka nebo naopak všechny), použije se tento zápis:

    if allof(header :contains "subject" "New version", header :contains "from" "releases@nejaka.domena") {
      redirect "admin@moje.domena";
    }
    

    Cílem uvedeného konstruktu je přesměrovat na administrátora informace o nových verzích určitého programu – testuje se proto předmět zprávy a současně i adresa odesílatele. Operátor allof říká, že musí být splněny všechny podmínky uvedené v kulatých závorkách. Pro případ opačný, tedy splnění kterékoli podmínky, by se použil operátor anyof.

    Ze zajímavých funkcí lze zmínit ještě například automatickou odpověď. Někdo požaduje, aby se odesílatelé zpráv dozvěděli, že si zprávy přečte až později. To lze zajistit například takovýmto pravidlem:

    require ["vacation", "variables"];
    
    if header :matches "subject" "*" {
      vacation :days 7 :subject "Auto Re: ${1}"
        "Bohužel si teď vaši zprávu nemohu přečíst. Odpovím Vám po 1.8.2010. Děkuji za pochopení.";
    }
    

    Toto bude fungovat tak, že pokud přijde zpráva, Dovecot LDA na ni automaticky odpoví. Použije k tomu původní předmět (kterému předřadí Auto Re:) a určený text. Přijde-li další zpráva od stejného odesílatele během intervalu určeného pomocí :days (zde 7 dní), další automatická odpověď se již neodesílá. Na prvním řádku si můžete všimnout zápisu požadovaných rozšíření pomocí pole (nahrazuje dva příkazy require), v podmínce zase testu matches, který umožňuje testovat za pomoci „divokých karet“ (* a ?; komu by to nestačilo, existuje rozšíření regex, které přidává do Sieve podporu regulárních výrazů).

    Text je opět v kódování UTF-8. Lze však použít i jiná kódování nebo dokonce mnohem bohatší možnosti dané standardem MIME (např. alternativní verze, případně i přílohy, jakkoli je to bizarní). Jak se s tím pracuje, se dozvíte například v dokumentu RFC 5230, který se zabývá rozšířením vacation.

    Uvedené příklady a komentáře k nim nepopisují ani nepatrný zlomek toho, co všechno Sieve dokáže. Ostatně už fakt, že skoro každé rozšíření má svůj vlastní dokument RFC, svědčí o komplexnosti této technologie. Koho zajímají detaily, nechť nahlédne například právě do RFC, protože dobrých informačních zdrojů o této problematice zatím bohužel moc není.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    p_a_l_o avatar 19.2.2010 07:50 p_a_l_o | skóre: 5
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Dekuji za dalsi dil zajimaveho clanku.

    Sieve na serveru vyuzivam, konfiguraci si uzivatele zajistuji pomoci webmailu Roundcube. Mam nastaveno podobne default pravidlo pro presun spamu do slozky Junk, jako je uvedeno v clanku. Avsak pripade, ze si uzivatel nastavi sve vlastni, prestava se default pouzivat. Napada Vas jednoduche reseni, jak nejake pravidlo defaultne uplatnovat pro vsechny schranky tak, aby jej uzivatel nemohl ovlivnit? Dekuji.
    19.2.2010 19:23 obrazkovy spam
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Tak odpoved na tuto otazku by zaujimala aj mna.
    Luk avatar 19.2.2010 20:59 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Takové řešení existuje - resp. hned dvojí, podle toho, co je cílem. Existují totiž konfigurační parametry sieve_before a sieve_after, které umožňují definovat další Sieve skripty (nebo celé adresáře se skripty). Pravidla v sieve_before se zpracují před uživatelskými pravidly, sieve_after po nich (ale jen v případě, že zpráva zůstává ve zpracování). Takže pokud už se má nějaké zpracování vynucovat všem uživatelům (i když to obecně nevidím jako přínosné), lze to využít. Všechny tyto skripty (stejně jako skript s globálními pravidly) se musí předem kompilovat pomocí sievec.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    p_a_l_o avatar 24.2.2010 15:56 p_a_l_o | skóre: 5
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Toto jsem uz neuspesne zkousel drive. Projdu si to znovu a v pripade, ze bych neobjevil chybu, to zkusim popsat detailni konfiguraci.

    Vy sieve_before a sieve_after pouzivate uspesne?
    Luk avatar 24.2.2010 18:39 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Vy sieve_before a sieve_after pouzivate uspesne?
    Nepoužívám vůbec. Zatím jsem neměl takovou potřebu a obecně mě nenapadá příliš případů, kdy to má smysl (proto jsem to ani neuvedl v článku). Nicméně to mohu příležitostně vyzkoušet.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    Luk avatar 24.2.2010 18:52 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Tak jsem teď čistě pro zajímavost vyzkoušel sieve_before a funguje bez problémů.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    19.2.2010 09:12 Lampa
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Je nejaky duvod proc nepouzit nativní Dovecot ManageSieve ?

    19.2.2010 09:40 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    V mém případě dřív důvod byl - prostě neexistoval :-) Shodou okolností jsem asi před měsícem instaloval další mailserver a tam jsem ho už nahodil, funguje dobře, akorát jsem musel kompilovat balíček, protože v distribuci se s ním zatím nepočítá :-(
    -- Nezdar není hanbou, hanbou je strach z pokusu.
    rudiik avatar 20.2.2010 18:02 rudiik | skóre: 16 | blog: rudiikuv miniblog
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Ja sem pri migraci z Cyrusu na Dovecot s radosti shledal, ze v Debianu se se Sieve pocita na 100% a je tam podpora pro Sieve i managesieve primo v Dovecotim balicku.
    KDE 2.0 .. KDE 3.5.10 -> KDE 4.1 .. KDE 4.4.5 -> E17 Alpha/Beta -> Trinity 3.5.12 -> GNOME 2.30 -> KDE 4.6.5
    Luk avatar 20.2.2010 20:18 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    U které verze Debianu? Totiž že pro poslední stabilní verzi, tj. 5.0 čili Lenny, toto rozhodně neplatí (tam je dokonce pořád ještě Dovecot 1.0).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    21.2.2010 12:51 PM
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    lenny-backports - dovecot 1.2.10
    Luk avatar 21.2.2010 13:19 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    V Backports ano, v distribuci jako takové (ve standardních repozitářích) ne. Navíc toto platí jen v poslední době, ještě relativně nedávno (před pár týdny, již během vzniku seriálu) byly Dovecot balíčky v Backports o několik verzí za zdrojáky (lze to dohledat v diskusích, tam už jsme to jednou řešili).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    19.2.2010 10:16 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Lze nejak pomoci Sieve nahradir nasledujici pravidla maildropu?
    ...
    xfilter "/usr/sbin/spamc"
    
    ... 
    
    if (/^X-Spam-Status: *Yes/)
    {
      exception {
       to ...
      }
    }
    ...
    
    19.2.2010 13:00 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Uz jsem prisel na jedno z reseni. V master.cf dat pred radek kde se posta dorucuje jednoduchy skript, kterym se zprava prozene pres spamc a sendmailem vrati zpet do fronty.
    19.2.2010 23:49 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Není lepší používat Amavis na kontrolu spamu (spamassassin, dspam co je libo) a virů (lze použít prakticky libovolný antivir), který navíc umožňujě integraci třeba s LDAPem nebo nějakou vhodnou SQL DB a uživatel si pak může nastavit co a jak chce kontrolovat?
    -- Nezdar není hanbou, hanbou je strach z pokusu.
    Luk avatar 20.2.2010 00:33 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Já rozumím tomu, co chce tazatel realizovat - ostatně to mám v Sieve nastaveno také. Prostě když se něco při kontrole označí jako spam, spadne to do složky Junk. Tím je zajištěno, že to nestraší v Inboxu, ale současně si to uživatel může přečíst. Jediné, co na tom nechápu, je potřeba nutit takové chování všem uživatelům, bez možnosti ho změnit. Ať si to každý nastaví, jak chce. To už považuji za vhodnější generovat nově vytvářeným uživatelům jejich vlastní skript, kde takové pravidlo bude - pak si ho tam mohou ponechat nebo ho odstranit, jak budou chtít.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    Luk avatar 19.2.2010 20:47 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Co by to mělo dělat (maildrop po této stránce vůbec neznám, nic mi to neříká)?
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    20.2.2010 14:32 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Ten priklad pro maildrop hleda v dobe trideni zpravy do slozek zda je v hlavicce mail oznacen jako spam a dle toho se zprava kopiruje do prichozi posty nebo do slozky Spam.

    Uz jsem pro Sieve naspal neco takoveho:
    require ["fileinfo", "copy"];
    
    if header :contains "X-Spam-Status" "Yes"
    {
           setflag "$Junk";
           fileinto ".Spam";
           stop;
    }
    else
    {
            "fileinto" :copy folder: "/home/backup/%d/%n";
    
    Nicmene mi to nefunguje. Domnival jsem se, ze misto %d se doplni domena.tld a misto %n username. Existuje nejaky elegantni a funkcni zpusob, jak dostat z hlavicky uzivatele a domenu (treba i nejak parsovat To:)...?
    20.2.2010 15:39 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Řešit To: není dobrý nápad, protože obecně nemá vůbec žádnou souvislost s adresou příjemce.
    Luk avatar 20.2.2010 17:06 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Nepochopil jsem, proč se má zpráva kopírovat do příchozí pošty. Vložení do příchozí pošty je přece výchozí akce, kterou není třeba explicitně definovat - stačí udělat explicitní přesun v případě spamu, čili stačí úvodní if, to else už je zbytečné. Mimochodem zbytečný je i příkaz stop, protože akce fileinto ruší implicitní keep (viz RFC 5228, bod 2.10.2) a žádný jiný důvod k uvedení zde není.

    Není to myšleno jako zálohování (když tam vidím to backup)? Pokud ano, tak mi to nepřijde jako příliš smysluplné řešení, spíš jako takové "velkobratrské" (ukládá se všechno, nezálohuje se stav ke konkrétnímu okamžiku).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    20.2.2010 18:55 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Ano, /home/backup/... je opravdu zalohovani nebo spis kopirovani veskere prichozi posty (coz je prani zamestnavatele), takze mne jde jen o to, jak to do te zalozni slozky dostat.
    20.2.2010 19:35 jozefmak
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Ak je SMTP server Postfix, asi by som taketo nieco riesil skor direktivou always_bcc - a je to riesene pre vsetkych prijimatelov na serveri.
    Luk avatar 20.2.2010 20:53 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Kdyby Dovecot Sieve podporoval rozšíření editheader podle RFC 5293, bylo by to velmi jednoduché - stačilo by podle obálkového příjemce vytvořit novou hlavičku (např. X-Original-Recipient), pak to přeposlat na speciálního uživatele (třeba velkybratr@moje.domena), u něj pak tuto hlavičku rozežírat a zprávy správně třídit. Jenže protože zatím toto rozšíření podporováno není, nelze takové řešení použít.

    Možná by se ale dala rozežírat hlavička Delivered-To, protože je možné (ale to právě nevím), že se přidává do zprávy až na konci zpracování LDA. Chtělo by to prověřit, zda tam po přeposlání kopie nejsou ty hlavičky dvě. Pokud je tam opravdu jen ta první, je vyhráno - stačí hlavičku pomocí :domain a :localpart rozežrat do proměnných a podle nich pak uložit zprávu do správné složky.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    21.2.2010 13:26 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    V postfixu resim pres externi content filtr (v master.cf) vyhodnoceni zda je prijemce v hlavicce a obalce stejny a pokud je z nasi domeny, vyhodnuciji take zda sla zprava z povolenych siti (cimz samozrejme nervyresim pokud nekdo posila pres T-Mobile, atp) coz je dostatecna kontrola proti falsovani adresy odesilatele. Do hlavicky pridam X-Muj-Filtr: {OK,BAD} a dle toho si SpamAssasin prideli odpovidajici skore. Takze zpravy kde je falsovana adresa odesilatele stejne skonci ve spamu a co ma jit do meho /home/backup/DOMAIN/USERNAME mi klidne staci urcit z hlavicky To:. Ted se divam, ze by to melo jit pomoci pluginu "envelope" tedy urcit :domain a :localpart.

    Staci pak tedy neco takoveho?
    require ["fileinfo", "copy", "envelope"];
    
    if header :contains "X-Spam-Status" "Yes"
    {
           setflag "$Junk";
           fileinto ".Spam";
           stop;
    }
    else
    {
            "fileinto" :copy folder: "/home/backup/:domain/:localpart";
    }
    
    Luk avatar 21.2.2010 14:40 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Tohle je bohužel chybná syntaxe. Jsou tam dva problémy - jednak nevím o tom, že by šlo místo názvů složek (resp. schránek) uvádět absolutní cesty. Navíc takto to definovat nejde. Muselo by se udělat něco tohoto typu:
    require ["fileinto", "copy", "envelope", "variables"];
    
    ...
    
    if allof(envelope :domain :matches "to" "*", envelope :localpart :matches "to" "*") {
      fileinto :copy "/home/backup/${1}/${2}";
    }
    
    Je to jen hrubý nástřel. Dělá to to, že se vyhodnocují obě části adresy obálkového příjemce, dají se do proměnných a tyto proměnné se pak použijí. Jenže zásadní problém bude v tom, že asi nebude možné použít absolutní cestu k poštovní složce (nezkoušel jsem, v dokumentaci o tom nic není, nicméně velmi pochybuji).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    21.2.2010 15:41 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    To je docela skoda, ze to nijak jednoduse nepujde. Vytvarim zalozni mail server ktery by byl migrovan po odladeni i na hlavni mailserver (na kterem ted bezi prave Courier IMAP + Courier maildrop). Dovecot se mi v posledni dobe velmi zamlouva, nicmene mame reseno pres maildrop dost specialnich veci a bude asi tezke preklopeni na Dovecot LDA.
    Luk avatar 21.2.2010 16:03 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Ono by to šlo řešit "jednoduše", tedy přeposláním kopie na nějakého speciálního uživatele. Jenže problém je v tom, že jediná hlavička, ze které by se dala získat adresa původního uživatele, je To:, která nemusí odpovídat skutečnosti. Hlavičku Delivered-To: jsem teď zkusil, ale tu použít nelze, protože se tam vloží ve druhém exempláři při doručování po přeposlání.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    21.2.2010 17:03 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    To ale stale neresi situaci, kdy potrebuji mit kopie ne v Maildiru urciteho uzivatele, ale v uplne jine ceste, ktera by mela vypadat nejlepe takto:

    /home/backup/DOMENA/UZIVATEL/new

    kde platne virtualni ucty jsou v /home/virtual/DOMENA/UZIVATEL

    Jeste mne teda napada vlozit pred frontu (v master.cf) skript, ktery by udelal kopii, respektive nakopiroval email do zaloh a zpravu poslal zpet do fronty postfixu kde ji prevezme deliver. Tohle asi neni uplne nejsistci reseni.

    Luk avatar 21.2.2010 18:00 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    To ale stale neresi situaci, kdy potrebuji mit kopie ne v Maildiru urciteho uzivatele, ale v uplne jine ceste
    To je velmi snadno řešitelné tím, že se ten Maildir umístí na tu správnou cestu.
    Jeste mne teda napada vlozit pred frontu (v master.cf) skript, ktery by udelal kopii, respektive nakopiroval email do zaloh a zpravu poslal zpet do fronty postfixu kde ji prevezme deliver. Tohle asi neni uplne nejsistci reseni.
    Pak existují ještě jiná řešení. Tak například využít incron, pokud by už uměl rekurzivně sledovat celé podstromy filesystému (ššššššššš - to se snáší popel na moji hlavu ;-)). Nebo použít jiné programy, které už to umějí, např. inotify-tools. Pak stačí jen chytat událost IN_MOVED_TO, testovat, zda šlo o přesun z adresáře tmp do new v rámci inboxu (protože to je operace, kterou je završeno doručení zprávy) a pak už jen kopírovat příslušné zprávy.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    Luk avatar 21.2.2010 18:02 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    zda šlo o přesun z adresáře tmp do new v rámci inboxu
    Resp. spíš nejen v rámci inboxu, ale ve všech poštovních složkách kromě spamové.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    21.2.2010 19:25 ext3fs
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Reseni to pochopitelne je, ale pak se vkrada myslenka, zda neni pro mou situaci lepsi zustat u maildropu...coz je dost neprijemna myslenka. Snazim se jak to jde po letech maildrop opustit (minimalne proto, ze overovani proti MySql je u maildropu v kombinaci Cyrus SASL (authlib) problematicky provozuschopne a overovani pomoci Dovecotu vyzaduje patch maildropu,...).
    Luk avatar 21.2.2010 20:05 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Osobně pro podobné případy využívám právě incron (ostatně právě proto jsem ho vytvořil, přestože prvotní impuls vyšel od někoho v diskusi), i když je samozřejmě žádoucí řešit věci co nejjednodušeji, nejčistěji a s použitím co nejméně komponent.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    rudiik avatar 20.2.2010 17:58 rudiik | skóre: 16 | blog: rudiikuv miniblog
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    To jsou v zasade 2 odlisne problemy. Dive jsem sice take volal spamc z procmailu, ale postupem casu jsem presel na zminovany Amavis, ktery se pro Postfix chova jako content_filter, dostane zpravu od postfixu pres SMTP, provede testy dle definic (0-x antiviru), dspam, spamassassin a zase pres SMTP vrati zpet postfixu se Spam a AV hlavickami. Obavam se, ze volat externi program ze sieve scriptu nejde, ale mohu se mylit. Samotne filtrovani X-Spam-Status neni se Sieve zadny problem, mam to tusim dokonce definovane jako global rule pro vsechny usery.
    KDE 2.0 .. KDE 3.5.10 -> KDE 4.1 .. KDE 4.4.5 -> E17 Alpha/Beta -> Trinity 3.5.12 -> GNOME 2.30 -> KDE 4.6.5
    20.2.2010 19:37 jozefmak
    Rozbalit Rozbalit vše Re: Stavíme poštovní server – 14 (Sieve)
    Mna by skor zaujimalo, ci existuje sposob, ako skompilovany sieve skript dekompilovat naspat na povodny skript - sieved dekompiluje len na uroven akehosi metajazyka...

    Napriklad, ked si pouzivatel zmaze svoj 'vymazleny' sieve skript a zostane len v binarnej podobe...

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.