162 35 16MB
Czech Pages 434
Postfix Provo:zuieme poštovní server v Linuxu
Ralf Hildebrandt, Patrick Koetter
Copyright © Computer Press, a.s. 2006. Vydání první. Všechna práva vyhrazena . Vydalo nakladatelství Computer Press, a . s . jako svou 2 1 80. publikaci. Vydavatelství a nakladatelství Computer Press, a.s., nám . 28. dubna 48, 635 00 Brno, knihy.cpress.cz ISBN 80-2 5 1 - 1 020-6 Prodejní kód: K1 298 Překlad: Lubomír Ptáček Odborná korektura: Bohumil Michal Jazyková korektura: Marie Schreinerová
Komentář na zadni straně obálky:
Václav Kadlec Technická spolupráce: Jiří Matoušek, René Kašík
Vnitřní úprava: Petr Klíma
Odpovědný redaktor: Václav Kadlec
Sazba: Petr Klíma
Technický redaktor: Jiří Matoušek
Rejstřík: Daniel Štreit
Produkce: Petr Baláš
Obálka: Martin Sodomka
Copyright © 2005 by Ralf Hildebrandt and Patrick Koetter. Title of English-language original: The Book of Postfix, ISBN 1 -59327-00 1 - 1 , published by No Starch Press. Czech language edition copyright © 2006 by Computer Press, a.s. All rights reserved. Autorizovaný překlad z originálního anglického vydání The Book of Postfix. Originální copyright: © No Starch Press/Ralf Hildebrandt, Patrick Koetter, 2005 . Překlad: © Computer Press, a . s . , 2006.
Žádná část této publikace nesmí být publikována a šířena žádným způsobem a v žádné podobě bez výslovného svolení vydavatele. Computer Press, a.s., nám. 28. dubna 48, 635 00 Brno tel . : 546 1 22 1 1 1 , fax: 546 1 2 2 1 1 2 Objednávejte na : knihy.cpress.cz
[email protected] Bezplatná telefonní linka : 800 555 513 Dotazy k vydavatelské činnosti směřujte na: [email protected] Máte-li zájem o pravidelné zasílání informací o knižních novinkách do Vaší e-mailové schránky, zašlete nám zprávu , obsahující váš souhlas se zasíláním knižních novinek, na adresu [email protected].
Novinky k dispozici ve dni vydání, slevy, recenze, zajímavé programy pro firmy i koncové zákazníky.
OBSAH Předběžná doporučení Knihy o Postfixu O autorech Poděkování
15 18 18 18 18
Ralf Hildebrandt Patrick Koetter
O této knize
20
20 20 20 20
Základy Řízení obsahu Pokročilé konfigurace Optimalizace Postfixu
Další prameny
20
Diskusní skupiny
20 20
Konvence v sazbě
21
Dokumentace k Postfixu, návody a často kladené otázky
21 22 22 22
Domény a jména Náš poskytovatel Skripty Komentáře
KAPITOLA 1
23
Úvod do Postfixu ČÁSTI ,�" ",m"
��,��,��L
�""�"�""",,,,�,,,,,,,,,,,,,,,,,,,,,���,,,,,,,,,,,,�
""",��",�,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",,,,,,�,,
KAPITOLA 2
Příprava počítače a prostředí
27
Jméno počítače Konektivita
27 28
Systémový čas a časové značky Syslog Vyhledávání jmen (DNS)
29 29 31
TCP port 25
28
4
';'fiMt' DNS pro poštovní servery Záznamy typu A Záznamy typu PTR Záznamy typu MX
Obsa h
32 33 33 34
KAPITOLA 3
Poštovní server v samostatné doméně Minimální konfigurace Konfigurace Postfixu Nastavení jmenovky smtpd Nastavení příjmu pošty Připojování domény k odchozím zprávám Přemapování pošty určené uživateli root do jiné schránky Spuštění Postfixu a test doručení uživateli root Mapování e-mailových adres na uživatelská jména Nastavení povolení k předávání e-mailů z určité sítě
35 35 36 36 37 38 38 39
42 43
KAPITOLA 4
Připojení poštovního serveru pro samostatnou doménu prostřednictvím vytáčeného spojení Zrušení vyhledávání DNS Nastavení předávacích oprávnění Nastavení předávacího serveru poskytovatele připojení Pozastavení předávání zpráv Spuštění doručení zpráv Konfigurace předávacích oprávnění pro předávací systém Ověření POP-before-SMTP Autentizace pomocí protokolu SMTP
45 47 47 48 48 49 49 50 50
KAPITOLA 5
Anatomie Postfixu Démoni v Postfixu Fronty v Postfixu Mapy Typy map Jak hledáme v mapách
Externí zdroje Utility zadávané na příkazovém řádku
51 53 57 59 59
62
62 62
'4';1'U'
Obsa h
63 63 63 63 64 64 64 65 65 65
postfix postalias postcat postmap postdrop postkick postlock postlog postqueue postsuper
ČÁSTII ___
_
Zpr��_�_!�_!lí ,zprá!.�!._�á���sti na jejich obsahu
__�_
KAPITOLA 6
Slabikář správce pošty Základy přenosu zpráv Řízení komunikace SMTP (obálka) Zpracování obsahu zprávy Hlavičky Tělo Přílohy
69 69 70 74
76 77 78
KAPITOLA 7
Jak fungují omezení při přenosu zpráv Spouštěcí mechanismy omezení Typy omezení Všeobecná omezení Přepínatelná omezení Nastavitelná omezení Nevyžádaná komerční nabídka (UCE) Rozsahy omezení
Jak se vytvářejí omezení Zápis Kdy se omezení vyhodnocují Vyhodnocení omezení a provedení příslušné akce Zpomalování špatných klientů
Třídy omezení
81 81 83 83 83 84 85 85
86
86 86 87 88
90
5
6
'4-fi'it'
Obsa h
KAPITOLA 8
Jak se používají omezení Jak se vytvářejí a testují omezení Simulace účinků omezení Jak bezprostředně zefektivnit omezení
Implicitní omezení Korektní chování klientů Omezení jména systému v příkazu HELO/EHLO Omezení odesilatele Omezení příjemce
Konformnost s protokolem RFC Prázdná adresa odesilatele Zvláštní účty
Pořadí zpracování omezení RFC Antispamová opatření Prevence proti padělkům Zfalšované záznamy jmenného serveru Vracení zpráv více příjemcům Černé listiny DNS Ověřování odesilatele Pořadí zpracování omezení
Třídy omezení
91 91 92 93
93 93 94 96 97
100 100 100
101 102 102 103 105 106 110 113
114
KAPITOLA 9
Jak pracují vestavěné filtry obsahu Jak pracují filtry? Filtrování jednotlivých částí zpráv Co je na těchto parametrech tak zvláštního?
Kdy se aplikují filtry Jaké mohou následovat akce
117 117 118 119
120 120
KAPITOLA 10
Jak se používají vestavěné filtry Jakou podporu poskytuje Postfix Jak vytvořit Postfix s podporou PCRE
Bezpečná implementace filtrů Jak se do mapy přidá vzorek s akcí WARN Jak vytvoříme testovací vzorek Nalezne se shoda mezi regulárním výrazem a testovacím vzorkem?
123 123
124
124 125 125 125
'U'fiiU'
Obsa h
Nastavení filtrů v hlavní konfiguraci Testování filtru v běžném provozu
Filtrování hlaviček Odmítnutí zprávy Pozdržení doručení Odstraňování hlaviček Zrušení zprávy Přesměrování zpráv Filtrování zpráv
Filtrování hlaviček typu MIME Filtrování hlaviček v přiložených zprávách Filtrování těla zprávy
125 125
126
126 127 127 128 128 128
129 130 130
KAPITOLA 1 1
Jak pracují externí filtry Kdy se má filtrovat obsah zprávy? Přepisování adres
contenCfilter: nejdřív fronta, potom filtr Démoni pro předávání zpráv externím filtrům Zásady při konfiguraci filtru contenCfilter
smtpd_proxy_filter: nejdřív filtr, potom fronta Úvahy o proxy-filtrech Základy konfigurace filtru smtpd_proxy_filter
133 1 34 135
135
136 138
1 40
140 142
KAPITOLA 12
Jak se používají externí filtry Jak se ke zprávám připojuje výhrada Instalace alterMIME a vytvoření filtrovacího skriptu Konfigurace Postfixu Definice přenosu Ověření výhrady ve zprávě
Vyhledávání virů pomocí filtru contenCfilter a systému amavisd-new Instalace programu amavisd-new Testování amavisd-new Optimalizace programu amavisd-new Konfigurace Postfixu pro použití s programem amavisd-new Testování filtru amavisd-new
Vyhledávání virů pomocí amavisd-new a proxy-filtru Konfigurace Postfixu s amavisd-new a filtrem smtpd_proxy_filter
143 143 145 146 147 149
1 49
150 151 155 157 160
163 164
7
8
'a-fiNt'
Obsa h
ČÁST III
Pokročilé konfigurace KAPITOLA 13
Poštovní brány
169
Základní nastavení
170
Nastavení předávacích práv brány Nastavení předávací domény v bráně Nastavení interního poštovního počítače v bráně Definování příjemců předávání
Pokročilé nastavení brány Zvýšení bezpečnosti Spolupráce Postfixu a Exchange Serveru firmy Microsoft Konfigurace Exchange Serveru a komunikace s Postfixem
Nastavení NAT
170 170 170 171
1 72
172 174 183
185
KAPITOLA 14
Poštovní server pro několik domén Virtuální aliasové domény Vytvoření mapy adres příjemců Konfigurace Postfixu pro příjem pošty z virtuálních aliasových domén Test nastavení virtuální aliasové domény Sběrné Ccatchall) položky
Virtuální schránkové domény Kontrola podpory doručovacího agenta virtual Základní konfigurace Pokročilé konfigurace
Virtuální schránkové domény řízené databází Ověření podpory MySQL Vytvoření Postfixu s podporou MySQL Konfigurace databáze Test virtuálních schránkových domén řízených databází
187 187
188 188 189 190
191
192 192 195
199
200 201 201 207
KAPITOLA 15
Principy autentizace SMTP Architektura a konfigurace systému Cyrus SASL Který přístup je nejlepší?
SASL: Jednoduchá autentizace a bezpečnostní vrstva
211 211 214
214
'a-fiNt'
Obsa h
Autentizační rozhraní Ověřovací mechanismy SMTP AUTH Autentizační metody (služby pro ověřování hesel) Autentizační procedury
Plánování autentizace SMTP na straně serveru Nalezení klientů a stanovení ověřovacích mechanismů Definování autentizační procedury a služby pro ověřování hesel
Instalace a konfigurace systému Cyrus SASL Instalace systému Cyrus SASL Vytvoření konfiguračního souboru pro postfixové aplikace Konfigurace hlášení a úrovně hlášení Nastavení služby pro ověřování hesla Výběr ověřovacího mechanismu SMTP AUTH Konfigurace saslauthd Konfigurace pomocných zásuvných modulů (auxprop) Test autentizace Spuštění programu server
Budoucnost SMTP AUTH
215 216 218 218
219 219 220
221
222 223 223 224 224 225 228 233 235
236
KAPITOLA 16
Jak se provádí autentizace SMTP Jak ověříme podporu SMTP AUTH Jak přidáme do Postfixu podporu SMTP AUTH Autentizace SMTP na straně serveru Aktivace a konfigurace serveru Test SMTP AUTH na straně serveru Pokročilá nastavení serveru Omezení okruhu odesilatelů
Autentizace SMTP na straně klienta AUTH pro postfixového klienta SMTP Test SMTP AUTH na straně klienta Klient lmtp Omezení lmtp na skupinu autentizačních mechanismů Test SMTP AUTH pro klienta lmtp
239 239 240 241
241 245 248 249
249
250 253 255 255 255
KAPITOLA 17
Co je bezpečnost transportní vrstvy Základy TLS
257 257
Jak funguje TLS
259
CO jsou certifikáty
259
Jak se vytváří důvěra Která certifikační autorita vyhovuje našim požadavkům?
259 260
9
10
'4-;hiC' Jak se vytvoří certifikát Požadované informace Vytvoření certifikátu Distribuce a instalace certifikátu certifikační autority (CA) Podpis serverového certifikátu Příprava certifikátů pro použití v Postfixu
Obsa h
260
261 261 262 266 267
KAPITOLA 18
Jak se zajišťuje bezpečnost transportní vrstvy 269 Ověření podpory TLS Vytvoření Postfixu s podporou TLS Vytvoření a instalace OpenSSL ze zdrojového kódu Vytvoření Postfixu s TLS
TLS na straně serveru Základní konfigurace serveru Nastavení cesty certifikátu Ladění výkonu serveru Bezpečnostní opatření na straně serveru Přenos na základě certifikátů na straně serveru Konfigurace Postfixu pro klientské certifikáty Zpřísnění režimu Závazné používání TLS Vyžadování klientského certifikátu
TLS na straně klienta Základní klientská konfigurace Selektivní použití TLS Ladění výkonu klienta Zabezpečení klienta SMTP AUTH Předávání na základě certifikátů na straně klienta Zpřísnění režimu na straně klienta
269 271
271 272
273
273 274 279 281 286 287 290 290 290
291
291 294 295 296 296 297
KAPITOLA 19
Firemní poštovní server Základní koncepce Struktura adresáře LDAP Výbět atributů v postfixovém schématu Návrh větve Vytváření uživatelských objektů Vytváření objektů typu seznam Přidání atributů pro zbývající servery
Základní konfigurace
299 299 300
301 303 303 305 305
306
'4'fiMt'
Obsa h
Konfigurace Cyrus SASL Konfigurace OpenLDAP Import adresáře Vytvoření konfiguračního adresáře LDAP Konfigurace Courier maildrop Instalace Courier Maildrop Konfigurace Courier IMAP
306 307 308 311 317 318 326
330
Pokročilé konfigurace Rozšíření adresáře Přidání autentizace pro servery Ochrana adresářových dat Šifrování dotazů LDAP Prosazení platné adresy odesilatele Konfigurace omezení smtpd
330 332 337 339 345 346
KAPITOLA 20
Provozování Postfixu v uzavřeném prostoru Co se děje v uzavřeném prostoru Základní principy nastavení uzavřeného prostoru Technická implementace
Vliv uzavřeného prostoru na Postfix Pomocné skripty pro uzavřený prostor Démoni v uzavřeném prostoru Knihovny, konfigurační soubory a ostatní soubory v uzavřeném prostoru
Omezení v uzavřeném prostoru
349 350 350 351
351
352 352 353
354
ČÁSTIV
Ladění Postfixu KAPITOLA 21
Paralelní zpracování vzdálených klientů a omezení rychlosti zadávání požadavků Základy omezování rychlosti Vytváření statistik Spuštění démona anvil
Omezení četnosti klientských spojení Omezení paralelních spojení Vynětí klienta z limitu
359 359 360 360
361 363 365
11
12
'4-fi'lt'
Obsa h
KAPITOLA 22
367
Ladění výkonu
367
Základní úkony Zrychlení vyhledávání DNS Není server veden v seznamu otevřených předávání? Odmítání zpráv od neexistujících uživatelů Blokování zpráv ze sítí uvedených na černých listinách Odmítání zpráv z neznámých domén odesilatele Snížení četnosti pokusů o opětovný přenos
367 369 369 370 371 371
371
Vyhledávání úzkých míst Úzká místa ve frontě maildrop Úzká místa ve frontě deferred Úzká místa ve frontě active Asynchronní nerovnost pro přeplňování front vrácenými zprávami Nouzové předávání
Naladění vyšší průchodnosti Konfigurace alternativního transportu
374 375 375 377 379
380 380
ČÁST V
Přílohy KAPITOLA A
Instalace Postfixu
385
Zdrojový kód Postfixu
385
Aplikace záplat Vytváření a instalace ze zdrojového kódu Spouštění a ukončování Postfixu
Instalace Postfixu v operačním systému Linuxu Debian Instalace Postfixu Spouštění a ukončování Postfixu Aktualizace Vytvoření Postfixu ze zdrojového balíku Debian
Instalace Postfixu v operačním systému Red Hat Linux Jak získáme Postfix pro systém Red Hat Linux Vytvoření Postfixu na CD Stažení Postfixu ze stránek Red Hat Stahování RPM Postfixu udržovaného Simonem J. Muddem Stahování Postfixu z rpmfind.net Nastavení adresářové struktury a vnější proměnné
385 386 386
387
387 388 388 388
390
390 390 390 391 391 391
'4-tiid'
Obsa h
Přepnutí do Postfixu Odstranění programu Sendmail Spouštění a ukončování Postfixu v systému Red Hat Linux
393 393 393
pjHLOHA B
Odstraňování závad v Postfixu Problémy se spouštěním a se žurnálem Připojování k Postfixu Ověření sítě Ověření procesu sledování
Správný konfigurační soubor Ohlašování problémů s Postfixem Zvýšení množství informací v žurnálním souboru Zápis do žurnálu dle klienta Žurnál a qmgr
Další chyby v konfiguraci Nesnáze s uzavřeným prostorem Problémy se systémem souborů Džungle v knihovnách Nekonzistentnost démonů Paralelní bludiště
Testování zátěže smtp-source smtp-sink Diskové operace
395 395 398 398 399
400 400 401
401 401
402 402 403 404 404
404
405
405 405 406
p�rLOHA c
Odkaz na Standardy CIDR a SMTP Podsítě v notaci CIDR Kódy odpovědí serveru
409 409 410
Slovník pojmů
413
Rejstřík
421
13
Předběžná doporučení Knihy o Postfixu "Zatímco mnohé technické knihy jsou jen o málo víc než upravená dokumentace pro duktú , Koetter a Hildebrandt nabízejí fantastický vhled do základú Postfixu . Poté co čte náři poskytnou solidní základy o tématu , věnují se popisu složitějších vlastností Postfixu. Knihu jsem odkládal s pocitem, že k lepšímu pochopení problematiky elektronické poš ty mohou posloužit právě takové knihy jako tato. " - TOM THOMAS, AUTOR KNIHY NETWORK SECURlTY F/RST-STEP (CISCO PRESS) ,Jak se Postfix rozvíjí a rozšiřuje se o další funkce, je zcela nezbytné, aby správci dosta li do rukou zevrubného prúvodce, který by obsahoval návod k zavádění a údržbě post fixových instalací. Patrick Koetter a Ralf Hildebrandt jsou odborníci, kteří se rozhodli pro Postfix už v jeho začátcích, a jejich kniha je odpovědí na tuto naléhavou potřebu . " - LUTZ jÁNICKE, KTERÝ MÁ V POSTFIXU N A STAROSTI ZÁPLATY TLS "Největší dojem v Ralfově a Patrickově knize na mě učinil zpúsob, jakým autoři zjedno dušují složité principy. Všem probíraným tématúm dokonale rozumějí a jejich výklad ne ní těžké pochopit. Na nic nezapomněli . " - TOBIAS OETIKER, VYNÁLEZCE KRUHOVÉ DATABÁZE (ROUNO ROBIN DATABASE TOOL, RRDTOOL) A NÁSTROJE PRO GRAFICKÉ SLEDOVÁNÍ ZÁTĚŽ E SMĚ ROVAČŮ (MULTI ROUTER TRAFFIC GRAPHER, MRTG) "Kniha obsahuje mnoho praktických příkladú se srozumitelnými vysvětleními a čtenář má jistotu , že dostává pomoc přímo z rukou odborníkú na Postfix. " - DAVID SCHWEIKERT, AUTOR POSTGREYE (A POSTFIX GREYLISTING POLICY SERVER) "Mohu tuto knihu doporučit každému , kdo používá Postfix; zejména pak těm, kdo jej chtějí integrovat do antivirového nástroje AMaViS." - REINER LINK, ZAKLADATEL OPENANTIVIRUS .ORG "Kniha je nezbytnou pomúckou pro každého, kdo se zajímá o Postfix, od domácích uži vatelú až po správce největších poštovních systémú . " - D R . LIVIU DAlA, STARŠí VÝZKUMNÝ PRACOVNÍK MATEMATICKÉ HO Ú STAVU RUMUNSKÉ AKADEMIE VĚ D .
Věnováno všem, kteří mají rádi dobrý software
18
'4-hihl'
o a utorech
o autorech Ralf Hildebrandt a Patrick Koetter jsou aktivní a známé osobnosti v postfixových kruzích. Hildebra�dt je technickým manažerem v T-Systému , což je německá společnost pro in formační a komunikační technologie. Koetter je projektantem informačních systémů ve své vlastní společnosti, která se zabývá konzultační a vývojovou činností v oblasti ko munikací a své služby poskytuje evropským a africkým zákazníkům. Oba přednášejí na odborných konferencích a počítačových akcích a pravidelně přispívají do mnoha dis kusních skupin na Internetu na téma open source.
Poděkování Musíme poděkovat mnoha lidem a každý z nás má svůj vlastní seznam.
Ralf Hildebrandt Teprve když jsem psal tuto knihu, uvědomil jsem si, jak málo vím o tom, co se děje "pod pokličkou" Postfixu . Věděl jsem, jak se chová, ale netušil jsem proč, přinejmenším jsem to nevěděl o všech komponentách a neznal jsem všechna úskalí. Někdy jsem toho vě děl málo, někdy jsem měl o věci špatnou představu . Musel jsem "číst ty zas . . . manuály" a ptát se na spoustu podrobností na diskusních fórech o Postfixu. Tato kniha nemůže nahradit delší než pětiletou zkušenost s provozováním Postfixu, avšak pomůže jej lépe zvládnout. Když jsem v roce '94 začal s Unixem, byl Internet nepochybně mnohem bezpečnějším místem než dnes. Neexistovaly spamy! O Postfixu jsem se dověděl jenom proto, že mně Sendmail opakovaně havaroval . Po krátké mezihře s qmailem jsem si našel Postfix a ten mi už zůstal. Nikdy potom jsem se už neohlížel zpět. Když mě oslovil Bill a zeptal se mě, jestli bych nechtěl napsat knihu o Postfixu , nejdří ve jsem zaváhal. Spoluautora jsem určitě potřeboval , protože tak obrovské množství prá ce by jeden člověk ani zdaleka nezvládl . V tu dobu Patrick proklínal SASL a přísahal, že jestli někdy něco napíše, tak jedině návod k tomuto protokolu . Slib splnil, jeho práci jsem si přečetl, líbila se mi, a tak jsem mu nabídl spoluautorství. Jak se později ukázalo, práce byla i nad síly dvou lidí, a tak se k nám připojil Brian Ward jako technický redaktor. Vnesl do práce zkušenosti v oblastech, kde se nám jich nedo stávalo. Bez pomoci Wietse Venemy, Victora Duchovního, Lutze Jinicka, Andrease Winkelman na a Petera Bieringera by tato kniha nemohla být tam, kde je, a všichni si zaslouží jeden výtisk zdarma. Ne že by jej potřebovali , ale právě takové dárky jsou nejlepší. Veliké po děkování a vděk patří mé ženě Constanze, která tolerovala moji tolikrát opakovanou vý mluvu "Ale teď ještě musím napsat jednu kapitolu! " , čímž mi umožnila knihu dokončit, aniž by se ze mě stala slibotechna. A až budete číst Patrickovy komentáře, uvědomte si prosím, že já jsem střelený méně než on.
Patrick Koetter Bude muset uplynout ještě mnoho vody, než nám Internet poskytne všechny služby, kte ré bychom si přáli mít. Je to jako s ostatními novými médii; jejich provozovatelé se sna-
Poděková n í
19
ží zvyšovat jenom jejich objem a rozsah poskytovaných služeb. Na jejich kvalitu ani funk cionalitu se většinou příliš nehledí - při0ejmenším do doby, než začnou vynášet. Mezi tím jsou v rukou lidí, kteří věcem spíše ubližují nebo je zneužívají, než aby je zlepšovali a rozšiřovali . To potkalo i elektronickou poštu , a proto se objevil Postfix, který ji posouvá do nové kvalitativní dimenze. Když jsem se dostal k SMTP serveru, byl jsem šokován tím, že k provozování Sendmai lu by člověk potřeboval málem nějaký diplom, zejména když narazí na makra . Tak jsem se trochu poohlédl po jiném softwaru . Abych to tedy zkrátil: Zamiloval jsem se do Post fixu . U Postfixu jsem pochopil, že je možné mít složitý software s jednoduchou, jasnou a strukturovanou syntaxí. Zná-li někdo SMTP , ví téměř vše o konfiguraci Postfixu . Když mě Ralf požádal, abych s ním napsal knihu, SMTP jsem skutečně neznal. Jenomže při psaní této knihy jsem se toho musel naučit víc, než jsem čekal, abych byl schopen pře dejít všem nedorozuměním.
Velice si vážím toho, že se mi naskytla příležitost předat dál, co vím o současných počí tačích a elektronické poště. Doufám, že vám tato kniha pomůže nalézt cestu k tvůrčímu užívání Postfixu . Kreativitě se daří tam, kde se může opřít o vědomosti. Tato kniha by nespatřila světlo světa bez znalostí, zvídavosti a podpory Wietse Venema, Victora Duchovního, Liviu Daia, Lutze Janicka, Floriana Kirsteina, Waltera Steinsdorfera, Rolanda Rollingera, Toma Thomase, Alexeje Melnikova, Andrease Winkelmanna, Erika "cybertime hostmastera" a uživatelů postfixové diskusní skupiny; jejich otázky a problé my nám ukázaly, co ještě chybí, když už jsme si mysleli, že vše bylo řečeno. Nejvíce chci poděkovat Ralfovi, jehož znalosti Postfixu mohou překonat jen jeho drzé způsoby při užívání pQčítače. Cítí se při tom jako ryba ve vodě. Byl to on, kdo si mě vy bral jako společníka, s nímž se rozhodl prožít dobrodružství zvané Kniha o postfixu, a jsem dlužníkem toho blázna, který se při psaní této knihy stal mým blízkým přítelem. Kniha byla velikou výzvou nejen pro mě, ale i pro moji ženu Birgit; její důvěra ve mě mne přenesla přes nespočetné řádky této knihy. Je velikou výsadou , když jste požádá ni, abyste udělali něco, co je blízké vašemu srdci. A je božím poselstvím, když to udě láte a přitom máte po svém boku někoho jako Birgit.
Popisovat kouzlo je jako krájet biftek šroubovákem. - Tom Robbins
20
'4-fi'it'
o této knize
o této knize Tato kniha je podrobným průvodcem po Postfixu . Když ji otevřete jako začátečník a do čtete ji a i do konce, stane se z vás (jak doufáme) expert. Existují tři typy kapitol: popis né (obsahující návody), teoretické a procvičovací. Popisné kapitoly slouží jako slabikáře; probíranou látku si pak můžete prakticky vyzkoušet na vlastních postfixových imple mentacích. V teoretických kapitolách se popisují vnitřní souvislosti Postfixu a v praktic kých kapitolách jsou uvedeny přesné návody, jak lze využít teoretické poznatky k vytváření funkčních instalací. Knihu jsme rozdělili do čtyř částí. Každá z nich je jedním krokem k zvládnutí Postfixu :
Základy V části I se probírají základy. Naučíme se konfigurovat Postfix v samostatné doméně a vytáčeném serveru. Zdálky si prohlédnete anatomii Postfixu a zjistíte, jaké poskytuje možnosti .
Řízení obsahu Pomocí Postfixu lze efektivně řídit průchod zpráv systémem. V části I I s e nejdříve se známíme s komunikací pomocí SMTP protokolu a popíšeme si formáty e-mailových zpráv. Od tohoto místa už budete znát různé způsoby zpracování elektronické pošty.
Pokročilé konfigurace Postfix často spolupracuje s jinými aplikacemi, jako např. SQL servers, Cyrus SASL, OpenSSL a OpenLDAP . V kapitolách v části III se dozvíte, jak na to.
Optimalizace Postfixu Konfigurovatelný software by neměl jít do světa bez optimalizace. V části IV vám po můžeme nalézt úzká místa v instalaci a zkusíme vám poradit, jak zvýšit výkon celého systému .
Další prameny Existují ještě dva prameny, o něž lze rozšířit dokumentaci obsaženou v této knize. Na leznete v nich mnoho dalších informací.
Dokumentace k Postfixu, návody a často kladené otázky Dokumentaci k Postfixu, návody a často kladené otázky naleznete na stránkách postfi xové komunity ( h t t p: / www . p o s t f i x . o r g / d o c s . h t m l ) .
Diskusní skupiny V rámci postfixové komunity vede několik diskusních skupin Wietse Venema . Přihlásit se do nich můžete na příslušných stránkách ( h t t p : / www . p o s t f i x . o r g II i s t s . h t m l ) :
p o s t f ix - a n n o u n ce@p o s t f ix . o r g Seznam ohlášených verzí a aktualizací.
'4'fiMG'
Konvence v sazbě p o s t f ix - u s e r s@p o s t fix . o r g
Obecné diskuse o zkušenostech s poštovním systémem Postfix. Diskuse není modero vaná a je třeba se přihlásit.
p o s t f ix - u s e r s - d ig e s t@p o s t fix . o r g Denní zasílání článků , které zaslali účastníci diskusní skupiny p o s t f i x - u s e r s .
p o s t f ix - d e v e l @p o s t fix . o r g Malá skupina osob, které s e zabývají vývojem Postfixu . Na p o s t f i x - u s e r s@p o s t f i x . o r g vede postfixová komunita diskusi o principech, pro blémech, chybách, záplatách a mnoha dalších tématech. Kdybyste chtěli někoho požá dat o pomoc s řešením nějakého problému nebo se dozvědět cokoli dalšího o Postfixu, určitě by se v archívech této diskusní skupiny něco našlo. Archívy spravují různé orga nizace či osoby a lze v nich hledat pomocí běžných prohlížečů . Ú plný seznam archívů naleznete na stránkách h t t p: / www . p o s t f i x . o r g II i s t s . h t m l .
Konvence v sazbě N e p r o p o r c i o n á l n í p í s m o se používá pro : • •
•
Jména souborů a jména cest Jména rozesílacích seznamů a internetových adres, jako např. jména domén, URL a e-mailových adres Démony, příkazy, názvy parametrů a hodnoty, vnější proměnné a volby v příkazových řádcích
Neproporc i oná l ní písmo v řezu kurz i v a
se používá pro:
•
Parametry a zástupné znaky, které se v konkrétním systému nahradí příslušnými znaky
•
Komentáře v příkladech příkazových řádků a v kódu
Tučné nep r op o r c i oná l ní písmo se používá pro: •
Příkazové řádky a volby zapsané v shellovém okně .
Tučné nep rop o r c i oná l ní písmo v řezu kurzi va se používá pro: •
Zvýraznění určitých řádků v diskusi
POZNÁMKA Znak $ je výzva na příkazových řádcích; # je výzva pro superuživatele.
Domény a jména Vzhledem k tomu , ž e tématem této knihy jsou služby spojené s elektronickou poštou a často budeme hovořit o doručování a přenosech zpráv, v příkladech budeme používat následující jména domén, odesilatelů a příjemců .
Lokální doména V celé knize bude naší doménou ex a mp 1 e . c o m . Nechť existují dva lokální uživatelé a ny u s e r@e x a m p l e . c o m a a n y u s e r@m a i l . e x a m p l e . c o m . Pokud byste chtěli použít příklady
21
Konvence v sazbě
22
uvedené v knize pro vytváření vlastního postfixového serveru, bude třeba nahradit e x a m p l e . c o m vlastní doménou .
POZNÁMKA Domény exa m p le.com, exa m ple. net a example.org pochopitel n ě nevlastníme. Ú řad pro přidělová n í čísel na I nternetu tato j ména vyh ra d i l pro použití v dokumentaci.
Náš poskytovatel v celé knize budeme používat doménu e x a m p l e - i s p . com jako jméno domény našeho ISP.
Skripty Pomocné skripty a další užitečné informace (errata apod.) naleznete na: h t t p:/ / www . p o s t f i x - b o o k . c o m .
Komentáře Pokud čtenář nalezne v knize chybu nebo by nám rád sdělil ke knize jakoukoli připo mínku , prosíme o laskavé zaslání na adresu c omme n t s@p o s t f i x-b o o k . c om .
Poznámka redakce českého vydání: I nakladatelství Computer press, které pro vás tuto knihu přeložilo, stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Mů žete se obrátit na následující adresy: Computer Press knižní redakce náměstí 28. dubna 48 635 00 Brno-Bystrc nebo [email protected]
KAPITOLA 1 ,
UVOD DO POSTFIXU Postfix je přenosový agent
(Message Transport Agent, MTA), který pomocí protokolu (Message User Agent, MUA, resp . poštov
SMTP přenáší zprávy od uživatelského agenta
ního klienta) na vzdálený server. MTA rovněž přijímá zprávy od vzdálených serverů a předává je jiným MTA nebo je doručuje do lokálních poštovních schránek. Po přene sení nebo doručení zprávy práce Postfixu končí a za předání zprávy koncovému u živa teli odpovídají jiné servery. Například přenosoví agenti jako servery POP3 nebo IMAP předávají zprávy uživatelským agentúm, jako třeba Mutt, Outlook nebo Apple Mail, kde si je uživatel múže přečíst. Na p rvní pohled se zdá, že práce transportních agentú je velice jednoduchá, avšak není tomu tak . Zvláštnost jejich úlohy spočívá v tom, že musí komunikovat přes hranice v sí ti - přenášejí obsah zpráv do jiných sítí a přijímají obsah příchozích zpráv. Zdravý rozum říká, že každý, kdo přichází do styku se sítí, musí chránit svoje servery a data před úto ky, a existuje rozšířený názor, že stačí nainstalovat firewall, kterým jsou kontrolovány přenosy v obou směrech mezi lokální a vzdálenou sítí. To je pověra: firewall není apli kace, nýbrž princip . Nejznámější součástí běžné firewallové implementace je aplikace, která dohlíží na spo jení a omezuje je. Bohužel, firewally obvykle nevyhodnocují obsah zpráv, které si mezi sebou vyměňují počítače; kontrolují pouze počítače, porty a protokoly přenosových vrs tev, avšak neprovádějí žádná omezující opatření založená na obsahu přenášených zpráv. Analýza obsahu zpráv je mnohem složitější ú loha a provádějí ji speciální aplikace, které se u mějí rozhodnout, jak mají naložit s daným obsahem, a také posoudit, jestli je tento obsah bezpečný. To je úlohou transportních agentů v případě elektronické pošty. A na víc musí být moderní agenti rychlí, spolehliví a bezpeční, neboť jsou jimi přenášena nej oblíbenější data v největší síti na planetě: elektronická pošta. Uživatel si může vybrat z mnoha přenosových agentú, avšak každému lze něco vytknout. Některý má například brilantní zabezpečení, ovčem tým vývojářů se u ž rozrostl tak, že si koleduje o bezpečnostní problémy. Jiný agent je velmi rozšířený, protože je součástí oblíbeného integrovaného balíku, avšak zdá se, že jeho vývojáři strávili příliš mnoho ča su na zaj ištění funkcionality balíku a zapomněli na dodržování internetových standardú a navíc podcenili nové možnosti spamerů a útočníků. A konečně existuj í agenti, kteří snadno zvládají veškeré standardy a nemaj í problémy s paralelní obsluhou velkého po-
24
'4'fi'iC'
Kapitola 1
čtu uživatelů, avšak úroveň jejich bezpečnosti je tak strašná, že si musíte najmout od borníka, aby doplnil systém o základní bezpečnostní opatření. Když ch€e někdo provozovat Postfix, nemusí být v této oblasti odborníkem; Postfix pra cuje v závislosti na prostředí pokud možno co nejbezpečněji. V Postfixu je bezpečnost součástí implicitní konfigurace. Má-li aplikace samotná dostatečnou úroveň zabezpeče ní, není Postfix třeba nijak speciálně nastavovat a jeho provozování je velmi snadné. Po kud je třeba bezpečnostní opatření jakkoli doplnit, je lépe to udělat v Postfixu , kde je k dispozici jasná a strukturovaná syntaxe pro zadávání parametrů a voleb a změna im plicitního nastavení je velice jednoduchá. Navíc, aplikační design Postfixu je modulární a každý z modulů běží s nejnižšími možnými přístupovými právy, jež postačují ke spl nění zadaných úkolů . Plánovaná bezpečnost Postfixu byla vyšší, než jakou kód ve sku tečnosti dosahuje . Cennou vlastností Postfixu je t o , ž e je zaměřen na transportní úlohy zpracovávané v ope rační paměti a nesnaží se nahrazovat funkcionalitu jiných součástí systému . Nijak neo mezuje činnost externích aplikací, které nespadají do oblasti transportu zpráv. Navíc, Postfix nejvyšší možnou měrou využívá služeb systému Unix. Vysoká integrace do ope račního systému nejen usnadňuje tvorbu externích aplikací, nýbrž i zvyšuje výkon celé ho systému . Moderní pohled na problematiku předávání a zpracování pošty klade Postfix do samot ného srdce transportní výbavy systému . Na obrázku 1 . 1 vidíme Postfix obklopený spe ciálními aplikacemi a nástroji , jež slouží k řízení obsahu, spojení a předání.
Obrázek 1.1 Postfix: Srdce transportn í části systému Tato kniha popisuje konfigurace Postfixu v malé síti, kde zajišťuje předávání pošty, filt rování virů a dále slouží jako poštovní server integrovaný do moderní architektury IT. Jak budete procházet kapitolami, naleznete zde teoretické úvahy a návody, které jdou daleko nad rámec on-line manuálů a přispívají k mnohem lepšímu využití tohoto skvě lého balíku.
tASTI ,
ZAKLADY V první části této knihy popíšeme základy Postfixu . Výklad začíná systémovými úvaha mi a nastavením serveru v samostatné doméně. Seznámíme se se syntaxí konfigurační ho souboru a s některými komponentami a utilitami Postfixu . Obsah čtyř kapitol první části knihy:
Příprava počítače a prostředí Než si nainstalujeme Postfix, měli bychom ZJistit, zda server umí zpracovat protokol SMTP . Kapitola 2 popisuje konfigurace operačního systému s přihlédnutím k využití všech možností Postfixu .
Poštovní server v samostatné doméně Prvním krokem při přípravě nové instalace Postfixu je vytvoření takové konfigurace, kte rá umí přijímat poštu v samostatné doméně. Ve třetí kapitole si ukážeme, jak lze ověřit funkčnost systému a jak vytvořit základ pro složitější nastavení.
Poštovní server v samostatné doméně připojený prostřednictvím vytáčeného spojení Konfigurace s vytáčeným spojením (po telefonní lince) v samostatné doméně se od nor málního spojení příliš neliší. Tyto malé, avšak důležité odlišnosti popíšeme ve čtvrté ka pitole.
Anatomie Postfixu Wietse Venema říká, že "Postfix je vlastně směrovač", který nesměruje IP pakety, nýbrž celé zprávy. V kapitole 5 je velký obrázek znázorňuj ící vnitřní souhru v Postfixu .
KAPITOLA 2 v,
PRIPRAVA POCITACE A PROSTREDI v
v,
,
v
Na počátku nebylo nic. Bůh řekl: "Budiž světlo/" Ani pak nebylo nic) ale bylo to vidět. - 19nacio Schwartz Asi už vás naše řeči unavují, neboť jste si koupili knihu o Postfixu a nemůžete se dočkat, až s ním začnete pracovat. Avšak dříve než se pustíme do práce, je třeba si říci jednu věc . Tvůrcem Po �tfixu je Wietse Venema, jenž zná velice dobře Unix a jeho návrh Postfixu se nezabývá implicitní funkcionalitou tohoto operačního systému . Předpokládá se tedy, že systém je řádně nastaven a že může plnit ú lohu podpůrného systému.
I když tato kapitola vypadá jako snůška keců, nepřeskakujte j i . Udělejte si na ni čas a přesvědčte se, že váš systém je v pořádku. Postfix vás za to odmění rychlými, spoleh livými a bezpečnými službam i . Zde jsou požadavky, které b y měl systém splňovat: •
Nastavte správně jméno systému
•
Ověřte konektivitu počítače
•
Pečlivě udržujte systémový čas
•
Ujistěte se, že služba syslog zaznamenává diagnostiku Postfixu
•
Zakonfigurujte do systému rozpoznávání jmen klientů
•
Zakonfigurujte do DNS
(jmenná služba) příslušné záznamy
Jméno počítače Poštovní server musí mít úplné jméno CFQDN,
Pulty Qualified Domain Name; viz RFC
82 1 , f t p : / / f t p . r f c-e d i t o r . o r g / i n - n o t e s / r f c 82 1 . t x t), například ma i l . e x a m p l e . c o m ,
Ka pitol a 2 aby mohl spolehlivě spolupracovat s jinými systémy. Když Postfix navazuje spojení se vzdálenými klienty a servery, automaticky používá jméno svého serveru , pokud jej ruč ně nez � onfigurujeme jinak. Ú plné jméno domény je také důležité z jiného důvodu než jen kvůli přijímání pošty od klientů . Když Postfix pracuje v klientském režimu , předává zprávy jiným poštovním ser verům. Většina poštovních serverů si jméno klienta ověřuje, a není-li úplné, zprávu od mítne . Některé servery dokonce ověřují úplné jméno prostřednictvím služby DNS. Jméno systému nastavíme při spouštění systému . Můžeme je zjistit pomocí příkazu h o s t n ame:
$ h o s t n ame - f ma i l . exampl e . com Není-li s e po zadání tohoto příkazu vypsáno úplné jméno domény, zjistěte, j a k s e v e va šem systému nastavuje jméno počítače, a nastavte je. Pokud si ovšem přejete, aby Post fix užíval jiné jméno než jméno systému , ponechte jméno systému beze změny a zadejte parametr myhostname.
POZNÁMKA Vol ba -f v příkazu hostname nefu n g uje v systém u Sola ris, v G N U a v některých dalších prostřed ích . Nefu nguje- I i příkaz hostname ta k, jak je zde popsá no, zkuste vynechat vol bu -fo Nebude- I i fungovat a n i potom, n a h l édněte do m a n u á l u .
Konektivita Zkontrolujte, zda má počítač spojení se sítí a jestli mu ostatní počítače odpovídají. První část je jednoduchá - jsou-li zobrazovány internetové stránky, spojení se sítí je funkční. Příchozí spojení jsou složitější. K jejich otestování je třeba mít klienta tam, kde mohou být napojeni typičtí klienti . Nabízí-li Postfix služby pro celý Internet, je třeba ověřit spo jení s klientem, který je zcela nezávislý na uživatelově serveru .
TCP
port 25
Ověřte s i , zda není na serveru zablokován TCP port 2 5 . Je-li v systému firewall, pře svědčte se, zda je povolené příchozí i odchozí spojení přes port 2 5 . Někteří poskytova telé připojení k Internetu OPS) totiž příchozí i odchozí spojení přes port 25 na svých směrovačích blokují pro veškerý internetový provoz a odblokují je teprve na požádání. Někteří ovšem mohou odblokování odmítnout a preferují spojení prostřednictvím svých poštovních serverů např. s použitím SMTP autentizace (viz kapitola 16). Port 25 musí být otevřen proto, že Postfix i jiné poštovní servery sledují tento port. Jde o oficiální přiřazení SMTP (úplný seznam je na h t t p:/ / www . i a n a . o r g / a s s i g n m e n t s / p o r t n u m b e r s ) organizací lANA, což je centrální registr pro přidělování čísel v internetovém pro tokolu . Č ísla jsou přidělována portům, protokolům, společnostem (v souvislosti s elektronickými podpisy), volbám, kódům a typům.
Příprava počítače a prostřed í
Systémový čas a časové značky Když v Postfixu hodláte upravovat některé funkce a přitom řešit vzniklé problémy, je dů ležité mít v systému nastavený správný čas. Č asto přitom musíte překročit hranice svého systému a řešit některé věci se správci jiných poštovních serverů . V takovém případě je správná časová značka přesně to, čeho lze využít při řešení problémů mezi vlastním a ci zím serverem. V Postfixu jsou časové údaje v hlavičkách pečlivě zaznamenávány. Mějme například hla vičku :
Rec e i ved : f r om ma i l . exampl e . n e t ( ma i l . exampe . n et [ 1 9 2 . 0 . 34 . 1 6 6 J ) by ma i l . ex a m p l e . com ( Po s t f i x ) w i t h ESMTP i d 6 E D90 E 1 C 6 5 f o r < r e c i p i e n t@ex a m p l e . com> ; Sa t . 7 Feb 2004 1 0 : 4 0 : 55 +01 00 ( CET) Rep l y - To : s e n d e r@ex a mp l e . n et F r om : S e n d e r < s e n d e r@ex a mp l e . n e t > To : Rec i p i en t < r e c i p i e n t@ex a mp l e . c om> S u b j e c t : Keep c o r r e c t s y s tem t i me D a t e : Sa t . 7 Feb 2004 1 0 : 42 : 01 +01 00 Postfix také přidává časové poznámky do poštovního žurnálu (mail log). Zde jsou pří klady takových zpráv: Feb Feb
7 2004 1 0 : 4 0 : 55 ma i l p o s t f i x / p i c k u p [ 3 2 6 1 0 J : 6 E D9 0 E 1 C 6 5 : u i d=5 0 1 f r om=< s e n d e r > 7 2004 1 0 : 4 0 : 55 ma i l p o s t f i x / c l e a n u p [ 3 9 8 J : 6 E D 9 0 E 1 C 6 5 :
me s s a g e - i d=
Proto byste měli mít čas nastaven co nejpřesněji . Nespoléhejte na časovač v systému; ne jenže je čas v jádru unixových systémů posouván, ale i pro napájení mikroprocesorů osa zených v mateřské desce jsou používány ty nejlevnější baterie a také dochází k posunům. Lokální čas a čas na ostatních poštovních serverech nikdy není synchronizován. Existují dva způsoby, jak udržovat v systému přesný čas. Č asový údaj lze získat buď po síti prostřednictvím NTP (Network Time Protocol) nebo pomocí GPRS (v celém světě), v Evropě pomocí rádiového signálu DCF-77. Pokud tyto možnosti nemáte, můžete v kraj ním případě používat aplikaci clockspeed ( h t t p : / / c r . y p . t o / c l o c k s p e e d . h t m l ) , která k trvalé kompenzaci časových údajů generovaných časovačem využívá frekvenci proce soru , přičemž při stanovení chyby vychází z údajů pocházejících ze spolehlivého zdro je.
POZNÁMKA K tomu, abychom v systému moh l i používat NTP server, je třeba m ít v systému i NTP kli enta Osou dodává ny pra kticky se všemi operačn ím i systémy). Dále je třeba ve fi rewa l l u povol it přij ímání a odesílá n í UDP pa ketů (User Datagram Protocol) n a portu 1 23. Nevíte l i, jak máte konfigu rovat NTP k l ienta, nahlédněte na http://www. ntp.org .
Syslog Jedním z nejdůležitějších míst, kde je možné nalézt diagnostické zprávy, je poštovní žur nál . Postfix používá pro zápis do žurnálního souboru standardní unixovou utilitu sys-
29
30
'a-hMC'
Kapitol a 2
logd. Obvykle je konfigurována pomocí konfiguračního souboru /etc/syslog.conf. Uvá díme příklad konfigurace:
# L o g a n y t h i n g ( e x c e p t ma i l ) o f l e v e l i n f o o r h i g h e r . # D o n ' t l o g p r i v a t e a u t h e n t i c a t i o n me s s a g e s ! * . i n f o ; ma i 7 . n on e ; a u t h p r i v . n o n e ; c r o n . n o n e - / v a r / l o g / m e s s a g e s # The a u t h p r i v f i l e h a s res t r i cted acces s . authpri v . * - /v a r / l og/secure # L o g a l l t h e ma i l me s s a g e s i n o n e p l a c e . ma i 7 . * - / var / 7 og / ma i 7 7 og # Log c ron s t u f f c ron . * - / v a r / l og/c ron # E v e ry b o d y g e t s eme r g e n cy me s s a g e s , p l u s l o g t h em o n a n o t h e r # ma c h i n e . * . eme r g * # S a v e ma i l a n d n ew s e r r o r s o f l e v e l e r r a n d h i g h e r i n a # spec i a l fi l e . uucp , news . c r i t - / v a r / l og / s pool e r # S a v e b o o t me s s a g e s a l s o t o b o o t . l o g 1 0c a 1 7 . * / v a r / l og/ boot . l og Nejdříve si prohlédněte první položku , která obsahuje ma i l . n o n e , aby zprávy nebyly za pisovány do /var/log/messages. To je důležité z toho důvodu, aby zprávy z poštovního provozu nebyly směšovány s běžnými systémovými zprávami. Poštovní zprávy se ukláda jí do zvláštního souboru ( / v a r / 1 og / m a i I I og l . Pomlčka před jménem souboru indikuje asynchronní zápis do souboru, což znamená, že zprávy nejsou zapisovány ihned na disk. V utilitě syslogd bohužel existuje několik úskalí. Máte-li dojem, že do žurnálu nejsou ukládány žádné zprávy, je třeba se přesvědčit, zda je démon syslogd skutečně spuštěný. V následujícím příkladu je ukázka, jak můžeme postupovat:
# ps a u xwww I g r e p s y s l og root 1 5540 0 . 0 0 . 0 1 444 root 22616 0 . 0 0 . 0 1444
524 S 452 pts /O R
May21 18 : 09
1 8 : 2 0 s y s l o g d -m O ., 0 : 00 g r e p sy s l og
o Na prvním řádku vidíme, že s y s l o g d běží od 2 1 . května.
Navíc si ověřte, že žurnální soubory existují a je do nich povolený zápis dříve, než do nich s y s l o g d začne zapisovat. V některých implementacích nejsou soubory vytvářeny automaticky a ani není signalizován žádný problém. Pověstný je tím například syslogd v systému Solaris. Obvyklou chybou bývá, že v konfiguračních souborech jsou jako oddělovač mezi typem a jménem žurnálního souboru používány místo tabelátoru mezery. Soubor s y s l o g . c o n f by měl vypadat takto:
m a i 1 * < TA B> - / v a r II o 9 / m a i 1 l o g .
S konfiguračním souborem může nastat ještě jeden problém. Je třeba si dát pozor, aby neobsahoval položku jako:
ma i 1 . * @l o g h o s t V tomto případě by syslogd posílal všechny zprávy n a připojený počítač, takže by byl zaznamenáván provoz na tomto počítači, nikoli na serveru . Přesvědčte se, že jsou zprá-
Příprava počítače a p rostře d í
';'fi'd'
vy posílány na správný počítač . Č asto se stává, že kvůli chybě v souboru s y s 1 o g d . c o n f jdou zprávy n a jiný počítač (nebo do černé díry).
Vyhledávání jmen (DNS) Než j e zahájen přenos zprávy n a vzdálené místo určení, j e třeba toto místo lokalizovat. Na Internetu jsou vzdálené prostředky vyhledávány pomocí jmenné služby (DNS). Ze jmenného serveru je vrácena IP adresa počítače a naopak, když je zadána IP adresa, je vráceno odpovídající jméno počítače . Rozhodující pro činnost MTA je správně fungující DNS. Č ím dříve dokáže Postfix získat cílovou IP adresu, tím dříve může zahájit komunikaci se vzdáleným poštovním serverem, a tudíž přenést i zprávu .
POZNÁMKA Pomalé vyh l edává n í jmen m ůže být úzkým m ístem ve l kých poštovních uzl ů . Vzn i knou l i při práci serveru nějaké problémy, mohou být odstra něny přidá n ím paměťového ser veru. U vel kých poštovn ích systém ů by měl být paměťový server sa mozřej mostí. Požadavky na výkon D N S mohou něko l i ka násobně na růst i v d ůsledku zaveden í anti spamových opatřen í. Než se rozhodnete zvyšovat výkon systému prostřednictvím vylepšování vyhledávacích funkcí, přesvědčte se, zda jsou korektně vyhledávána vzdálená jména. Vyžádejte si ze jmenného serveru záznam pro výměnu zpráv (viz MX record dále v této kapitole) z post fix-book. com. Zkuste zadat příkaz:
$ d i g p o s t f i x - b o o k . c o m MX výstup by měl vypadat takto:
; « » D i G 9 . 2 . 2 - P3 « » postfi x - boo k . com MX g l o b a l o p t i o n s : p r i n t c md Got a n s we r : - » H E A D E R « - o p c o d e : Q U E RY . s t a t u s : N O E R RO R . i d : 2 3 9 2 9 f l a g s : q r r d r a ; Q U E RY : 1 . A N S W E R : 1 . A U T H O R I T Y : 2 . A D D I T I O N A L : 2 Q U E ST I O N S E CT I ON : ; po s t f i x - book . com . I N MX ANSW E R S E CT l O N : 1 0 ma i l . p o s t f i x - b o o k . c o m . O I N MX p o s t f i x - book . com . 86400 AUTHO R I TY S E CT I ON : n s 3 . ray . n et . 86400 p o s t f i x - book . com . I N NS nS . state - o f - mi nd . d e . 8 I N NS p o s t f i x - book . com . 86400 ADD I T I O NAL S E CT I ON : 2 l 2 . 14 . 92 . 89 IN A ma i l . p o s t f i x - b o o k . c o m . 86400 2 l 2 . 1 4 . 9 2 . 88 nS . state - of - m i nd . d e . 81 566 IN A Q u e ry t i m e : 5 8 m s e c S E R V E R : 2 1 2 . 1 8 . 0 . 5#5 3 ( 2 1 2 . 1 8 . 0 . 5 ) WHEN : Sat Apr 1 7 03 : 56 : 47 2004 ; ; MSG S l Z E rcvd : 1 4 5 ·
.
·
.
·
.
o Řádek říká, že ma i l . p o s t f i x - b o o k . c o m je poštovní server, který přijímá poštu pro adresáty v doméně p o s t f i x - b o o k . c o m . 8 Tyto dva řádky říkají, ž e n s 3 . r a y . n e t a n S . s t a t e - o f - m i n d . d e jsou směrodatnými jmennými servery systému p o s t f i x - b o o k . c o m .
31
32
'",li'iC'
Ka pitol a 2
POZNÁMKA Příkaz d i g (Dom a i n I nformation G roper) nen í v některých sta rších platformách sta n dard n í.'Je součástí distribuce B I N D na Ise (http://www . isc.org). Pokud se jej nepodaří n a i nsta lovat, systém pravděpodobně obsa h uje ještě jeho předch ůdce nslookup, který se j i ž nedoporučuje. Je-li vyhledávací dotaz úspěšný, bude Postfix (teoreticky) zpracovávat jména počítačú správně. Pokud není úspěšný, je třeba problémy DNS ihned vyřešit. Obvyklým problémem při vyhledávání jmen je situace, kdy se server pokouší poslat do taz na nedostupný jmenný server. Zkontrolujte si soubor l e t c / r e s o l v . c o n f . Múže vy padat například takto, přičemž počítač se dotazuje jmenného serveru na lokálním počítači ( 1 27.0.0. 1) a při selhání na 1 34 . 1 69.9. 1 07 :
n a me s e r v e r 1 2 7 . 0 . 0 . 1 n a me s e r v e r 1 3 4 . 1 6 9 . 9 . 1 0 7 Pokud provozujeme jmenný server s paměťovým serverem, stačí klást dotazy lokálnímu počítači. Pokud ovšem paměťový server nemáme, dotaz zabere mnohem více času . Jestliže později zjistíte, že jmenný server s příkazem dig funguje, avšak Postfix nemúže najít daný počítač (například když v žurnálu o něm není žádný záznam), je pravděpo dobné, že Post fix běží v jiném kořenovém adresáři (nastaveném příkazem chroot), což vypadá, jako kdyby vyhledávání bylo nastaveno jiným konfiguračním souborem. Napří klad když je kořenový adresář změněn (je vytvořen "uzavřený prostor") na I va r I s p o o 1 I p o s t fi x, bude se zdát, že Postfix byl nastaven podle l v a rl s p o o 1 I p o s t · f i x / e t c / r e s o l v . c o n f . Příkazem cp -p /etc/resolv.conf /var/spool/postfix/etc/re solv.conf se přesvědčte, že soubory jsou konzistentní, a pak restartujte Postfix.
DNS pro poštovní servery Jmenný server se musí nastavit proto, aby se zbytek světa dozvěděl, že pošta do dané domény je doručována prostřednictvím tohoto serveru . Správce jmenného serveru v da né doméně (hostmaster) požádejte, aby nastavil tyto položky: Záznam
typu A
Jmenný server musí mít úplné jméno, aby jej klienti nalezli. V záznamu typu A je FQDN mapováno na IP adresu.
Záznam typu
PfR
Musí být možný i opačný postup . Když poštovní servery zjistí z komunikace SMTP jméno serveru účastníka, musí mít možnost si ověřit, že komunikují právě s tímto ser verem.
Záznam typu
MX
Záznamem typu MX je klientovi sdělováno, že poštu v doméně (resp . určitému po čítači) doručuje daný server.
Příprava počítače a prostřed í
Záznamy ty p u A v systému jmen domén existují různé typy záznamů , jimiž jsou počítačům zpřístupňo vány prostředky v síti. Jedním z nejdůležitějších je záznam typu A, kterým je mapováno jméno počítače na IP adresu . Pokud klient pošle jmennému serveru jméno nějakého po čítače, odpověď by měla obsahovat IP adresu tohoto počítače. Následuje příklad sezení, v němž zjistíme, že www . e x a m p l e . c o m je namapován na IP adresu 192.0.34 . 1 66.
$ d i g www . e x a mp l e . c om A ; « » D i G 9 . 2 . 1 « » www . e x a mp l e . c o m g l o b a l o p t i o n s : p r i n t cmd G o t a n s we r : - » H EA D E R « - o p c o d e : Q U E RY . s t a t u s : N O E R RO R . i d : 3 0 1 2 2 f l a g s : q r r d r a ; Q U E RY : 1 , A N S W E R : 1 , A U T H O R I TY : 2 , A D D I T I O N A L : O QUEST I O N SECT I ON : ; www . e x a m p l e . c om . IN A ; ; ANSWER S E CT I ON : www . e x a mp l e . c om . 1 7 2 6 2 7 IN A 1 92 . 0 . 34 . 1 6 6 ; ; AUTHO R I TY S E CT I ON : e x a m p l e . c om . 21427 IN NS b . i a na - servers . net . e x a m p l e . c om . 21427 IN NS a . i ana - servers . net . Q u e ry t i me : 1 m s e c S E RV E R : 1 2 7 . 0 . 0 . 1 # 5 3 ( 1 2 7 . 0 . 0 . 1 ) WH E N : S a t Apr 1 7 1 6 : 43 : 40 2004 MSG S l Z E rcvd : 9 7
Záznamy ty p u PTR
Protějškem záznamu typu A je záznam typu PTR, kterým je mapována adresa na jméno
počítače. Když klient pošle jmennému serveru IP adresu, odpověď by měla obsahovat odpovídající jméno počítače, viz následující příklad:
$ d i g - x 1 9 2 . 0 . 34 . 1 6 6 ; « » D i G 9 . 2 . 1 « » - x 1 9 2 . 0 . 34 . 1 6 6 g l o b a l o p t i o n s : p r i n t cmd G o t a n s we r : - » H E A D E R « - o p c od e : Q U E RY . s t a t u s : N O E R RO R , i d : 3 7 9 4 9 f l a g s : q r r d r a ; Q U E RY : 1 , A N S W E R : 1 , A U T H O R I TY : 5 , A D D I T I O N A L : O QUEST I O N SECT I ON : I N PTR ; 1 6 6 . 34 . 0 . 1 9 2 . i n - a d d r . a rpa . ; ; ANSWER SECT I ON : 1 6 6 . 34 . 0 . 1 9 2 . i n - a d d r . a r p a . 2 1 3 7 4 I N P T R www . e x a mp l e . c om . ; ; AUTHO R I TY S E CT I ON : n s . i ca n n . org . 2 1 374 I N NS 34 . 0 . 1 9 2 . i n - a d d r . a rpa . svcOO . a pn i c . net . I N NS 2 1 374 34 . 0 . 1 9 2 . i n - a d d r . a rpa . a . i a n a - se r v e r s . net . I N NS 2 1 374 34 . 0 . 1 9 2 . i n - a d d r . a r p a . b . i a n a - s e r v e r s . o rg . I N NS 2 1374 34 . 0 . 1 9 2 . i n - a d d r . a rpa . c . i a n a - se r v e r s . net . I N NS 2 1 374 34 . 0 . 1 9 2 . i n - a d d r . a rpa . Q u e ry t i me : 1 m s e c S E RV E R : 1 2 7 . 0 . 0 . 1 # 5 3 ( 1 2 7 . 0 . 0 . 1 ) W H E N : S a t Apr 1 7 1 6 : 44 : 39 2004 MSG S l Z E rcvd : 201
33
Kapito l a
34
2
UPOZORNĚNí Nyní, když I nternet zaplavuj í spa my, je reverzn í vyh ledává n í d ů l ežitější než dřív. M nozí správci' pošty konfig u ruj í své poštovní servery tak, že přij ímaj í pouze poštu, u n íž je ús pěšně provedeno reverzní vyh led á n í odesílatele. N icméně skutečnost, že j i n é poštovn í servery od m ítaj í poštu na základě výsledku re verzn ího hledání, neznamená, že toto řeše n í je správné. Problémy nastávaj í, když po skytovatel nedeleguj e reverzní vyh ledává n í na své zákazn ické j m enné servery, takže přísl ušné servery nemaj í možnost z ískat požadova ný údaj .
Záznamy typu MX Jmenný server toho umí víc než jen spravovat prostředky; informuje také klienta o služ bách, které jsou k dispozici v dané doméně. Jednou z nich je právě tento jmenný ser ver. Záznam typu MX lze zkonfigurovat tak, aby ukazoval na záznam typu A poštovního serveru .
UPOZORNĚNí DNS ta ktéž obsa h uje záznam typu CNAME, což je a l ias, který m ůže ukazovat na zá znam typu A. Záznam CNAM E lze zkonfig u rovat na přík lad tak, že www . example.com u kazuje na srv0 1 .exa m ple.com . Klient, který požádá o www.example.com. dosta ne
srv01 .example.com.
Záznam typu MX nes m í ukazovat na žádný z těchto a l iasů . Nejčastěj i používaný tra n sportn í protokol (SMTP) před pokládá, že jméno domény v ad rese zprávy bude buď záz nam typu A nebo MX. V předchozím příkladu nebylo možné u kázat na záznam typu MX ve www.example.com. avša k proto, že srv01 .example.com obsa h uj e záznam typu A, lze u kázat na něj . Lze specifikovat i více záznamů typu MX a poštovním serverům j e možno přiřadit prio ritu , takže klienti budou vyhledávat servery v určeném pořadí, viz příklad:
$ d i g m - n e t . d e MX ; « » D i G 9 . 2 . 1 « » m - net . de MX g l o b a l o p t i o n s : p r i n t cmd G o t a n s we r : - » H E A D E R « - o p c o d e : Q U E RY . s t a t u s : N O E R RO R . i d : 3 1 3 3 f l a g s : q r rd ra ; Q U E RY : 1 . ANSWE R : 3 . AUTHO R I TY : 2 . ADD I T I ON A L : O QUEST I O N SECT I ON : I N MX ; m - net . de . ; ; ANSWER SECT I ON : IN MX m - net . de . 7200 5 0 ma i l - i n . m - o n l i n e . n e t . O IN MX m - net . de . 7200 1 0 0 mx O l . m - o n l i n e . n e t . 8 IN MX m - net . de . 7200 1 0 0 mx 0 2 . m - o n l i n e . n e t . ; ; AUTHO R I TY SECT I ON : m - net . de . 7200 I N NS n s 2 . m - on l i ne . net . m - net . de . 7200 I N NS n s 1 . m - on l i ne . net . Q u e ry t i me : 2 7 m s e c S E R V E R : 1 2 7 . 0 . 0 . 1 #5 3 ( 1 2 7 . 0 . 0 . 1 1 W H E N : S a t A p r 1 7 1 7 : 0 7 : 0 5 2 0 04 MSG S l Z E rcvd : 1 4 0 o m a i 1 - i n . m - o n 1 i n e . n e t má nejvyšší prioritu , neboť m á nejnižší číslo (50). Klienti se nejdříve pokusí doručit poštu tomuto serveru . e mxO l . m - o n l i n e . n e t a mx02 . m - o n l i n e . n e t mají druhou nejvyšší prioritu (00). Na tyto servery se klienti pokusí doručit v případě, že server s nejvyšší prioritou bude nedostupný.
KAPITOLA 3 v
,
POSTOVNI SERVER V SAM OSTATNE DOMENE ,
,
v
Konfigurace l'ostfixu pro sa mostatnou doménu zabere jen pár minut. Nezá leží na tom, jakou cílovou konfiguraci plán ujeme . Konfigurací v samostatné doméně bychom vždy měli začít; prověříme, zda l'ostfix pracuje v nejjednodušším nastavení. V této kap itole si probereme minimální nastavení nutných parametrů a ukážeme si, jak jsou v sa mostatné doméně mapovány dlouhé e-mailové adresy na krátká jména.
M inimální konfigurace Nastavíme Postfix tak, aby přijímal e-maily v samostatné doméně a zprávy s různými adresami doru čoval do rúzných schránek. Zprávy budou zpracovávány pouze v této doméně a ukážeme si, jaké je třeba provést minimální změny konfigurace ve výchozí instalaci . Typickou architekturu vyžadující mi
nimální konfiguraci vidíme na obrázku 3 . 1 .
I nternet
LAN
Poštovní
Pracovní stanice
'u cu
.�
Cl.
,e o....
server
Poštovní server
Pracovní stanice
Obrázek 3 . 1 S íť se s a m osta t n o u d o m é n o u
Poštovní server
Ka p itol a 3
36
Poštovní server je k Internetu připojen trvale a má statickou IP adresu. K dispozici jsou přímý záznam (záznam typu A) a reverzní záznam DNS, které odpovídají IP adrese poš tovního serveru. K základnímu nastavení patří základní požadavky. Přesvědčte se, zda máte počítač zkon figurovaný tak, jak je uvedeno v kapitole 2 .
Konfigurace Postfixu V této kapitole budeme konfigurovat Postfix tak, aby přijímal poštu v samostatné domé ně. Náš počítač se bude jmenovat mail .example .com a naše doména bude example.com. Pokračovat budeme podle následujících bodů : 1.
Zkonfigurujte Postfix tak, aby se pozdravil s poštovními klienty správným jménem.
2.
Zkonfigurujte Postfix tak, aby přijímal poštu pro doménu e x a m p 1 e . c o m.
3.
Zkonfigurujte Postfix tak, aby ke zprávám odeslaným s neúplným jménem připojo val e x a m p l e . c om.
4.
Zkonfigurujte Postfix tak, aby doručoval zprávy zaslané uživateli root do zvláštní schránky.
5.
Zkonfigurujte Postfix tak, aby doručoval zprávy zaslané na určitou adresu příslušné mu uživateli.
6.
Nastavte přístupová práva tak, aby Postfix mohl předávat zprávy z vaší sítě.
Nastavení jmenovky smtpd Když se potká klient se serverem, pozdraví se svými jmény. Nejdříve zkonfigurujeme j méno, které bude Postfix používat, když se bude představovat poštovnímu klientovi. Chcete-li, aby Postfix používal k pozdravu s klienty jméno vašeho počítače, máte štěstí: nic nemusíte měnit. Na druhé straně, když je jméno vašeho systému www . e x a m p l e . c o m . provozujete Postfix na témže počítači a chcete, aby zdravil poštovní klienty jménem ma i 1 . e x a m p 1 e . c o m , je velmi snadné to provést.
Když se pomocí Postfixu přenáší zpráva na j i né poštovní servery, sta ne se z Postfixu poš tovní kl ient a při představová n í je i m p l icitně použit parametr my h o s t n a m e jako jméno H E LO. Některé poštovní servery jsou zkonfi g u rová ny tak, že zprávu od m ítnou, když ne sou h l así reverz n í identifi kace FQDN tohoto serveru . B u ďto se přesvědčte, že jméno po čítače, které jste nastavi l i do Postfixu, sou h l así se jménem od povídaj ícím IP ad rese serveru, nebo nastavte para m etr smtp_helo_name tak, a by souh lasi l s oficiá l n ím FQDN ve jmenném prostoru DNS. Existují dva způsoby, jak lze nastavit různá jména počítačů . Buďto nastavíme parametr my h o s t n a m e nebo parametr my d o ma i n .
Nastavení parametru myhostname Nastavení parametru my h o s t n a m e provádíme editací souboru / e t c / p o s t f i x / m a i n . c f . Soubor otevřeme svým oblíbeným editorem, najdeme slovo my h o s t n a me a přidáme k ně mu příslušné jméno, jež se stane úplným jménem počítače (FQDN).
Poštovní server v sa mostatné doméně
'4'fi'it'
my h o s t n a me = ma i l . e x a m p l e . c o m Jakmile toto jméno nastavíme, parametr my d oma i n si Postfix automaticky odvodí tak, že z tohoto jména odstraní vše až po první tečku včetně. V našem případě bude mít myd o m a i n hodnotu e x a m p 1 e . c o m - přesně, jak potřebujeme.
Nastavení parametru mydomain Když naopak nastavíme parametr my d om a i n , není třeba nastavovat my h o s t n a m e . Tato možnost je vhodná zejména tehdy, když potřebujeme jednu konfiguraci rozkopírovat na více počítačů .
my d oma i n = e x a m p l e . c o m Jakmile nastavíme my d o ma i n , parametr my h o s t n a me pro určitý počítač vytvoříme tak, že výstup příkazu u n a m e - n na tomto počítači zřetězíme s my d oma i n . To znamená, že po kud v souboru ma i n . c f pouze explicitně nastavíme my d o m a i n a tento soubor zkopíruje me na jiný počítač v téže doméně ev našem případě e x a m p 1 e . c o m ) , Postfix si už sám doplní správné jméno počítače.
Nastavení příjmu pošty Postfix poskytuje předávání lokálním klientům, tzn. převezme poštu i pro domény, pro které neslouží jako konečné místo určenÍ. Nastavujeme-li samostatnou doménu , stačí na stavit parametr myd e s t i n a t i o n . (Postup při nastavování Postfixu , který má zajišťovat pře dávání více doménám, popisují kapitoly 13 a 14.)
POZNÁMKA Pa ra metr my d e s t i n a t i o n lze nastavit buď pevně (např. my d e s t i n a t i o n = m a i l . e x a m p l e . c om) , nebo pomocí notace $ p a r a me t e r n a základě hodnot dříve nastavených para metrů . Pevné nastaven í je neši kovné, změny musíme provádět pomocí ed itoru, přičemž často dochází k různým chybá m a překlepům způsobeným l idským faktore m . Pevné na staven í nelze doporučit. Naším cílem v této kapitole je nastavit Postfix tak, aby přijímal veškerou poštu adreso vanou na e x a m p 1 e . c om. Tuto hodnotu jsme už nastavili do my d om a i n, takže se při nasta vování my d e s t i n a t i on v souboru ma i n . c f můžeme na ni odkázat:
my d e s t i n a t i o n = $ m y d o m a i n Chceme-li dále, aby Postfix přijímal poštu pro systém, jehož jméno jsme nastavili do pa rametru myhostname, jednoduše je přidáme do mydestination:
myd e s t i n a t i o n = $ my d oma i n . $ my h o s t n a me Jak vidíme, hodnoty parametru oddělujeme čárkami. V dalším kroku rozšíříme seznam hodnot o www . example.com a ftp .example.com s použitím $mydomain:
my d e s t i n a t i o n = $ my d o m a i n . $ my h o s t n a me . www . $ my d o m a i n . f t p . $ my d o m a i n
37
38
'4-b'it'
Kapitola 3
V tomto příkladu vidíme i další možný způsob zápisu . Když nastavujeme parametr na ví ce hodnot, lze každou z nich uvést na samostatném řádku. V takovém případě musí kaž dý následující řádek začínat jednou nebo více mezerami (aby Postfix poznal , že jde o hodnotu). Správné zadání parametrů je vhodné si ověřit v shellovém okně pomocí p o s t c o n f my d e s t i n a t i o n . Tento způsob lze použít v Postfixu u všech parametrů , které mohou obsahovat několik hodnot.
Připojování domény k odchozím zprávám Když odesíláme zprávu pomocí nějaké lokální služby, např. c r o n nebo a t , anebo přímo z příkazového řádku , neuvádíme ani u odesílatele, ani u příjemce kompletní adresu, nýbrž jen holé uživatelské jméno . V lokálním styku to stačí, avšak posíláme-li zprávu ji nému systému , nastává problém. Zjistit, z kterého systému byla zpráva odeslána, je ča sově náročné, a není-li uvedený adresát v cílovém systému, poštovní server, který zprávu přijal, ji není schopen vrátit. V Postfixu existuje parametr my o r i g i n, jehož hodnotu Postfix připojuje k neúplným adresám odesilatelů a příjemců pošty. I v tomto případě můžeme k jeho nastavení pou žít hodnoty parametrů nastavené v souboru ma i n . c f :
my o r i g i n = $ my d o m a i n Jakmile provedeme toto nastavení, ke všem neúplným adresám bude Postfix připojovat hodnotu my d o m a i n . Například zpráva vytvořená prací c r o n a odeslaná uživatelem r o o t doplní Postfix n a r o o t@$md om a i n , což v našem případě znamená r o o t@e x a m p l e . c om. Když my o r i g i n nenastavíme ručně, Postfix implicitně dosadí hodnotu my h o s t n a m e , což je vhodné pro případ, když současně provozujeme více systémů, jejichž zprávy odesíla né z adresy r o o t má Postfix doručovat na nějaký jednoúčelový účet na centrálním ser veru . Ví tak, z kterého systému byla zpráva odeslána; například práce c r o n , která odesílá zprávy jako r o o t , je doplněna na r o o t@$my h o s t n a m e , což v našem případě znamená r o o t@m a i 1 . e x a m p 1 e . c om .
Přemapování pošty určené uživateli root do jiné schrán ky Lokálním příjemcům včetně r o o t Postfix doručuje všechny zprávy přímo, aniž by však v průběhu doručování poskytl externím programům oprávnění superuživatele. To zna mená, že k doručování pošty na adresu r o o t nelze použít lokální doručovací agenty ja ko p r o c m a i l nebo m a i l d r o p , neboť Postfix je nemůže spustit s oprávněními superuživatele, nýbrž pouze s právy d e f a u l t_p r i v s , což jsou přístupová práva uživate le n o b o d y . Externí programy totiž z bezpečnostních důvodů nelze provozovat s přístu povými právy superuživatele, což ovšem neznamená, že by nebylo možné doručit zprávu uživateli root. Řešení je takové, že Postfix na počítači vytvoří jiného uživatele s normálními přístupovými právy, a tomu zprávu doručí.
Poštovn í server v sa m ostatné doméně
'4-fi"t'
V našem příkladu je a d m i n používán jako účet, z kterého zahajujeme správu našeho po čítače1 Aby Postfix doručil poštu pro uživatele root uživateli a d m i n, je třeba otevřít I e t c / p o s t f i x l a 1 i a s e s , který se instaluje implicitně2, a změnit p o s t f i x na a d m i n takto :
root :
admi n
POZNÁMKA Pokud se rozhod neme používat a d m i n pro tento účel, m usíme rovněž vymazat ze sou boru a l ias položku, kterou nastavujeme posíl á n í pošty u rčené pro uživatele a d m i n uži vatel i r o o t . Jinak by došlo k zacyklení. Když provedeme edici souboru let c / p o s t f i x l a 1 i a s e s 3 a přidáme příslušná uživatelská jména, je třeba ještě vytvořit indexovanou verzi, obvykle I e t c / p o s t fi xl a 1 i a s e s . d b , aby se zrychlil proces vyhledávání v Postfixu . Provedeme to buď pomocí p o s ta 1 i a s na l e t c / p o s t f i x / a l i a s e s nebo n ewa l i a s e s bez parametrů . K těmto nástrojům, jež jsou součástí Postfixu, se dostaneme pomocí příkazu :
# p o s ta l i a s h a s h : / e t c / po s t f i x / a l i a s e s
Změny a l iasů se projeví a ž p o a ktual izaci indexova né verze, neboť Postfix používá pou ze tuto verzi.
Spuštění Postfixu a test doručení uživateli root Je na čase spustit první testy. V předchozím textu jsme přidali nebo změnili řadu nasta vení, a půjde-li to tak dál , aniž bychom si tyto poznatky ověřili, při hledání případných chyb by mohly nastat potíže.
Spuštění Postfixu Než odešleme zprávu , musíme nejprve spustit Postfix. Když zadáme příkaz p o s t f i x s t a r t , Postfix vypíše:
# p o s t f i x s t a rt p o s t f i x / p o s t f i x - s c r i p t : s t a r t i n g t h e P o s t f i x ma i l s y s t e m Vypíše-li Postfix následující zprávu , byl u ž spuštěný dříve:
# p o s t f i x s t a rt p o s t f i x / p o s t f i x - s c r i p t : f a t a l : t h e P o s t f i x m a i l s y s t e m i s a l r e a dy r u n n i n g Měníme-li konfigurační soubor Postfixu v průběhu jeho činnosti, změny konfigurace se projeví až po zastavení a opětovném spuštění tohoto programu . Existuje ovšem elegant nější způsob aktualizace změn. Stačí zadat příkaz:
2 3
Nedávno se vyskytl virus/červ, který používal adresu odesílatele admin@$mydomain k tomu , aby se rozšířil po Internetu. Jméno admin není dobré jméno pro uživatelský účet.
Soubor aliasů, který je součástí Postfixu, obsahuje adresy, které jsou potřebné pro různé RFC na poš tovním serveru. Informace o tom, kde se nalezne popis těchto požadavků, je uvedena přímo v tom to souboru.
Předpokládá se, že vstupní a výstupní tvary souboru jsou kompatibilní se Sendmailem verze 8 a pou žitelné jako mapy NIS.
39
Kapito l a 3
40 # p o s t fix r e l o a d p o s t f i x / p o s t f i x - s c r i p t : r e f r e s h i n g t h e P o s t f i x ma i l s y s t e m
Tímto p říkazem znovu zavedeme pouze konfiguraci Postfixu , což zabere méně času a nedojde k výpadku v poskytování služeb klientům.
Odeslání zkušební zprávy Nyní, když jsme Postfix nastartovali, můžeme spustit první test: doručení zprávy adreso vané uživateli root do jeho schránky. Existují dva jednoduché způsoby, jak to můžeme udělat: poslat zprávu z příkazového řádku nebo ze sezení telnet. Oba způsoby mají tu výhodu, že vyloučí vliv j iné aplikace, jako např. poštovního klienta GUI, a umožní za měřit se na Postfix pro případ, že by nastala nějaká chyba.
Odeslání zprávy pomocí postfixového binárního souboru sendmail Nejjednodušší a nejspolehlivější test k ověření základních funkcí je použít s e n d ma i 1 , ne boť jsou vyloučeny všechny vnější komponenty Postfixu . Tato utilita se nazývá s e n d m a i 1 kvůli zpětné kompatibilitě - mnoho aplikací v systémech Unix, jejichž prostřednictvím jsou posílány zprávy, má cestu l u s r l s b i n / s e n d m a i 1 nebo l u s r / l i b / s e n d m a i l k binár nímu souboru s e n d ma i 1 ve svém kódu pevně nastavenou . Tam je také kvůli snadnému přechodu ze Sendmailu na Postfix ukládán postfixový binární soubor s e n d m a i 1 4 . Zadejme příkaz:
# echo foo I
l u s r l s b i n / s e n d m a i l - f r o o t r o o t && t a i 1 - f I v a r / l o g / m a i l l o g
Tímto příkazem je zaslán text f o o s obálkou , jejímž odesílatelem je uživatel root, a je otevřen žurnál se záznamem průběhu doručení:
A u g 20 2 1 : 5 6 : 4 2 ma i l p o s t f i x / p i c k u p [ 5 1 6 0 J : 8 4 8 A D 7 2 4 7 : u i d�O f r om�< r o o t > A u g 2 0 2 1 : 5 6 : 4 2 m a i l p o s t f i x / c l e a n u p [ 5 3 4 0 J : 848A D 7 2 4 7 : me s s a g e - i d�< 2 0 0 3 0 8 2 0 1 9 5 6 4 2 . 848A D 7 2 4 7@ma i l . e x a m p l e . c o m > A u g 2 0 2 1 : 5 6 : 4 2 ma i l p o s t f i x / n q m g r [ 5 1 6 1 J : 8 4 8 A D 7 2 4 7 : f r om�< r o o t@m a i l . e x a m p l e . c om > . s i z e= 3 0 6 . n r c p t � 1 ( q u e u e a c t i v e ) Aug 20 2 1 : 5 6 : 4 2 ma i l p o s t f i x / l o c a l [ 5 34 3 J : 848AD7 2 4 7 : t o�< a d m i n@m a i l . e x a m p 1 e . c om > . o r i g_t o�< r o o t > . r e l a y = l o c a l . d e l ay�O . s t a t us=sent ( ma i 1 box ) Jak můžeme z tohoto žurnálu vidět, Postfixu se podařilo poslat do této schránky zprávu . Ověřit si to můžeme pomocí příkazu 1 e s s l v a r I m a i 1 I a d m i n :
F r om r o o t@m a i l . e x a m p l e . c o m W e d A u g 2 0 2 1 : 5 6 : 4 2 2 0 0 3 Re t u r n - P a t h : < r o o t@m a i l . e x a m p l e . c om > X - O r i g i n a l - To : root D e l i v e r e d - T o : a d m i n@m a i l . e x a m p l e . c om R e c e i v e d : by m a i l . e x a m p 1 e . c o m ( P o s t f i x . f r om u s e r i d O ) i d 8 4 8 A D 7 2 4 7 ; W e d . 2 0 A u g 2 0 0 3 2 1 : 5 6 : 4 2 +0 2 0 0 ( C E S T ) M e s s a g e - I d : < 2 0 0 3 0 8 2 0 1 9 5 6 4 2 . 848A D 7 2 4 7@m a i l . e x a m p l e . c o m > D a t e : Wed . 2 0 A u g 2 0 0 3 2 1 : 5 6 : 4 2 +0 2 0 0 ( C E S T ) F r om : r o o t@m a i l . e x a m p l e . c o m ( r o o t ) 4 Je tu ovšem jeden háček: když přecházíme ze Sendmailu na Postfix, může dojít k tomu . že budou existovat dva binární soubory sendmail: Jeden. který se nainstaloval s Postfixem, a druhý, který zde zůstal po Sendmailu . Je třeba používat ten postfixový.
'a'hiU'
Poštovn í server v sa m ostatné doméně To : un d i s c l o s ed - re c i p i e n t s : ; foo
POZNÁMKA Když si nejsme j i sti, kde m á m e h l edat poštovn í sch r á n k u , zad á m e postconf maiLspooLdirectory a Postfix vypíše, kam byla zpráva doručena. Zatím je všechno v pořádku . Postfix si rozumí s e svými vlastními aplikacemi.
Odeslání zprávy z příkazového řádku Zkusíme si nyní ověřit, zda je možné odeslat zprávu z MUA uživateli root v lokálním systému . Je to druhý nejjednodušší test: 11 m a i l a d m i n
S u bj e c t : T e s t f r om c o mm a n d l i n e T h i s i s a t e s t ma i l f r om c omma n d l i n e .
Nejste-I i zbě h l í v práci s prog ramem mail, zde je návod k použití: 1. 2.
Na příkazovém řád ku zadejte příkaz ma i 1 . Zadejte jméno účtu, jemuž chcete poslat zprávu, a stiskněte RETU R N .
3. A ž Postfix vypíše výzvu, zadejte předmět zprávy (subject) a stiskněte RETU R N . 4. Zadejte text zprávy. 5.
Zpráva se odešle tak, že na nový řádek zadáme tečku (.) a stiskneme RETU R N .
Znovu s i pomocí příkazu l e s s / v a r / m a i l / a d m i n ověříme, zda byla zpráva odeslána: 11 l e s s / v a r / ma i l / a d m i n
F r om r o o t@ma i l . e x a m p l e . c o m W e d A u g 2 0 2 0 : 5 5 : 1 1 2 0 0 3 Re t u r n - P a t h : < r o o t@m a i l . e x a m p l e . c o m > X - O r i g i n a l - To : admi n D e l i v e r e d - T o : a d m i n@m a i l . e x a m p l e . c o m R e c e i v e d : by ma i l . e x a m p l e . c o m ( P o s t f i x . f r o m u s e r i d O ) i d 3 7 D E 0 7 2 4 7 ; W e d . 2 0 A u g 2 0 0 3 2 0 : 5 5 : 1 1 +0 2 0 0 ( C E S T ) T o : a d m i n@ma i l . e x a m p l e . c o m S u b j e c t : T e s t f r o m c omma n d l i n e Me s s a g e - I d : < 2 0 0 3 0 8 2 0 1 8 5 5 1 1 . 3 7 D E 0 7 2 4 7@ma i 1 e x a mp 1 e . c o m > D a t e : W e d . 2 0 A u g 2 0 0 3 2 0 : 5 5 : 1 1 +0 2 0 0 ( C E S T ) F r om : r o o t@m a i l . e x a m p l e . c o m ( r o o t ) T h i s i s a t e s t ma i l f r o m c omma n d l i n e . •
Zpráva byla doručena a ověřili jsme si, že mezi lokálními uživateli lze posí1at zprávy. Teď zkusíme poslat zprávu správci jako vzdálený uživatel.
Odeslání zprávy ze sezení telnet Nejjednodušším poštovním klientem je t e 1 n e t , který naváže spojení na SMTP port (port 25). Test provedeme primitivními prostředky, abychom vyloučili vedlejší efekty, které by mohly nastat vinou jiných , dokonalejších (a složitějších) klientů . Zprávu pomocí progra mu t e l n e t odešleme takto:
41
42
'U'fiiU'
Kapito l a 3
# t e l n e t m a il . ex a m p l e . com 2 5 T ry i n g 1 7 2 . 1 6 . 0 . 1 . . . C o n n e c t e d t o ma i 1 . e x a m p 1 e . c o m . ' E s c a pe cha racter i s J 2 2 0 ma i l . e x a m p l e . c om E S M T P P o s t f i x H E LO c l ie n t . examp l e . com 250 m a i l . e x a m p l e . c o m MA I L F ROM : < t e s t@c l i e n t . ex a m p l e . c om> 250 O k RCPT TO : < r oot@e x a mp l e . c om> 250 O k DATA 354 E n d d a t a w i t h < C R > < L F > . < C R> < L F > T e s t m a il f r om a t e l n e t s e s s io n . ' A
'
.
250 O k : queued a s 69 FIA7247 QUIT 2 2 1 By e A naposledy si pomocí příkazu l e s s / v a r / m a i l / a d m i n ověříme, zda zpráva byla ode slána:
F r om t e s t@c l i e n t . e x a m p l e . c o m Wed Aug 20 2 1 : 2 5 : 1 6 2 0 0 3 R e t u r n - P a t h : < t e s t@c l i e n t . e x a m p l e . c om > X - O r i g i n a l - T o : r o o t@e x a m p l e . c o m D e l i v e r e d - T o : a d m i n@ma i l . e x a m p l e . c o m R e c e i v e d : f r om c l i e n t . e x a m p l e . c o m ( m a i l . e x a m p l e . c o m [ 1 7 2 . 1 6 . 0 . 1 J ) by m a i l . e x a mp l e . c o m ( P o s t f i x ) w i t h S M T P i d 2 D8 9 A 7 2 5 1 f o r < r o o t@e x a m p l e . c om> ; W e d , 2 0 A u g 2 0 0 3 2 1 : 2 4 : 5 9 +0 2 0 0 ( C E S T ) M e s s a g e - I d : < 2 0 0 3 0 8 2 0 1 9 2 4 5 9 . 2 D 8 9 A 7 2 5 1@m a i 1 e x a m p 1 e . c o m > D a t e : W e d , 2 0 A u g 2 0 0 3 2 1 : 2 4 : 5 9 +0 2 0 0 ( C E S T ) F r om : t e s t@c l i e n t . e x a m p l e . c om To : u n d i s c l osed - reci p i ents : ; T e s t ma i l f r om a t e l n e t s e s s i o n . .
Zpráva byla rovněž doručena a ověřili jsme si tedy, že Postfix umí přijmout zprávu od vzdáleného uživatele určenou lokálnímu uživateli a umí ji i doručit.
Mapování e-mailových adres na uživatelská jména Nyní, když jsme úspěšně položili základy, můžeme začít s konfigurací poněkud sofistiko vanějších e-mailových adres. Implicitně Postfix pouze doručí zprávu na uživatelské jméno z poštovního serveru. Avšak uživatelská jména (například y0000247), která jsou rovněž pou žívána k autentizaci, jsou často odlišná od jmen osob používaných při vzájemné komunikaci (např. [email protected]). Aby Postfix mohl přijímat a doručovat zprávy na existující účty podle skutečných jmen, je třeba vytvořit aliasy ukazující na příslušná místa určení.
Vytváření aliasů Předpokládejme, že jsme do firmy Example Inc. přijali nového kolegu , který se jmenuje John Doe, a máme mu zřídit nový e-mailový účet. Pracuje v obchodním oddělení a poš tu na adresy j o h n@e x a mp l e . c om, j o h n . d o e@e x a m p l e . c o m a d o e@e x a mp l e . c o m má dostávat do jedné schránky a má dostávat i poštu adresovanou na s a l e s@e x a mp l e . c o m , kde pra cuje společně se Silvií a Karolem, přičemž oba dva poštu adresovanou na s a 1 e s@e x a m -
Poštovní server v sa mostatné doméně
';'fiiU'
p l e . c o m také dostávají. Johnovi už byl zřízen účet j o h n , jehož prostřednictvím má pří stup ke svým souborům. Nyní je potřeba namapovat tyto aliasy (j o h n@ex a m p l e . com, sa 1 e s@ex a m p l e . com atd.) na jeho lokální uživatelské jméno . Provedeme to vytvořením nových položek v l e t c / p o s t f i x I a 1 i a s e s . Johnovi je potřeba vytvořit pouze tři položky, i když mají být namapova ná čtyři jména. Není totiž třeba vytvářet , neboť na jméno j o h n , což je Johnův účet, budou doručovány všechny zprávy. Do souboru l e t c / p o s t f i x l a 1 i a s e s j e potřeba přidat tyto položky:
II u s e r s j ohn . doe : doe : II g r o u p s s a l es :
j ohn j ohn s i l vi a , karol , j ohn
Nastavení dokončíme tak, že spustíme buď p o s t a 1 i a s h a s h : I e t c / p o s t f i x l a 1 i a s e s ne bo n ewa 1 i a s e s , aby byl aktualizován soubor a 1 i a s e s . d b .
POZNÁMKA Z předchozího výpisu je zřej mé, že na levé stra ně je uvedena loká l n í část j ména, za n íž následuje dvojtečka a uživatelské jméno na pravé stra ně (loká l n í části jména se roz u m í vše, c o je před zavi náčem). Každá položka v a l iasu m ůže obsa hovat jed n u nebo více hodnot odděl ených čárka m i . Uvádíme buď uživatelská jména nebo e-ma i l ové ad resy. E m a i l ové ad resy mohou u kazovat na j i né uživatele v j i ných systémech, což zna mená, že bude přij ímána pošta pro uživatele na vl astním poštovním serveru a bude doručová na na zce la j i nou adresu . Další i nformace lze nalézt přímo v souboru a l iasů nebo je mož né si spustit ma n 5 a 1 i a s e s . Když jsme přidali všechny aliasy, můžeme tyto poštovní schránky otestovat stejným způ sobem jako v předchozím příkladu .
Nastavení povolení k předávání e-mailů z určité sítě Otevřená předávání (open relay) jsou noční můrou správců poštovních serverů . Každá postfixová instalace je implicitně bezpečná. V implicitní konfiguraci bude Postfix předá vat zprávy z IP adres pouze uvnitř sítě. Postfix tyto IP adresy zná, neboť je získal přímo z rozhraní nainstalovaných na daném serveru .
POZNÁMKA Na l i n uxových serverech bude Postfix d ůvěřovat všem podsítím, v n ichž n a l ezneme roz hra n í počítače. Seznam všech i m p l icitně d ůvěryhod ných podsítí v Linuxu získá me po mocí příkazu i f c o n f i g . Implicitní nastavení je v platnosti tak dlouho, dokud jsou server a příslušné systémy uží vající Postfix ve stejné síti. Změna tohoto nastavení připadá v úvahu , když síť zvětšuje me a stává se složitější. Uživatel se například může rozhodnout, že Postfix poběží v demilitarizovaném pásmu (DMZ) v IP prostoru, který není totožný s prostorem použí vaným interními systémy. V této situaci Postfix pravděpodobně nepovolí klientům pře dávat zprávy do cizích míst určení a bude třeba změnit konfiguraci . Rozšíření nebo omezení předávání lze provést buď genericky tak, že vybereme my n e t w o r k s_s ty l e, kde je nastavena topografie sítě, nebo individuálně tak, že zadáme seznam
43
44
'4-h"M
Kapito l a 3
IP adres nebo jejich rozsahů pomocí notace CIDR ( Classless lnter-Domain Routing, viz příloha C) v my n e t wo r k s . Obě metody vyžadují ruční změnu konfigurace v souboru m a i n . c f . Tato námaha má smysl v případě statických IP adres, které nejsou měněny příliš často.
POZNÁMKA V případě dyna m ických I P ad res, které jsou pravidelně měněny, je tato námaha zbyteč ná a brzy se omrzL Automatizace tohoto procesu je popsa ná v kapitole 1 6.
Generické nastavení práv předávání Standardní práva předávání nastavíme pomocí my n e two r k s_s ty l e tak, že vybereme vol bu c l a s s , s u b n e t nebo h o s t .
c1ass Zadáme-li volbu c l a s s , práva předávání jsou rozšířena na celou třídu IP sítí NB/C, pro kterou byl server zkonfigurován . Například když Postfix běžel na počítači 192.0.34 . 1 66 a zadáme my n e two r k s_s ty l e = c l a s s , Postfix bude důvěřovat celé síti 192.0.34.0/24 třídy C a povolí předávání ze všech systémů v tomto rozsahu.
subnet Pomocí volby s u b n e t vymezíme práva předávání zpráv přesně na ty podsítě, pro něž byla zkonfigurována síťová rozhraní serveru . Když byl například Postfix provozován na počítači s IP adresou 192.0.34 . 1 66/30 a zadáme my n e t w o r k s_s ty l e = s u b n e t , Postfix bude důvěřovat všem systémům v tomto rozsahu .
host Volbou host jsou práva předávání vymezena na server, na němž běží Postfix. Když byl například Postfix provozován na počítači s IP adresami 192.0.34 . 1 66/30 a 1 27.0.0. 1 a zadáme my n e tw o r k s_s ty l e = h o s t , Postfix bude důvěřovat pouze těm to systémům (IP adresy 1 27.0.0 . 1 a 192.0.34 . 1 66).
Individuální nastavení práv předávání Právo předávání je možno nastavit i individuálně, a to pomocí my n e two r k s . V notaci CIDR zadáme seznam všech systémů a sítí, pro něž má Postfix předávat zprávy. Když například Postfix běží v síti spojující dvě místa 0 92 . 1 68 . 1 00.0/24 a 192 . 1 68.200.0/24) a chceme, aby bylo povoleno předávání na všech systémech v DMZ ležící v 10.0.0.0/30 a také pro všechna vlastní lokální rozhraní 0 27.0.0.0/8), je třeba za dat takovýto seznam:
my n e t wo r k s = 1 2 7 . 0 . 0 . 0 / 8 . 1 9 2 . 1 6 8 . 1 0 0 . 0 / 2 4 . 1 9 2 . 1 6 8 . 2 0 0 . 0 / 2 4 . 1 0 . 0 . 0 . 0 / 3 0
POZNÁMKA Pro více IP ad res a rozsa h ů by byl tento seznam pro soubor ma i n . c f značně kom p l i ko vaný. Alternativně lze my n e t wo r k s nasměrovat na zvláštn í soubor ( my n e t wo r k s h a s h : / e t c / p o s t f i x / my n e t w o r k s l a kom pletní výpis bude vytvořen ta m . Tento soubor nesm í obsahovat sítě v notaci CIDR. Pokud chceme použít notaci CIDR, musíme zadat my n e t wo r k s = c i d r : / e t c / p o s t f i x / my n e two r k s .
KAPITOLA 4
PŘIPOJENí POŠTOVNíHO SERVERU PRO SAMO STATNOU DOMÉNU PROSTREDNICTVIM VYTÁČENÉHO SPOJENí V'
,
Nastavení poštovního serveru připojeného prostřednictvím vytáčeného spojení vyžaduje jen malé změny v základní konfiguraci Postfixu . Napojení po telefonní lince je drahé (zvláště v Evropě , kde účastníci platí poplatky za připojenO a asi bychom nechtěli mít poštovní server, který by navazoval spojení po lince kvůli každé zprávě . Existuje mož nost nastavit server tak, že je určitý počet zpráv před odesláním kumulován, čímž je ode sílání zlevněno. Když spojení aktivujeme, Postfix předá zprávy z fronty k odeslání serveru poskytovate le. Někdy také můžeme potřebovat podporu autentizace pomocí SMTP . Také by měly být vráceny zprávy, které nebylo možné doručit lokálním uživatelům v době, kdy byl server odpojen. Rozdíly mezi serverem připojeným po telefonní lince a mezi základní konfigurací jsou následující:
Spojení Vzhledem k tomu , že je poštovní server připojován k Internetu jen dočasně , jeho IP adresa může být při každém připojení změněna.
Vyhledávání (DNS) V době, kdy je server odpojen, nemůže vyhledávat jména systémů . Také vlastní DNS záznam serveru samotného se při každém připojení změní, takže nemusí fungovat zpětné ověření.
Omezené doručování Předávání je prováděno výhradně prostřednictvím systému poskytovatele, který na víc může předávat zprávy pouze pro autentizované uživatele.
46
'B-h'it:'
Kapitola
4
Příjem pošty Není možné doručovat poštu přímo na server, neboť po většinu času není připojen. Poš ta mu&í být uložena na poštovním serveru poskytovatele, dokud si ji uživatel nevyzved ne pomocí klienta POP!IMAP nebo programem fetchmail a nepředá ji svému lokálnímu přenosovému agentovi (MTA).
POZNÁMKA Tato kniha neobsah uje popis vyzvedává n í pošty pomocí klienta POPIl MAP a n i pomocí prog ram u fetchma i l (http://catb.org/-esr/fetchmail). N a obrázku 4.1 vidíme příklad sítě připojené prostřednictvím vytáčeného spojení. V pri vátní síti je o jeden počítač víc a internetové služby jsou zprostředkovávány pomocí vy táčené brány
(dia/-up gateway),
která je součástí postfixového serveru .
LAN
Internet Pracovní stanice '" ,� Cl. ,e Cl..
'u
Pracovní stanice
B rána/Poštovní server
Poskytovatel (předáván í pošty)
Poštovní server
Obrázek 4.1 Příklad sítě při pojené p rostřed n ictvím vytáčeného spoj e n í Konfigurace Postfixu jako poštovního serveru v samostatné doméně napojeného pro střednictvím vytáčeného spojení se provádí v následujících krocích, které jsou rozvede ny v dalším textu:
1.
Zrušte vyhledávání DNS
2.
Ověřte oprávnění předávání
3.
Nastavte server pro předávání
4.
Pozastavte odesílání zpráv
5.
Spusťte doručování zpráv
6.
Zkonfigurujte právo předávání zpráv pro předávací server
POZNÁMKA Tento scénář vychází z nastavení v ka pitole 3. Je třeba zkonfigurovat a otestovat server tak, jak popisuje tato kapitola. Také už by měl být zkonfigurovaný proces vytáčení ( h t t p : / / www . i b i b l i o . o r g / p u b / L i n u x / d o c s / HOWTO / o t h e r - f o rma t s / h t m l _s i n g l e / ppp HOWTO . h t m l ) .
Připoj e n í poštovn ího serveru pro samostatnou doménu . . .
';'fi'lt'
Zrušení vyhledávání DNS Když Postfix obdrží zprávu , kterou má doručit do vzdálené domény, musí hledat záznam typu MX nebo A cílové domény. Vyhledání jména na DNS serveru obvykle obnáší jeden dotaz vyslaný ze sítě a k Internetu je připojen server. Vzhledem k tomu , že připojení po lince chceme minimalizovat, je třeba Postfixu sdělit, aby nevyhledával údaje v DNS, dokud server není připojen. Ve skutečnosti by Postfix neměl nikdy hledat vzdálené domény, neboť zprávu chceme poslat prostřednictvím pře dávacího systému poskytovatele, který pochopitelně ví, kam má zprávu poslat. Vyhledávání zrušíme tak, že v souboru ma i n . cf nastavíme parametr di s a b 1 e_d n s_l o o k u p s :
Tím j e zrušeno vyhledávání DNS záznamů MX!A v klientovi smtp(8) a vyhledávání zá znamu A v klientovi lmtp(8) a v obou případech je místo toho použito gethostbynameO . Je potřeba si to uvědomit při nastavování předávacího systému dále v této kapitole . Po nastavení parametru d i s a b 1 e_d n s_l o o k u p s je třeba Postfix znovu zavést, aby byly ak tivovány provedené změny.
POZNÁMKA Tímto nastavením není zrušeno DNS v serverovém progra m u s m t p d . Para metry r e j e c t_u n k n own_s e n d e r _d oma i n a p e rm i t_mx_b a c k u p (viz kapitola 8) zůstávaj í v platnosti bez ohledu na hodnotu parametru d isa ble_d ns-'ooku ps.
Nastavení předávacích oprávnění Server připojený prostřednictvím vytáčeného spojení m á obvykle dynamickou I P adresu, která je změněna při každém připojení k Internetu . Proto není možné řídit předávací oprávnění síťového rozhraní vytáčeného serveru, pokud nejsou předávací oprávnění na stavena ručně při každém on-line připojení serveru . Kdo jiný než spammer by tedy chtěl být připojen k Internetu prostřednictvím vytáčeného spojení?
POZNÁMKA I když je systém při pojová n pouze občas, n i kdy by k němu neměl m ít přístup celý I nter net. Jeden z poštovn ích serverů autora této k n i hy zaznamenal 56 (neúspěšných) poku sů o před á n í v průběhu 30 d n í. To jsou skoro dva pokusy den ně, i když stroj nebyl na pojen nepřetržitě ! Naštěstí se nic nesta lo, protože napoje n í bylo bezpečné. Pokud z nějakého podivného důvodu (viz kapitola 1 6) nechcete, aby na váš postfixový server byli napojeni určití uživatelé, měli byste v souboru ma i n . c f omezit spojení na lo kální síťové rozhraní a rozhraní smyčky. Jde-Ii například o privátní síť 1 92 . 1 68.0.0/24, na stavení může vypadat třeba takto:
my n e t wo r k s
�
1 9 2 . 1 68 . 0 . 0 / 2 4 . 1 2 7 . 0 . 0 . 1 / 8
47
K a p itola
48
4
U vytáčeného serveru nenastavujte předávací oprávně n í pomocí my n e two r k s_s ty l e c l a s s .�Je tím nastaven celý rozsah IP ad res síťových rozh ra n í včetně sítě, do n íž je váš server na pojová n vytáčením. Všich n i kl ienti poskytovatele by ta k moh l i používat váš poštovní server k předává n í zpráv !
Jako obvykle je třeba novou konfiguraci znovu zavést pomocí p a s t t i x
re 7 oa d.
Nastavení předávacího serveru poskytovatele připojení Dříve než provedeme tento bod konfigurace, j e třeba určit, jaký poštovní systém má po skytovatel připojení. Mnoho poskytovatelů blokuje odchozí spojení na TCP portech 25 (port SMTP) pro vytáčené linky, neboť jsou často zneužívány spammery.
POZNÁMKA Navíc, kromě požadavků poskytovatele existuje ještě řada dobrých d ůvodů, proč by Postfix neměl doručovat zprávy přímo do m ísta u rčení. Například: protože značná část spa m ů pochází z vytáčených systémů, začaly být do černé l isti ny připisová ny celé bloky vytáčených sítí (a nalogové, LSD N a DSL), které jsou známé tím, že jsou využívá ny k ro zesíl á n í spa m ů . Dokonce i když zpráva ne ní spam, m ůže ji vzdá lený přenosový agent od m ítnout na základě DUL (d ial-up user l i st) prostě proto, že daná I P ad resa je v tom to sezn a m u . Kdyby například přenosový systém byl r e l a y . e x a m p 1 e . c o m, měl b y být zadán příkaz:
r e l a y h o s t = [ r e l a y . e x a mp l e . c o m J Je-Ii jméno systému uvedeno v hranatých závorkách, nebude s e hledat jeho M X záznam. Po zadání obvyklého příkazu p o s t f i x r e l o a d můžeme pokročit dál .
Pozastavení předávání zpráv V tomto místě je Postfix zkonfigurován tak, že doručuje zprávy předávacímu systému bez vyhledávání, aniž by docházelo k potížím s otevřeným předáváním. Prozatím je však kvůli každé odchozí zprávě určené vzdálené síti vytáčeno spojení na poskytovatele. Chceme-Ii tento způsob předávání zpráv změnit a nahradit jej frontou odchozích zpráv, je třeba provést pomocí editoru změny v souboru ma i n . cf a sdělit Postfixu, aby odesí lání zpráv prostřednictvím SMTP pozastavil. Provedeme to pomocí parametru d e f e r _t r a n s p o r t s , viz následující příklad:
d e f e r_t r a n s p o r t s = s m t p
POZNÁMKA Nepoužíváme- I i SMTP, nýbrž U U CP, v příkazu je třeba změnit s m t p na u u c p . Znovu p o této změně zadáme příkaz p o s t f i x r e l o a d a p o aktualizaci této změny už zprávy nebudou posílány prostřednictvím SMTP, dokud nezměníme nebo nezrušíme pa-
Připoj e n í poštovn ího serveru pro sa mostatnou doménu . . .
'4-fiijt'
rametr d e f e r _t r a n s p o r t s . V následující části se dozvíme, jak se tohoto parametru vyu žívá při doručování zpráv, když je navázáno vytáčené spojení.
Spuštění doručení zpráv Nyní už zbývá jen sdělit Postfixu , že má poštu tvořící frontu předat prostřednictvím SMTP, jakmile je navázáno spojení s Internetem. Provedeme to tak, že po navázání spo jení Postfix automaticky rekonfigurujeme a poté zase uvedeme do původního stavu . Mů žeme to provádět pomocí skriptu , který spouštíme vždy po ustavení spojení. V případě dvoubodového spojení v systému Linux jsou tyto skripty v / e t c / p p p / i p - u p . d . V tomto adresáři je třeba vytvořit skript jménem p o s t f i x , který spustíme po skriptu , jímž je nastaveno r e s o l v . c o n f . Skript p o s t f i x vypadá takto:
## s t a r t o r r e l o a d P o s t f i x a s n e e d e d # i f P o s t f i x i s r u n n i n g c h r o o t e d . c o py r e s o l v . c o n f t o t h e r e s o l v . c o n f P o s t f i x uses c p - p / e t c / r e s o l v . c o n f ' p o s t c o n f - h q u e u e_d i r e c t o ry ' / e t c / r e s o l v . c o n f 4t # u n s e t d e f e r_t r a n s p o r t s a n d m a k e P o s t f i x n o t e i t p o s t c o n f - e " d e f e r_t r a n s p o r t s postfi x rel oad # F o r c e a q u e u e r u n t o u n l o a d a n y ma i l t h a t i s h a n g i n g a r o u n d postfi x fl ush o Řádek obsahující r e s o l v . c o n f j e relevantní, jen když Postfix běží v uzavřeném pro storu c h r o o t a server jej změní při vytáčení. Postfix také potřebuje znát běžné jmenné servery, takže tímto příkazem je nová verze zkopírována do tohoto uzavřeného prosto ru , kde jej Postfix může najít.
Podobně když počítač přechází do off-line režimu , je třeba obnovit vytváření fronty zpráv. V adresáři / e t c / p p p / i p - d own . d je třeba vytvořit skript jménem p o s t f i x , který je spuštěn při ukončení spojení (zde má opět řádek s r e s o 1 v . c o n f smysl jen v uzavřeném prostoru):
## s t a r t o r r e l o a d P o s t f i x as needed # c opy r e s o l v . c o n f t o t h e r e s o l v . c o n f P o s t f i x uses ( on l y i f P o s t f i x i s c h rooted l cp - p / e t c / r e s o l v . c o n f ' po s t c o n f - h q u e u e_d i r e c t o ry ' / e t c / r e s o l v . c o n f # s e t d e f e r_t r a n s po r t s a n d m a k e P o s t f i x n o t e i t p o s t c o n f - e " d e f e r_t r a n s po r t s = s m t p " postfi x rel oad
Konfigurace předávacích oprávnění pro předávací systém Mnozí poskytovatelé připojení k Internetu , kteří nabízejí svoje služby zdarma , a zejmé na pak ti, kteří nabízejí klientský přístup SMTP společně s webovým mailovým rozhra ním, požadují před použitím předávacího systému zvláštní ověření. To je nutné, neboť většina jejich uživatelů je připojena od jiných poskytovatelů (a tedy z jiných adresových prostorů IP adres), takže jim nemohou nastavit předávací oprávnění na základě IP adres. Kdyby poskytovatelé otevřeli svoje poštovní servery širokému spektru IP adres, vzniklo by otevřené předávání a bylo by dílem okamžiku , než by je začali využívat spammeři. Proto poskytovatelé vyžadují autentizaci POP-before-SMTP nebo SMTP .
49
50
'4-hiitl'
Kapito l a 4
Ověření POP-before-SMTP Poskytovatel , který požaduje ověření POP-before-SMTP (viz kapitola 1 5), přijme odcho zí zprávy pouze tehdy, když uživatel před odesláním zprávy obdrží příchozí zprávu . Ji nými slovy, stroj musí být před tím, než něco pošle, autentizován s poskytovatelovým serverem pomocí protokolu POP3 nebo IMAP4 . Jakmile proběhne autentizace, poskyto vatel si poznamená příslušnou IP adresu a v určitém časovém rozmezí jí povolí odeslá ní zprávy prostřednictvím svého přenosového systému . Postfix je přenosovým agentem; jeho jazykem není ani POP3, ani IMAP4 . Proto nemůže provádět ověření POP-before-SMTP sám. To však není problém, neboť uživatel si snad no může zkonfigurovat program fetchmail ( h t t p : / / e a t b . o r g / -e s r / f e t e h m a i l ) , který ověření provede. Je to krátká utilita, kterou spouštíme z příkazového řádku a která umí zpracovat poštu z téměř všech poštovních systémů na Internetu . K použití v systému ji připravíme takto: 1.
Zkonfigurujte Postfix dle popisu v této kapitole.
2 . Podle instrukcí v dokumentaci vytvořte funkční konfiguraci utility fetchmail. 3 . Vložte do skriptu l e t e / p p p , jímž se vytáčí spojení, volání utility fetchmail před místo, kde se rekonfiguruje Postfix. Před tím, než Postfix (SMTP) zahájí odesílání zpráv z fronty, je alespoň jednou spuštěna utilita fetchmail (což je POP/IMAP klient) a poskytovatel se tak dozví, že může tyto zprá vy přijmout.
Autentizace pomocí protokolu SMTP Poskytovatel, který vyžaduje autentizaci pomocí protokolu SMTP, umožní klientu, resp. serveru přenos zpráv přes svůj přenosový systém pouze tehdy, když se dokáže autenti zovat prostřednictvím SMTP dialogu . K tomuto způsobu autentizace nejsou potřeba žád né zvláštní programy ani služby, takže se mu dává přednost před metodou POP-before-SMTP (zejména v případech , když uživatel chce jen odeslat zprávu a žádnou nedostat) . Podrobné informace o konfiguraci autentizačního klienta pro Postfix v protokolu SMTP naleznete v kapitole 16.
KAPITOLA 5
ANATOMIE POSTFIXU V této kapitole se dozvíme, jak Postfix pracuje, k čemu jsou jednotlivé komponenty to hoto systému a jak spolu souvisí. Po přečtení této kapitoly by čtenář měl získat celkový přehled o Postfixu a může se zaměřit na jednotlivé podrobnosti. Postfix je složen z několika programů , které spolupracují s uživatelskými procesy ( s e n d ma i l , p o s t q u e u e , p o s t s u p e r atd.), a z mnoha programů zpracovávaných na pozadí, kte ré jsou řízeny hlavním démonem. Jeho úkolem je rozhodovat, jaká úloha má být provedena a který program ji provede . Toto modulární uspořádání zajišťuje vysoký stu peň bezpečnosti, neboť každý program běží s nejnižší možnou prioritou, kterou potře buje ke své činnosti . Postfix si můžeme představit jako směrovač. Na první pohled to může znít divně, avšak je třeba si uvědomit, že úlohou směrovače je prohlížet IP pakety, určovat cílové IP adresy (někdy i zdrojové) a vybírat správné rozhraní, na něž je třeba nasměrovat paket, aby do razil k cíli. Postfix dělá totéž s poštou (viz obrázek 5 . 1 ) . Aby mohl rozhodnout, která apli kace přesune zprávu směrem k cíli, zjišťuje její místo určení (příjemce obálky) a původ zprávy (odesilatele obálky) .
Odesílatel obálky
Příjemce obálky
--
Obrázek 5.1 Postfix p l n í ú l o h u směrovače Nyní se podívejme podrobněji na celý systém. Skutečný směrovač obvykle přijímá IP pa kety z více rozhraní a jejich prostřednictvím je posílá dál . Totéž platí pro Postfix, který přijímá zprávy z různých zdrojů a posílá je na různá místa určení. Původcem zprávy mů že být lokální binární soubor sendmail nebo protokoly SMTP nebo QMQP . Cílem může být lokální poštovní schránka, odchozí SMTP nebo LMTP, roura do programu atd . , což je znázorněno na obrázku 5 . 2 .
52
'4-fi" M
Kapito l a 5
�SM1P OMOP
SMTP / LMTP----Postfix lokální
s e n dma i 7
_______
rou ra
�
Obrázek 5.2 " Směrovač " Postfix přij ímá a ustavuje všechny druhy spojení Původ a cíl zprávy s e zdají b ýt jasné, avšak j a k vybere Postfix metodu, kterou m á být zprá va doručena? Směrovač používá ke stanovení cesty směrovací tabulky s IP adresami sítí.
V Postfixu se vyhledávací tabulky nazývají mapy. Jsou používány nejen k nalezení ces ty, nýbrž jejich prostřednictvím jsou klientům, odesílatelům a příjemcům ukládána jistá omezení a také v těle zprávy vyhledávají určité vzorky. Na obrázku 5 . 3 je znázorněno, kam mapy v Postfixu patří (uvádíme alespoň některé z nich - nazývají se t r a n s p o r t ,
v i r t u a l a a l i a s ).
�M1P ---- UUCP OMOP ----
lokální
-------
Obrázek 5.3 Mapy jsou tabulkami, ve kterých " směrovač " Postfix vyhledává
'4-a"i
Anatomie Postfixu
Démoni v Postfixu Na obrázku 5.4 je uveden přehled postfixových démonů a jejich propojení.
POZNÁMKA Postfix se neustá le vyvíj í. Uvedený seznam démonů od povídá verzi Postfixu 2. 1 .
master Démon ma s t e r je supervizorem v Postfixu a dohlíží na všechny ostatní démony. Č eká na příchozí úlohy, které pak deleguje podřízeným démonům. V případě zvýšeného objemu úloh může spouštět démony paralelně. V konfiguraci lze zadat počet paralelně pracují cích démonů , četnost jejich použití a dobu nečinnosti, po jejímž uplynutí je daný proces zrušen. Tento démon se podobá unixovému serveru i n e t d .
bounce a defer Je-li zpráva nedoručitelná, přenosový agent to musí oznámit odesílateli. Tuto úlohu za stávají démoni b o u n c e a d e f e r a spouští je správce fronty ( q mg r ) . Dva konkrétní typy událostí, jež jsou oznamovány odesílateli, jsou neodstranitelná chyba a místo určení, kte ré je po určitou dobu nedostupné. Druhá z nich má za následek varovné hlášení o zpož děném doručení.
error Démon e r r o r je doručovací agent jako 1 o c a 1 nebo s m t p a vždy způsobí vrácení zprávy. Je používán jen tehdy, když je pošta nasměrována na nesprávného doručovacího agen ta a vznikne tak nedostupná doména. Pošle-li se zpráva démonu e r r o r , bude informo vat démona b o u n c e , aby si poznačil, že příjemce je nedostupný.
trivial-rewrite Tento démon se volá z démona c l e a n u p , aby byly přepsány nestandardní adresy na stan dardní tvar u s e r@f q d n . Na základě požadavku správce fronty ( q mg r ) mohou být přepsány pouze cílové adresy. Implicitně rozlišuje tento démon pouze mezi lokálními a vzdálenými adresami.
showq Pomocí démona s h owq je vypisována fronta zpráv a je to stejný program, který zpraco vává příkaz ma i 1 q ( s e n d m a i 1 b p ) . Tento démon musí existovat proto, že ostatní uži vatelé frontu v Postfixu nevidí; uživatelský program, který nemá nastavena práva vlastníka (setuid), si frontu nemůže vypsat (neboť binární soubory Postfixu nemají na staven příznak setuid). -
flush Démon fl u s h se pokouší zpracovat nevyřízené a odložené zprávy z fronty. Č ekající zprávy seřadí podle míst určení a tím urychlí provádění požadavku SMTP Extended Turn (ETRN) a ekvivalentního řádkového příkazu s e n d m a i l - q R d e s t i n a t i o n . Seznam míst určení je možné udržovat pomocí parametru f a s t_f l u s h_d oma i n s v souboru ma i n . c f .
53
54
'4-fiihl
Kapito la 5
qmqpd
bouncel defer
p i pe
1
smtp
oca 1
l mt p
vi rtua l
Legenda
L.=-' Obrázek 5-4 Vzta hy m e z i d é m o n y Postfixu
Anato m i e Postfixu
';'hid'
qmgr Démon q m g r slouží ke správě front v Postfixu a je duší celého poštovního systému . Zde je přidělováno doručování zpráv démonům 1 o c a 1 , s m t p , 1 m t p a p i p e . Poté co je úloha démonu přidělena, je mu předána i cesta k souboru obsahujícímu zprávu ve frontě, adresu odesilatele, cílový systém (je-li vzdálený) a jednu nebo více adres příjemce (pří jemců). Design démona q m g r je dobrým příkladem takového zpracování úloh, při němž je dbá no na účelné hospodaření s prostředky na zajištění stability systému . Za zmínku stojí ze jména dvě věci: •
•
q m g r spravuje pouze krátkou frontu s několika zprávami čekajícími na doručení. Ta to fronta je pouze podmnožinou potenciálně dlouhých front příchozích a odložených zpráv, čímž je předcházeno možnému nedostatku paměti při velkém zatížení systé mu . Nelze-li zprávu doručit ihned, je umístěna do fronty dočasně odložených zpráv. Dí ky existenci takové fronty není v případě nahromadění zpráv zpomaleno zpracová ní ostatních front.
Démon q m g r na vracení zpráv příjemcům uvedeným v tabulce změn společně s kon taktními informacemi o uživatelích (resp . doménách), kteří už nejsou součástí systému, používá démony b o u n c e a e r r o r .
proxymap Mapy mohou klienti Postfixu číst pomocí démona p r o xy m a p . Díky tomu , že otevřenou mapu může sdílet více démonů , jsou tak obcházena omezení daná změnou kořenového adresáře ( c h r o o t ) a je redukován počet otevřených tabulek.
spawn Pomocí procesu s p a w n je na požádání vytvořen proces běžící mimo Postfix, který sledu je port TCP , doménový socket Unixu nebo fronty připojené k standardnímu vstupu, stan dardnímu výstupu a standardnímu chybovému výstupu . Jedinou zmínku o tomto démonu naleznete v této knize pouze v kapitole 13 věnované externímu systému na filt rování obsahů .
loeal Jak název napovídá, démon 1 o c a 1 je odpovědný za doručování do lokálních poštovních schránek. Zapisuje do nich ve formátech mbox a Maildir a navíc umí zpracovat data sendmailových databází aliasů a uživatelských souborů .forward.
POZNÁMKA Tato schopnost č i n í démona 1 o c a 1 rovnocen ným partnerem poštovního agenta Send m a i l, neboť oba zpracovávaj í stej né už ivatelské rozh ra ní. Alternativně může démon local delegovat doručování do poštovních schránek lokálnímu doručovacímu agentu (LDA), který má určitá zdokonalení, jako např. filtrování. Dalšími dvěma oblíbenými doručovacími agenty jsou p r o c m a i l ( h t t p : / / www . p r o c m a i l . o r g ) a ma i l d r o p ( h t t p : / / www . f l o u n d e r . n e t / -m r s a m / m a i l d r o p ) . Démon 1 o c a l může pracovat paralelně ve více kopiích.
55
56
'4-hdt'
Kapito l a 5
virtual Démon v i r t u a 1 , nazývaný také virtuální doručovací agent, je redukovaná verze démo nu 1 o c � 1 a je jím doručována pošta výhradně do poštovních schránek. Je nejbezpečněj ším postfixovým doručovacím agentem; neprovádí aliasy a rozšíření . f o rwa r d . Může doručovat poštu d o více domén, což j e využíváno zejména v případě existence ně kolika malých domén na jediném počítači ("poštovní topinkovač" - POP toaster), bez potřeby skutečného systému nebo shellových účtů .
smtp Klient s m t p je program, který přenáší odchozí zprávy do vzdálených míst určenÍ. Vyhle dává cílové poštovní systémy ( mail exchangers, MX), třídí seznamy priorit a kontaktuje ser very podle adres. Ve vytíženém Postfixu obvykle běží několik démonů smtp současně.
Imtp Klient 1 m t p komunikuje s lokálními a vzdálenými schránkovými servery (mailbox server) pomocí protokolu LMTP , který je definovaný v RFC 2033 C f t p : / / f t p . r f c e d i t o r . o r g / i n - n o t e s / r f c 2 0 3 3 . t x t l . Č asto je používán se serverem Cyrus pod proto kolem lMAP C h t t p : / / a s g . w e b . e m u . e d u / cy r u s / i m a p d ) . Výhody nastavení s klientem Imtp spočívají v tom, že Postfix zpracovává všechny fron ty a jeden postfixový stroj může obsloužit několik schránkových serverů (na nichž běží démon LMTP) pomocí LMPT. Opak je též pravdou: Několik postfixových strojů může obsloužit jeden schránkový server pomocí Imtp . Tyto schránkové servery mohou napří klad provozovat Cyrus lMAP.
pipe Poštovní klient pi p e je rozhraním pro odchozí poštu na jiné transportní mechanismy. Spouští programy s parametry a posílá tělo zprávy na jejich standardní vstupy.
pickup Démon pi c k u p vybírá zprávy z fronty vytvářené lokálním uživatelským klientem s e n d ma i 1 . Provádí určité kontroly a předává zprávy démonu c l e a n u p .
smtpd Pomocí démonu s m t p d je zpracovávána komunikace se síťovými poštovními klienty, kte ří doručují zprávy Postfixu prostřednictvím SMTP . Z důvodu ochrany systému Postfix provádí s m t p d řadu kontrol a lze jej zkonfigurovat tak, aby prováděl kontroly na nevy žádanou komerční poštu ( unsolicited commercial e-mail, UCE) na základě černých lis tin, vyhledávání DNS nebo jiných klientských požadavků. Jakmile s m t p d přijme zprávu , zařadí ji do fronty příchozích zpráv, kde ji převezme q mg r .
cleanup Démonem cl e a n u p jsou prováděny závěrečné úkony při zpracování nové zprávy. Jsou doplněny chybějící hlavičky, je připraveno přepsání adres a (volitelně) je vyextrahována adresa příjemce z hlavičky zprávy. Upravená zpráva je umístěna do fronty příchozích zpráv a správci fronty je oznámen příchod nové zprávy.
Anatomie Postfixu
sendmail s e n d m a ; 1 je příkaz Postfixu, ktetým je nahrazen a emulován přenosový agent S e n d m a ; 1 Erka Allmana. Jeho úlohou je poskytnout kompatibilní rozhraní těm aplikacím, které pouze volají I u s r I s b ; n i s e n dma ; 1 . Při umisťování pošty do fronty používá binární sou bor p o s t d r o p .
POZNÁMKA s e n d m a i 1 je nejzd louhavější způsob, jak předat poštu do Postfixu . Pro jednorázové ode s l á n í vel kého objemu zpráv je lépe použít SMTP.
qmqpd Postfixový server QMQP používá protokol QMQP (Quick Mail Queuing Protocol, viz h t t p : / / c r . y p . t o / p r o t o / q mq p . h t m l ). Důvodem je kompatibilita s programem q m a ; l a správcem výpisů e z m l m.
anvil a n v ; 1 slouží v Postfixu k preventivní ochraně před klienty SMTP a útoky způsobujícími odmítnutí služby, které zaplavují SMTP server velkým množstvím souběžných nebo po sobě jdoucích pokusů o navázání spojení. Výjimky oprávněných klientů , na něž se ome zení nevztahují, jsou uvedeny na bílé listině. a n v ; 1 není součástí verze Postfixu 2 . 1 , avšak ve verzi 2 . 2 j e v experimentálním vydání a v této podobě zůstane p o celou dobu zkušebního provozu .
Fronty v Postfixu Postfix má všechny fronty soustředěné v adresáři uloženém v parametru q u e u e_d i r e c · t o ry v souboru m a ; n . c f . Obvykle je to adresář I v a r l s p o o l / p o s t f ; x . Každá fronta má podadresář se jménem fronty. Dokud Postfix zprávy nedoručí, zůstávají v těchto adresá řích. Stav zprávy lze určit podle toho, ve které je frontě: příchozí ( ; n c o m ; n g ) , odchozí ( m a ; l d r o p ) , odložená ( d e f e r r e d ) , aktivní ( a c t ; v e ) , pozdržená ( h o l d ) nebo porušená ( corrupt ) .
incoming Všechny nové zprávy, které vstupují do systému front, jsou umístěny do fronty příchozích zpráv programem c l e a n u p . Vlastníkem nových souborů ve frontě je uživatel postfix s pří stupovým režimem 0600. Jakmile je soubor ve frontě připravený k dalšímu zpracování, program c l e a n u p změní režim souboru ve frontě na 0700 a oznámí správci fronty, že při šla nová zpráva. Nepřipravené soubory ve frontě s režimem 0600 správce front ignoruje. Správce front prohlíží frontu příchozích zpráv, když přesouvá novou zprávu do fronty aktivních zpráv a zjišťuje, zda nebyly překročeny limity prostředků . Implicitně může mít fronta aktivních zpráv maximálně 20 000 zpráv.
J a k m i l e je překročen l i m it a ktivn ích zpráv, správce přesta ne prohl ížet fronty ; n c o m ; n g a defer red.
57
58
'a-fi'lt'
Ka pitol a 5
maildrop Zpráva odeslaná příkazem s e n d m a i 1 , která nebyla poslána primárně do postfixového systé mu fror'lt programem p i c k u p , čeká na zpracování ve frontě ma i l d r o p . Do této fronty lze přidávat zprávy, i když Postfix není v činnosti; zpracuje je až poté, co bude spuštěn. Jednovláknový program pi c k u p prohlíží a vyprazdňuje frontu ma i 1 d r o p jednak v pravi delných intervalech, jednak na základě upozornění programu p o s t d r o p . Program p o · s t d r o p m á oprávnění setgid, takže zařazuje zprávy do fronty m a i 1 d r o p místo programu s e n d ma i 1 , který k tomu nemá oprávnění, a oznamuje programu p i c k u p příchod nové zprávy. (Všechny zprávy umisťuje do systému postfixových front porgram c l ea n u p . )
deferred Je-Ii zpráva určena příjemci, jemuž se z nějakého přechodného důvodu nedaří doručovat, a zpráva byla jinak doručena všem ostatním příjemcům, je umístěna do fronty d e f e r r e d . Fronta d e f e r r e d j e správcem front pravidelně prohlížena, aby odložené zprávy mohly být vráceny dó fronty a ct i v e . Interval prohlížení se nastavuje při konfiguraci v para metru q u e u ej u n_d e l a y . Setkají-Ii se v daném okamžiku dva požadavky na prohlížení front d e f e r r e d a i n c om i n g , zprávy v jedné a v druhé frontě jsou prohlíženy střídavě.
active Fronta aktivních zpráv a c t i ve je analogií k frontě procesů zpracovávaných v systému. Zprávy v této frontě jsou připraveny k odeslání, avšak odesílání ještě nezačalo. Správce front je plánovačem doručovacího agenta , který v rámci limitů přidělených pro středků zajišťuje rychlé a správné doručení pošty.
POZNÁMKA I když většina správců považuje frontu active za soubor na d isku, skutečná fronta je m nožina datových struktur v paměti procesu správce front.
hold Správce může definovat politiku přístupu k s m t p d , k hlavičce cl e a n u p a ke kontrole tě la zprávy (viz kapitola 1 0) tak, že je zpráva automaticky vyřazena z procesu normálního zpracování a je umístěna na nedefinovanou dobu do fronty h o l d, kde zůstane až do zá sahu správce. Nejsou činěny žádné pravidelné pokusy o doručení zpráv z této fronty. Zpráva z této fronty může být přesunuta do fronty d e f e r r e d ručně pomocí příkazu p o · stsuper. Zprávy mohou ve frontě h o 1 d zůstat p o dobu , která přesahuje životnost fronty dané pa rametrem m a x i ma l _q u e u e_l i f e t i me (po jejímž uplynutí je zpráva vrácena odesilateli) . Je -Ii třeba z fronty h o l d odstranit staré zprávy, je možné je příkazem p o s t u p e r - r přesu nout do fronty ma i l d r o p , kde zpráva dostane novou časovou známku a novou příleži tost k doručení.
POZNÁMKA Fronta hold má na výkonnost Postfixu m i n i m á l n í vl iv; mon itorová n í této fronty je mo tivová no spíše potřebou vyh ledávat spamy a chrá n it systém před poškozen ím než zvy šovat výkon systém u .
59
Anatomie Postfixu
corrupt Adresář corrupt obsahuje poškozené soubory. Postfix je nemaže, nýbrž ukládá pro pří pad, že by je poštovní správce chtěl dále zkoumat. Při spuštění vypisuje Postfix hlášení o všech poškozených souborech.
Mapy Mapy jsou soubory a databáze sloužící k vyhledávání informací. Mohou mít různé úče ly, jedno však mají společné - na levé straně (LHS) je klíč a na pravé straně (RHS) je
hodnota. Zde jsou některé příklady klíčů a jejich hodnot:
Klr�
Hodnota
postma s t e r : p o s tma s t e r@e x a m p l e . e o m 1 9 2 . 1 6 8 . 2 54 . 1 2 s p a mm e r@e x a m p l e . e o m 1 ' 5ubj eet : your aeeount 1 2 5 } [ a - z ] 1 8 } 1
j ohn j ohn REJECT REJECT R E J E C T M i ma i 1 V i r u s D e t e e t e d
Mapa je používána tak, ž e j e zadán klíč a j e vrácena hodnota .
POZNÁMKA Kl íče a hodnoty v této mapě pocházej í z různých souborů a nemaj í žádný smys l . Uvá d í me je jen pro i l ustraci, a bychom u káza l i, že všechny mapy maj í stej ný zá k l a d n í tva r.
Typy map Postfix používá řadu různých typů map . Jejich tvar závisí n a tom, j a k byl Postfix v da ném konkrétním systému přeložen. Tvary tabulek lze zjistit pomocí příkazu p o s t e o n f - m , kterým je vypsán seznam typů map :
/I p o s t e o n f - m btree edb cidr en v i ron hash l dap my s q l nis pere p r o xy regexp s d bm stati e tep un i x
60
'4-h"M
Ka pitol a 5
Indexované mapy (hash, btree, dbm atd.) Indexované mapy jsou binární databáze vytvořené z normálních textových souboru pří kazy jako n ewa 1 i a s e s , p o s t a 1 i a s a p o s t m a p . Mají indexový tvar a rychle jsou z nich zís kávány hodnoty klíčů . Démoni si je kvůli rychlosti otevřou hned při spuštění a z disku je čtou znovu až tehdy, když je oznámena změna v mapě. Do paměti jsou zaváděny tak, že je původní démon ukončen a je spuštěn nový, který si mapu zavede .
POZNÁMKA Pokud jsou indexova né mapy často měněny, stej ně často budou resta rtová n i i démoni, kteří je používaj í. Při vel ké zátěži systému to m ůže vést k prob l é m ů m s výkonem systé mu. Nejčastěji používané indexované mapy jsou vytvořeny z textových souboru a 1 i a s e s , v i r t u a l , t r a n s p o r t , r e l o c a t e d a s a s l _p a s swd . Soubory obsahující mapy poznáme snadno, neboť mají stejné jméno jako původní soubor a mají příponu, která současně ří ká, že jde o indexovaný tvar. Například soubor obsahující mapu aliasů a vytvořený pří kazem p o s t a l i a s se jmenuje a l i a s e s . d b .
POZNÁMKA Vytvá říme- I i soubor, z něhož má vzn i knout indexova ná ma pa, kl íče v něm nemusí být uspořádané - konverz n í nástroje to nevyžaduj í. Ve skutečnosti je toto uspořádání změ něno. Předdefinované uspořádání položek v postfixových frontách lze nalézt v manuálových stránkách a c c e s s ( 5 ) , Jinými slovy, každé hledání v mapě je složeno z posloupnosti do tazů (vytvořené z původního dotazu) na jednotlivé klíče v mapě.
Lineární mapy (PCRE, regexp, CIDR a normální soubory) Lineání mapy jsou normální textové soubory. Postfix je na rozdíl od indexovaných map čte od začátku do konce . Tento rozdíl je velmi důležitý, neboť o následující činnosti Post fixu rozhoduje první nalezená shoda v souboru . Další položky v souboru jsou ignoro vány bez ohledu na to, zda jsou shodné či nikoli . Uvažujme následující mapu regulárních výrazů , z níž je při hledání j o h n . d o e@ex a m p l e . c o m vráceno O K, neboť shoda nastane u ž n a prvním řádku .
/ j o h n \ . d o e@e x a mp l e \ . c o m / O K REJ ECT / e x a mp l e \ . c o m / Když jsou však v této mapě vyměněny řádky, dojde nejprve k e shodě v původně druhé položce, takže při stejném zadání se nám tentokrát vrátí REJECT.
REJ ECT / exampl e \ . com/ / j o h n \ . d o e@e x a m p l e \ . c o m / O K Linární mapy nesmějí být převáděny do binární podoby (ve skutečnosti to ani není mož né). Démoni si je načtou při spuštění, a dokud nejsou restartovány, není oznámena žád ná změna v mapě. Typická postfixová lineární mapa obsahuje h e a d e r _c h e c k s , b o dy-c h e c k s a m i me_h e a d e r _c h e c k s (viz kapitola 9).
Anato m i e Postfixu
';'h'"
J a k l i neární mapy narůstaj í, doba jej ich zpracová n í postfixovými démony se prod l užu je. To platí zejména v případě proh l ížen í tě la a h l aviček zpráv, neboť démon cl e a n u p musí porovnávat každý řádek v těle (až po mez sta novenou v b o d y _c h e c k s_s i z e_l i m i t ) a v h l avičkách proti všem řád kům v mapě. To může m ít za následek významné zpom a l e n í procesu vyh ledává n í, zejména když jsou používány víceznačné parametry * _c h e c k s , které pro prevenci proti spa m ů m používaj í mapy typu regexp nebo peRE (Perl-compatible reg u l a r expression). Pokud k tom u do jde, bude nej lepší ponechat komplexní ochra n u proti spa m ů m na externí a p l i kaci. Aby postfixoví démoni zaregistrovali změny v lineárních mapách, je třeba spustit pos t f i x r e 1 o a d . Není-li časování kritické, můžeme dobu životnosti démonů nastavit v para metru m a x_u s e . Jakmile démon zpracuje stanovený počet úloh, je ukončen a znovu je spuštěn, čímž si znovu načte všechny potřebné mapy.
Databáze (MySQL, PostgreSQL, LDAP) Postfix považuje databázi za indexovou mapu . Výsledkem databázového dotazu je na šel (společně s příslušnou hodnotou) nebo nenašel. Zásadním rozdílem mezi databá zovou mapou a indexovanou mapou je, že v případě změny v databázi není nutno znovu startovat démony. Postfix nepředpokládá, že správce pošty je jedinou osobou , která může měnit databázi. Nevýhodou tohoto přístupu je to, že databáze nemusí být schopna zpracovat takové množství dotazů , neboť Postfix potřebuje pro každé hledání v mapě nejméně tři dotazy (viz následující část ,Jak se hledá v mapách"). Při velké zátěži se může databázové hle dání zastavit a poštovní služba bude náchylná k samozahlcení nebo bezbranná proti úto ku DoS (odmítnutí služby) . Neznamená to, že bychom neměli databázi používat, avšak měli bychom si být vědomi rizika . Hledání v databázi může způsobit problémy v silně zatížených systémech, avšak není to jediná věc, o které bychom měli uvažovat - jiným problémem může být doba odezvy. Databázové dotazy mají větší zpoždění než indexované mapy, neboť Postfix musí být spojen s databázovým rozhraním, poslat na něj dotaz a čekat na výsledek. V případě in dexové mapy jsou jen porovnána data, která jsou v paměti. Stane-li se z databáze úzké místo a v systému není příliš velká mapa, lze mezi databázi a Postfix vsunout mapu . To znamená, že z databáze vytvoříme indexovanou mapu a Postfix provozujeme s ní. Nesmíme zapomenout na co nejčastější aktualizaci této ma py, démon p r oxyma p může nicméně významně zredukovat počet paralelních operací.
Určení počtu paralelních databázových operací Počet postfixových démonů ( s m t p d , s m t p atd.) běžících jako paralelní procesy je ome zen (parametrem defaulcprocess_limit) na 1 00. Při maximálním zatížení může běžet 1 00 démonů s m t p d současně a každý z nich požaduje od databázového rozhraní jedno hle dání (proto, že pro vyhledání klienta na černé listině používáme mapu a můžeme jeho zprávu odmítnout) . Uvědomme si, že jedno hledání vyústí nejméně ve tři dotazy, takže počet paralelních do tazů na databázi nejméně d e f a u l t_p r o c e s s_l i m i t * 3 (což by v implicitní konfiguraci bylo 300 dotazů), přičemž počet dotazů je roven d e f a u l t_p r o c e s s_l i m i t . A to je pou-
61
62
'4-fiBt'
Ka pitol a 5
ze počet dotazů a volání démona s m t p d ; jiní démoni jako l o c a 1 nebo q m g r mohou při své činnosti také hledat v databázi, čímž by byl dále zvyšován počet paralelních dotazů .
Jak hledáme v mapách Mapy mohou být používány v různých úlohách. Postfix využívá princip řízení výpočtu tabulkami, což jsou v tomto případě mapy (viz access(S), aliases(S), canonical(S) a tran sport(S)), a používá různé vyhledávací algoritmy (LDAP, NIS, SQL, btree, hash, regexp, cdb, cidr, pcre atd.). 1.
Hledání doslovného znění adresy.
2.
< d om a i n p a r t > Hledání doménové části e-mailové adresy. Jsou vyhledávány i subdo mény, avšak pouze tehdy, když konfigurace p a r e n t_d oma i n_ma t c h e s_s u b d o ma i n s obsahuje řetězec s m t pd_a c c e s s_ma p s . V opačném případě musíme zadat . d om a i n p a r t (pozor na tečku), mají-li se hledat i subdomény.
3.
< 1 o c a 1 pa r t@> Hledání všech adres s uvedenou uživatelskou OokálnO součástí adre sy bez ohledu na to, do které náleží domény.
4.
Není nalezeno. Když hledaná položka není nalezena , Postfix vrátí řízení s příznakem není nalezeno a ohlásí chybu .
POZNÁMKA V některých typech ta bulek nelze h l edat odesilatele s prázd nou ad reso u . Postfix i m p l i citně používá ad resu j a k o k l íč neuvedené odesilatelské ad resy a jej í hodnotu udává parametr s m t pd_n u 1 La c c e s s_l o o k u p_key v sou boru ma i n . cf . Tato pravidla pro vyhledávání v mapách říkají, že každý dotaz se realizuje několika hle dáními, což by neměl být problém, pokud se ovšem nepoužívají mapy s dlouhou dobou odezvy, jako SQL nebo LDAP (a je třeba si také uvědomit, že řada vyhledávání se reali zuje několika dotazy) . To je pouze jedna z věcí, kterou je třeba zvážit, než se rozhod neme, zda všechny mapy budou typu LDAP, a pak si budeme na postfixové diskusní skupině stěžovat na to, že "Postfix je pomalý . . . . "
Externí zdroje Postfix využívá informační zdroje , které nejsou jeho součástí a ani nejsou pod přímou kontrolou uživatele. Jsou to například černé listiny (seznamy DNSBL a RHSBL), seznamy na bázi DNS a jiné externí zdroje . Č erné listiny jsou také téměř výlučně využívány v pa rametrech s m t pd_ * _ r e s t r i ct i o n s za účelem odmítání pošty od klientů a odesilatelů uve dených v seznamech DNSBL-, resp. RHSBL-style (viz kapitola 7) . Jako u všech externích dotazů mohou tato vyhledávání selhat kvůli problémům s ko nektivitou, útokům proti serverům s černými listinami a jiným. V případě takového vý padku Postfix sice zprávu přijme (aniž by uplatnil jakákoli omezenO, avšak do poštovního žurnálu o tom pošle příslušné varovné hlášení.
Utility zadávané na příkazovém řádku Postfix obsahuje utility zadávané n a příkazových řádcích, což významně přispívá k e zjed nodušení administrativy v systému . I když vykonávají různé funkce (např. hledání v ma-
Anato m i e Postfixu
'4-h"M
pách, zkoumání souborů s frontami, odstraňování zpráv z front a umisťování do front změna konfigurace), mají jednu věc společnou - jejich jména začínají na "post" .
a
POZNÁMKA Tyto příkazy toho u měj í mnohem víc, než je zde uvedeno. Popíšeme si příkazy, které jsou používány nejčastěj i . Pokud zde nenajdete to, co h ledáte, nah lédněte nejdříve do on-l ine manuá l u .
postfix Příkaz p o s t f i x s volbami s t o p , s t a rt a re 1 o a d ukončuje, spouští a aktualizuje konfigu raci .
postalias Příkaz p o s t a 1 i a s z e souboru a 1 i a s vytvoří indexovanou mapu a 1 i a s . Pracuje podobně jako příkaz p o s t m a p (viz popis dále), avšak některé zápisy v souboru a l i a s jsou zpra covávány odlišně (je-Ii oddělovačem klíče a hodnoty dvojtečka). Soubor a 1 i a s musí být zpracován tímto příkazem.
postcat Příkaz p o s t c a t vypíše obsah zprávy ve frontě zpráv. K přečtení zprávy je třeba znát ID fronty, jež můžeme zobrazit pomocí ma i 1 q . Například ID následující zprávy je F 2 B 9 7 1 5 C O B 3 :
# ma i l q F 2 B 9 7 1 5 C O B 3 2 4 6 4 M o n O c t 1 3 1 5 : 2 9 : 3 9 m a r k u s . h e r r m a n n@e x a mp l e . c o m ( c o n n e c t t o ma i l . e x a m p l e . c om [ 2 1 7 . 6 . 1 1 3 . 1 5 1 J : C o n n e c t i o n t i med o u t ) t o r s t e n . h e c k e@e x a m p l e . n e t - - 2 K by t e s i n 1 R e q u e s t s . ID fronty v příkazu p o s t c a t zadáváme jako volbu :
# postcat - q F2B97 1 5COB3
postmap Primárním úkolem příkazu p o s t m a p je vytvoření indexové mapy z normálního souboru . Chceme-Ii například ze souboru /etc/postfi x/vi rtua 1 vytvořit mapu / e t c / p o s t f i x / v i r t u a l . d b , je třeba zadat příkaz:
# postmap ha s h : /etc/postfi x/vi rtual Příkaz p o s t m a p toho ovšem umí vÍC. K jeho nejužitečnějším funkcím patří testování libo volného druhu mapy v dané instalaci. To je mimořádně užitečná vlastnost při ladění kon figurace v situaci, kdy se zdá, že nefunguje hledání v mapě, a nevíme, zda Postfix pracuje se správným klíčem a hodnotou .
Ladění položky ve vyhledávací tabulce Příkaz p o s tm a p - q slouží k hledání položek v mapě. Zadáme-Ii následující příkaz, do staneme hodnotu přiřazenou v mapě / e t c / p o s t f i x / s e n d e r_a c c e s s (typu hash) ke klíči < s e n d e r@e x a m p l e . c o m ) :
63
64
'a·a'iC'
K a p itola
5
# p o s t m a p - q s e n d e r@ex a m p l e . com h a s h : / e t c / p o s t f i x / s e n d e r_a c c e s s OK Je nutno poznamenat, že příkaz p o s t m a p nehledá členy < s e n d e r@> , < e x a m p l e . e om > a < c om > , i když je t o uvedeno v manuálových stránkách access(S). Tato hledání musí být provedena ručně:
# p o s tma p - q s e n d e r@ h a s h : / e t c / p o s t f i x / s e n d e r_a c c e s s # p o s tma p - q e x a m p l e . c om h a s h : / e t c / p o s t f i x / s e n d e r_a c c e s s # p o s tma p - q com h a s h : / e t c / p o s t f i x / s e n d e r_a c c e s s
postdrop Příkaz p o s t d r o p přečte zprávu ze standardního vstupu a umístí ji do adresáře m a i l d r o p . Tento příkaz s e používá v e spojení s utilitou s e n d m a i 1 .
postkick Příkaz pos t k i e k zasílá lokálním kanálem požadavek postfixovému démonu . Jde vlastně o meziprocesovou komunikaci zprostředkovanou Postfixem; využívají ji skripty a jiné programy.
POZNÁMKA Příkazem p o s t k i c k posíláme zprávu postfixovým procesům, které byly spuštěny démo ny. Musí ovšem být splněn před poklad, že běží i Postfix.
Vracení zpráv do fronty v následujícím, poněkud složitějším použití příkazu p o s t k i e k vidíme, jak je zpráva vrá
cena do fronty k okamžitému odeslání:
# cat queuei dl i st I postsuper - r postk i e k publ i e pi ckup W
-
Tato posloupnost příkazů přemístí všechny vybrané zprávy vypsané v q u e u e i d l i s t do fronty m a i l d r o p s příkazem p o s t s u p e r - r - , kde jsou zpracovány démonem p i e k u p ja ko kterákoli jiná zásilka. Tímto způsobem nastavíme filtr obsahů zpráv pro lokální pou žití a přidáme hlavičku Received. Příkaz p o s t k i e k spustí okamžité prohledávání fronty ma i 1 d r o p . Jinak by zpráva zůstala v této frontě po dobu až 60 vteřin. Démon p i e k u p předá zprávu démonu e l e a n u p , kde je mu přiděleno nové ID fronty a umístí ji do fronty příchozích zpráv ( i n e o m i n g ) . Úče lem je co nejrychlejší přesun zprávy do fronty a e t i v e .
postlock Příkaz p o s t l o e k umožňuje výlučný přístup do postfixových souborů mbox a provedení příkazu v uzamknutém režimu . Uzamknutí je kompatibilní s postfixovým doručovacím agentem. V průběhu provádění příkazu v souborech nejsou prováděny žádné jiné změ ny. Příklad použití:
# p o s t l o c k / v a r / ma i l / u s e r f r om
Anatomie Postfixu
65
UPOZORNĚNí Pokud možno neprovádějte příkaz, který vyžaduje ukončení povelem CTRL-C z kláves n ice. Dojde- I i k přeruše n í rež i m u p o s t l o e k, ne ní zaručeno, že je zá mek zrušen, ačko l i pro doručová n í d a l š í pošty je t o n utné. Z d a zámek nezůsta l " viset " , zj istíme zad á n ím p o s t 1 o e k bez příkazu. Pokud se neukončí, popř. je u končen u plyn utím časového l i m itu, zá mek pravděpodobně není zrušen.
postlog Pomocí příkazu pos t l o g mohou externí programy (např. skripty) zapisovat zprávy do žurnálního souboru . Příkaz má postfixové rozhraní a do žurnálního souboru je implicit ně zapsán text z příkazového řádku jako jeden záznam. Zde je velmi jednoduchý pří klad:
ff p o s t l og T h i s i s a t e s t post1 0g : Thi s i s a test ff g r e p " T h i s i s a t e s t " / v a r / l o g / ma i l . l og Feb 20 1 1 : 50 : 1 6 ma i l p o s t 1 0g : T h i s i s a t e s t
postqueue Příkaz p o s t q u e u e je uživatelským rozhraním k postfixovým frontám. Poskytuje funkcio nalitu , která je obvyklá v příkaze s e n d m a i 1 . •
Pomocí parametru - f vytvoříme požadavek na správce fronty s žádostí o doručení všech zpráv ve frontě Cf1ush) bez ohledu na místo určení. Požadavek je shodný s postfixovým příkazem f l u s h nebo s e n d m a i 1 - q :
ff p o s t q u e u e - f •
Pomocí parametru - p vytiskneme obsah fronty. Příkaz je shodný s příkazem ma i 1 q :
ff p o s t q u e u e - p •
Pomocí doménového parametru s se p o s t q u e pokusí doručit všechny zprávy ve frontě příslušné k dané doméně. Příkaz je shodný s příkazem s e n d m a i 1 - q d oma i n : -
ff p o s t q u e u e - s e x a m p l e . c om
POZNÁMKA Příkaz postq ueue posílá zprávu démo n ů m v Postfixu. Je tedy n utné, a by běžel i Postfix.
postsuper Příkaz p o s t s u p e r je určen k provádění údržby úloh v postfixových frontách. N a rozdíl od p o s t q u e u e je tento příkaz vyhrazen pouze pro superuživatele a lze jej zadat, i když Postfix neběží. Pomocí tohoto příkazu jsou prohlíženy fronty ještě před tím, než jsou spuštěni démoni. V tabulce 5 . 1 jsou uvedeny funkce příkazu p o s t s u p e r .
Ka pitol a 5
66 Tabulka 5. 1 : Vol by v příkazu postsuper Volba -
d h
-H -p -r
-
s
Akce Odstra n ě n í zprávy s uvedeným I D z uvedené fronty (uvedených front) U m ístě n í zprávy do fronty hold, ta kže se nebudou provádět pokusy o doruče n í Vyj m utí zprávy z fronty hold Vymazá n í dočasných sou borů, které zůsta ly na d isku po havá r i i Znovuzařaze n í zpráv s uvedeným I D z uvedené fronty Kontro l a a oprava struktury fronty
Příkaz p o s t s u p e r je nejčastěji používán k odstraňování zprávy z fronty ve tvaru p o s t s u p e r - d q u e u e i d . Provádět tuto činnost ručně může ovšem být únavné. Lze ji zautoma tizovat například pomocí následujícího perlového skriptu jménem d e l e t e_f r om_ma i 1 q :
fI ! / u s r / b i n / p e r l S R E G E X P = s h i ft I I d i e " n o ema i l - a d d r e s s g i v e n C regexp - s t y l e , e . g . b l . * \ @y a h o o . c om ) ! " ; @d a t a = q x < / u s r / s b i n / p o s t q u e u e - p > ; f o r C @d a t a ) { i f C / " C \ w+ ) C \ * I \ ! ) 7 \ s / ) $ q u e u e_ i d = $ 1 ; i f C $ q u e u e_i d ) { i f ( / $ REGEXP/ i ) $ O l $ q u e u e_ i d l 1; $ q u e u e_i d = .. .. . } fl o p e n C P O S T S U P E R , " l c a t " ) I I d i e " c o u l d n ' t o p e n p o s t s u p e r " ; open C POSTSUP E R , " l postsuper - d - " ) I I d i e " coul dn ' t open pos t s u pe r " f o r e a c h C k ey s % 0 ) I p r i n t P O S T S U P E R " $_\ n " ; }; c l o s e C POSTSU P E R ) ; A jak vypadá použití tohoto skriptu :
fl m a i l q C 7 3 A0 1 5 C 0 9 5 7 5 0 9 M o n O c t 1 3 1 4 : 5 6 : 1 7 MA I L E R - DA E M O N C c o n n e c t t o m x 5 . a n c i e n t a w a r d . c om [ 6 4 . 1 5 6 . 1 6 6 . 2 1 1 J : C o n n e c t i o n r e f u s e d ) N a t i o n a l _N o s e p i c k i n g_M o n t h@m x 5 . a n c i e n t a w a r d . c o m Všimněme si, ž e v tomto případě je odesilatelem . Skript j e třeba spustit jako uživatel root:
fl d e l e t e - f r om - m a i l q MA I L E R - D A E M O N p o s t s u pe r : C73A0 1 5C09 5 : removed p o s t s u p e r : D e l e t e d : 1 me s s a g e
ČÁSTII "
,
Z P RACOVAN I · Z P RAV ,
V ZAVI S LOSTI NA J EJ I C H O BSAH U V Postfixu existuj í tři skupiny příkazú pro ovládání zpúsobu příchodu a odchodu zpráv do/z poštovního systému . Pokud se správa obsahu zpráv neprovádí externími aplikace mi, pomocí těchto příkazú je možno zpracovávat tok zpráv na základě dialogu SMTP a v závislosti na obsahu těchto zpráv. Těmto třem typú m příkazú odpovídají tři skupiny konfiguračních parametrú s různými funkcemi : omezování, kontrola a filtrování zpráv.
S labikář správce pošty Chceme-li zprávy zpracovávat v závislosti na jejich obsahu , musíme tento obsah znát. Omezení, kontrolu a filtrování múžeme provádět tehdy, když víme, co zpráva musí, má a múže obsahovat . Obsahem zpráv se zabývá kapitola 6.
Jak fungují omezení Omezení se týkají komunikace podle protokolu SMTP . Popis toho, jak fungují ome zení, naleznete v kapitole 7. Tuto látku doporučujeme k dúkladnému prostudování, značně si tím usnadníte zavádění případných omezení.
Jak postupovat při zavádění v kapitole 8 se popisuje konkrétní postup při zavádění omezení. Všechna omezení lze zavést téměř okamžitě.
Vestavěné filtry Vestavěné filtry pracují na základě obsahu zpráv. Ale jak? V kapitole 9 si ukážeme, jak takové filtry fungují a dozvíme se něco i o teorii filtrú .
Zpracovává n í zpráv v závisl osti na j ej ich obsa h u
68
Příklady vestavěných filtrů v kapitole 1 0 je uvedena řada příkladů , jež mohou posloužit jako vzor při psaní vlast
ních- filtrů _
Externí filtry Externí filtty předávají řízení SMTP komunikace a kontrolu obsahu externím aplika cím. Jejich popis naleznete v kapitole l l .
Příklady externích filtrů Kapitola 1 2 obsahuje řadu příkladů externích filtrů pro ty, kdo si chtějí vytvářet své vlastní filtty.
KAPITOLA 6 ,
v
SLAIIKAR SPRAVCE POSTY ,
v
Výrazy jako obálka, hlavička, tělo a příloha se vztahují k datům, jež si mezi sebou vy měňují přenosoví agenti . Když budeme znát význam těchto výrazů, pochopíme, jak se k jednotlivým částem zprávy vztahují parametry pro zpracování zpráv dle jejich obsahu. Je rovněž užitečné, že jména těchto parametrů v Postfixu a jejich syntaxe jsou odvozeny z RFC (Request For Comment). Tato kapitola je úvodem do zpracování pošty dle obsahu . Měla by se číst pozorně a vstře baná terminologie i principy by se měly nechat po určitou dobu uležet. Poté co si čtenář tyto základy osvojí, nebude mu zpracování pošty dle obsahu činit nejmenší potíže.
Základy přenosu zpráv Přenos zpráv se skládá ze dvou částí: komunikace podle protokolu SMTP, jíž se řídí vlast ní přenos dat (kterým se často říká "e-mail" nebo "zpráva"). Výrazy, kterými se popisu je přenos, nespadly z nebe; byly přejaty z tradičního, dobře zavedeného odvětví, které se už několik století nazývá "pošta " . Význam výrazů jako odesílatel, obálka, hlavička, tělo a příloha je v tradiční poště velmi dobře znám. Jsou to technické výrazy vztahující se k tomuto oboru činnosti. Na obráz ku 6 . 1 vidíme srovnání obyčejného dopisu s e-mailem, v němž lze rozpoznat tyto části :
Doručovatel V normální poště se nazývá listonoš nebo kurýr. V elektronické poště se doručova teli říká klient.
Obálka Obálka je podobně jako u klasických dopisů v elektronické poště obalem, na němž je vyznačeno, jak se má doručit jeho obsah. Na obálce je uveden jak odesílatel, tak i příjemce.
Hlavička Hlavička obsahuje informace o zprávě . Jsou v ní, stejně jako v dopisu , uvedeny in formace o odesílateli (From:) a budoucím příjemci (To:); datum a čas odeslání (Da-
Kapitol a 6 te:) a předmět (Subject:). Navíc je v hlavičce Received: popsáno, kudy a jak dlouho zpráva putovala.
Tělo Přenášený obsah se nazývá tělo zprávy.
Přílohy Tělo zprávy, podobně jako v normálním dopisu , obsahuje údaj o tom, zda zpráva ob sahuje nějakou přílohu . Příloha je volitelnou součástí zprávy a může mít různé po doby.
Proč to potřebujeme vědět? Může to znít tak trochu jako spekulace, ale co má toto všechno společného s provozo váním Postfixu? Především, elektronická zpráva obvykle obsahuje mnohem více infor mací než dopis. Je třeba vědět, z čeho se skládají a v které části zprávy se nacházejí. A dále má Postfix tři skupiny řídicích parametrů , jež se přímo vztahují k různým částem zprávy:
s mt p d_*_r e s t r i c t i o n s Prostřednictvím parametrů s m t p d_* r e s t r i c t i o n s s e řídí spojení klienta a obálka v průběhu přenosu zprávy. __
* checks Prostřednictvím parametrů * _c h e c k s s e dohlíží n a hlavičku, tělo a přílohy.
Filtry Filtry se používají k postoupení úloh jiným (externím) filtrovacím aplikacím. Filtry mají obecné použití; lze jimi ovládat všechny části zprávy počínaje obálkou až po pří lohu . Každý z těchto parametrů má řadu voleb; pokud nevíme, ke kterým parametrům náleží jednotlivé části zprávy, zpracování dle obsahu nebude fungovat.
Řízení komunikace SMTP (obálka) Komunikace SMTP se skládá ze dvou složek: klient (počítač, který kontaktuje server se službami SMTP) a obálka, kterou mu klient podává . Snadněji to pochopíme, když se po kusíme připojit k serveru pomocí programu telnet. Následuje příklad komunikace. Začíná příkazovým řádkem, na němž se kontaktuje port 25 na serveru :
$ t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . e x a mp l e . c om Kódem 220, který se vrátil ze serveru , se potvrzuje jméno serveru . Nyní se serveru před stavíme:
H E LO c l i e n t . ex a m p l e . c om 2 5 0 ma i l . e x a m p l e . c o m
S l a b i ká ř správce pošty
71
Dopis
E-mail
Listonoš
Klient H E LO c l i en t . exampl e . com
Dobrý den, mám pro vás dopis.
Obálka
M A I L F R O M : < s e n d e r@e x a m p l e . c o m >
Adresa
250 - 0 K
odesilatele
R C P T T O : < r e c i p i e n t@e x a m p l e . o r g > 250 - 0 K DATA
Adresa přijemce
354
End
data with
.
E-mail Adresa odesilatele Adresa přijemce
Datum
F ROM : TO :
Date :
II 1
Sun .
Subj ec t :
Ma i
Vá žený
pane .
v
Vážený pane,
S e n d e r < s e n d e r@e x a m p l e . c o m >
R e c i p i e n t < r e c i p i e n t@e x a m p l e . o r g >
p ř í l oze
váš
nový
Apr 2004 22 : 36 : 5 1 +0200 and
této
ema i
z p r á vy
1
n a l eznete
certi fi ká t .
v příloze tohoto dopisu naleznete vaši novou kreditní kartu
000
- - 2 0 S 5 Y a xWCcOj TEyO C o n t e n t - Ty p e :
a p p l i c a t i on / z i p
C o n t e n t - De s c r i p t i on : A tt a c h m e n t Content - D i spos i t i on :
a t t a c hmen t :
f i 1 e n a m e- " c e r t i f i ca t e . z i p " Content - T r a n sf e r - Encodi ng :
ba se64
U E s D B A o AA A A A A K 6 1 / S 6 m U Z z N DA A 3 S Y / V X g E A P O B 9 A F B c H R h Y 2 h t Z W 5 0 1 0 p O S m E C F w M KAAAAAAC u t f D u p l G c z OwAAAA F MAAAA D g A N AAAAAAABAAAA t l E AAAAAY X R o Y W N o b W V u d C 5 O e H R V V A U A A + f c J j 9 V e A A A U E s F B g A A A A A B A A E A S OAAA E o AA - - 2 0 S 5 Y a x W C c O j T Ey O - -
Obrázek 6-1 Srovnání obyčejného dopisu a e-ma i l u
Představení
(handshake) s e může provést buď pomocí pnKazu HELO (v SMTP) nebo ELHO
(v ESMTP), přičemž parametrem je jméno klientova počítače. Provede-li se příkaz úspěšně, měli bychom jako potvrzení obdržet návratový kód 250 a za ním jméno počítače. Nyní zkusíme poslat e-mail. Pomocí pnKazu MAIL se vytvoří obálka, na kterou se nejdříve napíše adresa odesilatele. Pokud jej server akceptuje, znovu obdržíme návratový kód 250:
Kapitol a 6
72
MA I L F ROM : < s e n d e r@e x a mp l e . c om> 250 O k Dalším k rokem při vytváření obálky bude zadání příjemce pomocí příkazu RCPT. Lze za dat i více příjemců :
RCPT TO : < r e c i p i e n t@ex a mp l e . com> 250 O k RCPT TO : < r e c i p i e n t_2@examp l e . com> 250 O k
POZNÁMKA Je třeba si uvědom it, že odes i l atel a příjemce na obá lce se mohou l išit od odes i l atele a příjemce uvedených v h lavičce (která se zadává v posloupnosti příkazu DATA, viz n í že) . Dojde-I i k záměně, zpracová n í m ůže proběhnout chybně. Zpráva včetně všech dalších hlaviček jako Subject, To a Date se odešle pomocí příkazu DATA:
DATA 354 E n d d a t a w i t h < C R> < L F > . < C R> < L F > S u b j e c t : me s s a g e T h i s i s t h e mes s a g e 250 O k : queued a s 92933 E 1 C66 QU n Shora uvedené pojmy si stručně popíšeme dle definice RFC:
Klient Počítač, který odesílá e-mail, je klient; do žurnálu se poznačí buď jeho jméno a IP adresa nebo "unknown" (jestliže jej nelze nalézt pomocí DNS). Před zahájením ko munikace dostane Postfix z TCP/IP zásobníku v systému klientovu IP adresu a z DNS nebo z / e t c / h o s t s jeho jméno . Postfix tak může uplatnit omezení, nejsou-li IP adresa klienta a jeho jméno v průběhu SMTP komunikace ve shodě. Klientova IP adresa a jméno (jsou-li známy) se vždy zapíší do žurnálu a jsou uvede ny i ve hlavičkách zprávy. příkaz H E LO
/ EH LO
Při představování musí klient poskytnout poštovnímu serveru dvě informace: typ služby a jméno počítače. V první části příkazu , jímž se klient představuje, se uvádí typ požadované služby. Pří kazem HELO se požaduje normální služba dle RFC 821 ( f t p : l l f t p . r f c · e d i t o r . o r g / i n - n o t e s / r f c 8 2 1 . t x t l , příkazem EHLO pak rozšířená služba dle RFC 282 1 ( f t p : I I f t p . r f C · ed i t o r . o r g / i n ' n o t e s / r f c 2 8 2 1 . t x t l . Za typem služby násle duje klientova identita ve tvaru úplné adresy počítače.
S l a b i ká ř správce pošty
Obálka Obálka musí obsahovat alespoň dvě rozdílné položky: přesně jednoho odesilatele a nejméně jednoho příjemce. Obálka se posílá tak, že se nejdříve pošle odesilatel a potom příjemce (příjemci). Je-li více příjemců , každý z nich se odesílá na samostatném řádku a po každém ode slání se musí čekat na potvrzení od serveru 1 . Ú lohou serveru je povolit doručení všem nebo jen některým příjemcům.
Odesilatel obálky Odesilatel obálky je ten , komu Postfix odpoví, nastane-li chyba, jako např. zpoždě ní nebo odmítnutí zprávy.
Příjemce obálky Příjemce je ten nebo ti, komu má být zpráva doručena. Jedna zpráva může mít ně kolik příjemců (např. zpráva poslaná abonentům uvedeným na rozesílacím sezna mu) . Na obálce musí být uveden alespoň jeden příjemce (jinak není zprávu komu doručit) . Nelze tedy uvádět prázdného příjemce « » .
Případná omeze n í se nevzta h uj í na příjemce v h lavičce zprávy, neboť zpráva se doruču je příjemci uvedenému na obálce, n i ko l i v h lavičce. Téměř všechny údaje z předchozího výčtu se mohou zfalšovat. Proto v Postfixu existují způsoby, jak falšování zabránit - k tomuto účelu slouží parametry s m t pd_ * _ r e s t r i ct i o n s , které se zabývají těmito otázkami:
1. Odkud je klient? 2.
Předstírá klient, že je někým jiným?
3.
Má klient zvláštní oprávnění?
4 . Kdo je odesilatel?
5. Kdo jsou příjemci? Postfix se také snaží získat odpovědi na složitější otázky:
1 . Poskytuje klient informace Postfixu obvyklým způsobem? 2.
Poskytuje klient informace Postfixu v obvyklém pořadí?
3.
Poskytuje klient Postfixu všechny informace?
4.
Neposkytl-li klient všechny požadované informace, pokusí se odeslat zprávu?
5. Lze říci, zda jsou informace správné? 6.
Lze zjistit, že klient lže?
Odpověď na tyto otázky může Postfix získat tak, že si prohlédne obálku zprávy a prů běh dialogu SMTP . Odmítne-li Postfix zprávu kvůli obsahu obálky, odmítne ji ještě před tím, než ji přijme. Z toho důvodu Postfix nepošle na adresu odesilatele oznámení "ne doručitelná zpráva " .
74
'4-hNG'
Kapitola 6
POZNÁMKA Odmítne- I i Postfix zprávu na základě omeze n í, jež se vztah uj í na obá l ku, nemusí zprá vu vrac�t, neboť od m ítnutí přišlo d řív než odeslá n í zprávy. Tím se šetří systémové pro středky a zmenšuje se provoz na síti. Tento způsob od m ítá n í zpráv je vhodný zejména při rozsá h lých spamových útocích, neboť není třeba odesílat tisíce oznámení o od m ít n utí zpráv, které j i ž byly přijaty k doručen í. V kapitole 7 je uveden přehled omezení a rozbor jejich činnosti. Kapitola 8 obsahuje řa du příkladů, které lze využít při vytváření vlastní konfigurace.
Zpracování obsahu zprávy Zpráva se skládá z hlavičky a z těla . Tělo ještě může obsahovat jeden nebo více dodat ků ve tvaru souboru nebo jinou zprávu, která je součástí hlavní zprávy. Na obrázku 6 .2 vidíme přehledné schéma jednoduché zprávy s přílohou . Obsah zprávy
I
H,,,'ěk,
I
Tělo
I
I
H l a""a plnohy
Tělo pmohy
Obrázek 6.2 Zpráva s přílohou Na obrázku 6.3 vidíme zprávu s jinou zprávou jako přílohou . Tyto části zprávy lze rozpoznat při prohlížení zprávy prohlížečem textů nebo editorem. Následuje příklad zprávy s přílohou :
R e t u r n - P a t h : < s e n d e r@e x a m p l e . c om > ., X - O r i g i n a l - To : r e c i p i e n t@e x a mp l e . c o m D e l i v e r e d - T o : r e c i p i e n t@e x a m p l e . c o m R e c e i v e d : b y ma i l . e x a m p l e . c o m ( P o s t f i x ) i d 9 F 7 1443F50 ; Mon . 2 6 Apr 2004 0 1 : 32 : 59 +0200 ( C EST ) D e l i v e r e d - T o : r e c i p i e n t@e x a mp l e . c om R e c e i v e d : by ma i l . e x a m p l e . c o m ( P o s t f i x . f r om u s e r i d 5 0 0 ) i d 2 F 2 3 0 4 3 F4 F ; M o n . 2 6 A p r 2 0 0 4 0 1 : 3 2 : 5 9 +0 2 0 0 ( C E S T ) Date : Mon . 26 Apr 2004 0 1 : 32 : 58 +0200
S l a b i ká ř správce pošty
Obsah zprávy
I
Hlavička
I
Hlavička přnohy
Tělo přnohy Hlavička přl10hy zprávy RFC822 Tělo přnohy zprávy RFC822
Obrázek 6-3 Zpráva s j i nou zprávou jako přílohou
F r om : S e n d e r < s e n d e r@e x a mp l e . c om > T o : R e c i p i e n t < r e c i p i e n t@e x a mp l e . c o m > S u b j e c t : E l eme n t s o f e ma i l c o n t e n t M e s s a g e - I D : < 2 0 0 4 0 4 2 5 2 3 3 2 5 8 . GA2 2 3 8 3@ma i l . e x a m p l e . c om> M i me - V e r s i o n : 1 . 0 C o n t e n t - Ty p e : m u l t i p a r t / m i x e d ; b o u n d a ry= " / 9 DW x / y D r R h g MJ T b " Content - Di spos i t i on : i n l i ne U s e r - Ag e n t : M u t t / l . 5 . 4 i - - / 9 DW x / y D r R h g M J T b � C o n t e n t - Ty p e : t e x t / p l a i n ; c h a r s e t = u s - a s c i i Content - Di s p o s i t i on : i n l i ne P r a z d n y r a d e k o d d e l u j e t e l o z p r a vy od h l a v i c e k . V t e l e s e m o h o u o bj e v i t t e x t n e b o p r i l o hy k o d o v a n e p o d l e M I M E . Ke z p r a v e m u z eme p r i p oj i t j e d e n n e b o v i c e s o u b o r u , v c e t n e d a l s i ema i l o v e z p r a vy . Z p r a v a v j i n e z p r a v e o b s a h u j e s v e v l a s t n i h l a v i c ky . P r o t o h l a v i c ky m o h o u by t z a n o r e n y d o v i c e u r o v n i . S n a d v a m toto pomu z e , odes i l atel - - / 9 DW x / y D r R h g M J T b � C o n t e n t - Ty p e : a p p l i c a t i o n / x - z i p - c om p r e s s e d C o n t e n t - D i s p o s i t i o n : a t t a c h me n t ; f i l e n a m e= " a t t a c h m e n t . z i p " C o n t en t - T r a n s fe r - E n c od i ng : b a s e64
75
76
'a-hMM
Ka pito l a 6
U E s D BAoAAAAAA l l Lmj B O M x l u CwAAAAs AAAAOAAAAY X RO Y W N o b W V u d C 5 0 e H R h d H R h Y 2 h t Z W 5 0 C l B LAQ I U AAoAAAAAA I I Lmj B O M x l u CwAAAAs AAAAOAAAAAAAAAA E A I A C 2 g QAAAA B h d H R h Y 2 h t Z W 5 0 L n R4 d F B L B Q Y AAAAAAQABA DwAAAA3 AAAAAAA= - - / 9 DWx / y D r R h g M J T b - Zpráva obsahuje tyto části: O Hlavičky zprávy 49 Začátek těla zprávy
., Začátek přílohy Postfix může provádět kontrolu každé z těchto částí ( h e a d e r_c h e c k s , b o dy-c h e c k s , m i me_h e a d e r _c h e c k s ) zvlášť. Aby byly kontroly efektivní, je třeba vědět, jaké požadova né, doporučené a volitelné části má zpráva obsahovat.
Hlavičky Hlavička obsahuje meta informace o těle zprávy, jako např. kódování znaků a datum pře nosu . Pomocí RFC 2822 ( f t p : I I f t p . r f c - ed i t o r . o r g / i n - n o t e s / r f c 2 8 2 2 . t x t ) se prvky hlavičky rozdělí do kategorií požadovaných a doporučených částí.
POZNÁMKA Po l e h l aviček nemusí být v u rčitém pořa d í. Pouze se d oporučuje, a by jej i ch pořa d í bylo Return-Path, Rece ived, Date, From, S u bj ect, Sender, To, C c atd . D a l š í i nformace o h lavičkách n a l eznete na strá n kách Rea d i n g E m a i l Headers ( h t t p : / / www . s t o p s p a m . o r g / ema i l / h e a d e r s . h t m l ) .
Povinné hlavičky Dvě položky jsou v hlavičkách povinné :
Date V datovém poli je obvykle uvedeno datum a čas vytvoření a odeslání zprávy. Pokud je odesilatelův klient vynechá, Postfix je doplní.
From Toto pole obsahuje identitu osob, jež odeslaly tuto zprávu . Vynechá-li je klient ode silatele, Postfix je doplní.
Doporučené hlavičky V hlavičce mohou být doporučené položky:
Message-Id Toto pole obsahuje jednoznačnou identifikaci, která se vztahuje k stávající verzi stá vající zprávy. Klient generuje ID zprávy a zodpovídá za jeho jednoznačnost. Navíc, ID zprávy má číst počítač a člověku může být nesrozumitelné. Vzhledem k tomu , že každé ID zprávy se může vyskytnout právě jednou, každá další revize zprávy bude mít jiné ID. Vynechá-li klient tuto hlavičku , Postfix ji doplní.
S l a bikář správce pošty
'4,a",
To Toto pole obsahuje identitu primárního příjemce zprávy. Vynechá-li klient tuto hla vičku , Postfix doplní hodnotu konfiguračního parametru u n d i s c l o s ed_re c i p i e n t s _h e a d e r .
Subjeet Toto pole by mělo obsahovat velmi stručný popis zprávy
Ce Toto pole obsahuje identity všech druhotných příjemců zprávy.
Reply-To V tomto poli se uvádí, kam by měl klient příjemce poslat odpověď na tuto zprávu .
Content-type Toto pole je definované v RFC 1 049 (ftp://ftp.rfe-editor.org/in-notes/rfc1049.txt) a udává strukturu těla zprávy.
MIME-Version Je-li tato hlavička přítomna, tělo zprávy bylo (pravděpodobně) vytvořeno v souladu s RFC 1 5 2 1 ( f t p : / / f t p . r f c - e d i t o r . o r g / i n - n o t e s / r f c 1 5 2 1 . t x t l .
Reeeived Každý přenosový agent, který narazí na zprávu, přidá do hlavičky jeden řádek, aby se zaznamenalo, kudy, kdy a jak zpráva přišla. Tyto údaje se využívají při odstraňo vání případných problémů s přenosem.
Return-Path V této hlavičce je uvedena adresa odesilatele obálky, která slouží k určení zpáteční cesty k původci zprávy. Naplňuje ji poštovní server při převzetí zprávy od lokálního doručovacího agenta, např. lokálního démona.
Volitelné hlavičky (X-Headers) X-Header je obecně používaný název hlavičkového pole rozšířeného o jméno začínající velkým X a pomlčkou . Takové hlavičky jsou nestandardní a mají informativní charakter. Naopak, všechny nestandardní hlavičky informativní povahy by měly mít typ X-Header. Následuje několik příkladů volitelných hlaviček (existují ovšem miliony dalších):
X - Ma i l e r : X i mi a n Evol uti on 1 . 4 . 3 X - P r i o r i ty : 3 X - S p a m - C h e c k e r - V e r s i o n : S p a mA s s a s s i n 2 . 5 3 ( 1 . 1 7 4 . 2 . 1 5 - 2 0 0 3 - 0 3 - 3 0 - e x p l X - O r i g i n a l - T o : r e c i p i e n t@e x a m p l e . c o m
Tělo Tělo obsahuje vlastní zprávu a musí následovat z a hlavičkovou částí. Tělo může být pro stý nebo zakódovaný text. Může také obsahovat přílohy zakódované ve tvaru, který se
77
78
'a-a"t'
Kapito la
6
při průchodu Internetem nepoškodí (dříve nebyli všichni přenosoví agenti osmibitoví; když se z binárního souboru odstranil osmý bit, soubor se zničil).
Přílohy Přílohy jsou soubory převedené do textového tvaru (pouze tisknutelné znaky), který je vhodný pro přenos elektronickou poštou . Přílohová skládačka obsahuje několik částí, jež jsou popsány v následujícím textu .
Kódování MIME MIME j e zkratka slov Mu/tipurpose Internet Mail Extensions. Tímto systémem s e mění de finice tvaru zprávy, systém je popsán v RFC 2045 ( h t t p : / / www . r f e ed i t o r . o r g / r f e / r f e 2 0 4 5 . t x t l . Dva obvykle používané způsoby kódování v MIME se nazývají quoted-printable a base64:
quoted-printable Kódování quoted-printable je určeno pro kódování osmibitových tisknutelných zna ků v US-ASCII . Účelem tohoto způsobu kódování je převod dat do tvaru , který je odolný proti poškození při přenosu .
base64 base64 je kódovací schéma definované v RFC 1421 ( f t p : / / f t p . r f e - e d i t o r . o r g / i n n o t e s / r f e 1 4 2 1 . t x t l a v RFC 2045 ( f t p : / / f t p . r f e - e d i t o r . o r g / i n - n o t e s / r f e 2 0 4 5 . t x t ) , jímž se převádějí binární data na tisknutelné znaky. Je to kódování ur čené pro elektronickou poštu , kterou se přenášejí pouze alfanumerické znaky (A-Z, " a-z, číslice 0-9), znaky ,,+ " a "I " a znak ,,= , který je speciální příponou . Ruční kó dování a dekódování dle base64 se provádí pomocí řádkových utilit m p a e k , m u n p a e k a u u d e v i ew. Všichni modernější uživatelští agenti používají MIME a přílohy se nyní kódují prak ticky výlučně dle schématu base64.
Kódovaci procesor Kódování binárních příloh se provádí uživatelským agentem, kterým se rovněž automa ticky vytvoří struktura MIME obsahující text zprávy a zakódovanou přílohu ve formátu, který je srozumitelný ostatním uživatelským agentům používajícím MIME. Zpráva musí obsahovat tyto hlavičky:
Verze MIME Tato hlavička říká, že zpráva je ve formátu MIME. Hodnota je obvykle 1 .0, takže hla vička vypadá takto:
M I ME - Ve rs i on : 1 . 0
Typ obsahu V této hlavičce se uvádí typ a podtyp obsahu zprávy. Například:
C o n t e n t - ty p e : t e x t / p l a i n
S l a b i ká ř správce pošty
'4-fi'"
Kombinace typu (v našem případě text) a podtypu (plain) se obecně nazývá typ MIME, takže v tomto příkladu je typ MIME text/plain. Registrovaných typů MIME je velice mnoho. Naleznete je na stránkách lANA ( f t p : / / f t p . i s i . e d u / i n - n o t e s / i a n a / a s s i g n m e n t s / m e d i a - ty p e s l . Navíc všechny texto vé typy obsahují parametr s volitelnou znakovou sadou udávající kódování znaků . Mno há kódování mají zaregistrovaná jména znakových sad MIME.
Typy obsahů v této části nalezne čtenář některé typy MIME, s nimiž se již pravděpodobně setkal.
MIME typ skládající se z několika částí může mít navíc stromovou strukturu, v níž ně které koncové uzly mají jednoduchý typ obsahu a průběžné uzly mohou mít některý z mnoha vícesložkových typů . MIME podporuje (kromě jiných) například tyto typy:
text/p1ain Jednoduché zprávy mají typ text/plain; je to implicitní hodnota hlavičky
multipart/mixed Tento typ se skládá z textu a přílohy (multipart/mixed má část text/plain a další ne textové části) . Zpráva s přílohou ve tvaru MIME má obvykle v hlavičce původní jmé no přiloženého souboru , takže typ tohoto souboru je uveden jak v typu obsahu MIME, tak i v příponě jména souboru (jež se v různých operačních systémech mo hou lišit). Viry se obvykle rozesílají s jiným typem v hlavičce a jiným typem v příponě.
message/rfc822 V tomto typu je zpráva zopakovaná v příloze (multipart/mixed s částí textlplain a s původní zprávou ve tvaru message/rfc822). V této podobě Postfix vrací zprávy odesilateli (Původní zpráva se vrací jako příloha ve tvaru message/rfc822).
multipart/a1ternative Ve zprávě tohoto typu je text zobrazen ve dvojí čitelné podobě, například jako pro stý text a v některém jiném tvaru jako HTML apod. (stejný text ve formátech text/pla in a text/htmD. V aplikaci Outlook Express je tento typ implicitní: konkrétně se zpráva posílá jako prostý text a HTML text.
Struktura kódování Zpráva MIME, která s e skládá z více částí, obsahuje v hlavičce udávající typ obsahu hra niční řetězec, kterému se říká e-mailový oddělovač a který by se v jiných částech zprá vy neměl vyskytovat. Měl by být jenom mezi jednotlivými částmi a na začátku a na konci těla zprávy. V následujícím příkladu vidíme příklad zprávy složené z více částí:
Re t u r n - P a t h : < s e n d e r@e x a mp l e . c om> X - O r i g i n a l - T o : r e c i p i e n t@e x a m p l e . c o m O e l i v e r e d - T o : r e c i p i e n t@e x a mp l e . c o m R e c e i v e d : by ma i l . e x a m p l e . c o m ( P o s t f i x ) i d 9 F 7 1443F50 ; Mon . 2 6 Apr 2004 0 1 : 32 : 59 +0200 ( C EST ) O e l i v e r e d - T o : r o o t@e x a m p l e . c o m
79
K a p ito la
80
6
R e c e i v e d : by m a i l . e x a mp l e . c o m ( P o s t f i x . f r om u s e r i d 5 0 0 ) i d 2 F 2 3 0 4 3 F4 F : M o n . 2 6 A p r 2 0 0 4 0 1 : 3 2 : 5 9 +0 2 0 0 ( C E S T ) D a t e : M o n . 2 6 A p r 2 0 0 4 0 1 : 3 2 : 5 8 +0 2 0 0 F r om : S é n d e r < s e n d e r@e x a mp l e . c om > T o : R e c i p i e n t < r e c i p i e n t@ex a mp l e . c om > S u b j e c t : E l e m e n t s o f em a i l c o n t e n t M e s s a g e · I D : < 2 0 0 4 0 4 2 5 2 3 3 2 5 8 . GA2 2 3 8 3@m a i l . e x a m p l e . c o m > M i me ' V e r s i o n : 1 . 0 .. C o n t e n t ' Ty p e : m u l t i p a r t / m i x e d : b o u n d a ry= " / 9 DW x / y D r R h g MJ T b " 8 Content ' Di spos i t i on : i n l i ne U s e r - Ag e n t : M u t t / 1 . 5 . 4 i - - / 9 DWx / y D r R h g M J T b ., C o n t e n t - Ty p e : t e x t / p l a i n : c h a r s e t=u s - a s c i i � Content - Di spos i t i on : i n l i ne P r a z d ny r a d e k o d d e l u j e t e l o z p r a vy od h l a v i c e k . V t e l e s e m o h o u o b j e v i t t e x t n e b o p r i l o h y k o d o v a n e p od l e M I M E . Ke z p r a v e m u z eme p r i p o j i t j e d e n n e b o v i c e s o u b o r u . v c e t n e d a l s i em a i l o v e z p r a vy . Z p r a v a v j i n e z p r a v e o b s a h u j e s v e v l a s t n i h l a v i c ky . P r o t o h l a v i c ky m o h o u by t z a n o r e n y d o v i c e u r o v n i . S n a d v a m t o t o pomuz e . odes i l atel - - / 9 DW x / y D r R h g M J T b � C o n t e n t - Ty p e : a p p l i c a t i o n / x - z i p - c o m p r e s s e d � C o n t e n t - D i s p o s i t i o n : a t t a c h me n t : f i l e n a m e= " a t t a c h m e n t . z i p " C o n t en t - T ra n s fe r - E n c od i n g : ba s e64 � U E s D B AoAAAAAA I I Lmj B O M x 1 u CwAAAAs AAAAOAAAAY X RO Y W N o b W V u d C 5 0 e H R h d H R h Y 2 h t Z W 5 0 C l 8 LAQ I UAAoAAAAAA I I Lmj B O M x 1 u CwAAAAs AAAAOAAAAAAAAAA E A I A C 2 g QAAAAB h d H R h Y 2 h t Z W 5 0 L n R4 d F B L B Q Y AAAAAAQABA DwAAAA3 AAAAAAA= - - / 9 DWx / y D r R h g MJ T b - - � Zpráva se skládá z následujících částí: O Hlavička s verzí MIME. 8 Hlavička s typem obsahu a s definicí oddělovacího řetězce, ktetým se od sebe oddě-
lují různé části zprávy . ., První použití oddělovacího řetězce. Zde začíná nová část zprávy. G Obyčejný text. e Druhé použití oddělovacího řetězce, které označuje konec předchozí části a začátek
následující části. C!» Nová část ve tvaru zip. e Zazipovaný soubor je zakódován ve tvaru base64. O Oddělovací řetězec se použije naposledy.
KAPITOLA 7 ,
JAK FUNGUJI OMEZEN í PŘI PŘENOSU ZPRÁV A bychom věděli, co se může omezovat, musíme nejdříve vědět, co je to " co " a co by to mělo být . . . - Patrick se pokouší pochopit Ralfa, když mu vysvětluje, co jsou omezení V této kapitole se dozvíme něco o teorii omezení. Omezení umožňují přijmout nebo od mítnout příchozí zprávu na základě komunikace mezi klientem a serverem. Informace získané z tohoto dialogu poskytuj í Postfixu možnost stanovit pro klienta, odesilatele ne bo příjemce určitá omezení. I když slovo "omezovat" obvykle znamená vytváření určitých hranic, výraz "omezení" může v Postfixu také znamenat pravý opak. Omezení se mohou vytvářet právě proto, abychom něco výslovně povolili.
Spouštěcí mechanismy omezení Omezení jsou silné nástroje . K jejich efektivnímu využívání je třeba dobře znát komuni kaci SMTP a způsob, jakým Postfix provádí analýzu této komunikace . V kapitole 6 jsme si vysvětlili, jak probíhá komunikace SMTP . Nyní se na ni podíváme z jiné perspektivy; tentokrát nás bude zajímat komunikace z hlediska příkazů zadávaných klientem. Na ob rázku 7. 1 jsou znázorněny jednotlivé fáze této komunikace . Každá fáze komunikace na obrázku 7 . 1 je okamžik, kdy postfixový démon s m t p d obdrží část informace o klientovi a o zprávě, kterou má přenášet. V těchto fázích se postupně spouštějí jednotlivá omezení a v každé fázi se uplatní jeden omezující parametr. Jsou po jmenovány podle příslušného démona, příslušné fáze a příslušného účelu, tvoří se dle šab lony s m t pd_j m é n o - f á z e_ r e s t r i ct i o n s a říká se jim spouštěče omezení (restriction triggersJ.
Kapitola 7
82
Kl i en t Jméno s y s tému H E LO / E H LO O d e s i l a t e l o b á l ky P ř í j emc e ( i ) o b á l ky
{ { { {
S t e l n e t ma i l s e r v e r . e x a mp l e . c om 2 5 220 ma i l s e r v e r . exampl e . com E S M T P P o s t f i x H E L O c l i ent . examp l e . com 2 5 0 - ma i l s e r v e r . e x a mp l e . c om MA I L F RO M : < s e n d e r@e x a m p l e . c o m > 250 Ok R C P T T O : < r e c i p i e n t@e x a m p l e . c o m > 250 Ok DATA 354
End
F r om : To :
data wi th .
" S e n d e r " < s e n d e r@e x a m p l e . c o m >
" R e c i p i e n t " < r e c i p i e n t@e x a m p l e . c o m >
oate :
Sat .
17 May 2003 1 5 : 24 : 43 +0200
Z d e j e o b s a h z p r á vy . . . Zde je o b s a h z p r á vy 250 Ok :
. . .
queued a s OEAFFEI C65
QU I T 221
Bye
Obrázek 7-' Zpráva s j i nou zprávou jako přílohou Následuje seznam všech spouštěčů omezení a popis jejich implicitních funkcí:
smt pd_c l i e n t_ r e s t r i c t i o n s Tento spouštěč s e vztahuje k I P adrese klienta nebo k jeho jménu , případně k obo jímu . Implicitně není omezeno spojení s žádným klientem.
s mt pd_h e l o_r es t r i c t i o n s Tento spouštěč s e vztahuje k parametru HELO/EHLa a k I P adrese klienta nebo k je ho jménu, případně k obojímu . Implicitně není parametr HELO/EHLa nijak omezen.
smt pd_s e n d e r_ re s t r i c t i o n s Toto je první spouštěč, kterým s e omezují součásti obálky. Vztahuje s e k odesilateli obálky, k parametru HELO/EHLa a ke klientovi. Implicitně může posOat zprávy kaž dý odesilatel obálky.
smtpd_re c i p i e n t_re s t r i c t i o n s Tento spouštěč s e vztahuje k pflJemcům obálky, odesilateli obálky, k parametru HELO/EHLa a k IP adrese klienta nebo k jeho jménu nebo k obojímu. Implicitně je nastaven tak, že povoluje klientovi všechny příjemce, kteří patří ke konfiguračnímu parametru my n e t wo r k s , j inak však povoluje pouze příjemce z domén uvedených v re 1 a y_d oma i n s a v my d oma i n s . Tato konstrukce chrání Postfix před otevřeným pře dáváním.
smt pd_d a t a _ r e s t r i c t i o n s Tímto spouštěčem s e vyhledávají klienti, kteří pošlou obsah e-mail u před tím, než Postfix odpoví na příkaz DATA. Sleduje se, kdy klient odešle příkaz DATA na server. Implicitně nejsou stanovena žádná omezení.
J a k fu nguj í omeze n í při přenosu zpráv smtpd_e t rn_r e s t r i c t i o n s Tento speciální spouštěč slouží k omezení klientů , kteří by chtěli zahltit frontu zpráv. Implicitně mohou zadat příkaz ETRN všichni klienti . Každý spouštěč odpovídá určité množině omezení; můžeme si je představit jako prázd né krabice, které poslouží, až když je naplníme zbožím (omezeními).
Typy omezení V Postfixu existuje několik druhů omezení; lze j e rozdělit do čtyř různých skupin: •
Všeobecná omezení
•
Přepínatelná omezení
•
Nastavitelná omezení
•
Přídavné řídicí parametry UCE
Všeobecná omezení V první skupině omezení s e neprovádí žádná kontrola dialogu SMTP; pouze s e vydá pří kaz:
pe rmi t Povolení žádosti
defe r Odložení (zpožděnO žádosti
rej e c t Odmítnutí žádosti
wa r n_i f_ rej e c t Asistence při pozdějších omezeních; jestliže s e omezení p o wa r n_ i C r e j e c t rozhod ne žádost odmítnout, Postfix zprávu neodmítne, avšak do žurnálu zapíše zprávu r e j e c t_w a r n i n g .
rej e ct_u n a u t h_p i p e l i n i n g Odmítnutí žádosti, když klient pošle příkazy SMTP předčasně, aniž by věděl, zda Postfix podporuje řetězení v ESMTP . Tím se vyřadí z činnosti množství softwaru, kte rý chce neoprávněně využívat řetězení v ESMTP k u rychlenému doručování pošty.
Přepínatelná omezení Druhá skupina omezení pracuje podobně jako přepínače. Můžeme je zapínat a vypínat; když se zapnou , pouze dohlížejí na to, zda byla splněna určitá podmínka. Následuje je jich neúplný seznam:
smt pd_h e l o_r eq u i r e d Toto omezení požaduje p o klientovi, aby n a začátku sezení poslal příkaz HELO (ne bo EHLO). Vyžadují to jak RFC 82 1 , tak i RFC 282 1 .
83
Kapito l a
84
7
s t r i c t_r f c 8 2 1 _e n v e l o p e s Tímto omezením s e v Postfixu nastavuje míra tolerance chyb v adresách zadaných příkazy MAIL FROM nebo RCPT TO . Bohužel, značně rozšířený program Sendmail se v tomto ohledu chová poněkud nestandardně a mnoho programů se mu přizpů sobuje. V tomto okamžiku by bylo možné zachytit mnoho nevyžádaných zpráv, avšak doplatila by na to i legitimní pošta odeslaná špatně napsanými klienty.
d i s a b l e_v r fy_c omm a n d Příkazem SMTP VRFY s e muzeme přesvědčit, zda existuje určitý příjemce . Tímto omezením se zakáže zadávání příkazu VRFY.
a l l ow_p e r c e n t_h a c k Tímto omezením se řídí přepisování adres ve tvaru u s e r % d o ma i n n a u s e r@d oma i n .
swa p_b a n g p a t h Tímto omezením s e řídí přepisování adres v e tvaru s i t e ! u s e r n a u s e r@s i t e . Využí vá se, jsme-li napojeni na síť UUCP.
Nastavitelná omezení Nastavitelná omezení jsou mapy, které fungují jako filtry. Klíče v jednotlivých položkách jsou filtry a hodnoty položek udávají, co se má v případě shody provést (platné činnos ti viz část "Všeobecná omezení"). Uvádíme několik ukázek nastavitelných omezení:
Jména počítačů v příkazech HELO (EHLO) Omezení jmen počítačů , jež klient může poslat pomocí příkazů HELO, resp. EHLO .
Jména / adresy klientů Omezení klientů , kteří jsou oprávněni navázat SMTP spojení s poštovním serverem.
Adresa odesilatele Omezení adres odesilatele (odesilatele obálky) z příkazu MAIL FROM.
Adresa přtlemce Omezení adresy příjemce (příjemce obálky) z příkazu RCPT TO.
Příkaz ETRN Omezení klientů , kteří mohou zadat příkaz ETRN .
Filtrování hlaviček Filtrování tvaru hlaviček. Hlavičky se porovnávají se vzorky i tehdy, když obsahUjí ví ceřádkové texty.
Filtrování těla Omezení textu obsaženého v těle zprávy.
Černá listina ve tvaru DNSBL Pomocí černých listin typu DNSBL se omezuje spojení s IP adresami (klienty) uve denými na těchto listinách.
·1
J a k fu nguj í omeze n í při přenosu zpráv
85
Černá listina ve tvaru RHSBL Pomocí černých listin typu RHSBL se zakazují odesilatelské domény (jako součást obálky), které jsou uvedeny na těchto listinách .
Nevyžádaná komerční nabídka (UCE) Pomocí množiny dalších řídicích parametrů UCE se zavádějí omezení, jež nejsou impli citní součástí Postfixu. Zde jsou některá z nich:
d e f a u l t_r b l _ r e p l y Implicitní šablona na odpověď, která se posílá v případě, když j e zablokován klient ský dotaz prostřednictvím omezení r e j e c t_ r b l _c 1 i e n t nebo r e j e c t_r h s b l _s e n d e r .
pe rmi t_mx_b a c k u p_n e two r k s Omezení předávání p e rm i t_mx_b a c k u p n a destinace, jejichž primární M X systémy patří do seznamu bloků sítí.
r b l _ r e p l y_m a p s Tabulky s DNSBL šablonami odpovědí indexovanými dle jmen domén DNSBL. Ne nalezne-li se žádá šablona, použije se implicitní šablona d e f a u l t_ r b l _ r e p 1 y .
r e l ay_d oma i n s Přijímání pošty pro uvedené domény, i když tento server není cílovým místem určení.
smt pd_s e n d e r_l o g i n_ma p s Uživatel, který může používat adresu MAIL FROM (odesilatel obálky). K tomuto ome zení musí Postfix znát jméno uživatele, takže klient musí prokázat svoji totožnost po mocí SMTP .
Rozsahy omezení Klíčem k e správnému používání omezení je znalost jednotlivých fází komunikace. V ur čitých fázích komunikace by totiž některá omezení nedávala žádný smysl . V tabulce 7 . 1 jsou uvedeny závislosti jednotlivých omezení n a stadiích komunikace:
Tabulka 7. 1 : Rozsah použitelnosti omezení Fáze
Omezenr
Kl i en t OP adresa a/nebo jméno systému)
c h e c k_c l i e n t a c c e s s r e j e c t_r b l _c l i e n t r e j e c t_ r h s b l _c l i e n t r e j e c t_r h s b l _c l i e n t r e j e c t_r h s b l _c l i e n t r e j e c t_u n k n own_c l i e n t
J m é n o s y s t é m u H E L O / E H La
c h e c k_h e l o_a c c e s s p e r m i t_n a k e d_i p_a d d r e s s r e j e c t_i n v a l i d_h o s t n a m e r e j e c t_n o n_ f q d n _h o s t n a m e r e j e c t_u n k n own_h o s t n a m e
Kapito l a 7
86 Fáze
Omezenf
O d e s i 1 a t e 1 o b á 1 ky .
c h e c k_s e n d e r a c c e s s r e j e c t_n on_f q d n_s e n d e r r e j e c t_r h s b l _s e n d e r r e j e c t_u n k n own_s e n d e r_d o m a i n r e j e c t_ u n v e r i f i ed_s e n d e r
P ř í j em c e o b á l ky
c h e c k_ r e c i p i e n t_a c c e s s p e r m i t_a u t h_d e s t i n a t i o n p e r m i t_mx_b a c k u p r e j e c t_n o n_ f q d n _ r e c i p i e n t r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_u n k n own_r e c i p i e n t_d oma i n r e j e c t_u n v e r i f i e d _ r e c i p i e n t
DATA
r e j e c t_u n a u t h_p i p e l i n i n g
Jak se vytvářejí omezení Omezení mohou být velmi složitá , a když jim dostatečně nerozumíme, snadno můžeme server zdánlivě nevinným zásahem poškodit. Při tvorbě omezení bychom se měli řídit tě mito zásadami: •
Lajdácký zápis může vést k vážným chybám.
•
Důležité jsou fáze komunikace.
•
Dbejte na správné pořadí omezení ve spouštěči . Provedení každé akce ovlivňuje vy hodnocování omezení, která následují.
lápis Jak už jsme se dříve zmínili, spouštěče omezení jsou jako prázdné krabice . Naplnit je ovšem neznamená, že do nich jen nahážeme omezení a jsme hotoví. r e s t r i c t i o n_ t r i gger
=
con d i t i on a l_res t r i c t i o n ,
m a p type : / pa t h / t o / t h e / ma p ,
cus t om i z a b l e_re s t r i c t i o n
g e n er a l_re s t r i c t i on
Vzhledem k tomu, že i jediné omezení obvykle stejně přesáhne délku řádku, je lépe dá vat na začátek pokračovacích řádků mezery, neboť Postfix bude všechny takové řádky považovat za jedno nastavení parametrů . Navíc, čárky mezi omezeními nejsou povinné, takže následující zápis je shodný s před chozím zápisem (a snadněji se čte). r e s t ri c t i o n_ t ri gger = con d i t i on a l_res t r i c t i on cus t om i z a b l e_res t r i c t i o n map type : / p a t h / t o / t h e / ma p gen era l_re s t r i c t i o n
Kdy se omezení vyhodnocují Obecně se omezení zadávaná pomocí spouštěče nevyhodnocují okamžitě po skončení odpovídajícího kroku SMTP komunikace, ale čeká se, až klient pošle prvního příjemce obálky. Důvodem tohoto zpoždění je skutečnost, že někteří klienti pokračují v odesílá-
'4-M'"
J a k funguj í omeze n í při přenosu zpráv
ní zprávy poté, co server odmítl komunikaci ještě před tím, než dokončili odeslání ales poň jednoho příjemce zprávy. Toto implicitní nastavení lze přepsat tak, že nastavíme parametr s m t pd_d e 1 ay_rej e c t na " n o" (ne). Nicméně, i když je možné takové klienty zjistit a vytvořit si seznam výjimek, aby nebyli přerušováni, je lepší počkat, až se dokončí všechny kroky, a uvést omezení v platnost až poté. Nejenže se poštovní systém zjednoduší, ale získáme i více údajů o pokusech o doručení. Na obrázku 7 . 2 je znázorněno, jaký vliv má parametr s m t pd_d e 1 a y - r e j e c t na vyhodno cení omezení.
Vyhodnocení omezení a provedení příslušné akce Jak bylo řečeno v části "Nastavitelná omezení", tato omezení se vyhledávají v mapách. Když Postfix najde v mapě omezení klíč, provede akci, která je hodnotou nalezeného klíče. Mapa může vypadat například takto:
10 . 0 . 0 . 1 172 . 16 . 0 1 68 . 1 00 . 1 . 3 1 9 2 . 0 . 34 . 1 6 6
P E RM I T P r i v a t e I P f r om V P N t r a n s f e r t u n n e l R E J E C T P r i v a t e I P a d d r e s s c a n n o t c o m e f r om o u t s i d e DUNNO OK
Jestliže
s m t pd_d e l a L r e j e c t - y e s
s m t pd _c l i e n t _ r e s t r i c t i o n s . s m t p d _ h e l o_r e s t r i c t i o n s . s m t pd_s e n d e r _ r e s t r ; cl i o n s . smt pd_re c ; p i ent_res t r ; c t i o n s
.
}
.
� .......
�-
s m t p d _d e l a Y J e j e c t - n o
H E LO c l i e n t . e xamp l e . com
MA I L F ROM : < s e n d e r@e x a mp l e . co m>
_
s m t p d _ s e n d e r_ r e s t r i c t i o n s
III--
s m t pd_ r e c i pi e n t _ r e s t r i c l ; o n s
2 2 0 ma i I s e r v e r . e x a m p I e . c o m E S M T P P o s t f i x .
Jestliže
f!t�
S t e 1 n e t ma ; 1 s e r v e r . e x a m p 1 e . c o m 2 5 2 5 0 - ma ; 1 s e r v e r . e x a m p 1 e . c o m
2 5 0 Ok R C P T T O : < r e c i p i e n t@e x a mp l e . com> 2 5 0 Ok
s m t p d _c l l e n t_ r e s t r i c t i o n s s m t p d _ h e l o_ r e s t r i c t i o n s
DATA 354 E n d d a t a w i t h < C R > < L F > . < C R > < L F > F r om : To:
· S e n d e r - < s e n d e r@e x a mp l e . c o m >
" Re c i p i e n t " < r e c i p i e n t@e x a mp l e . c o m >
Oate :
Sa t .
17 May 2003 1 5 : 24 : 4 3 +0200
Zde z a č ; n a obsah 250 O k :
DUn
zprávy
.
.
queued a s OEA F F E l C6 5
2 2 1 Bye
Obrázek 7-2 Vliv pa rametru smtpd_delaYJeject na vyhodnocení omezení Omezení v předchozí mapě s e skládají z e čtyř různých akcí: PERMIT, REJECf, DUNNO a OK. Těmito hodnotami se určuje, co má Postfix provést s klientem, tj . odesilatelem ne bo příjemcem. I když těchto akcí je celá řada (viz access(S) v manuálových stránkách), zde jsou uvedeny nejčastěji používané:
OK Proti klientovi ani proti zprávě nejsou žádné námitky. Vyhodnocování stávající mno žiny omezení se ukončí a přejde se k další množině.
87
Ka p itol a 7
88 PERMIT Ekvivalent OK.
RFJECT Okamžité odmítnutí zprávy, aniž by se bral ohled na další omezení. Zpráva se oka mžitě odmítne.
DUNNO Ukončení vyhodnocování stávajícího omezení a přechod k následujícímu omezení v dané množině. Pořadí omezení v dané množině je důležité, neboť jakmile se narazí na první OK nebo REjECT, ihned se ukončí vyhodnocování omezení v dané množině (v případě REjECT to znamená, že klient, odesilatel nebo příjemce, je definitivně odmítnutý). Omezení se čtou a taktéž uplatňují shora dolů, resp . zleva doprava, pokud jsou na jednom řádku . To je důvod, proč se mají složitá omezení zapisovat na více řádků . Zkusme si představit, jak by následující omezení vypadalo na jednom řádku .
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s = c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r e c i p i e n t s_ r e s t r i c t i o n s . p e rm i t_s a s 1 _a u t h e n t i c a t e d . p e rm i t_my n e two r k s . r e j e c t_u n a u t h_d e s t i n a t i o n . r e j e c t_ u n a u t h_p i p e 1 i n i n g . r e j e c t_r b 1 _c 1 i e n t r e 1 a y s . o r d b . o r g p e rmi t Na obrázku 7.3 je znázorněn proces vyhodnocování omezení a akce odpovídající čtyřem různým hodnotám.
Zpomalování špatných klientů Příkazy od klienta, jehož zprávy jsou v průběhu zpracování pomocí s m t p d příčinou mno ha chyb (např. při vyhodnocování omezení se často spouští REjECT nebo se objevují chyby v parametrech), se přijímají s určitou časovou prodlevou. Tímto způsobem se ser ver brání proti "splašenému" klientskému softwaru. Parametrem s m t pd_e r r o r _s 1 e e p_t i me se zadává počet vteřin prodlevy po každé chybě (implicitní hodnota je jedna vteřina). Parametr s m t pd_s o f t_e r r o r _1 i m i t slouží jako zpomalovací mechanismus; když přibývá chyb, odpovědi se dále zpožďují. A nakonec je možné pomocí parametru s m t pd_h a rd_e r r o r _ 1 i m i t komunikaci ukončit. Součinnost mezi třemi uvedenými parametry probíhá takto: •
•
•
je-li počet chyb způsobených k lientem menSl než hodnota parametru s m t pd_s o f t_e r r o r_ 1 i m i t , zpoždění po chybách jsou dána hodnotou parametru s m t pd_e r r o r_s 1 e ep_t i m e . je-li počet chyb způsobených klientem větší než hodnota parametru s m t pd_s o f t_e r r o r_ 1 i m i t , zpoždění ve vteřinách j e rovno počtu chyb přesahujících tento limit. Přesáhne-li počet chyb způsobených klientem hodnotu parametru s m t p d_h a rd_e r r o r_ 1 i m i t , spojení se ukončí.
Předpokládejme například, že máme parametry zkonfigurované takto:
J a k fu nguj í omeze n í při přenosu zpráv
Poštovní klient
....---
89
SMTP
-- R E J E C T
--
REJECT
--t----t----< O K . P E RM I T
-- R E J E C T
--t----t-----+---
, � s i z e=666 , n r cpt=l C) ( q u eue a c t i v e l Apr 1 4 2 1 : 1 4 : 48 ma i l p o s t f i x / smtpd [ 3 1840 J : d i s c o n n e c t from u n known [ 1 7 2 . 1 6 . 0 . 1 J Apr 1 4 2 1 : 14 : 48 ma i l p o s t f i x / smtp [ 3 1 84 4 J : 4 F 2A64 3 F30 : to= , � r e l ay=ma i l . s t a t e · o f - m i nd . d e [ 2 1 2 . 1 4 . 9 2 . 89 J . 0 d e l ay=O , s t a t u s = s e n t ( 2 50 O k : q u eued a s 9 7 E 7 0 E 1 C 6 5 l �
92
'a·fiUC'
Kapito l a 8
Zpráva se skládá z těchto částÍ: O Klient (IP adresa a jméno), který doručil zprávu >
• Hlavička s ID zprávy
., Odesilatel obálky (příkaz MAIL FROM v dialogu SMTP) G Počet příjemců o Příjemce(-ci) obálky (příkaz RCPT TO v dialogu SMTP) Cit Kam zpráva odešla 8 ID fronty přiřazené zprávě vzdáleným postfixovým serverem
Stojíme-li před úkolem, jak omezit přenos zpráv, a nevíme, s kým máme tu čest, žurnál je to správné místo, kde se o svém "protivníkovi" můžeme leccos dozvědět.
Simulace účinků omezení Na první pokus s e nám asi nepodaří vytvořit množinu omezení, která b y splňovala na še představy. K cíli se musíme dostávat postupně metodou pokusů a omylů. Omezení budeme muset zkoušet pomocí testovacích zpráv a málokdo má k dispozici zkušební po čítač; nejspíš budeme muset využít k testování server, k němuž jsme napojení. Tím ovšem vzniká riziko chybného výsledku testu (výsledek pozitivní, skutečnost negativnO a může docházet ke ztrátám důležitých zpráv. V Postfixu se tomuto problému předchází pomocí parametru na testování omezení wa r n _ i C r e j e c t , který je podobný hlášení WARN ve filtrech. Připojíme-li tento parame tr k testovanému omezení, Postfix pouze zapíše do žurnálu záznam o účinku omezení, avšak zprávu neodmítne. Následuje příklad, jak bychom pomocí tohoto parametru moh li otestovat omezení r e j e c t_ u n k n own_s e n d e r _d oma i n .
s m t pd_re c i p i e n t_r e s t r i c t i o n s p e r m i t_my n e t wo r k s r e j e c t_u n a u t h_d e s t i n a t i o n wa rn_ i f_ reje c t r e j e c t_u n k n own_s e n d e r_d oma i n permi t Po nastavení tohoto parametru se "simulované" odmítnutí ohlásí takto:
J u n 2 5 1 6 : 1 0 : 5 2 ma i l p o s t f i x / s m t p d [ 3 2 5 1 1 J : 8 0 7 5 0 1 5 C 0 2 F : r e j e c t_w a r n i n g : R C P l f r om s c c rm h c 1 1 . c o m c a s t . n e t [ 2 0 4 . 1 2 7 . 2 0 2 . 5 5 J : 5 5 0 < D i c k i n s L@n ew f a c e s . g r > : S e n d e r a d d r e s s r e j e c t e d : D o m a i n n o t f o u n d ; f r om=< D i c k i n s L@n e w f a c e s . g r > t o= < e x a m p l e@c h a r i t e . d e > p r o t o = E S M l P h e l o=< s c c rm h c 1 1 . a t t b i . c o m > Jakmile si ověříme, ž e omezení funguje, parametr wa r n _ i C r e j e c t můžeme odstranit. V dalších zápisech v žurnálním souboru se objeví záznam o úspěšně odstraněných zprá vách:
J u n 25 1 6 : 1 1 : 2 3 ma i l p o s t f i x / s m t p d [ 3 2 5 1 1 J : 8 0 7 5 0 1 5 C 0 2 F : r e j e c t : R C P l f r om s c c rm h c 1 1 . c o m c a s t . n e t [ 2 0 4 . 1 2 7 . 2 0 2 . 5 5 J : 550 < D i c k i n s L@n ew f a c e s . g r > : S e n d e r a d d r e s s r e j e c t e d : D o m a i n n o t f o u n d ; f r om=< D i c k i n s L@n e w f a c e s . g r > t o=< r e c i p i e n t@e x a m p l e . c o m > p r o t o = E S M l P h e l o=< s c c rm h c 1 1 . a t t b i . c o m >
J a k se používaj í omeze n í
Jak bezprostředně zefektivnit omezení Postfix obsahuje několik démonů , kteří s i načtou svá konfigurační data při spuštění systému . Někteří z nich běží jen krátce, aby zbytečně neblokovali prostředky systému . Jiní démoni se však nerestartují, dokud o to Postfix nepožádáme . Důležitou roli při omezování toku zpráv hrají dlouhoběžící démoni qmg r a n q m g r (jméno nmq r se používá pouze ve starších verzích, v nových verzích Postfixu se implicitně pou žívaný nový manažer zpráv pod jménem q m g r a starý oqmg r), do nichž se ovšem změny v konfiguraci nepromítnou, dokud se znovu nespustí systém anebo nedojde k ručnímu zásahu . Je tedy třeba si pamatovat, že jakmile se změní soubory ma i n . c f nebo ma s t e r . c f , j e třeba zadat příkaz p o s t f i x r e l o a d , jinak by s e změny v konfiguraci neprojevily.
POZNÁMKA Teoreticky by se změny časem přece jen projevi ly, neboť démoni skončí svoj i činnost a znovu se spustí po u rčitém počtu použití sta noveném v parametru m a x_u s e, pochopi te l ně kromě démona qmg r, který běží nepřetržitě. Není ovšem dobré spo léhat se na ten to mech a n ismus obměny konfig u rací, neboť v jednom okamžiku by moh l i současně běžet démon i se sta rou konfi g u rací a j i n í s novou konfig u rací, což by nemusel být zce la ideá l n í stav.
Implicitní omezení V Postfixu j e k dispozici množina implicitních omezení, která chrání počítač před otev řeným předáváním (resp. před předáváním pro třetí stranu). Pomocí příkazu p o s t c o n f si můžeme vytisknout nastavení implicitního omezení v s m t pd_r e c i p i e n L r e s t r i c t i o n s :
# p o s t c o n f - d s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s = p e r m i t_my n e t wo r k s . r e j e c t_u n a u t h_d e s t i n a t i o n Postfix vyhodnotí omezení v tom pořadí, jak jsou uvedena. V tomto případě, pokud chce klient předat zprávu, ověří se, zda se spojení navazuje ze systému v rámci my n e two r k s . Po kud ano (jestliže se po zpracování p e r m i t_my n e t wo r k s vrátí OK), zpráva se přijme k do ručení. Není-li klient z my n e two r k s , vyhodnotí se omezení r e j e c t_u n a u t h_d e s t i n a t i o n . Toto omezení odmítá pokusy o předání tak, ž e kontroluje, zda je příjemce zprávy v kon covém místě nebo v doménách, pro které jsme Postfixu povolili předávání. Pokud v nich není, z omezení r e j e c t_un a u t h_d e s t i n a t i o n se vrátí R E J E C T a Postfix oznámí klientovi, že zprávu nelze předat. Je-li místo určení v pořádku, z omezení r e j e c t_u n a u t h_ d e s t i n a t i o n se vrátí O K a přejde se na vyhodnocování dalšího omezení. Ž ádná další omezení však v seznamu nejsou, takže dále se předpokládají implicitní omezení a zpráva se přijme. Tato dvě omezení jsou základem ochrany serveru před otevřeným předáváním, avšak neposkytují ochranu proti spamům ani nevyžadují od klientů , kteří navazují spojení se serverem, korektní chování. Ve zbytku této kapitoly si ukážeme, jak je třeba omezení dá le zpřísnit.
Korektní chování klientů Chceme-li, aby omezení fungovala jako dobře promazaný stroj , měli bychom začít od požadavku na korektní chování (tedy v souladu s protokolem RFC) jak lokálních, tak i vzdálených klientů . Nejde jen o to, aby si poštovní servery mezi sebou vyměňovaly
93
94
'4-Uiit'
Kapito l a 8
zprávy náležitým způsobem, nýbrž je třeba také žádat korektní chování od vzdálených klientů , což do značné míry usnadní obranu proti spamerům, kteří se vyznačují tím, že mají vžqy naspěch, nedodržují pravidla a vystupují pod falešnou identitou . V této části si řekneme něco o omezeních směřujících ke konformitě s protokolem RFC, jež se vzta hují na jméno systému, odesilatele a příjemce .
POZNÁMKA Popisova ná omeze n í nebudou v souboru ma i n . cf úmys l n ě seřazena v tom pořad í, v ja kém je zde probíráme. Důvod se dozvíme v části nazva né .. Pořadí zpracová n í omeze n í RFC " dále v této kapitole. N y n í s e b u d e m e pouze říd it pořad ím v uvedených příkladech.
Omezení jména systému v příkazu HELO/EHLO Když někdo chce na server nebo přes něho poslat zprávu , je třeba, aby se nejdříve řád ně představil . V části HELO/EHLa dialogu SMTP existuje celá řada omezení, od jedno duchého požadavku na zaslání jména systému až po požadavek na zaslání platného jména systému .
Požadavek na jméno systému Parametrem s m t pd_ h e 1 o_r e q u i red zadáváme, že každý klient musí zahájit komunikaci SMTP příkazem HELO nebo EHLa . V protokolech RFC 821 ( f t p : / / f t p . r f c e d i t o r . o r g / i n - n o t e s / r f c 8 2 1 . t x t l a RFC 2821 ( f t p : / / f t p . r f c - e d i t o r . o r g / i n - n o t e s / r f c 2 8 2 1 . t x t l je toto představení povinné, avšak v Postfixu je jeho implicitní hodnota "no" . Na "yes " se nastaví pomocí příkazu :
Jakmile se zavede tato konfigurace, odmítnou se zprávy od všech klientů , kteří se správ ně nepředstaví. Správné nastavení můžeme otestovat tak, že navážeme spojení s vlast ním serverem a pokusíme se poslat zprávu bez příkazu HELO. Postfix by měl zprávu odmítnout a měl by si vyžádat jméno systému :
$ t e l n e t ma ; 1 . e x a m p l e . c om 2 5 2 2 0 ma i l . e x a m p l e . c o m E S M T P P o s t f i x M A I L F ROM : < s e n d e r@ex a mp l e . c om> 503 E r r o r : s e n d H E L O / E H L O f i r s t QU IT 2 2 1 Bye
Požadavek na úplné jméno domény (FQDN) Příkaz HELO/EHLa je sice hezký, ale při představení je třeba po klientech požadovat i celé jméno domény (např. H E L O c l i e n t . e x a m p l e . c om). Z hlediska protokolu RFC je po vinné, aby se uvedlo úplné jméno domény (FQDN).
POZNÁMKA Toto FQDN nemusí n utně v DNS zázna mech existovat. Když v omezení smt pd_ r e c i pi e n t_r e s t r i ct i o n s nastavíme volbu r e j e c t_n o n_fqdn_h o s t n a m e , odmítnou se zprávy od všech klientů, kteří neuvedou úplné jméno domény (FQDN).
'a-fiMG'
J a k se používaj í omeze n í UPOZORNĚNí
S tímto omezením musíme zacházet opatrně. Někteří kl ienti, jako např. M icrosoft Out look, i m p l icitně uváděj í jen loká l n í část jména (tj . k l i e nta), není- I i systém zkonfi g u rová n tak, a by se v a p l i kacích uvádělo úplné j méno. Když do seznamu s m t pd_re c i p i e n t_ r e s t r i c t i o n s přidáme parametr r e j e c t_n o n_fqdn_ hos t n a me , soubor ma i n . c f by mohl vypadat asi takto:
s m t pd_ r e c i p i e n t_r e s t r i c t i o n s p e rm i t_my n e tw o r k s r e j e c t_u n a u t h_d e s t i n a t i o n rejec t_non_fqdn_ h o s tname
p e rmi t Nastavení otestujeme tak, že se spojíme se serverem a uvedeme jen jednoduché jméno, viz příklad:
$ t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . e x a mp l e . c o m E S M T P P o s t f i x H E LO c l i e n t 2 5 0 ma i l . exampl e . com MA I L F ROM : < s e n d e r@ex a mp l e . c om> 250 Ok RePT TO : < r e c i p i e n t@e x a mp l e . com>
504
< c l i en t > :
He l o c omma n d rej e c t e d :
n e e d fu l ly - q u a l i f i e d h o s t n a me
QU I T 2 2 1 Bye
Odmítnutí neplatných znaků ve jméně Protokol RFC říká, že jméno systému zaslané příkazem HELO/EHLO by mělo být nejen úplné, nýbrž mělo by splňovat i další požadavky na jméno systému . Platné jméno do mény musí obsahovat alespoň tyto položky: •
Doménu nejvyšší úrovně, např. "com"
•
Jméno domény, např. "example"
•
Tečku (.), která odděluje předchozí dvě položky
Jakékoli jiné jméno pravděpodobně není správné a další součinnost mezi klientem a ser verem bude obtížná , pokud ne rovnou nemožná. V omezení s m t p d_ r e c i p i e n L r e s t r i c t i o n s můžeme zadat volbu r e j e c t_i n v a l i d_h o s t n a m e , čímž Postfixu sdělíme, že s takovými klienty nemá dále komunikovat. Následuje příklad, jak lze zadat toto ome zení:
s m t p d_ r e c i p i e n t_r e s t r i c t i o n s p e r m i t_my n e tw o r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_n o n_f q d n_h o s t n a m e rejec t_ i n v a l i d_ h o s tname
p e rm i t Tak jako v předchozích případech toto nastavení otestujeme tak, že zadáme chybné jmé no systému . V následujícím příkladu se klient představí jako ".".
95
96
'a-hNM
Kapitola 8
$ t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . exampl e . com ESMTP P o s t f i x H E LO . 2 5 0 - m a i ·1 . e x a m p l e . c o m MA I L F ROM : < s e n d e r@e x a m p l e . com> 250 Ok RCPT TO : < r e c i p i e n t@ex a mp l e . com> 501 < . > : H e l o c omma n d rej e c t e d : I n v a l i d n a me QU n 2 2 l By e
Omezení odesilatele V údajích o odesilateli musí také být uvedeno úplné jméno domény (FQDN) a obálka musí patřit do existující domény. Za úplné jméno domény nelze považovat s e n d e r ne bo s e n d e r@ex a m p l e, nýbrž adresa musí mít tvar například s e n d e r@e x a m p l e . c o m . Chybné adresy mohou být příčinou značných potíží, neboť adresa odesilatele vypadá, jako by pocházela ze serveru . Mohou nastat problémy dvojího druhu: •
•
Zpráva s neúplnou adresou odesilatele vrácená přenosovým agentem by doputovala k lokálnímu uživateli, nikoli k původnímu odesilateli. Ještě horší situace může nastat, když se PostHx pokusí chybnou adresu doplnit sám. Ví to tiž, že adresa odesilatele musí být úplná, spustí tedy démona na přepisování jednoduchých adres, který k adrese s e n d e r doplní $ my o r i g i n (vznikne adresa s e n d e r@$my o r i g i n) a k adrese s e n d e r@e x a mp l e přidá $ mydoma i n (vznikne adresa s e n d e r@ex a m p l e . $my d oma i n). V obou případech je výsledkem zcela nesprávná adresa.
Aby k takovým situacím nedocházelo, je třeba k omezení s m t pd_re c i p i e n t_ r e s t r i c t i o n s přidat volbu r e j e c Ln o n_ f q d n _s e n d e r jako v následujícím příkladu :
s m t p d _ r e c i p i e n t_ r e s t r i c t i o n s rej e c t_ n o n_ fqdn_ s e n d e r
p e rm i t_my n e t w o r k s r e j e c t_ u n a u t h_d e s t i n a t i o n r e j e c t_n o n_fqd n_h o s t n a m e r e j e c t_i n v a l i d_h o s t n a me p e rmi t Omezení můžeme otestovat tak, že připojíme vzdálený počítač k poštovnímu serveru a nesprávně zadáme odesilatele. Na tomto příkladu vidíme, že Postfix v důsledku toho to omezení zprávu od takového odesilatele odmítne_
$ t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . e x a mp l e . c o m E S M T P P o s t f i x H E LO c l i e n t . ex a m p l e . com 250 ma i l . e x a m p l e . c o m MA I L F ROM : < s e n d e r > 250 Ok R C P T TO : < r ec i p i e n t@ex a mp l e . com> 5 0 4 < s e n d e r > : S e n d e r a d d r e s s rej e c t e d : n e e d f u l l y - q u a l i f i ed a d d r e s s
J a k se používaj í o m ezení
Pošta z neexistující domény Odpovědný poštovní server nepřijímá zprávy odeslané z neexistujících domén; kdyby se totiž takovou zprávu nepodařilo řádně doručit, nebylo by možné kontaktovat odesilate le v neexistující doméně. V některých konfiguracích se zpráva s neexistující doménou dvakrát vrátí odesilateli a pak skončí ve schránce správce pošty.
POZNÁMKA Poštovní servery m usí zprávy s neexistuj ícím i doména m i prověřovat, neboť uživatelé ně kdy při konfiguraci k l ienta udělaj í ve své ad rese chybu; neexistuj ící domény také pou žívaj í spameři, a by utaj i l i svůj původ. Proti dvojímu vracení a proti zprávám, které nemají náležitý tvar, se může příjemce a správce pošty chránit, když do omezení s m t pd_re c i p i e n L r e s t r i c t i o n s přidá volbu r e j e c t_u n k n own_s e n d e r _d oma i n . Například:
s m t p d _ r e c i p i e n t_ r e s t r i c t i o n s = rej e c t_ un k n o wn_s e n d e r_doma i n
p e r m i t_my n e t wo r k s r e j e c t_ u n a u t h_d e s t i n a t i o n r e j e c t_n o n_f q d n_h o s t n a m e r e j e c t_i n v a l i d_h o s t n a m e p e rmi t V následujícím příkladu si ukážeme, jak můžeme omezení otestovat (prověřujeme chy bu s kódem 450, kterou Postfix odpoví na příkaz MAIL FROM):
$ t e l n e t ma i l . ex a m p l e . c om 2 5 2 2 0 ma i l . e x a m p l e . c o m E S M T P P o s t f i x H E LO c l i en t . exampl e . com 2 5 0 ma i l . e x a mp l e . c o m MAI L FROM : < s e n d e r@d oma i n . i n v a l i d > 250 Ok R C P T TO : < r e c i p i e n t@e x a mp l e . c o m >
450
< s en d e r@doma i n . i n va 7 i d> : Sender a ddress rej e c t e d : Doma i n n o t fo und
Omezení příjemce Posledním omezením, kterým přiblížíme zpracování příchozí pošty protokolu RFC, je od mítnutí zpráv s neexistující doménou nebo uživatelem na místě příjemce . Ž ádný poštovní server by neměl přijímat zprávy pro neexistující domény, neboť takové zprávy nelze doručit. Pokud server takovou zprávu přijme a později ji vrátí, uživatel se může domnívat, že se severem něco není v pořádku , neboť původně zprávu přijal . Když zkonfigurujeme server tak, aby odmítal zprávy s neexistující doménou, problém pře neseme na původce zprávy (klienta, resp. uživatele). V množině omezení smt pd_r e c i p i e n t_res t r i c t i o n s je třeba zadat volbu rej e c t_u n k n own_rec i p i e n t_d oma i n , například takto:
s m t pd_r e c i p i e n t_ r e s t r i c t i o n s = rej e c t_unkn own_ r e c i p i en t_doma i n
p e r m i t_my n e t wo r k s r e j e c t_ u n a u t h_d e s t i n a t i o n b r ej e c t_ n o n _ f q d n_h o s t n a m e
97
Ka p itola 8
98 r e j e c t _ i n v a l i d_h o s t n a me p e rm i t
Jako obVykle můžeme nastavení otestovat tak, že se pokusíme ručně spojit se selVerem a zadáme neexistující doménu . Můžeme to provést například takto:
$ t e l n e t m a i l . e x a m p l e . com 2 5 2 2 0 ma i l . e x a mp l e . c o m E S M T P P o s t f i x H E LO c l i e n t . ex a m p l e . com 250 m a i l . e x a m p l e . c o m M A I L F ROM : < s e n d e r@ex a mp l e . c om> 250 O k RCPT TO : < r e c i p i e n t@d oma i n . i n v a l i d > 4 5 0 < re c i p i en t@doma i n . i n va l i d> : Rec i p i e n t a dd r e s s r ej e c t e d : Doma i n n o t fo und
Zpráva neznámému příjemci Postfix můžeme zkonfigurovat například tak, že zpráva adresovaná neznámému příjem ci se doručí správci pošty. Na pIVní pohled to vypadá jako dobré řešení, neboť správce může zprávu prozkoumat, a je-li to možné, ručně ji doručit. I když teoreticky by takto mohl vzniknout skvělý zákaznický selVis, doručování impli citnímu cíli často mívá za následek odmítnutí služby (denia/-of-service, DoS) kvůli úto kům spamerů nebo slovníkovým útokům virů/červů. Při těchto útocích se útočník pokouší o doručení zprávy existujícímu příjemci tak, že zadá všechny možné kombina ce písmen . Začne například adresou a a@y o u r d o m a i n . c om, pak zkusí a b@y o u r d om a i n . c om a pokračuje všemi dvoupísmenovými kombinacemi až k z z@y o u r d oma i n . c om. Nejenže je složité oddělit platné zprávy o d spouště způsobené takovým útokem, ale ser ver je také vystaven nebezpečí zahlcení přenosového pásma, kapacity procesoru , pamě ti a prostoru na disku . Nakonec to bude muset stejně vzdát a nezbude mu než odmítnout všechny žádosti o poskytnutí poštovních služeb. Například v srpnu 2003 bylo mnoho poštovních selVerů vyřazeno z činnosti virem Sobig.F. Je dobré si uvědomit, že cílem Postfixu je poskytování pokud možno co nejspolehlivěj ších služeb. Podmínkou konzistence je spolehlivost; proto se implicitně odmítají nezná mí uživatelé, a to bez ručního zásahu . To je důležité opatření jak u samostatné instalace Postfixu, tak i v případě provozování Postfixu na malém počítači, který tak může chrá nit ostatní poštovní selVery. Platnost adres příjemců zjišťuje Postfix v mapách, jejichž umístění se zadává pomocí dvou konfiguračních parametrů : l o c a l _ r e c i p i e n t_ma p s a r e l ay_r e c i p i e n t_ma p s . Oba para metry obsahují odkaz na nejméně jednu mapu platných příjemců , přičemž v mapě 1 0 c a l _r e c i p i e n t_ma p s jsou lokální příjemci. V následujícím příkladu jsou příjemci definovaní v unixovém souboru hesel a v aliasech:
# p o s t c o n f -d l o c a l _r e c i p i e n t_ma p s l o c a l _r e c i p i e n t_ma p s
�
p r o xy : u n i x : p a s s wd . by n a m e $ a l i a s_ma p s
N a druhé straně, mapa r e l a y- r e c i p i e n t_ma p s definuje příjemce, pro něž Postfix zajiš ťuje předávání zpráv do místa určení (např. schránkový selVer):
# p o s t c o n f - d r e l ay_ r e c i p i e n t_ma ps r e l a y_ r e c i p i e n t_m a p s
�
h a s h : / e t c / p o s t f i x / r e l ay_r e c i p i e n t s
'4-fiUt'
J a k se používaj í omeze n í
U této mapy je třeba dbát na to, aby Postfix skutečně znal všechny platné příjemce, pro něž zajišťuje předávání. Je-li některý z nich Microsoft Exchange server, je třeba si v ka pitole 13 přečíst, jak se v tomto případě používá uživatelská mapa .
UPOZORNĚNí Pa rametrem 1 u s e r _re 1 ay se ruší parametr 1 ú c a l _ r e c i pi e n t_ma p s , neboť se j ím autori zuj í všichni loká l n í příjemci j a ko platní. Podobně, pomocí hromadné položky catcha l l v m a pě v i r t u a l _a 1 i a s_m a p s s e ruší zákaz doručová n í zpráv neexistuj ícím příjemcům a všichni loká l n í příjemci jsou a utorizová n i j a ko p l atní: @e x a m p l e . c om
c a t c h a l l @l o c a l h o s t
Zprávy pro příjemce s neúplnou adresou Neúplná adresa příjemce je taková adresa, která obsahuje pouze lokální část adresy. To je na počítači, který dostává poštu pouze pro jedinou doménu, v pořádku; potíže nastá vají, dostává-li poštovní server zprávy i pro jiné domény. To proto, že lokální část adresy ponechává příliš mnoho prostoru pro svoji interpretaci. Představme si například, že jsme poskytovatelé internetového připojení pro domény e x a mp l e . c om a e x a m p l e . n e t současně. Komu patří zpráva s adresou s a l e s ? Je to s a 1 e s@e x a m p l e . c o m nebo s a 1 e s@ex a m p l e . n e t , jestliže poštovní služba pro obě domény je na jednom počítači? To je důvod, proč by se neúplné adresy měly odmítat. Nelze totiž přebírat odpovědnost za něco, co nemůžeme ovlivnit. Je věcí odesilatele, aby zprávu pro přenos řádně při pravil; k tomu patří i jednoznačná identifikace příjemce.
POZNÁMKA Existuje jed i n á výj i mka: Zprávy pro správce pošty je n utno přij ímat i s neúplnou adreso u . Odmítání zpráv nastavíme tak, ž e k parametru s m t p d _ r e c i p i e n t s_r e s t r i c t i o n s přidá me volbu r e j e c t_n o n_fq d n_r e c i pi e n t , viz následující příklad:
s m t p d_ r e c i p i e n t_r e s t r i c t i o n s
�
r ej e c t_ n o n_ fqdn_ r e c i p i e n t
r e j e c t_u n k n own_r e c i p i e n t_d oma i n p e r m i t_my n e t wo r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_n on_f q d n_h o s t n a me r e j e c t _ i n v a l i d_h o s t n a m e permi t Nastavení otestujeme tak, že ze vzdáleného počítače navážeme spojení se svým poštov ním serverem a na obálku uvedeme nekompletní adresu příjemce . Ověření může pro běhnout například takto:
$ t e l n e t ma i l e x a m p l e com 2 5 2 2 0 ma i 1 . e x a m p 1 e . c o m E S M T P P o s t f i x H E L O c l i e n t . e x a m p l e . c om 2 5 0 ma i l . e x a m p l e . c o m MA I L F ROM : < s e n d e r@ex a mp l e . c om> .
.
99
1 00
'a·finC'
Ka p ito la 8
250 Ok RePT T o : < r e c i p i e n t > 5 0 4 < r e c i p i e n t > : Re c i p i e n t a d d r e s s r e j e e t e d : n e e d f u l l y - q u a l i f i e d a d d r e s s
Konformnost s protokolem RFC Z dosavadního obsahu kapitoly vyplývá, ž e omezení mohou být skutečně komplexní. Hrozí ovšem nebezpečí, že čím jsou tato omezení složitější, tím snáze můžeme do systé mu vnést chybu (případně jej celý učinit nefunkčním), když například odmítneme zprá vu , kterou musíme za všech okolností přijmout V následujícím textu si popíšeme, jak předejdeme neodůvodněnému odmítání odesilatelů . Taková opatření jsou důležitá třeba proto, že omylem neodmítneme odesilatele, který se nám snaží sdělit něco o chybné konfiguraci našeho poštovního systému .
Prázdná adresa odesilatele První zásadou je, že se nesmí blokovat prázdný odesilatel obálky « » . Tato adresa pat ří démonu MAILER-DAEMON a poštovní server ji používá k vracení zpráv a k zasílání stavových informací. Kdybychom prázdnou adresu zablokovali, vzdálené servery by ne měly možnost upozornit uživatele na případné chyby v jejich zprávách .
Servery, které zcela blokuj í prázd né odes i l atele, jsou uvedeny na černých l i sti nách, na př. d s n . rfe - i g n o r a n t . o r g, takže poštovní servery, které tyto černé l isti ny používaj í, vů bec nepřijímaj í zprávy od takových serverů (viz dále část " Č erné l isti ny " ). S prázdným odesilatelem je třeba zacházet jako s každým jiným platným odesilatelem a před spamy musíme svoje příjemce bránit pomocí jiných omezení. Zprávu s prázdným odesilatelem je třeba přijmout; koneckonců každá adresa může být falešná . . .
Zvláštní účty Existují dvě adresy, pro něž se musí zprávy vždy přijmout, aby se zachovala kompatibi lita serveru s protokolem RFC:
p o s t ma s t e r Zprávy pro adresu p o s t ma s t e r se musí přijmout vždy, neboť správce pošty řeší veške ré problémy s poštou . Uživatel musí mít možnost kdykoli jej kontaktovat pro případ nutné pomoci (viz RFC 2821 na h t t p : / / www . r f e - e d i t o r . o r g / r f e / r f e 2 8 2 1 . t x t).
abuse N a adrese a b u s e může uživatel informovat správce o potenciálním zneužívání poš tovního serveru (viz RFC 2 1 42 na h t t p : / / www . r f e - e d i t o r . o r g / r f c / r f e 2 1 4 2 . t x t). V závislosti na používání určitých serverů (viz RFC 2 1 42 ; h t t p : / / www . r f e ed i t o r . o r g / r f e / r f e 2 1 4 2 . t x t) bychom měli volitelně přijímat zprávy pro tyto adresy:
webma s t e r Používáme-li webový server, musíme přijímat poštu pro účet w e b m a s t e r .
h o s tma s t e r Používáme-li jmenný server (DNS), musíme přijímat poštu pro účet h o s t m a s t e r .
J a k se používaj í omeze n í
'4-fiihl
Přijímání pošty pro tyto příjemce se nastavuje pomocí parametru check_recipiencaccess v kombinaci s mapou , např. /etc/postfix/roleaccouncexceptions, která obsahuje seznam příjemců , pro něž se má přijímat pošta . Mapa může vypadat například takto (hodnota klíče OK říká Postfixu, že pro tyto příjemce se má přijímat pošta bez ohledu na jejich omezenO:
# a d d r e s s e s t h a t you mu s t a l ways accept pos tma s t e n@ OK a b u s e@ OK # a d d r e s s e s that you s h ou l d accept i f you run DNS a n d WWW s e r v e r s h o s tma s t e r@ webma s t e r@ OK
OK
Po nastavení tohoto souboru je třeba jej převést do tvaru mapy příkazem postmap hash:/etc/postfix/roleaccouncexceptions. Pak se tato mapa zadá jako parametr k nastavení c h e c k_ r e c i p i e n t_a c c e s s v seznamu omezení v souboru m a i n . c f , viz ná sledující příklad:
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s r e j e c t_non_fqd n_r e c i p i e n t r e j e c t_ n o n _ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_ r e c i p i e n t_d oma i n c h e c k_ re c i p i e n t_ a c c e s s h a s h : / e t c / p o s t f i x / ro 7 e a ccoun t_excep t i on s
p e rm i t_my n e tw o r k s r e j e c t_u n a u t h_d e s t i n a t i o n p e rm i t Po znovuzavedení Postfixu se mohou bezpečně vytvářet složitější pravidla. Výjimky v té to mapě bude Postfix zjišťovat poté, co zjistí neautorizované předávání; lze tedy zadat p o s t m a s t e r@.
Pořadí zpracování omezení RFC Mohli jsme s i všimnout, ž e volby přidávané k s m t pd_re c i p i e n t_ r e s t r i c t i o n s v před chozích podkapitolách nebyly uváděny ve stejném pořadí jako tyto podkapitoly samot né. Důvodem je skutečnost, že volby omezení se mohou vzájemně ovlivňovat, nejsou-li uvedeny ve správném pořadí. Podívejme se na následující výpis:
s m t p d_ r e c i p i e n t_r e s t r i c t i o n s r e j e c t_n on_fq d n_ r e c i p i e n t r e j e c t_ n o n _ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d o m a i n r e j e c t_u n k n own_r e c i p i e n t_d oma i n p e rm i t_my n e tw o r k s r e j e c t_u n a u t h_d e s t i n a t i o n c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_ex c e p t i o n s r e j e c t_m u l t i _ r e c i p i e n t_b o u n c e r e j e c t_n o n _ f q d n _h o s t n a m e r e j e c t_ i n v a l i d_h o s t n a m e p e rm i t Volbou p e rm i t_my n e tw o r k s je vyznačena důležitá hranice mezi klienty ve vnitřní síti a venkovními klienty. Volby nacházející se po tento bod včetně se vztahují jak na inter-
101
1 02
'a'fi'it'
Kapitol a 8
ní, tak i na externí klienty, zatímco volby pod p e rm i t_my n e t wo r k s se vztahují jen na ex terní klienty. U voleb, 'které se nacházejí před p e rm i t_my n e t w o r k s , platí shoda s protokolem RFC pro všechny klienty jak uvnitř, tak i vně sítě. Volba r e j e c t_u n a u t h_d e s t i n a t i o n chrání server před otevřeným předáváním. Nejlepší je před p e r m i t_my n e tw o r k s nezadávat žádné volby, kterými se povoluje průchod zpráv poštovním serverem. Pak je dobré co nejdříve zadat r e j e c t_u n a u t h_d e s t i n a t i o n , aby chom vyloučili všechny možné způsoby zneužívání poštovního serveru k otevřenému předávání neautorizovanými systémy. Kontrola na SMTP AU1H by měla být mezi rej e c t_u n a u t h_d e s t i n a t i o n a p e rmi t_my n e t wo r k s . Pak, ještě před zadáním dalších voleb, by mělo přijít c h e c k_r e c i p i e n La c c e s s , kvů li doručování pošty do schránek zvláštních účtů. Nakonec, po zamezení doručování spamů s hromadnými adresami příjemců a zfalšova nými jmény přijímajících systémů , lze povolit přijímání zpráv s volbou permit.
Antispamová opatření Nechtějí-li s e spameři dostat před soud, musí maskovat původ svých zpráv. Obvykle fal šují adresu odesilatele nebo se pokoušejí oklamat přijímající server tak, že se vydávají za důvěryhodného klienta, který patří do lokální sítě. Takové zprávy lze pomocí omezení odmítat. Navíc je možné využívat černé listiny se seznamy spamerů a dalších nežádou cích kontaktů .
Prevence proti padělkům Některý spamový software s e snaží zfalšovat původ svých zpráv tak, ž e při představo vání nahrazují svoje jméno jménem poštovního serveru příjemce . Situace je pro Postfix paradoxní, neboť jediný systém, který může používat toto jméno, je on sám. Nicméně, není-li Postfix chybně zkonfigurován a zpráva se nezacyklí, nikdy by se nespojil se svým démonem s m t p d a neposlal by zprávu sám sobě. Umístí-li se toto omezení za p e r m i t_my n e tw o r k s , bude se vztahovat pouze na externí kli enty, nikoli na proxy-filtry nebo lokální klienty s neúplnou implementací SMTP . Proto lze bezpečně odmítnout každého klienta, který se představí jménem přijímajícího poštovního serveru. Můžeme to provést tak, že vytvoříme mapový soubor jménem f e t c f p o s t f i x f h e l o_c h e c k s , který obsahuje různé varianty vlastního jména . Následuje několik příkladů se jmény systémů, IP adresami a IP adresami v hranatých závorkách, které by klient mimo poštovní server neměl používat:
f A m a i l \ . e x a m p l e \ . c om $ f f A 1 9 2 \ . 0 \ . 34 \ . 1 6 6 $ f f A \ [ 1 9 2 \ . 0 \ . 34\ . 1 66 \ ] $ f
5 5 0 D o n ' t u s e my h o s t n a me 5 5 0 D o n ' t u s e my I P a d d r e s s 5 5 0 D o n ' t u s e my I P a d d r e s s
V souladu s RFC 2821 samotná I P adresa není platným parametrem v žádosti o navázá ní spojení HELO . Lze ji použít, když je zadaná ve tvaru li p v 4 a d d r e s s l (v hranatých zá vorkách) nebo ve tvaru IPv6 li p v 6 : i p v 6 a d d r e s sl , taktéž v hranatých závorkách. Abychom přesně podle protokolu odmítli službu klientům, kteří pošlou neuzávorkova nou IP adresu, přidáme řádek:
J a k se používaj í omeze n í
/ A [0 - 9 . ]+$/
'a'*i'it'
550 Y o u r c l i ent i s not RFC 2821 compl i a nt
Mapa se uvede do provozu tak, že se zadá (včetně typu) jako argument ve volbě c h e c k_ h e l o_a c c e s s v parametru s m t pd_r e c i p i e n t_ r e s t r i c t i o n s , například takto:
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s r e j e c t_ n o n _ f q d n_r e c i p i e n t r e j e c t_n o n _ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_r e c i p i e n t_d oma i n p e rm i t_my n e t wo r k s r e j e c t_u n a u t h_d e s t i n a t i o n c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_n o n_fq d n_h o s t n a m e r e j e c t_ i n v a l i d_h o s t n a me c h e c k_ h e 7 o_ 8 c c e s s p c re : / e t c / p o s t f i x / h e 7 o_ c h e c k s
p e rm i t Nastavení otestujeme tak, že se spojíme s vlastním poštovním serverem a v příkazu HELO zadáme svoje jméno. Měli bychom být odmítnutí, viz následující příklad:
$ t e l n e t ma i l . ex a m p l e . c om 2 5 2 2 0 m a i l . e x a m p l e . c o m E SM T P P o s t f i x H E LO ma i l . ex a m p l e . c om 250 ma i l . exampl e . com MA I L F ROM : < s e n d e r@ex a mp l e . c om> 250 O k RC PT TO : < r e c i p i e n t@ex a mp l e . com> 550 : H e l o c omma n d rej e c t e d : D o n ' t use my h o s t n ame QU I T 2 2 1 8ye
Zfalšované záznamy jmenného serveru Získá-li Postfix důkaz o tom, že záznamy ze jmenného serveru obsahující doménu uve denou v příkazu HELO, doménu odesilatele a doménu příjemce jsou podvržené a nelze je použít ke korektnímu přenosu zpráv, je oprávněn takovou zprávu odmítnout. Pode zřelé prvky v záznamech získaných prostřednictvím služby DNS se mohou projevovat například takto:
Falešné sítě Některé poštovní servery tvrdí, že jsou ze sítí, které jsou pro Postfix nedostupné. Mo hou to být nepoužívané privátní sítě (viz RFC 1918, ft P : / / ft P . r f c - ed i t o r . o r 9 / i n n o t e s / r f c 1 9 1 8 . t x t), vnitřní sítě Ooopback) a sítě se všesměrovými a vícesměrovými adresami.
Ráj spamem Ráj spamerů jsou sítě, které spamerům buď patří nebo jim zajišťují určité služby. Z ta kových sítí je možné odmítnout všechny zprávy. Ráje spamerů , resp. jejich operační prostor, můžeme nalézt v ROKSO (Register of Known Spam O perations, h t t p : / / www . s p a m - h a u s . o r g / r o k s o / i n d e x . l a s s o).
1 03
1 04
'a-hNM
Kapito l a 8
Víceznačně zadávané domény Zadá-li se doména pomocí zástupných symbolů , přenosový agent odpovídá za všechny domény, tedy i za domény neexistující. V normální situaci o nic nejde, ne boť můžeme odmítnout přístup z důvodu neznámé domény odesilatele i příjemce. Bohužel však některé registry domén přišly se "skvělým" nápadem, že by mohly ne známé domény přesměrovat do svých vlastních domén. Neznámým doménám tak "darují" platný záznam typu A a současně omezující volby r e j e c t_u n k n own_s e n d e r _d oma i n a r e j e c t_u n k n own_r e c i p i e n t_d oma i n ztratí účinnost.
POZNÁMKA Prvním reg istrem domén, který přesměrováva l neznámé domény, byl VeriSign ( h t t p : I I www . v e r i s i g n . c om ) v roce 2003 . Zneuž i l svoje postaven í vůči j m e n ným prostorů m . n et a .com a přesměrova l všechny neexistuj ící domény z .com a . n et do své vlastní domény ( s i t e f i n d e r . v e r i s i g n . c om ) . Navíc zříd i l pro neznámé domény vlastní poštovní sl užbu, takže nebylo možné od m ítat poštu z nezná mých domén. Spamerům tak naservírova l pozvá nku na stříbrném pod nosu a zprávy, jej ichž víceznačné domény byly tímto způ sobem zpracová ny přenosovými agenty, se m usí od m ítat bloková n ím MX systém ů v ta kových doménách. Taková nastavení jsou buď příčinou falešných záznamů ve jmenných serverech anebo ulehčují práci spamerům. Odmítání zpráv z takových domén zajistíme pomocí mapové ho souboru jménem l e t c / p o s t f i x / b o g u s_m x , který obsahuje IP adresy ve stejném tvaru jako jmenný server a typ odmítavé odpovědi (jejich seznam viz Příloha C). Zde je pří klad takového mapového souboru :
ff b o g u s n e two r k s 0 . 0 . 0 . 0/8 10 . 0 . 0 . 0/8 127 . 0 . 0 . 0/8 255 . 0 . 0 . 0/4 1 9 2 . 1 68 . 0 . 0 / 1 6 ff s p a m h a v e n s 69 . 6 . 0 . 0/ 1 8 ff w i l d - c a r d MTA 64 . 94 . 1 1 0 . 1 l / 32
550 550 550 550 550
Ma i 1 s e r v e r No route to Mai 1 server Mai 1 server No route to
i n b r o a d c a s t n etwo r k y o u r R F C 1 9 1 8 n e t wo r k i n l oopba c k n etwo r k i n c l a s s O m u l t i c a s t n e tw o r k y o u r RFC 1 9 1 8 n etwo r k
5 5 0 R E J E C T L i s t e d o n R e g i s t e r O f K n own S p a m O p e r a t i o n s ., 5 5 0 REJ E CT V e r i S i g n Doma i n w i l d c a rd �
o
Když jsme psali tuto knihu, byla tato síť uvedena na stránkách spamhaus.org ( h t t p : / / www . s p a m h a u s . o r g l sb 1 I sb 1 . 1 a s s o ? q u e rr S B L 6 6 3 6 ) jako síť, odkud se šíří spamy.
49 V době psaní této knihy tento počítač zpracovával víceznačné adresy.
Vzhledem k tomu , že pracujeme s mapou typu CIDR, což je sekvenční typ (viz kapitola 5), není třeba (resp. nesmíme) ji konvertovat pomocí p o s t m a p a Postfix ji bude používat v nezměněné podobě. Pouze přidáme volbu c h e c k_s e n d e r _mx_a c c e s s s mapou na mís tě argumentu v parametru s m t pd_ r e c i p i e n t_r e s t r i c t i o n s , například takto:
s m t pd_re c i p i e n t_r e s t r i c t i o n s r e j e c t_n on_f q d n _ r e c i p i e n t r e j e c t_n on_fqd n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_ r e c i p i e n t_d oma i n p e rm i t_my n e two r k s
J a k se používaj í omeze n í r e j e c t_u n a u t h_d e s t i n a t i o n c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_ n o n _ f q d n_h o s t n a m e r e j e c t_i n v a l i d_h o s t n a me c h e c k_h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s c h e c k_ s e n d e r_mx_ a c c e s s c i dr : / e t c / p o s t f i x / bogus_mx
p e rm i t Omezení vstoupí v platnost po znovuzavedení Postfixu . Jejich účinky můžeme vidět v žurnálním souboru :
S e p 1 7 1 2 : 1 9 : 2 3 ma i l p o s t f i x / s m t p d [ 3 3 2 3 J : A0 0 3 D 1 5 C 0 2 1 : r e j e c t : R C P T f r om u n k n own [ 6 1 . 2 3 8 . 1 3 4 . 1 6 2 J : 5 5 4 < r e c i p i e n t@e x a m p l e . c om> : S e n d e r a d d r e s s r e j e c t e d : V e r i S i g n D o m a i n wi l d c a rd ; f r om� < a l l i . k_l a c e y_mq@j oyma i l . c o m > t o� < r e c i p i e n t@e x a m p l e . c o m > p r o t o� E S M T P h e l o�< e x a m p l e . c om> IP adresy l z e ověřit pomocí příkazu h o s t :
# h o s t - t m x j oyma i l . c om # h o s t -t a j oyma i l . c om j oy m a i l . c om h a s a d d r e s s 6 4 . 9 4 . 1 1 0 . 1 1
POZNÁMKA Tato doména existuje; pravděpodobně byla za reg istrova ná v říj n u 2003 .
Vracení zpráv více příjemcům v části "Prázdná adresa odesilatele" jsme s e dozvěděli, ž e prázdná adresa odesilatele se
nemá blokovat. Z tohoto pravidla existuje jedna výjimka - pošta s prázdnou adresou odesilatele poslaná více příjemcům by naopak měla být blokovaná, neboť současně ne ní znám žádný legitimní důvod k hromadnému oznamování stavu, takže ani zprávy to hoto druhu pravděpodobně nejsou legitimní. Abychom odmítali odesilatele zpráv s prázdnou adresou odesilatele adresované více pří jemcům, k seznamu s m t pd_ r e c i p i e n t_r e s t r i c t i o n s přidáme v o l b u r e j e c t_m u l t Lre c i p i e n t_b o u n c e . I když v následujícím příkladu se tato volba nalézá až za volbou p e r m i t_my n e t wo r k s , v seznamu omezení může být prakticky kdekoli.
s m t pd_d a t a_r e s t r i c t i o n s � rej e c t_mu 7 t i_ r e c i p i en t_bounce
Jak se tvrdí v dokumentaci, spolehlivě lze používat r e j e c t_mu l t i _r e c i p i e n t_bo u n c e pouze v omezeních s m t pd_d a t a_ r e s t r i c t i o n s , když jsou všichni příjemci známi . Toto nastavení můžeme otestovat ručně, podobně jako v předchozích omezeních. Za šleme-li několika příjemcům obálku s prázdnou adresou odesilatele, výsledkem by mě lo být odmítnutí služby, jako například v následujícím sezení:
$ tel net l oc a l host 25 220 ma i l . exampl e . com ESMTP P o s tf i x E H L O c l i e n t . ex a m p l e . com 2 5 0 - ma i l . e x a m p l e . c o m
1 05
1 06
';'fi" P
Kapitola 8
250 - P I PE L l N I NG 250 - S I Z E 1 0240000 2 5 0 - V R FY 2 5 0 - ETRN 2 5 0 8 B l rM I M E M A l L F ROM : < > 250 Ok . RCPT TO : < r e c i p i e n t l@e x a m p l e . c om> RCPT TO : < r e c i p i e n t 2@ex a mp l e . c om> 5 5 0 : Rec i p i en t a d d r e s s rej e c t e d : Mu 7 t i - re c i p i en t b o un c e
QU I T 2 2 1 Bye
Černé listiny DNS DNS seIVer obsahující černé listiny je seIVer, který informuje uživatele o prostředcích OP adresách, odesilatelích a doménách), které jsou pravděpodobně nedůvěryhodné. Když si umíme správně vybrat, černá listina je velmi vhodným prostředkem pro blokování poš ty. Vybereme-li naopak špatně, může se stát, že budeme odmítat zprávy, které jsou z na šeho hlediska zcela legitimní. Než se rozhodneme pro některou černou listinu, je třeba se důkladně seznámit s politikou jejích provozovatelů . Na stránkách všech černých listin by měla být k dispozici kritéria, podle nichž se prostředky zařazují na seznamy, a taktéž by měly být známy zcela jasné procedury pro jejich odstraňování z těchto seznamů, po mine-li důvod k evidenci. Jedním z míst, kde lze nalézt černé listiny, je dmoz.org ( h t t p : / / d mo z . o r g / C o m p u t e r s / I nternet/Abuse/ Spam/Bl a c k l i s ts l .
UPOZORNĚNí Všechny černé l isti ny jsou založeny na službě DNS, což znamená, že Postfix musí tuto sl už bu používat k vyh ledává n í. DNS hledán í bez paměťového serveru m ůže trvat až sekundu, a když vyprší časový l i m it, rych lost přijímání zpráv m ůže značně poklesnout. Z toho dů vodu je kontrola prováděná prostředn ictvím černých l isti n poměrně náročná na dobu odezvy a měla by se ze všech omezení používat až jako posled n í.
Odmítání klientů z černé listiny Klienty uvedené na černých listinách můžeme odmítat pomocí černých listin typu DNSBL (DNS-ba sed Blackhole List) . Ú plné jméno domény seIVeru evidovaného na černé listině se zadává jako argument volby r e j e c t_ r b Lc 1 i e n t , viz následující příklad:
s m t p d _ r e c i p i e n t_ r e s t r i c t i o n s r e j e c t_n on_fq d n_ r e c i p i e n t r e j e c t_n o n_fqd n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_ r e c i p i e n t_d oma i n p e r m i t_my n e t wo r k s r e j e c t_u n a u t h_d e s t i n a t i o n c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_n o n_fqd n_h o s t n a m e r e j e c t_i n v a l i d_h o s t n a m e c h e c k_h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s rej e c t_ rb 7_c 7 i e n t re 7 ays . o rdb . o rg
p e rm i t
J a k se používaj í omeze n í
'a-a",
Účinek této volby s e projeví p o znovuzavedení Postfixu .
POZNÁMKA Když chceme zj istit, zda je některý k l i ent na seznamu D N S B L, obrátíme pořad í čtyř sku p i n k l i e ntovy I P ad resy (tj . změn íme a . b . c . d na d . c . b . a), při poj íme rb 1 . d om a i n (např. r e l a y s . o r d b . o r g), a máme výsledek. Je- I i systém na černé l isti n ě, vypíše se původ n í IP ad resa, j a ko např. v tomto příkladu: $ host 2 . 0 . 0 . 1 2 7 . r e l a y s . o r d b . o r g 2 . 0 . 0 . 1 27 . rel ays . ordb . org A 1 27 . 0 . 0 . 2
Vícehodnotové výsledky Když zná Postfix IP adresu počítače na černé listině, může s ní dále pracovat. Mimo ji né může zjistit, proč je tato IP adresa na černé listině. Například v následující konfigura ci Postfix odmítne zprávy od všech počítačů evidovaných na naší imaginární černé listině d oma i n . t l d, které jsou na mapované na záznam typu A v 1 2 7 . O . 0 . 2 :
r e j e c t_r b l _c l i e n t d om a i n . t l d = 1 2 7 . 0 . 0 . 2 .
Odmítání odesilatelů z domén evidovaných na černé listině Poštu můžeme blokovat nejen podle IP adres, nýbrž i podle domén, které jsou uvedeny na černých listinách. Tento typ černých listin se nazývá pravostranné černé listiny (rlght hand-side blacklist, RHSBL). Postup při konfiguraci Postfixu je v tomto případě stejný. V příkladu v této části se používá speciální černá listina na adrese d s n . r f c . i gnorant . org:
Programové prohlášení www . r f e · i g n o r a n t . o r g : N a našem serveru naleznete několik seznamů ( v současnosti jsou t o d s n , a b u s e , p o s tma s t e r , b o g u s m x a w h o i s ) , v nichž jsou evidovány domény, jejichž správci se od mítají řídit pravidly protokolu RFC, což jsou stavební kameny sítě. Je nutno pozna menat, že NIKOHO NIC nenutí ke kompatibilitě s RFC (slovy "Request for Comments '\ avšak univerzální provozuschopnost sítě vznikla jedině díky tomu , že všichni měli před sebou stejné noty a ctili stejná pravidla . Seznam pouze říká, že ten, kdo je v něm obsažen, se rozhodl, že nebude plnit podmínky stanovené protokolem RFC . A každý si může sám vybrat, zda bude komunikovat s někým, kdo se neřídí protokolem, řekněme , RFC2142 a má pracovní adresu v seznamu . --dredd, www . r f e · i g n o r a n t . o r g Existuje mnoho přenosových agentů , kteří nepřijímají poštu způsobem stanoveným v RFC (například odmítají prázdné odesilatele obálky) z mnoha nesprávných důvodů, ja ko například: •
nejsou povoleny falešné zprávy od anonymních odesilatelů
•
nejsou povoleny prázdné adresy odesilatelů (v rámci boje proti spamům)
Komentář k chybovým hlášením poštovních serverů nekompatibilních s RFC: Každý uživatel může zfalšovat jakoukoli adresu. Klidně mohu poslat zprávu jako p r e s i . d e n t@w h i t e h o u s e . g o v , bude stejně anonymní jako zpráva s prázdnou adresou .
1 07
1 08
'4-h'it'
Kapitola 8
Spamy se vždy posílají s nějakou adresou, zatímco vrácené zprávy se mohou posílat pou ze s prázdnou adresou odesilatele. Poštovní'servery, které blokují zprávy s prázdnou adresou odesilatele, znemožňují svým uživatelům, aby se dozvěděli, proč byla jejich zpráva odmítnuta jiným poštovním serve rem, neboť blokují zprávy vrácené servery kompatibilními s protokolem RFC, jež mají prázdnou adresu odesilatele zcela v souladu s protokolem RFC: Protokol RFC explicitně stanoví, že přenosový agent musí přijímat zprávy s prázdnou zpáteční adresou (adresou odesilatele), neboť "prázdná zpáteční adresa vrácené zprávy je opatřením proti tomu , aby mezi dvěma systémy cyklily nedoručitelné zprávy" . V omezeních Postfixu existuje volba r e j e c t_r h s b Ls e n d e r , která odstraní lokální část adresy a zbylou doménu konzultuje s černou listinou (například d s n . r f c i g n o r a n t . o r g). Je-li odesilatel na této černé listině, Postfix zprávu odmítne. Podobně ja ko i jiné volby související s černými listinami, i tato by měla být umístěna na konci seznamu jako v následujícím příkladu :
s m t pd_re c i p i e n t_ r e s t r i c t i o n s r e j e c t_n o n_f q d n_ r e c i p i e n t r e j e c t_n on_fq d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_r e c i p i e n t_d oma i n p e rm i t_my n e two r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_mu l t i _r e c i p i e n t_b o u n c e r e j e c t_r b l _c l i e n t r e l a y s . o r d b . o r g c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_n o n_ f q d n _h o s t n a m e r e j e c t_ i n v a l i d_h o s t n a m e c h e c k_h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s rej e c t_ r h s b 7 _ s e n d e r dsn . r fc - i gn o r a n t . o rg
p e rm i t Změna se uplatní po znovuzavedení Postfixu a je možné ji otestovat zasláním obálky s odesilatelem z domény uvedené na d s n . r f c - i 9 n o r a n t . o r g, jako v následujícím pří kladu ( s e n d e r@ex a m p l e . c o m je oficiální testovací adresa):
$ tel net l oc a l host 2 5 2 2 0 ma i 1 . e x a m p1 e . c o m E S M T P P o s t f i x E H LO c l i e n t . ex a m p l e . com 2 5 0 - m a i l . exampl e . com 250 - P I PE L l N I NG 2 50 - S I Z E 1 0 240000 2 5 0 - V R FY 2 5 0 - E T R N 2 5 0 8 B I TM I M E MA I L F ROM : < s e n d e r@ex a mp l e . c om> 250 O k RCPT TO : < r e c i p i e n t@ex a mp l e . com> 554 S e r v i ce una va i 7 a b 7 e ; Sende r a dd r e s s [ s e n d e r@ex a mp 7 e . comJ b 7 0 c k e d us i n g dsn . r fc - i gn o r a n t . o rg ; No t s upp o r t i ng n u 7 7 o r i g i n a t o r ( OSN)
QU I T 2 2 1 Bye
\
J a k se používaj í omeze n í
'a-fi'hl
Ruční kontrola Kontrola domény pomocí RHSBL je podobná jako kontrola IP adresy s tou výjimkou , že se pořadí plVků v adrese neobrací. Pouze se ke kontrolované doméně připojí jméno ser veru s černou listinou a provede se vyhledání pomocí DNS. Následuje příklad kontroly domény, která není na černé listině:
$ h o s t p o s t f i x - b o o k . c om . d s n . r f c - i g n o r a n t . o r g H o s t p o s t f i x - b o o k . c om . d s n . r f c - i g n o r a n t . o r g n o t f o u n d : 3 ( N X DOMA I N ) Zatímco v případě domény evidované na černé listině by se vypsalo:
$ h o s t e x a m p l e . c om . d s n . r f c - i g n o r a n t . o r g e x a m p l e . c om . d s n . r f c - i g n o r a n t . o r g h a s a d d r e s s 1 2 7 . 0 . 0 . 2
Výjimky v doménách na černé listině Když bychom chtěli odmítat poštu z nějakého selVeru , který nedodržuje příslušná pra vidla, avšak chtěli bychom zůstat ve spojení s určitou doménou, která by jinak byla od mítnuta omezeními, můžeme si vytvořit seznam výjimek. Implementují se pomocí volby c h e c k_s e n d e r _a c c e s s s danou mapou . Nejdříve si vytvoříme soubor např. l e t c / p o s t f i x l r h s b Ls e n d e r_ex c e p t i o n s , který obsahu je uživatele a domény, od nichž chceme přijímat zprávy. V následujícím souboru se budou přijímat zprávy ode všech uživatelů z examp 1 e . com a pro uživatele s e n d e r@ex a mp l e . o r g :
e x a mp l e . c o m s e n d e r@e x a mp l e . o r g
OK OK
Pomocí příkazu p o s tma p h a s h : I e t c I p o s t f i x l r h s b Ls e n d e r _ex c e p t i o n s vytvoříme z to hoto souboru mapu . Pak bezprostředně před volbu r e j e c t_ r h s b l _s e n d e r přidáme vol bu c h e c k_s e n d e r _a c c e s s , podobně jako v následujícím příkladu :
s m t pd_re c i p i e n t_ r e s t r i c t i o n s r e j e c t_ n o n _ f q d n _ r e c i p i e n t r e j e c t_n o n _ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_ r e c i p i e n t_d oma i n p e r m i t_my n e tw o r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_m u l t i _ r e c i p i e n t_b o u n c e r e j e c t_ r b l _c l i e n t r e l a y s . o r d b . o r g c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_n o n _f q d n_h o s t n a me r e j e c t_ i n v a l i d_h o s t n a m e c h e c k_h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s check_ s ender_ a c c e s s h a s h : l e t c l p o s t f i x l rhsb 7 _ s e n d e r_excep t i o n s
r e j e c t_ r h s b l _s e n d e r d s n . r f c - i g n o r a n t . o r g pe rmi t
POZNÁMKA V tomto příkladu se používá pouze vol ba c h e c k_s e n d e r _a c c e s s , proto uvád íme ú p l ný seznam výj i mek:
1 09
Kapito l a
1 10 • • • •
8
check_sende,-access check_c1ienCaccess cpeck_helo_access checkJecipienCaccess
O volbě c h e c k_h e l o_a c c e s s jsme se už z m ín i l i v části " Prevence proti pad ě l k ů m " , zbý vaj ící dvě vol by jsou popsány v dokumentaci Postfixu.
Ověřován í odesilatele Diamantem v královské koruně antispamových nástrojů Postfixu je ověřování odesilate le. Ověřuje se, zda odesilatel obálky v dané doméně skutečně existuje. Pokud nikoli, zpráva se nepřijme. Toto opatření je bohužel dost drahé, neboť proces ověřování je náročný na čas a ke své činnosti potřebuje i další systémové prostředky. Skládá se z těchto kroků :
1 . Klient poskytne adresu odesilatele. 2.
Postfix vygeneruje a zařadí do fronty zkušební zprávu odesilateli.
3.
Postfix vyhledá záznam typu MX nebo A domény odesilatele.
4.
Postfix se pokusí spojit s poštovním serverem odesilatele. Když se mu to nepodaří, s m t p d odloží rozhodnutí, zda přijmout zprávu, tak, že klientovi vrátí dočasný chybo vý kód 450. Mezitím se Postfix znovu pokusí ověřit adresu .
5.
Postfix zahájí sezení SMTP se vzdáleným serverem.
6.
Postfix poskytne vzdálenému serveru adresu původního odesilatele obálky jako adresu příjemce obálky.
7.
V závislosti na odpovědi ze vzdáleného serveru může Postfix udělat jednu z těchto dvou věcí: •
•
Přijme-li vzdálený server příjemce (původního odesilatele obálky), Postfix zruší spojení, smaže zkušební zprávu a přijme zprávu od původního klienta . Jestliže vzdálený server odmítne příjemce (původního odesilatele), Postfix zruší spojení, smaže zkušební zprávu a zprávu od původního klienta odmítne.
Když máme ověřování v činnosti, při prvním ověřování může nastat zpoždění až devět vteřin . Postfix si ovšem výsledek uchová, takže následující zpráva už není zpožděná . Trvá-li proces ověřování déle než devět vteřin, s m t p d zprávu z klientského (odesílající ho) počítače odmítne a vrátí kód odpovědi 450. Normální klient se po určité prodlevě připojí znovu , zatímco falešný proxy-server nikoli, neboť ten se pokouší o předání pou ze pomocí příkazů SMTP a osoba, která stojí za jeho činností, určitě nebude chtít ztrácet další čas s ověřováním adresy.
Konfigurace ověřování adresy odesilatele Ověřování adresy odesilatele uvedeme v činnost tak, že k parametru s m t pd_ r e c i pi e n t_r e s t r i c t i o n s přidáme volbu r e j e c t_u n v e r i f i ed_s e n d e r , viz následující příklad:
s m t p d _ r e c i p i e n t_r e s t r i c t i o n s r e j e c t_n o n_fq d n _ r e c i p i e n t r e j e c t_non_fqd n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_r e c i p i e n t_d oma i n
'a-fi'lG'
J a k se používaj í o m eze n í p e rm i t_my n e t w o r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_m u l t i _ r e c i p i e n t_b o u n c e r e j e c t_ r b l _c l i e n t r e l a y s . o r d b . o r g c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_ n o n _ f q d n_h o s t n a m e r e j e c t_ i n v a l i d_h o s t n a me c h e c k_ h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / r h s b l _s e n d e r_e x c e p t i o n s r e j e c t_ r h s b l _s e n d e r d s n . r f c - i g n o r a n t . o r g rej e c t_ u n v e r i f i e d_ s ender
p e rm i t K omezením je možné přidat ještě i jiné volby než r e j e c t_u n v e r i f i ed_s e n d e r . Nicmé ně, parametry mají vhodné implicitní nastavení, jež stačí k dostatečnému vyladění pro cesu ověřování adresy odesilatele, aniž bychom je museli dále konfigurovat . V následující podkapitole jsou popsány nejobvyklejší změny způsobu ověřování. Další ladicí parametry jsou uvedeny v souboru ADDRESS_VERIFICATION_README, který je součástí postfixové instalace.
Odesilatel zkušební zprávy Aby mohl Postfix odeslat zkušební zprávu k ověření odesilatele, sám se musí vzdálené mu serveru představit jako odesilatel. Jeho adresa se nastaví pomocí parametru a d d r e s s_v e r i fy_s e n d e r , implicitní hodnota j e p o s t m a s t e r@$my o r i g i n . Jinou hodnotu než implicitní můžeme nastavit pomocí parametru a d d r e s s_ v e r i fy_s e n d e r , který přidáme do souboru ma i n . c f jako v následujícím přľkladu :
a d d r e s s_v e r i fy_s e n d e r
=
s e n d e r@e x a mp l e . c o m
Tento odesilatel pochopitelně musí existovat, jiné servery si také mohou chtít jeho exi stenci ověřit.
POZNÁMKA Ad resa prlJemce, která se zadává j a ko parametr a d d r e s s_v e r i fy-s e n d e r, nepod léhá žádným omeze n ím .
Uchovávání výsledků ověření Prověřené odesilatele si Postfix implicitně uchovává v paměti. Při opakovaném zavede ní Postfixu nebo restartu systému se ovšem ztratí, pokud nejsou trvale uloženi v databá zi, kterou si můžeme volitelně vytvořit. K tomu je třeba do parametru a d d r e s s_v e r i fy-m a p uložit cestu k databázi (v příslušném souborovém systému by měl být dostatek místa), viz následující přI1dad:
a d d r e s s_ v e r i fy_m a p
=
b t r e e : / v a r / s p o o l / p o s t f i x / v e r i f i ed_s e n d e r s
P o znovuzavedení s i Postfix vytvoří databázi a ukládá d o n í odesilatele s pozitivním i ne gativním výsledkem ověření. Ukládání odesilatelů s negativním výsledkem ověření lze zrušit pomocí parametru a d d r e s s_v e r i fy_n e g a t i v e_c a c h e v souboru ma i n . c f , který na stavíme takto:
111
112
'a'hdC'
Kapitol a 8
Selektivní ověřování adresy Roste-li zátěž systému, ověřování adresy odesilatele se může stát úzkým místem poštov ní služby. V takové situaci je vhodné přejít na selektivní ověřování adres odesilatelů . Postup je takový, že nejdříve vytvoříme mapu domén často používaných spamery a Post fix bude ověřovat jen odesilatele z těchto domén, ostatní nikoli. Vytvoříme mapový soubor, například l e t c / p o s t f i x / c ommo n_s p a m_s e n d e r d o m a i n s , a zadáme parametr r e j e c t_u n v e r i f i ed_s e n d e r , kterým se definuje, jak se má postupovat, když je odesilatel z domény evidované v mapě . Mapový soubor může vypadat například takto:
h o tma i 1 . c o m web . d e m s n . c om ma i l . r u
r e j e c t_ u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_ u n v e r i f i ed_s e n d e r
V manuálových stránkách access(S) se píše, ž e pravá strana této mapy j e jméno platné ho omezení nebo s m t pd_r e s t r i c t i o n _c l a s s . V tomto příkladu , když klient zahájí pře nos zprávy, může být dvojí pokračování: •
•
Je-li doména odesilatele evidovaná v mapě c ommon_s p a m_s e n d e r d om a i n s , výsledek hledání je v r e j e c t_u n v e r i f i ed_s e n d e r a Postfix musí ověřit odesilatele. Je-li plat ný, hodnota parametru r e j e c t_u n v e r i f i ed_s e n d e r bude D U N N O a Postfix přejde na vyhodnocování dalších omezení. Je-li adresa neplatná, Postfix zprávu odmítne. Není-li doména odesilatele v mapě c ommon_s p a m_s e n d e r d o m a i n s evidovaná, nenajde se, selektivní ověření vrátí hodnotu DUNNO a Postfix přejde na vyhodnocování dal ších omezení, aniž by ověřoval adresu odesilatele.
Mapu převedeme pomocí příkazu ha s h : I I e t c / p o s t f i xl c ommo n_s p a m_s e n d e r d o m a i ns do tvaru databáze a nakonec volbu r e j e c t_u n v e r i fi ed_s e n d e r nahradíme volbou c h e c k_s e n d e r _a c c e s s s mapou jako argumentem. Zde je příklad použití mapy h a s h : / e t c / p o s t f i x / c ommo n_s p a m_s e n d e r d om a i n s :
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s r e j e c t_n o n_f q d n_ r e c i p i e n t r e j e c t_n o n_ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_ r e c i p i e n t_d oma i n p e r m i t_my n e t wo r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_mu l t i _r e c i p i e n t_b o u n c e c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_n o n_fq d n_h o s t n a m e r e j e c t_ i n v a l i d_h o s t n a me c h e c k_h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / r h s b l _s e n d e r_e x c e p t i o n s r e j e c t_ r h s b l _s e n d e r d s n . r f c - i g n o r a n t . o r g c h e c k_ s e n d e r_a c c e s s h a s h : l e t c l p o s t f i x l commo n_spam_s ende rdoma i n s
p e rm i t Tuto fázi kontroly můžeme rozšířit i o jiná kritéria, jež se vztahují k jiným částem zprá vy, například k obsahu . Vytvoříme další mapu jménem c ommo n_s p a m_s e n d e r d om a i n_ k e ywo r d s , v níž jsou klíčovými položkami jména domén, ve kterých se má provádět kontrola adresy odesilatele, viz následující příklad:
J a k se používaj í omezen í
/sex/ /gi rl / /sel l / /sa l e/ /offer/ / p owe r /
'a'h'"
r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i ed_s e n d e r r e j e c t_u n v e r i f i e d_s e n d e r
Pak přidáme d o mapy další volbu c h e c k_s e n d e r _a c c e s s :
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s r e j e c t_n o n_ f q d n _ r e c i p i e n t r e j e c t_ n o n _ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n own_r e c i p i e n t_d oma i n p e r m i t_my n e t wo r k s r e j e c t_u n a u t h_d e s t i n a t i o n r e j e c t_mu l t i _ r e c i p i e n t_ b o u n c e c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_n o n _f q d n_h o s t n a me r e j e c t_ i n v a l i d_h o s t n a me c h e c k_h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / r h s b l _s e n d e r_e x c e p t i o n s r e j e c t_ r h s b l _s e n d e r d s n . r f c · i g n o r a n t . o r g c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / c ommon_s p a m_s e n d e r d oma i n s c h e c k_ s e n d e r_ a c c e s s regexp : / e t c / p o s t f i x / common_spam_ s e n de rdoma i n_ k eywords
pe rmi t
Pořadí zpracování omezení z hlediska využívání systémových prostředků je ochrana proti spamům drahou záleži tostí. V následujícím přehledu je uvedeno, jak by měla být antispamová omezení uspo řádána:
s m t p d _ r e c i p i e n t_ r e s t r i c t i o n s r e j e c t_n o n_ f q d n_r e c i p i e n t r e j e c t_n o n_ f q d n_s e n d e r r e j e c t_u n k n own_s e n d e r_d oma i n r e j e c t_u n k n ow n _ r e c � i e n t_d oma i n p e r m i t_my n e tw o r k s tJ ( p e rm i t_s a s l _a u t h e n t i c a t e d ) ( p o p · b e f o r e · s mt p ) r e j e c t_u n a u t h_d e s t i n a t i o n c h e c k_ r e c i p i e n t_a c c e s s h a s h : / e t c / p o s t f i x / r o l e a c c o u n t_e x c e p t i o n s r e j e c t_mu l t i _r e c i p i e n t_b o u n c e c h e c k_ h e l o_a c c e s s p c r e : / e t c / p o s t f i x / h e l o_c h e c k s � r e j e c t_ n o n_fq d n_h o s t n a m e r e j e c t_ i n v a l i d_h o s t n a me c h e c k_s e n d e r_mx_a c c e s s / e t c / p o s t f i x / v e r i s i g n_mx_a c c e s s ., c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / r h s b l _s e n d e r_e x c e p t i o n s � r e j e c t_ r h s b l _s e n d e r d s n . r f c · i g n o r a n t . o r g � c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / c ommon_s p a m_s e n d e r d o m a i n s � c h e c k_s e n d e r_a c c e s s r e g e x p : / e t c / p o s t f i x / c ommon_s p a m_s e n d e r d oma i n_keyw o r d s permi t
1 13
1 14
'4'fi"C'
Kapito l a 8
Obecně bychom se měli řídit pravidlem, že "l evná" omezení by měla být před "drahými" : O Všechny antispamové volby umístíme z a p e rm i t_my n e t w o r k s , takže s e vztahují pou ze na exrerní klienty (tj . na ty, kteří nejsou v my n e t w o r k s). e B e z dalšího zkoumání můžeme odmítnout všechny klienty, kteří používají jméno na šeho poštovního serveru . Je jedno, jestli je toto jméno neúplné nebo neplatné . • Zde začínají "drahá" omezení; e h e e k_s e n d e r _mx_a e e e s s vyžaduje jedno nebo dvě hle dání pomocí služby DNS. Provozujeme-li paměťový jmenný server, hledání se mohou provádět lokálně . O Tato mapa je umístěna mezi černými listinami na prvním místě, neboť obsahuje vý jimky pro uživatele, resp. domény, jež by se jinak mohly ihned odmítnout. e Tato volba je drahá. Posílají se v ní dotazy na vzdálený systém (DNS server d s n . r f e
i g n o r a n t . o r g), který může být značně zatížený nebo i dočasně nedostupný. Toto ome zení by mělo být hodně vzadu . o Nakonec dvě nejdražší opatření. Uplatní-li se, Postfix musí vytvořit prázdnou zprávu, pokusí se ji doručit a uloží si výsledek. Velmi drahá opatření. Mělo by na ně dojít až v krajním případě . .
Třídy omezení V následujícím příkladu jsou odesilatelé omezeni dvojím způsobem. Nejprve zpráva zvenčí nebude mít adresu odesilatele z cílové domény; v druhém případě zpráva ode slaná zevnitř musí obsahovat adresu odesilatele z cílové domény. Ú čelem je nechat Postfix nejdříve zkontrolovat, jestli je klient z naší sítě: 1 . Je-li klient z naší sítě, Postfix jej zařadí do určité třídy omezení. Tato třída obsahuje kontrolu adresy odesilatele. •
•
2.
Odpovídá-li adresa odesilatele naší implicitní adrese, kontrola vrátí stav OK. Post fix nebude dále vyhodnocovat omezení a zahájí zpracování zprávy od klienta . Neodpovídá-li adresa odesilatele naší implicitní adrese, další volba v omezení je reject, což znamená, že Postfix klientovi službu odmítne.
Nepatří-li klient d o naší sítě, není zařazen do žádné třídy omezení a uplatní se na něj další omezení, které spočívá v kontrole adresy odesilatele. • •
Pokud je naše doména součástí adresy odesilatele, služba se odmítne. Pokud naše doména není součástí adresy odesilatele, test se ukončí a přejde se k dalšímu omezení.
To, co jsme právě popsali slovy, budeme implementovat tak, že si vytvoříme mapu ob sahující seznam IP adres a sítí v naší síti. Soubor se může jmenovat / e t e / p o s t f i x / i n t e r n a l _n e tw o r k s a měl by vypadat například takto:
1 92 . 0 . 34 192 . 168 1 9 2 . 1 68 . 1
h a s_o u r_d oma i n a s s e n d e r h a s_o u r_d oma i n a s s e n d e r h a s_o u r_d oma i n a s s e n d e r
J a k se používaj í omeze n í Poté vytvoříme další mapu jménem / e t c / p o s t f i x / o u r_d oma i n_ a s _s e n d e r , která bude obsahovat jméno naší domény a prázdného odesilatele (vzpomeňme si, že prázdný ode silatel se musí přijmout); to je celý seznam domén odesilatelů, které může interní klient používat. Mapový soubor bude vypadat takto:
exampl e . com
OK OK
Nyní s i vytvoříme mapu s doménami, jež externí uživatel nesmí používat n a místě ode silatele. V tomto příkladu nazveme mapu / e t c / p o s t f i x / n ot_ou r_d oma i n_a s_s e n d e r a bude obsahovat pouze jediný řádek:
e x a m p l e . c om
5 5 4 Do n o t u s e my d o m a i n i n y o u r e n v e l o p e s e n d e r
Z mapových souborů vytvoříme mapy pomocí příkazu p o s t m a p , nastavíme třídy omeze ní a příslušnou volbu v souboru m a i n . c f :
s m t pd_r e s t r i c t i o n _c l a s s e s h a s_o u r_d oma i n a s s e n d e r h a s_ou r_d oma i n_a s_s e n d e r c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / o u r_d oma i n_a s_s e n d e r rej ect s m t pd_r e c i p i e n t_ r e s t r i c t i o n s c h e c k_c l i e n t_a c c e s s h a s h : / e t c / p o s t f i x / i n t e r n a l _n e two r k s c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / n o t_o u r_d oma i n_a s_s e n d e r r e j e c t_u n a u t h_d e s t i n a t i o n �
�
�
p e rm i t A jako obvykle musíme znovu zavést konfiguraci Postfixu, aby změny vstoupily v plat nost.
KAPITOLA 9 ,
JAK PRACUJI VESTAVENE FILTRY OBSAHU v
,
Pomocí filtrů se zkoumá obsah zpráv a na základě tohoto obsahu se provede určitá, pře dem definovaná akce . V této kapitole si ukážeme, jak se v Postfixu řídí tok zpráv v zá vislosti na jejich obsahu , z jakých akcí se toto řízení skládá a jaké filtry se k tomu používají. Filtry jsou doplňkem omezení. Zatímco prostřednictvím omezení se řídí dialog podle protokolu SMTP , filtry slouží ke kontrole obsahu zpráv. Nejprve je důležité si uvědomit, že filtry jsou něco úplně jiného než omezení. Lehce se aplikují, avšak vytváření vzorků pro filtry je dosti složitou záležitostí, neboť se v nich používají regulární výrazy. Vzhledem k tomu , že Postfix je pouze přenosovým agentem, cílem vestavěných filtrů ne ní úplná náhrada skenerů obsahu zpráv; jsou to jen prostředky pro jednoduchou ochra nu. Zde je výčet některých možností filtrů : •
Blokování zpráv generovaných určitými programy, jako např. e-mailovou bránou systému SAP .
•
Blokování zpráv na základě jejich předmětu (subject).
•
Odstraňování zpráv s potenciálně škodlivým obsahem.
•
Odstraňování údajů z hlaviček zpráv.
POZNÁMKA Pokud jste se ještě n i kdy nesetka l i s reg u lárními výrazy, možná byste se s n i m i moh l i stručně sezná m it. Vyn i kaj ící k n i h a na toto téma je Mastering Reg u l a r Expressions, 2 . vy d á n í (autor Jeffrey E. F. Fried l).
Jak pracují fi ltry? Filtry porovnávají obsahy zpráv s množinou vzorků. Jestliže dojde ke shodě, provede se určitá akce. Na každou část zprávy se používá jiný filtr; konkrétně se prohlížejí tyto části:
1 18
'4-h'U' •
Kapito l a 9
Hlavičky
•
MIME hlavičky
•
Těla zpráv včetně příloh
•
Hlavičky připojených zpráv
Filtry vytvoříme tak, že požadované vzorky uložíme do map a ty pak přiřadíme k para metrům vztahujícím se k různým částem zprávy. Postfix provádí pomocí analyzátoru MIME lexikální analýzu obsahu zpráv a lexikální prvky porovnává se vzorky v mapách . Analyzátor pracuje jako příkaz e g r e p ; je schopen rozpoznat pouze jednotlivá slova na řádku. Algoritmus porovnávání vypadá přibližně takto: 1.
Analyzátor prochází zprávu řádek po řádku .
2.
Analyzátor zjistí, ke které části zprávy řádek patří.
3. Jestliže se k dané části vztahuje nějaký filtr, Postfix porovnává lexikální prvky se vzor ky v mapě . 4.
Dojde-li ke shodě, Postfix spustí příslušnou akci a další filtry se již na zprávu neaplikují. "Vyhrává" tedy první shoda vzorku s obsahem.
Z předchozího výkladu je zřejmé, jak filtry zatěžují procesor počítače a jak je důležité správné pořadí vzorků , neboť čím dříve se nalezne shoda , tím menší jsou nároky na pro cesor.
Filtrování jednotlivých částí zpráv V Postfixu se musí pro každou část zprávy zkonfigurovat jiný parametr. Zde je jejich pře hled (v souboru ma i n . c f nejsou aktivovány implicitně) :
h e a d e r_c h e c k s Tyto filtry se vztahují n a hlavičky zpráv - tj . n a vše o d prvního řádku zprávy a ž po první prázdný řádek, včetně hlaviček zabírajících více fyzických řádků .
bodLc h e c k s Tyto filtry s e vztahují n a těla zpráv; z a tělo s e považuje vše, c o s e nachází mezi hla vičkami.
UPOZORNĚNí Rozsá hlé filtrová n í těl zpráv může být ve l ice náročné na ka pacitu procesoru a může značně zpo m a l it rychl ost počítače, neboť se proh l ížej í všech ny řád ky v tě le zprávy a po rovnávaj í se se všem i reg u lárními výrazy defi nova nými v ma pě. Z d ůvod u s n ížen í této zátěže se i m p l icitně kontro l uje pouze prvn ích 5 1 000 bytů v každé zprávě a tento l i m it m ůžeme zvýšit pomocí parametru b o d Lc h e c k s _ s i z e . Zvyšující se zátěž m ůžeme také ovl ivnit přenese n ím kontro ly obsa h u zpráv na různé a p l i kace pomocí parametru c o n t e n t_ f i l t e r, což je popsá no v kapitole 1 1 .
m i me_h e a d e r_c h e c k s Tyto filtry s e vztahují n a hlavičky MIME nejvyšší úrovně, běžné hlavičky MIME a hla vičky MIME vnořených zpráv dle protokolu RFC 822 (viz obrázek 6.3).
J a k pracuj í vestavěné fi ltry obsa h u
1 19
n e s ted_h e a d e r_c h e c k s Tyto filtry s e vztahují n a hlavičky připojených zpráv jiné než MIME. Pracují pouze s hlavičkami vnořených zpráv dle RFC 822 kromě hlaviček MIME, na něž se vztahu je filtr m i me_h e a d e r _c h e c k s popsaný shora .
Co je na těchto parametrech tak zvláštního? Postfix v e verzích 2.x zpracovává tělo zprávy jako n segmentů oddělených hlavičkami MIME. Tento způsob zpracování je implicitní a lze jej změnit příkazem d i s a b 1 e_m i me_ i n p u t_p r o c e s s i n g y e s v souboru ma i n . c f . =
Analyzátor MIME při zpracování každého řádku zjišťuje, zda řádek patří d o hlavičky ne bo do těla zprávy, a podle toho se použijí příslušné filtry. Má-li segment své vlastní hla vičky (tj . je-li to připojená zpráva typu rfc822), aplikují se filtry n e s t e d_h e a d e r _c h e c k s . Vše, c o j e v daném segmentu z a těmito vnořenými hlavičkami, s e vyhodnocuje pomocí b o dy_c h e c k s až po limit stanovený parametrem b o dy_c h e c k s_s i z e_l i m i t . Máme-li na příklad zprávu se segmenty MIME (případně přílohy) o velikosti 100 KB, limit se vzta huje na každý segment zvlášť. Pomocí parametru m i me_h e a d e r _c h e c k s se vyhodnocují všechny hlavičky MIME (což jsou začátky segmentů). Pokud za nimi následují běžné hlavičky, ve všech segmentech se zpracovávají pomocí n e s t e d_h e a d e r _c h e c k s . N a obrázku 9 . 1 vidíme, jaké filtry se používají n a jednotlivé řádky zprávy. FROM : TO :
S e n d e r < s e n d e r@e x a m p l e _ c o m >
R e c i p i e n t < r e c i p i e n t@e x a m p l e . o r g >
Oa te :
Sun .
S u bj e c t :
II Apr 2004 2 2 : 36 : 5 1 +0200
Ma i l
a n d ema i l
Oea r Reci p i ent . V á žený pane .
mi m e _ h e a d e r J h e c k s
{
váš
v p ř l l o z e t é t o z p r á vy n a l e z n e t e
nový cert i f i kát .
- - 2 0 S 5 Y a x W C c O j T Ey O C o n t e n t - Ty p e :
appl i ca t i on / z i p
C o n t e n t - Oe s c r i p t i on :
Attac hment
Content -Di spos i t i on :
a t t a c hment ;
Content - T r a n s fe r - Encodi n g :
f i 1 e n a me- " c e r t i f i c a t e . z i p "
b a s e64
U E s O B AoAAAAAAK6 1 / S 6m U Z z N OA A 3 S Y / V X g E A P O B 9 A F B c H
R h Y 2 h t Z W 5 0 I O p O S m E C FwM KAAAAAAC u t f O u p 1 G c z Ow A A A A F
MAAAA O g A N AAAAAAABAAAA t l E AAAAAY X R o Y W N o b W V u d C 5 O e H R V V A U A A + f c J j 9 V e AAA U E s F B g AA A A A B A A E A S O A A A E o A A - - 2 0 S 5 Y a xW C c O j T E y O - -
Obrázek 9.1 Postfix se rozhoduje na každém řádku, jaký použije fi ltr
1 20
'4-hiit'
Ka pito la 9
Kdy se aplikují filtry Klient zahájí přenos zprávy poté, co se úspěšně ukončí úvodní dialog SMTP, což zna ' mená, že už proběhly procesy *_c h e c k s a f t e r t h e s m t p d_*_ r e s t r i c t i o n s . Na obráz ku 9.2 vidíme, kdy začne postfixový démon c l e a n u p spouštět filtry. $ t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . ex a m p l e . com ESMTP P o s t f i x H E LO c l i e n t . ex a mp l e . c om 2 5 0 · ma i l . ex a m p l e . com MA l L
F RO M : < s e n d e r@e x a m p l e . c o m >
250 Ok R C P T T O : < r e c i p i e n t@e x a m p l e . c o m > 2 5 0 Ok DATA
h e a d e r _c h e c k s
b o d y _c h e c k s .
354
{
End
F r om : To :
with
" Sende r "
" Rec i p i ent "
Date :
�
data
Sat .
< C R> < L F> . < L F >
< s e n d e r@ e x a m p l e . c o m > < r e c i p i e n t@ e x a m p l e . c o m >
1 7 May 2003
Zde j e o b s a h
1 5 : 2 4 : 4 3 +0 2 0 0
z p r á vy
m i m e _h e a d e r _c h e c k s . n e s t e d_h e a d e r _c h e c k s
250
Ok:
queued a s
oEAFFEIC65
OU I T 2 2 1 Bye
Obrázek 9.2 Fi ltry se a p l i kuj í a ž p o o m ez e n ích a pouze na obsah z právy
Jaké mohou následovat akce Ke každému vzorku lze definovat pouze jedinou akci . V současné verzi Postfixu to mo hou být tyto akce:
REJ ECT
[ vo l i t e l ný t ex t .
.
.
J
Odmítnutí zprávy. Klientovi, který se pokouší doručit tuto zprávu , se zašle volitelný text a Postfix jej zapíše i do žurnálního souboru .
I GNORE Řádek, v němž s e nalezla shoda textu s e vzorkem, j e odstraněn.
WARN
[ vo l i t e l ný t e x t .
.
.
J
Zápis poznámky do žurnálního souboru . Je-li zadán i volitelný text, Postfix jej také zapíše do žurnálu . Zpráva se doručí beze změny.
J a k pracuj í vestavěné fi ltry obsa h u HOLD
[ vo l i t e l ný t e x t .
.
.
1 21
]
Zpráva se umístí do fronty odložených zpráv (hold), dokud si ji nevyzvedne správce pošty a nerozhodne, co s ní. Do žurnálu se zapíše příslušná hlavička / příslušné tě lo i s volitelným textem.
D I SCARD
[ vo l i t e l ný t ex t .
.
.
]
Postfix informuje klienta, že jeho zpráva byla úspěšně doručena, avšak do místa ur čení ji nedoručí a tiše ji vymaže. Případný volitelný text se zaznamená do žurnálu společně s textem, v němž se nalezla shoda se vzorkem.
F I LT E R t r a n s p o r t : n ext h o p Poslání zprávy filtru (služba definovaná v souboru ma s t e r c f , jíž s e zpráva pošle ke zpracování do jiného systému, například do antivirového systému). O definování filt rů se dozvíme více v kapitole 1 1 . .
R E D I RECT u s e r@d oma i n Přesměrování zprávy z adresy příjemce na uvedenou adresu. Tato akce má předost před všemi ostatními akcemi.
KAPITOLA
10 "
,
,
JAK SE POUZIVAJI VESTAVENE FILTRY "
,
Jak jsme se dočetli v předchozí kapitole, filuy slouží k prohlížení zpráv a k porovnává ní jejich obsahu se zadanými vzorky. V této kapitole se dozvíme, jak lze těchto možností využít. Je nutno si uvědomit, že jde o jednoduché filtrování. Složitější metody filtrování zpráv jsou popsány v kapitole 1 1 . Filtry nejen vyhledávají ve zprávách určité znaky, nýbrž mohou zprávy také modifikovat. Jména konfiguračních parametrů filtrů končí na _c h e c k s , a ať už použijeme parametry h e a d e r _c h e c k s , b o dy_c h e c k s , mi me_h e a d e r _c h e c k s nebo n e s t e d_h e a d e r _c h e c k s , všech ny se zpracovávají podle stejného schématu : 1.
Postfix porovnává řádek zprávy se vzorky v mapě vytvořené pomocí regulárních vý razů (regexp) nebo regulárních výrazů jazyka Per! (peRE).
2.
Nalezne-li se v řádku shoda, Postfix provede určitou akci a přejde na prohlížení dal šího řádku .
V příkladech v této kapitole se kvů l i lepší čitelnosti často používaj í pokračovací řád ky. Konkrétně, řád ky začínaj ící mezerou jsou pokračová n ím předchozího řád k u .
Jakou podporu poskytuje Postfix Postfix implicitně podporuje filtrování hlaviček i těl zpráv, avšak je třeba zjistit, zda umí zpracovávat regulární výrazy typu peRE nebo pouze regexp, neboť v mapách se mohou vyskytovat oba druhy. Pomocí příkazu postconf -m si můžeme vypsat všechny typy map podporované naším postfixovým balíkem. V následujícím příkladu je schopen náš Postfix zpracovat, kromě dalších map, i obě zmíněné mapy typu regexp a peRE:
$ postconf -m bt ree cidr envi ron hash ni s pere
p r oxy
1 24
'4-fi"G'
Kapito la 1 0
regexp
stati e tep uni x Tabulky typu regexp by měly být implicitně podporovány všemi systémy. Projevuje-li se v našem systému jakékoli snížení výkonu při zpracování map typu regexp (anebo v hor ším případě, používá-li systém pro zpracování regexp externí implementaci), můžeme si nainstalovat knihovny PCRE a hlavičkové soubory a přidat tímto způsobem do Postfixu podporu PCRE.
Jak vytvořit Postfix s podporou peRE Chceme-li vytvořit Postfix, který by uměl používat mapy typu PCRE, je třeba mít k dis pozici knihovny PCRE a hlavičkové soubory. Nalezneme je ve vývojovém balíku v běž né distribuci Postfixu nebo si můžeme stáhnout zdrojový kód z h t t p : / / www . p e r e . o r g a ručně nainstalovat. Postfix s podporou PCRE zkonfigurujeme tak, že do parametru C C A R G S přidáme přízna ky - D H A S_P C R E a - I pro preprocesor, dále knihovnu PCRE a do parametru A U X L l B S při dáme cestu . Nechť například p e r e . h je v adresáři / us r I I D e a I I i n e 1 u d e a pe r e . a je v adresáři / us r I I D e a 1 I I i b :
$ CCA RGS-" - D HAS_P C R E - I / u s r / 1 o e a 1 / i n e 1 u d e " \ A U X L I B S-" - L l u s r l l o e a 1 I I i b 1 p e r e " \ ma ke ma k e f i 1 e s $ ma ke -
POZNÁMKA V systému Solaris musíme navíc zadat R / u s r I I o e a 1 I I i b . -
Bezpečná implementace filtrů Používání regulárních výrazů při tvorbě vzorků nám může značně zkomplikovat situaci a snadno se může stát, že filtry nebudou fungovat nebo budou filtrovat víc, než jsme pů vodně zamýšleli, anebo jim úplně přestaneme rozumět. Při ladění filtrů můžeme využít pomocnou akci WARN, kterou nabízí Postfix. Když ji dá me na pravou stranu vzorku a dojde ke shodě vzorku s obsahem zprávy, Postfix ji sice doručí, avšak navíc do žurnálu zapíše poznámku . Teprve když se přesvědčíme, že filtr funguje správně, akci WARN nahradíme akcí, která k tomuto vzorku patří. Bezpečný postup při přidávání filtru je takovýto: 1.
Do mapy přidáme vzorek s akcí WARN.
2.
Vytvoříme soubor, který obsahuje výraz, jenž je shodný se vzorkem.
3.
Ověříme, zda vzorek v mapě souhlasí s testovacím vzorkem.
4 . Filtr přidáme do hlavního konfiguračního souboru Postfjxu . 5.
Otestujeme filtr pomocí skutečného e-mailu.
'a'hid'
J a k se používaj í vestavěné fi ltry
Jak se do mapy přidá vzorek s akcí WARN Nejprve přidáme d o mapy požadovaný vzorek, jehož funkci chceme vyzkoušet, a k ně mu přiřadíme akci WARN, která se provede v případě shody. V našem příkladu budeme porovnávat vzorek s hlavičkou Subject (předmět zprávy), avšak uvedený postup lze pou žít i pro jiné hlavičky a jiné parametry * _c h e c k s . Vzorek přidáme do souboru / e t c / p o s t f i x / h e a d e r_c h e c k s , ve kterém jsou filtry h e a d e r _c h e c k s , viz následující příklad:
/ ' S u b j e c t : F W O : L o o k at p a c k f r om M i c r o s o f t ! WARN U n h e l p f u l v i r u s wa rn i n g
Jak vytvoříme testovací vzorek Nejlépe tak, že celou zprávu uložíme do například souboru / t m p / t e s t p a t t e r n . Zpráva může vypadat třeba takto:
F r om : d i n g d o n g@e x a m p l e . c om S u b j e c t : F W O : L o o k a t p a c k f r om M i c r o s o f t bl a bl a
Nalezne se shoda mezi regulárním výrazem a testovacím vzorkem? Vzorek v e filtru můžeme otestovat pomocí příkazu p o s t m a p , v e kterém zadáme testova cí vzorek a mapu obsahující zkoumaný filtr. Příkaz zadáme například takto:
$ p o s tma p - q
-
r e g e x p : / e t c / p o s t f i x / h e a d e r_c h e c ks < / t mp / t e s t p a t t e r n
Pokud filtrování funguje, příkaz by měl vypsat příslušný řádek z testovacího vzorku, na příklad:
WARN U n h e l p f u l v i r u s wa rn i n g
S u b j e c t : F W O : L o o k at p a c k f r om Mi c r o s o f t
Jestliže nenastane shoda mezi testovacím vzorkem a vzorkem v mapě, příkaz p o s t m a p nevypíše nic.
Nastavení filtrů v hlavní konfiguraci Jestliže až dosud vše fungovalo, můžeme změnit soubor ma i n . cf tak, aby začal použí vat soubor s příkazem h e a d e r _c h e c k s , který jsme právě vytvořili a otestovali:
h e a d e r_c h e c k s = r e g e x p : / e t c / p o s t f i x / h e a d e r_c h e c k s Obvyklým způsobem aktualizujeme konfiguraci Postfixu a poté můžeme zkusit odeslat testovací zprávu se stejným testovacím vzorkem.
Testování filtru v běžném provozu Filtr otestujeme ve skutečném provozu tak, že pomocí následujícího příkazu poskytne me Postfixu dříve vytvořený testovací vzorek:
$ / u s r / s b i n / s e n d m a i l r e c i p i e n t@e x a m p l e . c om
Ma r 30 1 7 : 1 7 : 5 2 ma i l p o s t f i x / c l e a n u p [ 2 46 1 J : 53CAB633B3 : wa rn i n g : h e a d e r S u b j e c t : F W D : L o o k a t p a c k f r om M i c r o s o f t f r om l o c a l ; f r om�< s e n d e r@e x a m p l e . c om> t o�< r e c i p i e n t@e x a mp l e . c om> : U n h e l p f u l v i r u s wa rn i n g M a r 3 0 1 7 : 1 7 : 5 2 ma i l p o s t f i x / c l e a n u p [ 2 4 6 1 J : 5 3 C A B 6 3 3 B 3 : me s s a g e - i d�< 2 0 0 4 0 3 3 0 1 5 1 7 5 2 . 5 3 C A B 6 3 3 B 3@ma i l . e x a m p l e . c o m > M a r 3 0 1 7 : 1 7 : 5 2 ma i l p o s t f i x / q mg r [ 2 4 5 6 J : 5 3 C A B 6 3 3 B 3 : f r om�< s e n d e r@e x a mp l e . c om> . s i z e�3 4 6 . n r c p t � l ( q u e u e a c t i v e l Až se přesvědčíme, že vzorek funguje, bezpečně můžeme zaměnit akci WARN za akci, která skutečně něco provede, například RE]ECT nebo DlSCARD .
Filtrování hlaviček FiltI)' h e a d e r _c h e c k s poskytují Postfixu řadu možností, j a k reagovat na obsah zpráv. Postfix může zprávu odmítnout, pozdržet, odstranit z ní hlavičku , může zprávu zrušit, přesměrovat nebo upravit. V této části si jednotlivé akce popíšeme podrobněji .
Odmítnutí zprávy Zprávu Postfix odmítne pomocí akce RE]ECT. Tímto způsobem můžeme například blo kovat zprávy s určitým obsahem hlavičky Subject (předmět). Zpráva odmítnutá na základě vadného obsahu hlavičky se vůbec nedostane do systému a nepodléhá dalším, časově náročným kontrolám jako detekce virů , spamů ani se jimi nezabývá uživatel samotný (což by bylo možná ještě horšO. Zkusme se podívat na ně kolik příkladů . Pomocí uvedeného vzorku můžeme odmítnout zbytečná varovná hlášení upozorňující na možnou přítomnost virů, jež generuje program ScanMail (varuje odesilatele vždy, i když je jeho adresa zfalšovaná virem):
/ A S u b j e c t : S c a n M a i l M e s s a g e : To S e n d e r . s e n s i t i v e c o n t e n t f o u n d a n d a c t i o n / R E J E C T U n h e l p f u l v i r u s wa r n i n g Chceme-li blokovat zprávy s nesprávnou hlavičkou Undisclosed-recipients (utajení pří jemci), můžeme použít následující vzorek, jehož prostřednictvím zachytíme zprávu , kte rá obsahuje hlavičku typu To: < U n d i s c l o s e d Re c i p i e n t s > (s lomenými závorkami i bez nich a v jednotném i v množném čísle v anglickém jazyce: RecipientlRecipients). (Správ ná hlavička Undisclosed-recipients musí mít tvar T o : u n d i s c l o s e d - r e c i p i e n t s : ; ) .
/ A To : . *< ? U nd i s c l osed Reci p i ents ? > ? $ / REJ ECT W r o n g und i s c l o s ed rec i p i e n t s h e a d e r Vzorek j e lépe popsán v komentáři k e zprávě:
ff ff S p a m . k t e rý O b s a h u j e v h l a v i č c e S u b j e c t : n ě c o ff
565876
'4-fi'ít'
J a k se používaj í vestavěné fi ltry / A S u b j e c t : . * [ [ : s p a c e : J . J 1 5 , } \ ( ? #? [ [ : d i g i t : J J 1 2 , } \ ) ? $ / R E J E C T M o r e t h a n 5 w h i t e s p a c e s a n d a n u m b e r f o l l ow t h e S u b j e c t : V hlavičce platné zprávy nikdy nemůže být T o : . . . < >
/ A To : . */ R E J E C T To : < > i n h e a d e r s A konečně, některé řádky v předmětu zprávy jsou typické pro podvodné spamy. Může me se inspirovat některým z následujících čtyř vzorků. (Různá čísla u varovných hlášení se zadávají kvůli lepšímu ladění falešných pozitivních výsledků .)
# # Některé # /ASubject : / A Subj ect : / ASubj ect : / ASubj ect :
ř á d ky v h l a v i č c e S u b j e c t p r o z r a z u j í , ž e j d e o s p a m . . * i s NOT be i n g S E E N / . * U R G E N T B U S I N E S S R E LAT I O N S H I P / . *Con f i dent i a l P ropos a l / S E X - F LAT RAT E /
R E JECT REJ ECT REJ ECT REJ ECT
fraud fraud fraud f r a ud
s pam spam spam spam
#1 #2 #3 #4
Pozdržení doručení K pozdržení zprávy je v Postfixu určena akce HOLD . Pozdržená zpráva s e umístí d o fron ty hold k dalšímu prozkoumání. Zde si ji můžeme prohlédnout příkazem p o s t c a t , poté ji můžeme pustit dál pomocí příkazu p o s t s u p e r - H . Chceme-li ji ze všech postfixových front odstranit, učiníme tak příkazem p o s t s u p e r - d o Pomocí následujícího vzorku můžeme zachytit zprávy, jejichž předmět začíná Subject: [jméno_seznamuj . Jedním z možných použití je pozdržení zprávy adresované všem in terním uživatelům do skončení pracovní doby, kdy je systém méně zatížen :
/ A S u b j e c t : \ [ l i s t n a me \ J / HOLD Dalším důvodem pro pozdržení zprávy může být prázdná hlavička MIME . Většina tako vých zpráv jsou viry a spamy, přičemž omezenou výjimku může tvořit špatně nainstalo vaný program SquirrelMail ve Windows:
/\r/ HOLD Lone CR i n headers i nd i cates v i rus or spam !
Odstraňování hlaviček Řádky z hlaviček se odstraňují pomocí akce IGNORE . Této možnosti se využívá zejmé na k utajení informací v hlavičkách, například údajů o typu používaného poštovního agenta nebo k redukci informací v hlavičkách Received, které tam mohl přidat poštovní server, firewall nebo antivirový program. Pomocí následujícího vzorku se odstraňují hla vičky Received přidané programem delegovaným Postfixem, který tuto zprávu zpracoval příkazem c o n t e n t_f i 1 t e r (např. amavisd-new):
/ A Re c e i v e d : f r om l o c a l h o s t / I GNORE Jiným příkladem j e odstranění hlavičky Sender - některé verze programu Outlook se to tiž při odpovídání na zprávu, která má tuto hlavičku , chovají poněkud podivně:
1 27
Kapito l a 1 0
1 28 / A Sender : / I GNORE
Zrušení zprávy Postfix může tiše odstranit zprávu pomocí funkce DISCARD . Můžeme například chtít od straňovat zprávy s určitým předmětem, aniž by o tom kdokoli věděl. Příklad použití (pravda, poněkud přitažený za vlasy):
/ A S u b j e c t : . *d e a d b e e f / D I S C A R D N o d e a d me a t ! Odstranění zprávy Postfix zaznamená do žurnálu jako obvykle. Můžeme v něm vidět na příklad takovýto záznam:
A p r 9 2 3 : 1 4 : 2 8 ma i l p o s t f i x / c l e a n u p [ 1 1 5 8 0 J : 8 8 9 2 8 1 5 C 0 0 9 : d i s c a r d : h e a d e r S u b j e c t : d e a d b e e f f r om c l i e n t . e x a m p l e . c om [ 1 0 . 0 . 0 . l J ; f r om=< s e n d e r@e x a mp l e . c o m > t o=< r e c i p i e n t@e x a mp l e . c o m> p r o t o = E S M T P h e l o=< c l i e n t . e x a mp l e . c om> : N o d e a d me a t !
Přesrněrování zpráv Pomocí akce REDIRECT můžeme v Postfixu zprávu přesměrovat na jiného příjemce. Pou žití si ukážeme v následujícím příkladu Ci když nic podobného nedoporučujeme):
/ S u bj e c t : . * d e a d b e e f / R E D I R E C T b i g b r o t h e r i s w a t c h i n g y o u@e x a mp l e . c o m Záznam v žurnálním souboru bude vypadat takto:
Apr
9 23 : 20 : 38 ma i l p o s t f i x / smtpd [ 1 1 8 7 3 J : 93052 1 5C009 : c l i e n t=c l i e n t . e x a mp l e . c o m [ 1 0 . 0 . 0 . l J Apr 9 23 : 20 : 38 ma i l p o s t f i x / c l e a n u p [ 1 1 8 6 5 J : 9 3 0 5 2 1 5C009 : red i rect : h e a d e r S u b j e c t : d e a d b e e f f r om c l i e n t . e x a m p l e . c om [ 1 0 . 0 . 0 . l J ; f r om=< s e n d e r@e x a mp l e . c om> t o = < r e c i p i e n t@e x a mp l e . c om> p r o t o= E S M T P h e l o=< c l i e n t . e x a m p l e . c o m > : b i g b r o t h e r i s w a t c h i n g y o u@e x a mp l e . c o m A p r 9 2 3 : 2 0 : 3 8 m a i l p o s t f i x / c l e a n u p [ 1 1 8 6 5 J : 9 3 0 5 2 1 5 C 0 0 9 : me s s a g e i d= < 2 0 0 4 0 4 0 9 2 1 2 0 3 8 . G K 3 4 0 6@e x a mp l e . c om > A p r 9 2 3 : 2 0 : 3 8 m a i l p o s t f i x / q mg r [ 1 1 8 5 7 J : 9 3 0 5 2 1 5 C 0 0 9 : f r om=< s e n d e r@e x a mp l e . c om> . s i z e= l l l l . n r c p t = l ( q u e u e a c t i v e ) A p r 9 2 3 : 2 1 : 0 8 ma i l p o s t f i x / s m t p [ 1 1 8 7 4 J : 9 3 0 5 2 1 5 C 0 0 9 : t o=< b i g b r o t h e r i s wa t c h i n gy o u@e x a mp l e . c o m > . o r i g_t o=< r e c i p i e n t@e x a m p l e . c om> . r e l ay=n o n e . d e l ay=30 . s t a t u s =d e f e r r e d ( c o n n e c t t o e x a m p l e . c om [ 1 9 2 . 0 . 34 . 1 6 6 J : C o n n e c t i o n t i med o u t )
Filtrování zpráv Akce FlLTER slouží v Postfixu k předávání zpráv ke zpracování pomocí filtru c o n t e n t_f i 1 t e r (viz kapitola l l). Můžeme například přesměrovat určité třídy zpráv na jiný způsob přenosu v závislosti na jejich hlavičkách. Touto akcí se přepíše nastavení c o n t e n t_f i l t e r v souboru m a i n . c f a musí se také zkonfigurovat různé cleanup servery jeden před filtrem a druhý za ním . H e a d e r _c h e c k s a b O dy-c h e c k s musí být na druhém cleanup serveru vypnuté, jinak by se zpracování zacyklilo. Další informace o tomto pro-
J a k se používaj í vestavěné fi ltry
'4-fiNt'
blému naleznete v kapitole 1 2 (viz n o_h e a d e r _body_c h e c k s a r e c e i v e_o v e r r i d e_o p t i on s ) . PIVní z následujících vzorků neposílá zprávu filtru , druhý ano.
l A T o : . *@e x a m p l e \ . o r g / l A T o : . *@e x a m p l e \ . c o m /
F I L T E R n o f i l t e r : d u mmy F I L T E R v i r u s f i l t e r : d u mmy
POZNÁMKA Je třeba si uvědom it, že jde jen o příklad. Tento postup by se na běžném serveru neměl používat ! V jedné zprávě určené příjemcům ve dvou doménách by došlo ke shodě s prv n ím reg u l á rn ím výrazem a n i kdy by se nefi ltrova la (první shoda má před nost); k druhé a kci by n i kdy nedošlo. Údaje o filtrovaných zprávách se zapisují do žurnálu přibližně takto:
Apr 9 2 3 : 34 : 1 2 ma i l p o s t f i x / c l e a n u p [ 1 2543 J : 2 B 9 7 3 1 5COOO : f i l te r : h e a d e r To : . . . n o f i l t e r@e x a m p l e . c om f r om c l i e n t . e x a m p l e . c o m [ 1 0 . 0 . 0 . l J ; f r om�< s e n d e r@e x a m p l e . c o m > t o�< n o f i l t e r@e x a mp l e . c om > p r o t o � E S M T P h e l o�< c l i e n t . e x a m p l e . c o m > : n o f i l t e r : d u mmy A p r 9 2 3 : 3 8 : 0 0 ma i l p o s t f i x / c l e a n u p [ 1 2 54 3 J : 2 2 9 9 8 1 5 C O O E : f i l t e r : h e a d e r T o : v i r u s f i l t e r@e x a m p l e . c o m f r om c l i e n t . e x a m p l e . c om [ 1 0 . 0 . 0 . l J ; f r om�< s e n d e r@e x a m p l e . c om > t o�< v i r u s f i l t e r@e x a mp l e . c om > p r o t o� E S M T P h e l o�< c l i e n t . e x a m p l e . c o m > : v i r u s f i l t e r : d u mmy
Filtrování hlaviček typu M I M E MIME hlavičky náleží souborům připojeným ke zprávě . Není-li definovaná žádná jiná mapa a nezadáme-li Postfixu , aby ji používal s parametrem m i me_h e a d e r _c h e c k s , k vy hledávání vzorků v MIME hlavičkách bude implicitně používat mapu h e a d e r _c h e c k s .
POZNÁMKA Definovat různé mapy má smysl tehdy, chceme- I i m ít mapy m i me_h e a d e r J h e c k s co ne j menší, neboť vzorky M I M E se používaj í, pouze když má zpráva přílohu. NejpIVe si vytvoříme mapový soubor se vzorky MIME hlaviček. Nechť se jmenuje l e t c / p o s t f i x / m i me_h e a d e r_c h e c k s a obsahuje tyto filtry:
# B l o k ov A n i s o u b o r ů pod l e p f i pon I n a m e�\ " ( . * ) \ . ( 3 8 6 1 b a t I b i n I c h m l c m d I c om l d o I e x e I h t a I j s e l l n k l ms i l o l e ) \ " $ 1 REJ ECT Unwa nted type o f a t t a c hment $ 1 . $ 2 I n a m e� \ " ( . * ) \ . ( P i f I r e 9 I r m I s c r I s h b I s hm I s h s I s y s I v b e I v b s I v x d I x 1 I x s l ) \ " $ I REJ ECT Unwa nted type of a t t a c hment $ 1 . $ 2 V tomto příkladu Postfix hledá MIME hlavičky obsahující řetězec n a me� " následovaný li bovolným počtem znaků a tečkou O. Za ní následuje posloupnost zakázaných přípon oddělených svislou čárou a uzavřenou závorkami. Regulární výraz je ukončen dvojitými uvozovkami (\ ), které musí být také na konci řádku ($) . "
Akce na pravé straně je doplněna o volitelný text za jménem akce (RE]ECT) . V tomto příkladu jsou dva odkazy na porovnávané podřetězce: $ 1 (pIVní podřetězec CO)) a $ 2 (přípona souboru). Když tedy někdo pošle soubor jménem i m a g e . pi f , hlavičkový řádek mime může vypa dat nějak takhle:
f i l e n a m e� " i m a g e . p i f "
1 29
Ka pito l a 1 0
1 30 A chybové hlášení, které se z něho vytvoří, bude:
U n w a n t e d t y p e of a t t a c h m e n t i m a g e . p i f protože hodnota $ 1 je i ma 9 e a hodnota $ 2 je p i f . Nyní můžeme přidat parametr m i me_h e a d e rJ h e c k s do souboru ma i n . c f , čímž zadáme cestu k mapě :
m i me_h e a d e r_c h e c k s = p c r e : / e t c / p o s t f i x / m i me_h e a d e r_c h e c k s Parametr m i me_h e a d e r _c h e c k s nabude účinnosti obvyklým způsobem tak, že znovu za vedeme konfiguraci Postfixu.
Filtrování hlaviček v přiložených zprávách N a hlavičky v přiložených zprávách může Postfix aplikovat různé akce. Implicitně se provádějí pomocí parametrů h e a d e r _c h e c k s , když však chceme vytvořit samostatnou mapu (abychom ušetřili čas procesoru , nebo když chceme uplatnit výjimky), můžeme ji definovat pomocí parametru n e s t e d_h e a d e r _c h e c k s . Podobně jako i v ostatních případech vytvoříme mapový soubor např. /etc/postfix/ne sted_headecchecks, kam umístíme naše filtry. Zde je příklad zápisu hlavičky vnořené ID zprávy do žurnálu :
/ A Me s s a g e - I d : /
W A R N N e s t e d Me s s a g e - I d :
Nyní přidáme parametr n e s t e d_h e a d e r _c h e c k s do souboru ma i n . c f :
n e s t e d_h e a d e r_c h e c k s = p c r e : / e t c / p o s t f i x / n e s t e d_h e a d e r_c h e c k s P o novém zavedení Postfixu by se v žurnálu měl objevit takovýto zápis:
A p r 14 1 3 : 1 7 : 5 5 ma i l p o s t f i x / c l e a n u p [ 3 2 3 9 7 J : 5 9 C 3 1 1 5 C 0 2 A : w a r n i n g : h e a d e r M e s s a g e - I D : < D I D L 2 7 H L I L 4 H 8 7 CA@e x a m p l e . c o m > f r om m g a t e 2 2 . s o - n e t . n e . j p [ 2 1 0 . 1 3 9 . 2 5 4 . 1 6 9 ] ; f r om= < > t o=< r e c i p i e n t@e x a m p l e . c om > p r o t o= E S M T P h e l o= : N e s t e d M e s s a g e - I d :
POZNÁMKA Tento příklad nemá žádný praktický význam, neboť pro něj neexistuje žádný reá l ný scé nář. Tom u, kdo používá n e s t e d_h e a d e r _c h e c k s , je to pravděpodobně jasné.
Filtrování těla zprávy Tělo zprávy zkoumáme tehdy, když potřebujeme provést nějakou akci na základě sku tečnosti, že obsahuje určitý vzorek. Podobně jako u jiných filtrů se pomocí parametru b o dy-c h e c k s a mapy vzorků s příslušnými akcemi hledá v obsahu určitý vzorek.
Kontrola obsahu se vzta h uje na všechny zprávy, tj . na příchozí i odchozí, a na všechny odesilatele i příjemce. Tedy i na fa lešné zprávy a na zprávy zaslané správci pošty. Pokud máme zaveden fi ltr na zj išťová n í spa mů, už ivatelé nemohou zaslat správci stíž nost s při loženým spamem, který j i m byl doručen. V současné verzi Postfixu ne lze fi ltry a p l i kovat pouze na vybra né uživatele.
J a k se používaj í vestavěné fi ltry Jako obvykle nejdříve vytvoříme mapový soubor, např. l e t c / p o s t f i x / b o dy-c h e c k s , s určitými vzorky a akcemi:
# S k i p o v e r b a s e 6 4 e n c o d e d b l o c k s . T h i s s a v e s l o t s of C P U cy c l e s . # E x p r e s s i o n s by L i v i u D a i a . a m e n d e d by V i c t o r D u c h o v n i . OK -' [ [ : a l n um : ]+1 ] { 60 . ) \ s * $Pomocí tohoto vzorku vyhledáme bloky zakódované base64. Vlnovka (tilda, - ) n a mís tě obvyklého lomítka (f) slouží k uzávorkování regulárního výrazu , takže uvnitř tohoto výrazu není nutné zvlášť uvozovat lomítko. Následují některé vzorky obsahující známé a jednoznačné citace obsažené ve spamech. Postfix je všechny odmítne:
# S PAM I ( A S S E E N ON N A T I O N A L T V I R E A D T H I S E - MA I L TO T H E E N D ) I REJ ECl Spam #1 I W e a r e s h a n g h a i l o n g s u n e l e c t r i c a l a l l oy l R E J E C T C h i n e s e s p a mme r f r om h e l l I D o y o u w a n t E V E RY O N E t o k n ow y o u r b u s i n e s s l R E J E C l S p a m #2 I ( Z a i n a b I S a n ? n i ) Aba c h a l REJ ECT N i g e r i a s pam I M I L I TA R Y H E A D O F STAT E I N N I G E R I A I REJ ECT N i g e r i a f r a ud spam l a n t i v i ru s \ . 5xx\ . netl REJ ECT V i rus hoax ( 0 1 90 - d i a l e r ) I M O S E C H U KW U I REJ ECT B u s i n e s s fraud s pam #1 IAhmed Kabba h l R E J E C T B u s i n e s s f r a u d s p a m #2 I Godwi n I g b u n u l R E J E C T B u s i n e s s f r a u d s p a m #3 I I P R E S U M E T H I S E MA I L W I L L NOT BE A S U R P R I S E T O Y O U I R E J E C T B u s i n e s s f r a u d s p a m #4 I h t t p : \ I \ / www \ . a l - o p p o r t u n i ty4 u \ . c o m \ / e u r 0 2 / R E J E C T B u s i n e s s f r a u d s p a m #5 I h ttp : \ I \ / 66 . l 5 l . 240 . 30\ 1 1 REJ ECT Spam of t h e worst k i nd I h t t p : \ I \ / mem b e r s . t r i p o d . c om . b r \ / l e v 3 i r k d / REJ ECT Spam of the worst k i nd I I Odmítnuty budou i zprávy obsahující následující vzorky, avšak kromě toho se zpráva vrátí odesilateli s odkazem na databázi falešných zpráv.
# H o a x e s I j d b g mg r \ . e x e l REJ ECT V i rus hoax ! I r e a dy t o d i c t a t e a w a r l R E J E C T H o a x : h t t p : / / www . t u - b e r l i n . d e / www / s o f twa r e / h o a x / u n i cw a s h . s h t m l l i n q u i r i e s@u n \ . o r g / R E J E C T H o a x : h t t p : / / www . t u - b e r l i n . d e / www / s o f twa r e / h o a x / u n i cw a s h . s h t m l l U N O i s r e a dy t o r e c e i v e s i g n a t u r e s l R E J E C T H o a x : h t t p : / / www . t u - b e r l i n . d e / www / s o f twa r e / h o a x / u n i cw a s h . s h t m l I T h i rd Wo r l d Wa r l R E J E C T H o a x : h t t p : / / www . t u - b e r l i n . d e / www / s o f twa r e / h o a x / u n i cw a s h . s h t m l
131
1 32
'4-fiNt'
Kapitola 1 0
Někdy je nutné zavést kontrolu těl zpráv jako okamžité opatření na odmítání zavirova ných zpráv, když naše virová databáze ještě daný virus neumí rozpoznat. Po aktualizaci virové da �abáze je třeba takový vzorek odstranit:
ffff V i r u s ff W i n 3 2 . N e t s ky . V / T h e p r o c e s s i n g o f t h i s me s s a g e c a n t a k e a few m i n u t e s \ . \ . \ . / R E J E C T W i n 3 2 . N e t s ky . V / C o n v e rt i n g mes s a g e . P l e a s e wa i t \ . \ . \ . 1 R E J E C T W i n 3 2 . N e t s ky . V I P l e a s e w a i t w h i l e l o a d i n g f a i l e d me s s a g e \ . \ . \ . 1 R E J E C T W i n 3 2 . N e t s ky . V I P l e a s e w a i t w h i l e c o n v e r t i n g t h e me s s a g e \ . \ . \ . 1 R E J E C T W i n 3 2 . N e t s ky . V Je-li mapový soubor na svém místě, do souboru ma i n . c f přidáme parametr b o d YJ h e c k s :
b o dy_c h e c k s = r e g e x p : / e t c / p o s t f i x / b o dy_c h e c k s Nakonec filtry aktivujeme opětovným zavedením Postfixu .
KAPITOLA 1 1 ,
JAK PRACUJI EXTERNI FILTRY ,
Příchozí poštu posuzujme liberálně, odchozí konzervativně. - Jon Postel, průkopník Internetu (1943- 1998) Vestavěné filtry, kterým jsme věnovali pozornost v předchozí kapitole , jsou určeny spí še pro jednoduché případy; sofistikovanější filtrování se musí provádět pomocí externí ho softwaru . Postfix lze nastavit tak, že spouští aplikace pro kontrolu obsahu buď před nebo až po zařazení zprávy do fronty. Je�li zpráva filtrována před zařazením do fronty, Postfix pře nechává oznamovací povinnost vůči odesilateli na klientovi . Je-li filtrována až po zařa zení do fronty, oznamovací povinnost má Postfix. V této kapitole se seznámíme s tím, jak se odpovědnost za kontrolu obsahu přenáší, a uvidíme, jak se konfiguruje architektura postfixových démonů, aby přenechávali zprá vy externím filtrovacím mechanismům, a jak se zprávy po úspěšném přefiltrování vrace jí do Postfixu k závěrečnému doručení. Externí filtry obsahu pokračují tam, kde vestavěné filtry obsahu a hlaviček skončily; ex terní aplikace nejenže zkoumají obsah a vracejí zprávy, nýbrž mohou měnit i jejich ob sah. Zde jsou některé jejich typické úlohy: •
Připojování výhrady (disclaimer) ke zprávám
•
Vyhledávání virů a červů
•
Detekce spamů
•
Archivace pošty
Postfix má dva filtrovací mechanismy jménem c o n t e n t_f i 1 t e r a s m t p d_p r o xy_f i 1 t e r s podobným zaměřením, avšak rozdílné z hlediska schopností a způsobů zpracování ob sahu . V tabulce 1 1 . 1 je uvedeno porovnání těchto dvou typů filtrů :
1 34
'4-fi'd'
Ka p ito l a 1 1
Tabulka 1 1 . 1 : Rozd íly m e z i fi ltry Jméno filtru
Pfenosy
Způsob odmrtnutr
c o n t e n t_ f i l t e r s m t pd_p r o xy_f i l t e r
smtp , l mtp , p i pe smtp
P o z a ř a z e n í d o f r o n ty P ř e d z a ř a z e n í m d o f r o n ty
v této kapitole si podrobně vysvětlíme tyto rozdíly, abychom si uměli vybrat filtr, který
nám nejlépe vyhovuje.
Kdy se má filtrovat obsah zprávy? Internetový standard RFC říká, že poštovní server se musí rozhodnout, zda zprávu přijme či odmítne, nejpozději do datové fáze dialogu . Takový požadavek bohužel ponechává poštovnímu serveru málo času na kontrolu obsahu zprávy, neboť poštovní klient se ob vykle chrání před "zamrznutím" komunikace s nefunkčním poštovním serverem pomocí poměrně krátkého časového limitu . Je uložen v parametru s m t p_d a t a_d o n ct i m e o u t a je ho implicitní hodnota je značně tolerantní, neboť je rovna 600 vteřinám. Stihne-li poštovní server zkontrolovat obsah před vypršením časového limitu , je vše v po řádku, neboť může klientovi sdělit, zda zprávu přijal. Je-li však server pomalý, klient ne čeká a zkusí jej kontaktovat později , přičemž je pravděpodobné, že další pokus bude rovněž neúspěšný. Aby nedocházelo k této "škytavce" , implementujeme v Postfixu c o n t e n t_f i 1 t e r , kterým se stanoví jiný způsob kontroly obsahu : 1.
Poštovní klient pošle obsah zprávy v průběhu datové fáze.
2.
Postfixový server zprávu přijme a zařadí ji do fronty. Klient se domnívá, že přenos proběhl úspěšně.
3.
Správce fronty provede kontrolu obsahu a naplánuje doručení podle položky con tentjilter.
4.
Postfix předá zprávu externí aplikaci.
5.
Odpovědnost za doručení zprávy převezme externí aplikace. Může se zprávou nalo žit jedním z následujících způsobů : •
Přijme zprávu a vrátí ji Postfixu k doručení.
•
Přijme zprávu a předá ji j iné aplikaci nebo serveru .
•
Zprávu smaže nebo ji pošle zpět.
Druhý filtr ( s mt p d_p r o xLf i 1 t e r ) zpracovává zprávu jinak: 1.
Poštovní klient pošle obsah zprávy v průběhu datové fáze.
2.
Postfixový démon s m t p d pošle příkazy SMTP a obsah zprávy externí aplikaci .
3.
Externí aplikace pošle odpovědi na SMTP démonu smtpd a ten je předá poštovnímu klientovi.
Tento filtr obsluhou , front. Bez ží zprávu .
může mít problémy s časovými limity poštovních klientů a s jejich paralelní neboť s m t pd_p r o xL f i 1 t e r nemá žádný mechanismus plánování na základě něho musí externí aplikace začít se zpracováním ihned, jakmile Postfix obdr To může vést k významnému zpomalení, pokud aplikace zpracování přích 0-
13 5
J a k pracuj í externí fi ltry zích zpráv nezvládá . Situace je podobná problémům s detekcí virů nebo spamů , kdy je také nutno provádět časově náročná rozbalování a dekódování příloh. Oba přístupy mají svoje nevýhody: •
•
V případě c o n t e n t_ f i 1 t e r vzniká větší přenosová zátěž, neboť Postfix zprávu přijme a začne ji zpracovávat, i když ji později na základě výsledku z externí aplikace mů že vrátit. Filtr s m t pd_p r o xy- f i 1 t e r sice vrací nežádoucí zprávy včas, avšak v důsledku absen ce front nezvládá větší zátěže.
Přepisování adres Přepisujeme-li adresy v hlavičkách, musíme si dobře rozmyslet, v kterém okamžiku se budou aplikovat filtry. Konkrétně jde o to, zda má Postfix přepisovat adresy (z důvodů daných v i r t u a l _a 1 i a s_ma p s ) před filtrováním nebo až po něm. Přepíšeme-li adresu před filtrováním, riskujeme, že vrácené zprávy, resp. varování, pů jdou na interní adresu . Například varovné hlášení způsobené zprávou určenou pro moe_h e 1 d e n@e x a m p 1 e . c o m může být vráceno na adresu mh 1 2 3@m a i 1 b o x . e x a m p 1 e . c om. Podle našeho názoru b y m ě l být Postfix nastaven tak, aby přepisoval adresy (pomocí v i r t u a 1 _a 1 i a s_ma p s nebo c a n o n i c a 1 _m a p s ) až po vrácení zprávy do fronty k závěreč nému doručení. Externí aplikace (např. antiviry) tak mohou posílat varovná hlášení na adresy původních příjemců ještě dříve, než je Postfix přepíše. Existují dva způsoby, jak můžeme zrušit mapování adres (prováděné pomocí rozvoje ali asů , kanonického mapování, maskováním apod.) ještě před filtrováním. Jednak můžeme v souboru ma i n . cf nastavit volbu :
Anebo můžeme vypnout přepisování adres démonovi, který přijímá poštu ze sítě (obvy kle to je s m t pd), v souboru ma s t e r . c f :
smtp i net n n - o c o n t e n t_f i 1 t e r=fo o : [ 1 2 7 . 0 . 0 . 1 J : 5 4 3 2 1
smtpd
- o rece i ve_ o v e r r i de_ op t i ons=no_ a dd r e s s_mapp i ngs
Jakmile filtr zprávu zpracuje, obvykle ji vrátí do postfixové fronty. Právě v tomto okamžiku je vhodné provádět manipulaci s adresou, budeme však k tomu potřebovat další proces s m t p d , který přijme zprávu zpracovanou filtrem, přičemž místo nastavení r e c e i v e_ov e r r i d e_opt i o n s=no_a d d r e s s_ma p p i n g s použije r e c e i v e_o v e r r i d e_o p t i o n s = n o_u n k n own_rec i p i e n t_c h e c k s . Více se o filtrech c o n t e n t_f i 1 t e r a s m t pd_p r oxy_f i 1 t e r dozvíme v následujících podkapitolách.
content_filter: nejdřív fronta, potom filtr Ke zkonfigurování poštovního programu s mechanismem c o n t e n t_f i 1 t e r potřebujeme dva procesy s m t p d (viz obrázek 1 1 . 1). První přijímá zprávy nezpracované filtrem a po mocí contencfilter je předává externí filtrovací aplikaci . Druhý proces s m t p d sleduje spo jení z externí aplikace, aby mohl zprávu vrátit do postfixového systému front k dalšímu zpracování.
1 36
'4'fiihl
Kapitola 1 1
Druhý proces s m t p d nesm í být zkonfig u rová n tak, a by spouštěl a p l i kaci c o n t e n t_f i 1 t e r, která spouští první proces s m t p d . Došlo by k zacyklení, neboť zpráva předaná z Postfi xu do externí a p l i kace by se vráti la do postfixového systému front na stej né m ísto, kde byla předtím . Popis algoritmu na obrázku 1 1 . 1 : 1.
Proces s m t p d zkonfigurovaný s parametrem c o n t e n t_ f i 1 t e r předá zprávu správci front.
2.
Správce front předá zprávu jednomu z démonů s m t p , 1 m t p nebo pi p e , aby ji doruči li externímu filtru .
POZNAMKA Na obrázku 1 1 - 1 je jeden ze tří možných scéná řů, kdy qmg r předá zprávu s m t p . 3.
Externí aplikace převezme kontrolu nad zprávou a zpracuje j i .
4 . Vrátí-li filtrovací program zprávu d o Postfixu, provede t o pomocí toho procesu s m t p d , který nepoužívá c o n t e n t_f i 1 t e r . 5.
Druhý démon smtpd předá zprávu správci front.
6.
Postfix doručí zprávu lokálně nebo ji odešle na jiný poštovní server.
Navíc může Postfix poslat externí aplikaci pomocnou zprávu . Její obsah závisí na kon krétním démonovi (1 m t p , s m t p nebo p i pe), kterému je svěřen přenos.
Démoni pro předávání zpráv externím filtrům Zprávu je možné předat externí filtrovací aplikaci prostřednictvím tří základních démo nů . Liší se od sebe funkcemi a způsobem přenosu . Následuje jejich přehled:
p i pe Démon p i p e posílá zprávy skriptům a jiným spustitelným programům. Ty mohou spustit prakticky libovolnou akci počínaje archivací zpráv až po jakékoli jiné zpra cování, např. vyhledávání virů . Rozsah úloh, jež mohou tyto programy provádět, není nijak omezen. Proto existuje i možnost současného předávání argumentů a příznaků . Jejich podrobný popis je uveden v manuálových stránkách pipe(8) .
smtp Démon s m t p slouží k předání zprávy filtrovací aplikaci podle protokolu SMTP nebo ESMTP (například jinému MTA). Doplňující údaje, jež se mohou poslat společně se zprávou , jsou omezeny protokolem; podrobnosti viz manuálové stránky smtp(8) .
1 mtp Démon 1 m t p rovněž slouží k předávání zpráv filtrovacím programům, a to prostřed nictvím protokolu LMTP . Podobně, jako je tomu u SMTP, i v protokolu LMTP je množství společně předávaných doplňujících údajů omezeno; podrobnosti viz ma nuálové stránky Imtp(8) .
137
J a k pracuj í exter n í fi ltry
Internet
Poštovní server/Poštov n í k l ient
Poštovn í server
�
Postfix smtpd s c o n t e n t_ f i l t e r
smtpd bez contenLfi 1 ter
Fi ltrovací software
I cl eanup
t
Fi ltr
qmgr
" p i pe
1 oca 1
II
smtp
l uuep
Poštov n í schránka
�
._,
tep
Internet Poštovní server
Poštovn í server
Obrázek 1 1 -1 Algoritmus doručení zprávy s externím fi ltrem obsahu (content_filter)
1 38
'4-fjiU'
Kapito la 1 1
POZNÁMKA Na rozdíl od k l ienta SMTP, jenž v současné verzi nemá i m plementová no DSN (ozná me ní doručen í - Del ivery Service Notification), protokol LMTP poskytuje serveru možnost, a by každému příjemci posl al samostatné h láše n í o stavu zprávy (tj . zda byla zpráva od m ítn uta nebo přijata). Tím se předejde nedorozumění při ohlašová n í stavu vícenásob ným příjemcům zprávy, kdy toto h l ášen í obdrží pouze někteří z nich.
Zásady při konfiguraci filtru content_filter Posílání zprávy externímu filtru vyžaduje modifikaci všech démonů, kterými se zpraco vává příchozí zpráva. Konkrétně jde o tyto úpravy: 1.
Přenos v souboru ma i n . cf definujeme pomocí c o n t e n Lf i l t e r .
2 . Tento přenos zkonfigurujeme v souboru m a s t e r . c f . 3.
Má-li s e zpráva vrátit z filtru d o postfixové fronty, v souboru ma s t e r . c f musíme zkonfigurovat návratovou cestu .
Definice přenosu Postfixu je třeba pomocí filtru c o n t e n t_f i l t e r v souboru m a i n . c f sdělit, že má zprávy předávat externí aplikaci . Postfix si podle toho musí nastavit svoji službu (nemá-li ji, mu sí si ji vytvořit), která čeká na předávání zpráv filtrovací aplikaci. V následujícím řádku sdělujeme Postfixu, že má zprávy předávat přes port 54321 transportnímu programu f o o n a lokálním systému 1 27.0.0. 1 . Připomeňme s i , ž e hranaté závorky říkají Postfixu , aby nehledal záznam MX odpovídající IP adrese 1 27.0.0. 1 :
c o n t e n t_ f i l t e r = f o o : [ 1 2 7 . 0 . 0 . 1 J : 5 4 3 2 1
Konfigurace přenosu Transportní službu definovanou v souboru ma i n . cf je nyní třeba za konfigurovat do sou boru ma s t e r . c f , což je hlavní démon, v němž se vede evidence o všech používaných službách. O nové transportní službě je třeba mu sdělit tyto údaje: 1. Jméno služby. 2. Jméno postfixového démona, který bude službu vykonávat. 3.
Volby a další informace nutné k jeho činnosti.
Vytvoření transportního démona f o o může vypadat například takto: ff ================================================================= ff s e r v i c e t y p e p r i v a t e u n p r i v c h r o o t w a k e u p m a x p r o c c omma n d ff (yes ) ( yes ) (yes ) ( n eve r ) ( 1 00 ) ff =========================== = ====================================
foo un i x n - o s m t p_d a t a_d o n e_t i m e o u t= 1 2 0 0 s - o d i s a b l e_d n s_l o o k u p s =y e s
2
smtp
Řádek začínající f o o j e pro konfiguraci transportní služby nejpodstatnější. Má osm sloup ců; v prvním je uvedeno jméno služby definované v main.cf a je to příkaz, kterým se zpráva pošle externí aplikaci (zde je to postfixový klient SMTP). Následující dva řádky jsou volby tohoto příkazu .
J a k pracuj í externí fi ltry
'4-fi'it'
Syntaxe vo leb: Má-Ii příkaz další parametry, na začátek každého nového řádku se při dá mezera, což se považuje za log ické pokračová n í předchozího řád ku. N i cméně, mezi parametry a jejich hodnoty by se mezery vkládat neměly (např. mezi s m t p_d a t a_d o n e_t i m e o u t a 1 200s); h l avn í démon by j e nemusel správně rozpoznat. Zatím jde všechno jako po másle - už umíme předat zprávu externí aplikaci. Má-li se ovšem zpráva z této aplikace vrátit do Postfixu, musí k tomu mít zkonfigurovanou cestu .
Konfigurace zpáteční cesty Zpráva se vrací do Postfixu běžnou lokální metodou (SMTP, LMTP, lokální sendmail), aniž by k tomu byl nutný c o n t e n Lf i l t e r . Obvykle se využívá služeb paralelního démona s m t p d se speciální volbou , která přepíše globální parametry v souboru ma i n . c f . Kdyby chom například chtěli, aby druhý démon sledoval port 10025, v souboru m a s t e r . c f se musí zadat:
#================================================================= p r i v a t e u n p r i v c h r o o t w a k e u p m a x p r o c c omma n d # s e r v i ce t y p e (yes ) (yes ) (yes ) ( n eve r ) ( 1 00 ) # # ================================================================ n n i net 1 27 . 0 . 0 . 1 : 10025 - o c o n t e n t_f i l t e r= - o r e c e i v e_o v e r r i d e_o p t i o n s = n o_u n k n ow n _ r e c i p i e n t_c h e c k s - o s m t pd_ r e c i p i e n t_ r e s t r i c t i o n s =p e rm i t_my n e t wo r k s . r e j e c t - o my n e t wo r k s = 1 2 7 . 0 . 0 . 0 / 8
smtpd
Všimněme si, že typ přenosu j e tentokrát i n e t , neboť jde o přenos p o Internetu (v před chozím příkladu to byl typ doménový socket). Prozatím můžeme specifikovat internetové služby jako h o s t : p o r t bez uvedení způsobu přenosu v souboru ma i n . cf (h o s t může být jméno systému nebo IP adresa definovaná v / e t c / h o s t s , zatímco p o r t může být číslo nebo jméno služby definované v souboru / e t c / s e r v i ce s). Č ást h o s t : můžeme vynechat, avšak tím b y s e stala služba dostupná na všech síťových rozhraních, jako kdyby byla definovaná v i n e t_i n t e r f a c e s . Abychom minimalizovali ri ziko, že definicí zpáteční cesty vytvoříme otevřené předávání, měli bychom omezit roz hraní sledující spojení pouze na nezbytně nutná; v tomto případě k tomu potřebujeme pouze lokální systém 1 27.0.0. 1 . Zde jsou další volby příkazu : •
•
Explicitní nastavení c o n t e n t_ f i 1 t e r na prázdnou hodnotu zabrání přenosu filtru do souboru ma i n . c f , nevznikne tedy nekonečný filtrovací cyklus . .
Aby příjemce zbytečně neprováděl filtrování dle map 1 0 c a l J e c i p i e n Lm a p s a r e l a y_r e c i p i e n t_ma p s , zadáme volbu r e c e i v e_o v e r r i d e_opt i o n s . Toto filtrování už provedl démon s m t p d , který přijímal zprávu z Internetu ; není tedy třeba je provádět podruhé.
1 39
1 40
'4-fjiU! •
Ka pito l a 1 1
Poslední dva parametry spolupracují, nejdříve se povolí pošta pouze z my n e t wo r k s a pak se nastaví my n e two r k s explicitně n a 1 2 7 . 0 . 0 . 0 / 8 . Jde o další bezpečnostní opatř�ní proti případným pokusům z externích systémů o využití zpáteční cesty jako otevřeného předávání.
smtpd_proxy_filter: nejdřív filtr, potom fronta Mechanismus s m t p d_p r o xy-f i 1 t e r vyžaduje určitou úpravu stávajícího démona s m t p d ("předsazený" filtr s m t pd), aby mohl plnit roli zprostředkovatele spojení mezi poštovním klientem a externím filtrovacím programem (viz obrázek 1 1 .2).
POZNÁMKA Démon s m t p d chrá n í extern í a p l i kaci ta k, že z příchozí pošty odstra ň uje potenciá l n ě ne bezpečné části jako rou ry, dlouhé argumenty, případně neobvyklé znaky. S ohledem na externí aplikaci a účel, jemuž slouží, lze také vytvořit paralelní proces s m t p d ("následný" filtr s m t pd), který sleduje zprávy vracející se z externího filtru . Postup je následující: 1.
Démon s m t p d jako předsazený filtr se spojí s externí aplikací.
2.
Předá jí příchozí příkazy a data .
3.
Externí aplikace ponechá v průběhu zpracování obsahu zprávy spojení otevřené.
4.
Přijme-li externí filtr zprávu , může ji předat buď následnému démonu s m t p d nebo ji né aplikaci.
5.
Externí aplikace oznámí rozhodnutí o přijetí zprávy předsazenému filtru dle proto kolu SMTP (250 přijetí, 554 odmítnutí).
6.
Předsazený filtr předá tyto odpovědi původnímu poštovnímu klientovi .
Úvahy o proxy-filtrech Při práci s proxy-filtry je třeba se řídit těmito zásadami:
Komunikace podle protokolu ESMTP Když Postfix posílá zprávu filtru, používá protokol ESMTP , avšak nikoli rouru . Dé mon s m t p d generuje svoje vlastní příkazy E H L O , X F O RW A R D (pro přihlášení IP adresy vzdáleného klienta místo lokálního systému [ 1 27.0.0. 1 ]), DATA a O U I T . Jinak by Post fix pouze přeposlal nezměněné kopie příkazů MA I L F ROM a R C P T T O , které předsa zený filtr dostal od vzdáleného poštovního klienta.
Požadavky na externí aplikaci Filtr (který musí komunikovat podle SMTP) by měl akceptovat stejnou syntaxi příka zů MA l L F ROM a R C P T TO jako démon s m t p d .
Vracení obsahu Předpokládá se, že filtrovací aplikace předává nemodifikované příkazy SMTP z před sazeného filtru následnému démonovi s m t p d (jenž obvykle sleduje nestandardní port kvůli nasměrování zprávy na zpáteční cestu, kterou neobsluhuje stejný filtr; situace je podobná jako u algoritmu c o n t e n t_f i 1 t e r popsaného shora v této kapitole) .
J a k pracuj í externí fi ltry
I nternet
141
Poštovní server/Poštovn í kl ient
Poštovní server Postfix p ředsaze ný filtr
..
..
filtr
smtpd
el eanup
�
n ás l e d ný fi ltr
i
smtpd
F i ltrovací software
il �i
qmg r
I I p i pe
l ae a l
smtp
,\
lI u e p
Poštovn í s c h ránka
l: II
tep
:,!
Poštovn í server
"
I nternet Poštovní server
l'
JJt Obrázek 1 1 -2 Algoritmus doručení zprávy s prů běžným fi ltrováním Odmítnutí obsahu Odmítne-Ii filtr zprávu kvůli obsahu , měli by poslat předřazenému procesu smtpd za mítavou odpověď (kód 5xx) a poté spojení SMTP s následným procesem smtpd zru-
1 42
'a-fidC'
Kapitol a 1 1
šit, aniž by dokončil konverzaci . Neučiní-li tak, následný proces s m t p d by mohl zprá vu nedopatřením doručit. .
Základy konfigurace filtru s m t p d_p r o xy_f i 1 t e r Abychom mohli posílat externímu filtru zprávy pomocí s m t pd_p r o xy-f i 1 t e r , musíme pozměnit démona s m t p d , a to takto: 1.
Ú prava stávajícího démona s m t p d dle stejného schématu jako v případě předsazené ho filtru .
2.
Konfigurace následného filtru : Vytvoření paralelního procesu s m t p d , který vrací poš tu do postfixových front.
Úprava stávajícího démona smtpd (předsazený filtr) Spojení mezi stávajícím proxy-filtrem (démonem s m t pd) a filtrovací aplikací se vytvoří tak, že se v souboru m a s t e r . c f přidá parametr s m t pd_p r o xy-f i l t e r ke službě s m t p d . Musí s e zadat I P adresa nebo úplná adresa systému (FQDN) a číslo portu příslušného proxy-filtru . V našem příkladu je to port 1 0024 na lokálním systému :
#����������������������������������������������������������������� p r i v a t e u n p r i v c h r o o t w a k e u p m a x p r o c c omma n d # s e rv i ce type (yes ) (yes ) ( y e s ) ( neve r ) ( 1 00 ) # # ���������������������������������������������������������������� n n smtp i net - o s m t p d_p r o xy_f i l t e r� 1 0 c a l h o s t : 1 0 0 2 4
20
smtpd
Konfigurace paralelního procesu s m t p d (následný filtr) Paralelní proces s m t p d , který přijímá přefiltrované zprávy na lokálním systému , vytvoří me přidáním jediného řádku do souboru ma s t e r . c f . Bude podobný řádku pro vytvoře ní původního (implicitního) procesu, bude však sledovat jiný port a měl by mít i jiné volby než předsazený filtr s m t p d . V tomto příkladu bude následný filtr sledovat port 10025:
#����������������������������������������������������������������� p r i v a t e u n p r i v c h r o o t w a k e u p m a x p r o c c omma n d # s e r v i ce t y p e (yes ) ( yes ) (yes ) ( never ) ( 1 00 ) # # ���������������������������������������������������������������� 127 . 0 . 0 . 1 : 10025 i net n n smtpd - o s m t pd_a u t h o r i z e d_x f o rwa rd_h o s t s � 1 2 7 . 0 . 0 . 0 / 8 - o s m t pd_c l i e n t_r e s t r i c t i o n s � - o s m t pd_h e l o_r e s t r i c t i o n s � - o s m t pd_s e n d e r_r e s t r i c t i o n s � - o s m t p d _ r e c i p i e n t_ r e s t r i c t i o n s � p e r m i t_my n e t w o r k s . r e j e c t - o my n e t w o r k s � 1 2 7 . 0 . 0 . 0 / 8 - o r e c e i v e_o v e r r i d e_o p t i o n s � n o_u n k n ow n _ r e c i p i e n t_c h e c k s - o c o n t e n t_f i l t e r�
KAPITOLA 1 2
JAK SE POUŽíVAj í EXTERNI FILTRY ,
Chcete-li to, řeknu vám, kde to mají. - Žalářník č. 1 v Monty Pythonově Životě Briana Každý nástroj se hodí jen k něčemu . Představme si, že bychom chtěli vymyslet kladivo, které by se dalo používat i k leštění. Výsledkem by nejspíš bylo špatné kladivo a špatná leštička . To je dúvod, proč Postfix nefiltruje spamy, nearchivuje poštu a neprovádí pre venci. Místo toho poskytuje uživateli možnost vybrat si toho nejlepšího poštovního agen ta a nainstalovat si do něho ten nejlepší externí filtr. V předchozích kapitolách jsme se setkali se dvěma poněkud odlišnými přístupy ke zpracování pošty, které se lišily v tom, v kterém okamžiku se pošta filtruje. V této kapitole si povíme něco o praktické stránce těchto metod. Konkrétně si ukážeme, jak se ke zprávám pomocí rour a skriptú připoju jí výhrady, jak se ve zprávách vyhledávají viry pomocí filtrú c o n t e n t_f i 1 t e r a s m t pd_p r o xy_f i 1 t e r a jak se předávají antivirovému systému amavisd-new.
Jak se ke zprávám připojuje výhrada Kromě množství ostatních činností mohou také filtry k e všem odchozím zprávám přidá vat výhrady. V následujícím příkladu obsahuje skript pro přidávání výhrady krátký pro gram alterMIME, který provádí změny ve zprávě s kódováním MIME. Na obrázku 1 2 . 1 vidíme, kam j e program alterMIME v procesu přenosu zpráv nutno zařadit. Chceme-li k odchozím zprávám přidávat výhradu , aniž bychom jakkoli změnili příchozí nebo lokální zprávy, je třeba provoz v obou směrech od sebe oddělit. Řekněme, že bu deme mít poštovní server se zvláštními rozhraními pro vnitřní a vnější síť. To znamená, že musíme vytvořit tři paralelní démony s m t p d a přidělit je postupně k rozhraním lokál ní, interní a externí sítě. V následujícím příkladu uvidíme, jak se pomocí těchto démonú provede přenos zprávy z interní sítě do vzdáleného místa určení. 1.
Když zpráva opustí síť, poštovní klient se spojí s démonem s m t p d , který sleduje pro voz na vnitřním rozhraní.
Kapitola 1 2
1 44
2 . Tento interní démon smtpd zprávu přijme a předá ji qmg r (správci front). 3.
Správce qmg r zprávu pošle filtrovacímu programu (službě) c o n t e n t_fi l t e r .
4. Služb� c o n t e n t_fi 1 t e r předá zprávu příslušnému skriptu prostřednictvím démona pi pe. 5.
I
Skript přidá ke zprávě výhradu.
6. Poté skript zprávu vrátí paralelnímu démonovi s m t p d , ktetý sleduje rozhraní lokální sítě.
7. Tento lokální démon předá zprávu démonovi (správci fronty) qmg r . 8. Démon qmg r zprávu pošle prostřednictvím s m t p n a Internet. Než tento mechanismus zakonfigurujeme, musí existovat příslušný skript, ktetý vyvolá z POStflXU program alterMIME.
Externí poštovní k l i ent
Interní poštovní klient
Lokální poštovní klient
I ntern í smtpd
Loká l n í smtpd
Exter n í smtpd
qgmr
I
,
•
I
alter M I M E
Obrázek 1 2-1 Integrace alterM I M E d o Postfixu
J a k se používaj í extern í fi ltry
'4-h"M
Instalace alterMIME a vytvoření filtrovacího skriptu Modifikaci odchozí zprávy provádí skript pomocí programu alterMIME ( h t t p : / / www . p 1 d a n i e l s . c o m / a l t e r m i me l . Pokud tento program nemáme (a nemáme jej ani v binární podobě v systémovém balíku), stáhneme si jej , rozbalíme, uložíme do zdrojového adre sáře a zadáme příkazy make a make install . Od této chvíle by měl být program alter MIME uložen v I u s r I I o c a 1 l b i n I a l t e rm i m e .
Vytvoření prostředí pro alterMIME Program alterMIME b y s e měl spouštět s oprávněními neprivilegovaného uživatele systému . Kdybychom například chtěli na svém počítači spouštět filtr u s e r n a me , vytvoří me tohoto uživatele pomocí příkazů : ff g r o u p a d d f i l t e r ff u s e r a d d - d I v a r l s p o o l / a l t e rm i me - G f i l t e r a l t e rm i me
Vytvoření adresáře pro skript Přecpat adresář l e t c / p o s t f i x hromadou všelijakých skriptů by nebylo příliš rozumné. Pro ukládání skriptů bychom si měli vytvořit zvláštní podadresář, do něhož by měli pří stup pouze uživatel r o o t a skupina f i l t e r . Adresář se správně nastavenými vlastníky a oprávněními můžeme vytvořit například takto: ff ff ff ff
mkdi r c h own chgrp chmod
letc/postfi x/fi l ter root letc/postfi x/fi l ter fi l te r letc/postfi x/fi l ter 770 letc/postfi x/fi l ter
Vytvoření skriptu Program alterMIME se volá ze skriptu jménem l e t c / p o s t f i x / f i l t e r / a d d_d i s c l a i me r . s h , kterým se zpracovávají zprávy přicházející z Postfixu (odkud je posílá démon pi p e ) . Tento program do zprávy doplní výhradu a zprávu vrátí do postfixové fronty. Ke své činnosti potřebuje mít prostor pro dočasné soubory; s td i n nestačí.
ff ! / b i n / s h ff Sy s t em d e p e n d e n t s e t t i n g s A L T E RM I M E= / u s r / l o c a l / b i n / a l t e r m i me A L T E RM I M E_D I R= / v a r l s p o o l / a l t e r m i me S E N D MA I L= / u s r l s b i n / s e n d m a i l ff E x i t c o d e s o f c omma n d s i n v o k e d by P o s t f i x a r e e x p e c t e d ff t o f o l l ow t h e c o n v e n t i o n s d e f i n e d i n < s y s e x i t s . h > . T E M P FA I L=7 5 U N A V A I LAB L E= 6 9 ff C h a n g e i n t o a l t e r M I M E ' s wo r k i n g d i r e c t o ry a n d ff n o t i fy P o s t f i x i f ' c d ' f a i l s . c d $ A L T E RM I M E_D I R I I { e c h o $ A L T E RM I M E_D I R d o e s n o t e x i s t ; e x i t $ T E M P FA I L ; } ff C l e a n u p w h e n d o n e o r w h e n a b o r t i n g . t r a p " rm - f i n . $ $ " O 1 2 3 1 5 ff W r i t e m a i l t o a t e m p o r a ry f i l e ff N o t i fy P o s t f i x i f t h i s f a i l s c a t > i n . $ $ I I { e c h o C a n n o t w r i t e t o $ A L T E RM I M E_D I R ; e x i t $ T E M P F A I L ; }
1 45
Kapito l a 1 2
1 46
# C a l l a l t e r M I M E , h a n d o v e r t h e me s s a g e a n d # t e l l a l t e rM I M E w h a t to d o wi t h i t $ A L T E RM I M E - - i n p u t= i n . $ $ \ - - d i s c l a i me r= / e t c / p o s t f i x / d i s c l a i me r . t x t - - d i s c l a i me r - h t m l = / e t c / p o s t f i x / d i s c l a i me r . t x t - - x h e a d e r= " X - C o py r i g h t e d - M a t e r i a l : P l e a s e v i s i t h t t p : / / www . e x a m p l e . c o m / me s s a g e_d i s c l a i me r . h t m l " I I \ { e c h o M e s s a g e c o n t e n t r e j e c t e d ; e x i t $ U N A V A I LA B L E ; # C a l l s e n d ma i l t o r e i n j e c t t h e me s s a g e i n t o P o s t f i x S S E N DMA I L " S@ " < i n . $ $ # U s e s e n d m a i l ' s E X I T STAT U S t o t e l l P o s t f i x # how t h i ngs went . exi t $ ? Po vytvoření tohoto skriptu může mít právo zapisovat do souboru pouze uživatel root, uživatel filter však musí mít oprávnění jej spouštět.
# c h ow n r o o t a d d_d i s c l a i me r . s h # c h g r p f i l t e r a d d_d i s c l a i me r . s h # c h m o d 7 5 D a d d_d i s c l a i me r . s h Nyní pochopitelně musíme vytvořit text výhrady.
Vytvoření výhrady Máme-li text výhrady vytvořený, uložíme si jej do / e t c / p o s t f i x / f i l t e r / d i s c l a i m e r . t x t . Pokud jsme se ještě pro žádnou výhradu nerozhodli, můžeme se inspirovat v em a i l d i s c l a i me r s . c om ( h t t p : / / www . ema i l d i s c l a i me r s . c om l , což jsou stránky urče né výhradám a vůbec zákonům, které souvisejí s elektronickou poštou . V našem příkla du použijeme jen následující nicneříkající text (z h t t p : / / www . 1 i ps u m . c om):
L o r e m i p s u m d o l o r s i t a m e t , c o n s e c t e t u e r a d i p i s c i n g e l i t . N a m c om m o d o l o b o r t i s m a g n a . Q u i s q u e n e q u e . E t i a m a l i q u a m . N u l l a t e mp o r v e s t i b u l u m . Je-li text na svém místě, oprávnění ke čtení výhrady bude mít pouze skupina f i 1 t e r :
# c h g r p f i l t e r d i s c l a i me r . txt # c hmod 640 d i s c l a i me r . txt Prostředí je vytvořeno a nyní je nutno zkonfigurovat Postfix:
Konfigurace Postfixu Aby mohl Postfix volat skript, který doplňuje ke zprávě výhradu , je třeba jej příslušně zkonfigurovat. Provedeme to ve dvou krocích: 1.
V souboru ma s t e r . c f definujeme parametr c o n t e n t_f i l t e r pro příslušného démona s m t p d .
2.
Ve stejném souboru definujeme přenos.
Definice parametru content_filter Jak jsme si řekli v kapitole 1 1 , nyní bychom měli do souboru m a i n . cf přidat parametr c o n t e n t_f i 1 t e r a zadat jméno přenosu . Tím by se ovšem parametr c o n t e n t_f i 1 t e r stal
'i'fi'il
J a k se používaj í externí fi ltry
globálním parametrem a vztahoval by se na veškeré procesy, které zpracovávají přícho zí poštu . V tomto příkladu však chceme zpracovávat pouze poštu odesílanou z rozhraní vnitřní sí tě, takže parametr c o n t e n t_f i 1 t e r musíme přiřadit pouze k tomuto jedinému procesu. Adresa vnitřního rozhraní v následujícím příkladu je 1 7 2 . 16 . O . 1 :
i net n 1 27 . 0 . 0 . 1 : smtp n i net 1 7 2 . 1 6 . 0 . 1 : smtp - o c o n t e n t f i l t e r=d i s c l a i me r : n i net 1 9 2 . 0 . 34 . 1 6 6 : smtp
n n
s m t p d ., smtpd 8
n
smtpd O
-
o Lokální proces smtpd. 8 Proces smtpd, který sleduje rozhraní vnitřní sítě . • Proces smtpd, který sleduje rozhraní vnější sítě.
Všimněme si, že filtrovací přenos se jmenuje d i s c l a i me r (výhrada); není to jméno skrip tu . To budeme definovat v další části.
Definice přenosu Nyní potřebujeme v souboru m a s t e r . cf definovat přenos jménem di s c l a i m e r . Vytvoří me proces p i p e , který spouští skript a d d _d i s e 1 a i m e r . s h . Postupovat budeme takto (sa motný skript jsme vytvořili shora v této kapitole):
d i s c l a i me r u n i x n n p i pe f l a g s= Rq u s e r=f i l t e r a r g v = / e t c / p o s t f i x / f i l t e r / a d d_d i s c l a i me r . s h - f $ { sende r l - - $ { rec i p i ent l Touto definicí spustí uživatel f i 1 t e r volá a d d_d i s c l a i me r . s h a předá mu pojí hlavička s adresou odesilatele netisknutelné a další speciální znaky vém řádku .
démona p i p e , který v okamžiku přijetí zprávy za odesilatele a příjemce obálky. Příznakem R se při jako zpáteční adresou a příznakem q se uvodí v argumentech $ s e n d e r a $ r e c i p i e n t na příkazo
POZNÁMKA Seznam příznaků a voleb je uveden v m anu ál ových strá n kách pi pe(8) .
Testování filtru Postup při testování filtru si probereme v následujících odstavcích; lze je shrnout do tří bodů : 1.
Z rozhraní interní sítě pošleme zprávu vzdálenému uživateli.
2.
Přečteme si záznam v žurnálním souboru.
3.
Ověříme, zda odeslaná zpráva obsahuje výhradu .
Odeslání zprávy vzdálenému uživateli Zprávu, kterou Postfix předá filtru, vygenerujeme pomocí telnetu, kterým se napojíme na rozhraní vnitřní sítě (zprávu předá paralelní proces s m t pd). Sezení může vypadat napří klad takto:
1 47
Kapitola 1 2
1 48
$ tel net 1 72 . 16 . 0 . 1 25 T ry i n g 1 7 2 . 1 6 . 0 . 1 . . . Connected to 1 72 . 1 6 . 0 . 1 . E s c a pe c h a ra c t e r i s ' A J ' . 2 2 0 ma i l . e x a m p l e . c o m E S M T P P o s t f i x H E L O c l i e n t . e x a mp l e . c om 2 5 0 m a i 1 . e x a m p l e . c om MA I L F ROM : < s e n d e r@ex a mp l e . c om> 250 O k R C P T TO : < r e c i p i e n t@remot e - e x a m p l e . c om> 250 O k DATA 354 End d a t a wi t h < C R > < L F > . < C R> < L F> F ROM : S e n d e r < s e n d e r@ex a mp l e . com> TO : Re c i p i e n t < r e c i p i e n t@remo t e - e x a m p l e . com> S u b j e c t : Te s t i n g d i s c l a i me r T h i s i s a t e s t . T h e r e s h o u l d b e text a t t h e b o t t o m o f t h i s m e s s a g e a d d e d by a d i s c l a i me r s c r i pt . 2 5 0 O k : q u e ued a s 3C4D04 3 F 2 F QU n 2 2 1 By e
ttení žurnálu v žurnálu bychom měli nalézt důkaz o průběhu filtrování, viz následující příklad:
M a r 1 2 0 1 : 5 9 : 5 3 m a i l p o s t f i x / s m t p d [ 3 0 2 0 6 J : c o n n e c t f r om c l i e n t . e x a m p l e . c om [ 1 7 2 . 1 6 . 0 . 2 J M a r 1 2 0 2 : 0 0 : 2 1 ma i l p o s t f i x / s m t p d [ 3 0 2 0 6 J : 3 C 4 D 0 4 3 F 2 F : c l i e n t= c l i e n t . e x a m p l e . c om [ 1 7 2 . 1 6 . 0 . 2 J M a r 1 2 0 2 : 0 1 : 53 ma i l p o s t f i x / c l e a n u p [ 30 2 09 J : 3C4D043 F2 F : me s s a g e - i d=< 2 0 0 4 0 3 1 2 0 1 0 0 2 1 . 3 C 4 D 0 4 3 F 2 F@m a i l . e x a m p l e . c om> M a r 12 0 2 : 0 1 : 5 3 ma i l p o s t f i x / n q mg r [ 3 0 1 9 3 J : 3 C 4 D 0 4 3 F 2 F : f r om=< s e n d e r@e x a mp l e . c o m > . s i z e=444 . n r c p t = l ( q u e u e a c t i v e ) M a r 1 2 0 2 : 0 1 : 5 3 ma i l p o s t f i x / p i p e [ 3 0 2 1 3 J : 3 C 4 D 0 4 3 F 2 F : t o= < r e c i p i e n t@remo t e - e x a mp l e _ c o m > . r e l a y =d i s c l a i me r , d e l ay=9 2 . s t a t u s =s e n t ( m a i l . e x a m p l e . c o m ) O M a r 1 2 0 2 : 0 1 : 5 3 m a i l p o s t f i x (p i c k u p [ 3 0 1 9 2 J : 8 4 2 1 1 4 3 F 2 F : u i d= 1 0 0 f r om=< s e n d e r@e x a m p l e . c o m > � Ma r 1 2 0 2 : 0 1 : 53 ma i l p o s t f i x / c l e a n u p [ 30 2 09 J : 842 1 1 4 3 F2 F : me s s a g e - i d=< 2 0 0 4 0 3 1 2 0 1 0 0 2 1 . 3 C 4 D 0 4 3 F 2 F@ma i l . e x a m p l e . c om > M a r 1 2 0 2 : 0 1 : 5 3 m a i l p o s t f i x / n q mg r [ 3 0 1 9 3 J : 84 2 1 1 4 3 F 2 F : f r om=< s e n d e r@e x a mp l e . c o m > . s i z e=9 7 7 . n r c p t = l ( q u e u e a c t i v e ) M a r 1 2 0 2 : 0 1 : 5 5 m a i l p o s t f i x / s m t p d [ 3 0 2 0 6 J : d i s c o n n e c t f r om c l i e n t . e x a m p l e . c om [ 1 7 2 . 1 6 . 0 . 2 J M a r 1 2 0 2 : 0 2 : 0 3 ma i l p o s t f i x / s mt p [ 3 0 2 2 0 J : 84 2 1 1 4 3 F 2 F : t o= < r e c i p i e n t@ r e mo t e e x a m p l e . c o m > . r e l ay=m a i l . r e m o t e - e x a m p l e . c om [ 2 1 2 . 1 4 . 9 2 . 8 9 J . d e l a y = 1 0 . s t a t u s = s e n t ( 2 5 0 O k : q u e u e d a s 5 6 8 5 1 E 1 C 6 5 ) ., o Démon p i pe využívá k posílání zprávy skriptu přenos d i s c 1 a i me r . • Skript vrátí zprávu s původní adresou odesilatele obálky. 8 Démon s m t p úspěšně doručí zprávu příjemci obálky.
J a k se používaj í externí fi ltry
14-fiMt'
Ověření výhrady ve zprávě Testování ukončíme (zcela logicky) tím, že si ověříme, zda zpráva skutečně obsahuje hlavičku typu X a výhradu , kterou měl do odchozí zprávy přidat program alterMIME. Mů žeme se o tom přesvědčit v následujícím příkladu :
Re t u r n - P a t h : < s e n d e r@e x a m p l e . c om> X - O r i g i n a l - T o : r e c i p i e n t@ r e m o t e - e x a m p l e . c om O e l i v e r e d - T o : r e c i p i e n t@ r e m o t e - e x a m p l e . c o m R e c e i v e d : f r om ma i l . e x a m p l e . c o m ( m a i l . e x a m p l e . c o m [ 1 9 2 . 0 . 3 4 . 1 6 6 ] ) by m a i l . r e m o t e - e x a mp l e . c o m ( P o s t f i x ) w i t h E S M T P i d 5 6 8 5 1 E 1 C 6 5 f o r < r e c i p i e n t@ r e mo t e - e x a m p l e . c om> : F r i . 1 2 M a r 2 0 0 4 0 2 : 0 1 : 2 5 +0 1 0 0 ( C E T ) R e c e i v e d : by m a i l . e x a m p l e . c o m ( P o s t f i x . f r om u s e r i d 1 0 0 ) i d 8 4 2 1 1 4 3 F 2 F : F r i . 1 2 M a r 2 0 0 4 0 2 : 0 1 : 5 3 +0 1 0 0 ( C E T ) R e c e i v e d : f r om c l i e n t . e x a m p l e . c o m ( c l i e n t . e x a mp l e . c o m [ 1 7 2 . 1 6 . 0 . 2 ] ) by ma i 1 . e x a m p 1 e . c om+ ( P o s t f i x ) w i t h S M T P i d 3 C 4 0 0 4 3 F 2 F f o r < r e c i p i e n t@ r e m o t e - e x a m p l e . c om > : F r i . 1 2 M a r 2 0 04+02 : 0 0 : 2 1 +0 1 0 0 ( C E T ) F r om : S e n d e r < s e n d e r@e x a m p l e . c o m > T o : Re c i p i e n t < r e c i p i e n t@remo t e - e x a m p l e . c om> Subj ect : Te s t i n g d i s c l a i me r M e s s a g e - I d : < 2 0 0 4 0 3 1 2 0 1 0 0 2 1 . 3 C 4 0 0 4 3 F 2 F@m a i 1 . e x a m p 1 e . c om > O a t e : F r i . 1 2 M a r 2 0 0 4 0 2 : 0 0 : 2 1 +0 1 0 0 ( C E T l X - C o py r i g h t e d - M a t e r i a l : P l e a s e v i s i t h t t p : / / www . e x a m p l e . c o m / me s s a g e_d i s c l a i m e r . h t m l T h i s i s a t e s t . T h e r e s h o u l d b e t e x t a t t h e b o t t o m o f t h i s me s s a g e a d d e d b y a d i s c l a i me r s c r i p t . L o r em i p s u m d o l o r s i t a m e t . c o n s e c t e t u e r a d i p i s c i n g e l i t . N a m c o m m o d o l o b o r t i s m a g n a . Q u i s q u e n e q u e . E t i a m a l i q u a m . N u l l a t e mp o r v e s t i b u l u m .
Vyhledávání virů pomocí filtru content_filter a systému amavisd-new V této části si popíšeme pokročilé využití filtru c o n t e n t_f i 1 t e r popsaného v kapitole 1 1 řekneme si, jak lze integrovat oblíbený antivirový systém amavisd-new (amavis je zkratka slov A Mail Virus Scanner) do Postfixu . Tento systém v sobě spojuje přenoso vého agenta s jedním nebo více virovými skenery a vyhledávači spamů, mimo jiné na příklad SpamAssassin. Neustále se vyvíjí a doporučuje jej řada správců pošty, kteří ve svých systémech využívají Postfix.
-
POZNÁMKA Systém je funkční pouze tehdy, má me-I i kromě a mavisd-new v našem systém u ještě je den a ntivi rový skener; přeh led těchto prod uktů najdete v dokumentaci. N a obrázku 1 2 .2 je znázorněna spolupráce Postfixu a amavisd-new s ostatními aplikace mi jako detektor spamů a antivirový program. Zde je algoritmus toku zprávy: 1.
Poštovní klient pošle zprávu Postfixu .
2.
smtpd zprávu přijme.
3.
smtpd pošle zprávu qmgr.
4.
qmgr pošle zprávu programu amavisd-new.
1 49
Kapitola 1 2
1 50 5 . amavisd-new pošle zprávu jiným aplikacím (v tomto případě antiviru). 6. amavisd-new vrátí zprávu lokálnímu smtpd.
7. LokáhÍJ smtpd pošle zprávu qmgr. 8. qmgr zprávu buď vrátí nebo doručí. Poštovní klient
Server
Postfix smt pd S c o n t e n Cf i l t e r
qmg r
l o ká l n í s m t p d bez c o n t e n t- f l l t e r
amavi sd-new
• Antispam
Antivir 1
Antivi r 2
Obrázek 1 2-2 Integ race prog ramu amavisd-new do Postfixu pomocí fi ltru
content-fi lter
I nstalace p rogramu amavisd-new Program amavisd-new si můžeme stáhnout z některých zrcadel uvedených na stránkách amavisd-new ( h t t p : / / www . i j s . s i / s o f twa r e l a m a v i s d l . Při instalaci je třeba po rozbale ní archivu postupovat podle pokynů uvedených v souboru INSTALL . Rovněž doporučujeme přečíst si soubor README.postflx ( h t t p : / / www . i j s . s i / s o f twa · r e l a ma v i s d / R E A DM E . p o s t f i x l , kde mohou být aktuální informace vztahující se k Postft.xu.
Stačí vytvořit amavisd-new pouze jako postfixového démona. Pomocné a p l i kace ama vis(.c) a a mavisd-fi lter(.c) apod. nejsou pro i ntegraci do Postfixu nezbytné.
J a k se používaj í extern í fi ltry
'a-fiNt'
Instalace modulů Perl z (PAN pro amavisd-new Ke správné činnosti potřebuje amavisd-new několik modulů z Perlu . Jejich úplný seznam je uveden v souboru INSTALL document v adresáři SOURCE programu amavisd-new. Při instalaci těchto modulů si většinou můžeme vybrat mezi moduly, které poskytuje autor distribuce operačního systému , a moduly staženými přímo z CPAN C Comprehensive Perl A rchive Network na h t t p : / / www . c p a n . o r g ) .
POZNÁMKA Obecně jsou strá n ky (PAN zdrojem nej a ktuálnějších mod u l ů, naopak moduly dodáva né s operačn ím systémem jsou zaručeně konzistentn í. Moduly jako např. C omp r e s s : : Z l i b z archivu CPAN se instalují pomocí Perlu, CPAN se zadává jako parametr - viz následující příklad: 1/ p e r l
- M C PA N - e s h e l l ; c p a n s h e l l - - C PA N e x p l o r a t i o n a n d mo d u l e s i n s t a l l a t i o n ( v 1 . 7 6 ) Read L i n e s u pport en a b l ed c p a n > i n s t a l l Comp r e s s : : Z l i b R u n n i n g i n s t a l l f o r mo d u l e C o m p r e s s : : Z l i b R u n n i n g m a k e f o r P / P M / P MQ S / C o m p r e s s - Z l i b - 1 . 3 3 . t a r . g z Fetch i n g wi th LWP : ft p : / / ft p - s t u d . fh t - e s s l i n g e n . d e / p u b / M i r r o r s / C PA N / a u t h o r s / i d / P / PM/ PMQ S / Comp r e s s - Z l i b - 1 . 3 3 . t a r . g z C PAN : D i g e s t : : MD5 l oaded o k F e t c h i n g w i t h LW P : f t p : / / f t p - s t u d . f h t - e s s l i n g e n . d e / p u b / M i r r o r s / C PA N / a u t h o r s / i d / P / P M / P MQ S / CHECKSUMS C h e c k s u m f o r / r o o t / . c p a n / s o u r c e s / a u t h o r s / i d / P / P M / P M Q S / C omp r e s s - Z l i b 1 . 33 . ta r . gz ok Scann i ng cache / root/ . cpa n / bu i l d for s i zes Comp r e s s - Z l i b - 1 . 3 3 / . . . l ots of bui l d i ng output . . . Al l t e s t s succes s f u l . 1 test s k i pped . 0 . 84 C P U ) F i l e s �6 . T e s t s � 2 8 7 . 2 wa l l c l o c k s e c s ( 0 . 7 3 c u s r + 0 . 1 1 c s y s / u s r / b i n /make test - - OK Runn i ng make i n s ta l l I n s t a l l i n g / u s r / l i b / p e r 1 5 / s i t e_p e r l / 5 . 6 . 0 / i 3 8 6 - l i n u x / a u t o / C omp r e s s / Z l i b / Zl i b . so Fi l es found i n bl i b/ a rch : i n stal l i ng fi l es in bl i b/ l i b i nto a rc h i tecture d e p e n d e n t l i b r a ry t r e e I n s t a l l i n g / u s r / l i b / p e r 1 5 / s i t e_p e r l / 5 . 6 . 0 / i 3 8 6 - l i n u x / C o m p r e s s / Z l i b . pm I n s t a l l i n g / u s r / m a n / m a n 3 / C o m p r e s s : : Z l i b . 3 pm W r i t i n g / u s r / l i b / p e r 1 5 / s i t e_p e r l / 5 . 6 . 0 / i 386 - l i n u x / a u t o / C o m p r e s s / Z l i b / . p a c k l i s t A p p e n d i n g i n s t a l l a t i o n i n f o t o / u s r / l i b / p e r 1 5 / s i t e_p e r l / 5 . 6 . 0 / i 3 86 - l i n u x / perl l oca 1 . pod OK / u s r / b i n /make i n sta l l Poté, c o umístíme moduly n a příslušné místo a nainstalujeme amavisd-new, můžeme vše otestovat.
Testování amavisd-new Samotný program amavisd-new nenapojený na Postfix můžeme provést takto:
1 51
Ka p ito l a
1 52
12
1.
Spustíme amavisd-new v režimu ladění, abychom se přesvědčili, že se spouští správně.
2.
Provedeme síťový test, abychom zjistili, zda amavisd-new sleduje příslušný síťový port.
Spultění aÍ11 a visd-new V režimu ladění Když spustíme amavisd-new v režimu ladění, ihned dostaneme odpovědi na následující otázky: •
•
• •
• •
•
Běží? Musí být nainstalovány všechny potřebné moduly Perlu . Když některý z nich chybí, vypíše se příslušné chybové hlášení. Můžeme jej spustit jako neprivilegovaný uživatel? Pro program amavisd-new je třeba vytvořit novou skupinu (implicitně v s c a n) a uživatelský účet (implicitně také v s c a n). Našel volitelné moduly Perlu s dalšími funkcemi, např. SpamAssassin, LDAP a SQL? Používá správnou instalaci Perlu? Máme-li nainstalovanou více než jednu verzi Perlu, mohou v té, kterou používáme, některé moduly chybět. Nalezl pomocné programy, např. antiviry? Jaký konfigurační soubor používá? Normálně to bývá / e t c / a ma v i s d . c o n f , můžeme jej však změnit. Využívá porty, které jsou uvedeny v konfiguračním souboru?
Při prvním spuštění je vhodné spustit amavisd v interaktivním režimu z terminálu. Pro vedeme to tak, že se přihlásíme jako uživatel v s c a n a spustíme amavisd-new s volbou d e b u g , viz příslušný výpis: ff s u - v s c a n $ / u s r / l o c a l / s b i n / a ma v i s d d e b u g
J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : a ma v i s d - n ew - 2 0 0 3 0 6 1 6 - p 6 J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 8 8 ] : J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : J a n 2 8 l l : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i 5 d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 8 8 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 8 8 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 8 8 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i 1 a ma v i s d [ 2 9 1 88 ] : J a n 2 8 l l : 1 0 : 4 3 ma i 1 a ma v i s d [ 2 9 1 88 ] : J a n 2 8 l l : 1 0 : 4 3 ma i 1 a ma v i s d [ 2 9 1 8 8 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i 1 a m a v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : J a n 2 8 l l : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : J a n 2 8 l l : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : - c / e t c / a ma v i s d . c o n f J a n 2 8 1 1 : 1 0 : 4 3 ma i 1 a ma v i s d [ 2 9 1 88 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 8 8 ] : J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] :
s t a r t i n g . a ma v i s d a t ma i l Perl v e rs i on 5 . 006 O l . 15 M o d u l e Ama v i s : : C o n f Mod u l e A r c h i v e : : Ta r l . 08 M od u l e A r c h i v e : : Z i p l . 09 M od u l e C om p r e s s : : Z l i b l . 33 0 . 17 Mod u l e C o n v e r t : : TN E F Mod u l e C o n v e r t : : U U 1 i b l.0 M od u l e M I M E : : E n t i ty 5 . 404 Mod u l e M I M E : : Pa rs e r 5 . 406 Mod u l e M I M E : : To o 1 5 5 . 41 1 Mod u l e Ma i 1 : : H e a d e r l . 60 M od u l e M a i 1 : : I n t e r n e t l . 60 M od u l e M a i l : : S p a mA s s a s s i n 2 . 6 3 M o d u l e N e t : : C md 2 . 24 Mod u l e N e t : : DN S 0 . 40 Modu l e Net : : SMTP 2 . 26 Mod u l e Net : : Se r v e r 0 . 86 M o d u l e T i me : : H i Re s l . 55 M o d u l e U n i x : : SY 5 1 0 g 0 . 99 F o u n d my s e 1 f : / u s r / s b i n / a ma v i s d L o o k u p : : SQ L c o d e Looku p : : LDAP code AM C L - i n p r o t o c o 1 c o d e
NOT 1 0aded 8 NOT 1 0aded 1 0aded
J a k se používaj í exter n í fi ltry
l o a d ed J a n 28 1 1 : 1 0 : 4 3 m a i l a m a v i s d [ 2 9 1 88 ] : S M T P - i n p r o t o c o l c o d e l oa d e d J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : A N T l - V I RU S c o d e l oaded � J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : A N T l - S PAM c o d e J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : N e t : : S e r v e r : 2 0 0 4 / 0 1 / 2 8 - 1 1 : 1 0 : 4 3 Ama v i s ( ty p e \ N e t : : S e r v e r : : P r e F o r k S i m p l e ) s t a r t i n g ! p i d ( 2 9 1 88 ) J a n 28 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N e t : : S e r v e r : B i n d i n g t o U N I X s o c k e t f i l e I v a r / a ma v i s / a ma v i s d . s o c k u s i n g S O C K_ S T R E A M J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 8 8 ] : N e t : : S e r v e r : B i n d i n g t o T C P p o r t 1 0 0 2 4 on host 1 27 . 0 . 0 . 1 J a n 28 1 1 : 1 0 : 4 3 m a i l a m a v i s d [ 2 9 1 88 ] : N e t : : S e r v e r : Set t i ng g i d to " 54 3 2 2 543 2 2 " J a n 28 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N e t : : S e r v e r : S e t t i n g u i d t o " 7 5 0 9 " J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : N e t : : S e r v e r : S e t t i n g u p s e r i a l i z a t i o n v i a f 1 0c k J a n 2 8 1 1 : 1 0 : 4 3 ma i 1 a ma v i s d [ 2 9 1 88 ] : F o u n d H i 1 e at lusr/bi n/fi l e J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : F o u n d $ a r c at lusr/bi n / a rc J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 8 8 ] : F o u n d $ g z i p at lusr/bi n/gzi p J a n 2 8 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 8 8 ] : F o u n d $ b z i p a t l u s r / b i n / b z i p2 J a n 28 1 1 : 1 0 : 43 ma i l ama v i s d [ 29 18 8 ] : Found $ l zop a t l u s r / l oca l / bi n / l zop J a n 2 8 1 1 : 1 0 : 4 3 m a i l a m a v i s d [ 2 9 1 88 ] : F o u n d $ l h a at /usr/bi n/ 1 ha J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : F o u n d $ u n a r j a t l u s r / b i n / u n a rj J a n 2 8 1 1 : 1 0 : 4 3 m a i l · a ma v i s d [ 2 9 1 8 8 ] : F o u n d $ u n c omp r e s s a t l u s r / b i n / u n c omp r e s s J a n 2 8 1 1 : 1 0 : 4 3 m a i 1 a ma v i s d [ 2 9 1 8 8 ] : F o u n d $ u n f r e e z e a t l u s r / l oca l / b i n / un f reeze J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 8 8 ] : F o u n d $ u n r a r at lusr/bi n/rar J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 8 8 ] : F o u n d $ z o o a t l u s r / b i n / zoo J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : F o u n d $ c p i o at Ibi n/cpi o e J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : Ka s p e r s ky L a b A n t i V i r a l Tool k i t P r o ( AV P ) J a n 28 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : Ka s p e r s ky L a b AVPDa emonC l i en t J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : H+BEDV Anti V i r or \ C e n t r a l C omma n d V e x i r a An t i v i r u s J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : C omma n d An t i V i r u s f o r L i n u x J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : Syma n t e c C a r r i e r S c a n v i a Syma n t e c C omma n d L i n e S c a n n e r J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : Syma n t e c Anti V i rus Scan Engi ne J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 8 8 ] : N o p r i ma ry a v s c a n n e r : D r . W e b Anti v i rus for Li nux/ FreeBSD/ Sol a ri s J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : F - Secure Ant i v i rus J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 8 8 ] : N o p r i ma ry a v s c a n n e r : C A l l n o c u l a t e I T J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : M k S V i r f o r L i n u x ( be t a ) J a n 28 1 1 : 1 0 : 4 3 m a i 1 a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : M k S_V i r d a e m o n J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : E S E T S o ftwa r e N O D 3 2 J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : E S E T S o f t w a re N O D 3 2 - C l i e n t / S e r v e r V e r s i o n J a n 28 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : N o p r i m a ry a v s c a n n e r : N o rm a n V i r u s Control v5 1 Li nux J a n 2 8 1 1 : 1 0 : 4 3 m a i l a m a v i s d [ 2 9 1 88 ] : N o p r i ma ry a v s c a n n e r : P a n d a A n t i v i r u s for Li nux J a n 2 8 1 1 : 1 0 : 4 3 ma i l a ma v i s d [ 2 9 1 88 ] : F o u n d p r i ma ry a v s c a n n e r N A I M c A f e e Anti V i rus ( uvscan ) at l u s r / l oca l / b i n / uvsca n �
1 53
K a p itola
1 54 J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 8 8 ] : J a n 28 1 1 : 1 0 : 4 3 m a i 1 a ma v i s d [ 2 9 1 88 ] : J a n 28 1 1 : 1 0 : 4 3 m a i 1 a ma v i s d [ 2 9 1 88 J : An t i V i r u s f o r L i n u x J a n 2 8 1 1 : 1 0 : 4 3 m a i l a m a v i s d [ 2 9 1 88 ] : J a n 28 1 1 : 1 0 : 4 3 ma i l a m a v i s d [ 2 9 1 88 ] : An t i v i r u s - c l a m s c a n J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : F - P r o t An t i v i r u s J a n 28 1 1 : 1 0 : 43 ma i l ama v i s d [ 2 9 1 8 8 ] : Fi l eScanner J a n 2 8 1 1 : 1 0 : 4 3 m a i l a ma v i s d [ 2 9 1 88 ] : M a i l : : S p a mA s s a s s i n 0
12
N o p r i m a ry a v s c a n n e r : V i r u s B u s t e r N o p r i m a ry a v s c a n n e r : Cy b e r S o f t V F i n d N o p r i ma ry a v s c a n n e r : I k a r u s N o p r i ma ry a v s c a n n e r : B i t D e f e n d e r N o s e c o n d a ry a v s c a n n e r : C l a m N o s e c o n d a ry a v s c a n n e r : F R I S K N o s e c o n d a ry a v s c a n n e r : T r e n d M i c r o SpamCont ro l : i n i t i a l i z i ng
o Zde je uvedena verze Perlu . 49 Na tomto a následujícím řádku je uvedeno, že součástí jsou i kódy SQL nebo LDAP .
.. Indikace antispamového kódu ; pouze v případě SpamAssassin nebo dspam . ., Na tomto a předchozím řádku je uvedeno, že se našly různé externí kompresní pro gramy, což znamená, že amavisd-new může provést dekomprese příslušných příloh. O Indikace antiviru McAfee. o UkončenÍ.
Ověření konektivity Ještě v průběhu samostatné činnosti programu amavisd-new bychom měli zjistit, zda lze navázat spojení, a to nejlépe prostřednictvím sezení telnet v alternativách ESMPT i LMTP.
Test konektivity ESMTP Prostřednictvím telnetu navážeme spojení na lokálním portu 1 0024 (pro amavisd-new implicitnO. Ověříme, zda sleduje tento port a odpovídá na příkazy ESMTP . Na příkaz EHLO by měl amavisd-new odpovědět seznamem dostupných příkazů, viz následující příklad:
# t e l n e t l o c a l h o s t 1 0 0 24 2 2 0 [ 1 2 7 . 0 . 0 . 1 ] E S M T P a ma v i s d - n ew s e r v i c e r e a dy E H LO ma i l . ex a m p l e . com 250 - [ 1 27 . 0 . 0 . 1 ] 250 - P I PE L l N I NG 2 5 0 - S I Z E 2 5 0 - 8 B I TM I M E 2 5 0 E N H A N C E D S T AT U S C O D E S QUIT 2 2 1 2 . 0 . 0 [ 1 2 7 . 0 . 0 . 1 J ( a ma v i s d l c l o s i n g t r a n s m i s s i o n c h a n n e l
Test konektivity LMTP Dále musíme ověřit, zda amavisd-new sleduje lokální port 1 0024 (implicitní i pro LMTP) a odpovídá na příkazy LMTP. Můžeme k tomu použít příkaz LHLO, viz následující pří klad:
# tel net l oc a l h o s t 10024 2 2 0 [ 1 2 7 . 0 . 0 . 1 ] E SM T P a m a v i s d - n e w s e r v i c e r e a dy
J a k se používaj í externí fi ltry
'B-hMM
L H LO ma i l e x a m p l e com .
.
250 - [ 1 27 . 0 . 0 . 1 ] 250 - P I P E L l N I NG 2 50 - S I Z E 2 50 - 8B I TM I ME 2 5 0 E N H A N C E DSTAT U S C O D E S
QUn 221
2.0.0
[ 1 27 . 0 . 0 . 1 ]
( a ma v i s d ) c l o s i n g t r a n s m i s s i o n c h a n n e l
Optimalizace programu amavisd-new Máme-li v našem systému zpracovávat velké objemy pošty, může nás zajímat výkonnost programu amavisd-new. Příprava testovacích zpráv by značně zatížila náš souborový systém; raději počítejme s tím, že výkonnost programu amavisd-new přímo závisí na rychlosti a době odezvy diskových přenosů . Významným přínosem k optimalizaci je používání RAM disků . Postup popsaný v následujícím textu se vztahuje k dočasnému souborovému systému (tmpfs) v operačním systému Linux.
Je program bezpečný? Je velice důležité přesvědčit se, zda se v průběhu filtrování vinou nesprávně provedené integrace amavisd-new do Postfixu neztrácejí zprávy. Podívejme se, co se v průběhu filt rování se zprávami děje: 1.
Když Postfix obdrží novou zprávu, prostřednictvím svého správce front požádá kli enta (SMTP nebo LMTP) o její doručení; klient předá zprávu programu amavisd-new.
2.
Program amavisd-new začne zprávu zpracovávat (vyhledává viry, spamy apod.), avšak příjem zprávy prozatím nepotvrdí.
3.
V průběhu čekání na potvrzení přijetí zprávy od amavisd-new má Postfix zprávu ve frontě .
4. Jakmile amavisd-new zpracování ukončí, zprávu vrátí do postfixové fronty. 5.
Toto vrácení provede démon s m t p d .
6. Jakmile amavisd-new obdrží o d démona s m t p d potvrzení, ž e zprávu vrátil, oznámí úspěšný přenos zprávy původnímu postfixovému klientovi (1 m t p nebo s m t p), který zase oznámí správci fronty úspěšné doručení zprávy. Jak vidíme, amavisd-new oznámí předsazenému filtru, že dostal zprávu, až poté, co ji zpracuje a vrátí následnému filtru s m t p d . V průběhu zpracování programem amavisd -new se tedy žádná zpráva nemůže ztratit.
Výpočet kapacity tmpfs Chceme-li si spočítat velikost systému souborů tmpfs, musíme vyjít z následující úvahy: Poběží-li n procesů amavisd-new současně a objem zpracovávaných zpráv každého z nich bude omezen parametrem message_size_limit, budeme potřebovat prostor o ve likosti:
n *
(1
+ m a x i m u m_e x p e c t ed_ex p a n s i o n f a c t o r ) * me s s a g e_s i z e_l i m i t *
7/8
Hodnota proměnné e x p a n s i o n f a c t o r se těžko odhaduje, neměla by však být větší než 2 (komprimovaná zpráva - v našem případě soubory ·. zip nebo ·.rar - může mít po roz-
1 55
1 56
';'MiU'
Kapitola 1 2
balení dvojnásobnou velikost) . Máme-li například pět paralelních procesů amavisd-new a délka zpráv je omezena na 10 MB, velikost souborového systému tmpfs nám vychází:
' 5 * ( 1 + 2 ) * 1 0 MB * 7 / 8 = 1 3 1 . 2 5 M B
POZNÁMKA M usíme se přesvědčit, zda máme pro tm pfs dostatek fyzické paměti; j i n a k se bude jej í obsa h odkládat na d i s k a výkon bude ještě n i žší, než kdybychom používa l i normá l n í souborový systém .
Postup při konfiguraci Rozhodneme-li se pro použití tmpfs, postup při konfiguraci bude následující: 1.
Zjistíme, kde je uložen parametr $ T E M P B A S E .
2.
Vytvoříme souborový systém tmpfs.
3.
Zrušíme proces amavisd-new.
4.
Připojíme souborový systém tmpfs.
5.
Spustíme amavisd-new.
6.
Přesvědčíme se, zda proces běží.
Nejprve musíme najít, kde je definován parametr $ T E M P B A S E , neboť jej potřebujeme k při pojení souborového systému tmpfs, který jsme vytvořili. Implicitní hodnota parametru $ T E M P B A S E je $MYHOME, který je implicitně nastaven na I v a r / a ma v i s . V konfiguračním souboru jej můžeme nalézt například pomocí příkazu g r e p . V následujícím příkladu je nastaven na hodnotu $MYHOME:
# g rep T EMPBASE l e t c / a ma v i sd . c o n f $ T EMPBASE = $MYHOM E ; # ( mu s j s e n a s t a v i t , p o k u d j ej p o u ž j v a j j j i n é # p r omě n n é v c o n f i g ) $ E N V { TM P D I R I = $ T E M P B A S E ; # t o j e r o z u mn é , n i k o l i v š a k n u t n é " - f= $ T E M P B A S E { I " . [ 0 . 8 ] . [ 3 . 4 , 5 . 6 ] . q r / i n f e c t e d : ( [ ' \ r \ n ] + ) 1 ] . # n a s t a v e n j I v a r / a m a v i s , a by s e n a l e z l o $ T E M P B A S E . # v a d r es á ř i $TEMPBASE s e speci f i kuj e ) v s e k c i ' Names= ' . Abychom našli $ M Y H O M E , spustíme další hledání pomocí g r e p . V následujícím příkladu je definice $ M Y H O M E označena jako komentář, takže se použije implicitní hodnota .
# g r e p MY H O M E l e t c / a ma v i s d . c o n f # $ M Y H O M E s e r v e s a s a q u i c k d e f a u l t f o r s ome o t h e r c o n f i g u r a t i o n s e t t i n g s . # $ M Y H O M E i s n o t u s e d d i r e c t l y by t h e p r o g r a m . N o t r a i l i n g s l a s h ! # $ M Y H O M E = ' / v a r / l i b / a ma v i s ' ; # ( i mp l i c i t n ě ' / v a r / a m a v i s ' ) $ T E M P B A S E = $ M Y H OM E ; # ( mu s j s e n a s t a v i t , p o k u d j ej p o u ž j v a j j # j i n é p r omě n n é v c o n f i g ) # $ T E M P B A S E = " $ M Y H O M E / t mp " ; # d á me p ř e d n o s t I v a r / a m a v i s c l e a n # $ h e l p e r s_ h o m e = $ M Y H O M E ; # ( i mp l i c i t n ě $ M Y H O M E ) # $ d a e m o n_c h r o o t_d i r = $ M Y H OM E ; # ( i m p l i c i t n ě u n d e f , a by se neproved l o c h r o o t ) # $ p i d_f i l e " $ M Y H O M E / a ma v i s d . p i d " ; # ( i mp l i c i t n ě " $ M Y H OM E / a ma v i s d . p i d " ) # $ l o c k_ f i l e = " $ M Y H O M E / a ma v i s d . l o c k " ; # ( i mp l i c i t n ě " $ M Y H O M E / a m a v i s d . l o c k " )
'4-fiiit'
J a k se používaj í externí fi ltry
" b s m t p : S M Y H O M E / o u t - l i - % n . b s mt p " ; " S MYHOM E / a ma v i sd . s o c k " ; # pomocný p r o t o k o l s o c ket # ( o b vy k l e s e n a s t a v u j e n a SMYHOME / a ma v i s d . s oc k l # S L O G F I L E - " S M Y H O M E / a m a v i s . l o g " ; # ( i mp l i c i t n ě p r a z d ný , b e z p � i h l a š e n j 1 " I } - s s - i ' * ' - l og-SMY HOM E / v b u s t e r . l og " , [ O J . [ l J
# S f o rw a r d_me t h o d S u n i x s o c k e t n a me
.
Nyní musíme v souboru / e t c / f s t a b vytvořit položku tmpfs o velikosti vypočtené dle po stupu shora ("Výpočet kapacity tmpfs"). V následujícím příkladu se použije velikost 1 50 MB a přístup se omezí na uživatele a skupinu . V tomto případě je ID uživatele 7509 a GID je 54322, což v souborech / e t c / p a s swd a / e t c / g r o u p odpovídá uživateli a sku pině vscan ; uvědomme si však, že ve skutečnosti budou tyto hodnoty jiné a je třeba je vyhledat.
/ d e v / s hm / v a r / a ma v i s tmp f s d e f a u l t s , s i z e-1 5 0m , m o d e-7 0 0 , u i d-7 5 0 9 , g i d- 5 4 3 2 2 O O Než připojíme /var/amavis, je nutno ukončit proces amavisd-new, například takto:
# / e t c / i n i t . d / a ma v i s d - n ew s t o p Dále připojíme systém /var/amavis (tento souborový systém jsme právě definovali v / e t c / f s t a b) :
# m o u n t / v a r / a ma v i s A znovu odstartujeme amavisd-new:
# / e t c / i n i t . d / a ma v i s d - n ew s t a r t V žurnálním souboru na výstupu příkazu d f - h zkontrolujeme, zda je vše v pořádku . Hodnota proměnné / v a r / a m a v i s v následujícím příkladu je 1 00 MB, přičemž využitých je pouze 76 KB :
# df - h / v a r / a ma v i s F i l esys tem /dev / s hm
Si ze 1 0 0M
Used 76k
Ava i 1 U s e l II 99M
Mounted o n / v a r / a ma v i s
POZNÁMKA Prog ra m amavisd-new někdy u kládá nepotřebné soubory do ad resá ře $TE M PBAS E a je vhodné je každý den mazat. M usíme prog ram amavisd-new zastavit, soubory vymazat a poté jej znovu spustit. Tuto každodenní činnost lze provádět například tímto skrip tem : #! /bi n/bash / e t c / i n i t . d / a ma v i s d s t o p rm - R f / v a r / a m a v i s / a m a v i s ' 2 0 0 * / e t c / i n i t . d / a ma v i s d s t a rt
Konfigurace Postfixu pro použití s programem amavisd-new Až sem jsme předpokládali, že Postfix a amavisd-new pracují na sobě nezávisle. Potře bujeme zkonfigurovat Postfix tak, aby mohl posílat zprávy programu amavisd-new a vy-
1 57
Kapito l a 1 2
1 58
tvořit proces s m t p d , který by tyto zprávy vracel. Postup při integraci programu amavisd -new do Postfixu bude následující: 1.
Vytvoříme přenos.
2 . Přenos zkonfigurujeme . 3.
Zkonfigurujeme návratovou cestu .
POZNÁMKA Vzh l edem k tomu, že přefi ltrova ná zpráva se musí vrátit do systém u postfixových front tak, a by se znovu neproh l ížela, m usí existovat para l e l n í proces s m t pd, který nepoužívá contenCfi lter. Pouze tak se při vracen í zprávy do Postfixu nevytvoří nekonečný cyk l us. Port 25 je už obsazen, ta kže para l e l n í s m t p d musí sledovat některý nesta ndard n í port. M ůže jím být na příklad port 1 0025 na loká l n ím systému, jako v tomto příkladu. Pro gram a mavisd-new také potřebuje ke své č i n nosti port. I m p l icitně j ím m ůže být port 1 0024 na loká l n ím systém u .
Vytvoření přenosu pomocí filtru contenCfilter v souboru main.d Pověříme-li filtrováním zpráv v závislosti na jejich obsahu externí program, musíme nej dříve definovat vlastní přenos, kterým se mu zpráva bude předávat. V Postfixu se k to mu používá parametr c o n t e n t_f i l t e r v souboru m a i n . c f . Zapisuje se ve tvaru
transportname: nextbopport. V příkladu, kterým se právě zabýváme, běží amavisd-new na stejném počítači jako Post fix, takže je dostupný na portu 1 0024 na lokálním systému ( 1 27.0.0 . 1 ) . Postfix napojíme na amavisd-new pomocí parametru c o n t e n t_f i 1 t e r :
c o n t e n t_f i l t e r = a m a v i s d - n ew : [ 1 2 7 . 0 . 0 . 1 J : I 0 0 2 4
Provozování amavisd-new n a jiném počítači Máme-li dojem, že filtrování příliš zatěžuje počítač, můžeme provozovat program ama visd-new na jiném počítači (nebo jiných počítačích). V části n e x t h o p parametru tran sportname: nextbopport můžeme uvést jiný počítač. V následuj ícím příkladu nahradíme tuto část jménem v s c a n n e r s . e x a m p l e . c om :
c o n t e n t_f i l t e r = a m a v i s d - n ew : v s c a n n e r s . e x a m p l e . c o m : l 0 0 2 4 Uvedené jméno představuje jednu z následujících možností: •
Jeden počítač (záznam typu A)
•
Několik počítačů (uzavřený cyklus záznamů typu A)
•
Několik počítačů (jeden nebo několik počítačů s různými prioritami záznamů MX)
Definice přenosu v souboru master.d Dále potřebujeme definovat démona, který se spojí s programem amavisd-new, a defi novat i jeho prostředí. Vzpomeňme si, že jde o démony s m t p , 1 m t p nebo p i p e . V této kapitole jsme se už zmínili o démonu p i p e , nyní se podíváme na zbývající dva.
J a k se používaj í externí fi ltry
1 59
Definice přenosu ESMTP Chceme-li posílat zprávy programu amavisd-new podle protokolu ESMTP, do souboru ma s t e r . c f musíme přidat tyto položky:
#������������������������������������������������������������������������� p r i vate unpri v c h root wakeup maxproc c omma n d # s e r v i ce t y p e (yes ) (yes ) ( yes ) ( never ) ( 1 00 ) # #������������������������������������������������������������������������� ama v i s d - new un i x - o s m t p_d a t a _d o n e_t i me o u t� 1 2 0 0 s - o d i s a b l e_d n s_l o o k u p s �y e s
n
2
smtp
K těmto položkám je nutno doplnit několik poznámek: •
•
•
•
Speciální přenos a ma v i s d - n e w je kopie normálního přenosu s m t p . Jméno musí sou hlasit se jménem přenosu v parametru c o n t e n t_f i 1 t e r definovaném v souboru m a i n . cf. Program amavisd-new je velmi náročný na prostředky. Nemáme-li velmi rychlý po čítač, mohou běžet nejvýše dva procesy amavisd-new současně. Prvním ze dvou parametrů , jimiž se mění funkce tohoto démona, je s m t p_d a t a_d o n e_t i m e o u t . Zpracování příchozí zprávy může programu amavisd-new trvat poměr ně dlouho, po odeslání zprávy démonem smtp je proto vhodné zvýšit časový limit, aby nedocházelo k jeho vypršení. Pokud pracujeme pouze s lokálními jmény, můžeme pomocí parametru d i s a b l e_d n s_l o o k u p s zrušit pro klienta s m t p vyhledávací službu DNS.
POZNÁMKA Přenos SMTP n e ní bezpod m ínečně n utný, neboť jej m ůže zaj istit i m p l icitn í démon s m t p . N icméně z d ůvod u výkon u ( a také z d ůvod u d louhého časového l i m itu) má smysl defi novat přenos pouze pro a mavisd-new.
Definice přenosu LMTP Pokud se rozhodneme, že pro přenos zpráv programu amavisd-new budeme místo pro tokolu SMTP používat protokol LMTP, musíme do souboru m a s t e r . cf doplnit tyto po ložky:
#������������������������������������������������������������������������� # s e rv i ce type p r i vate unpri v ch root wakeup maxproc c omma n d # (yes ) (yes ) ( yes ) ( neve r ) ( 1 00 ) #�������������������������������������������=����������=���������=�������� a ma v i s d - n ew u n i x - o l mt p_d a t a _d o n e_t i m e o u t� 1 2 0 0 s - o d i s a b l e_d n s_l o o k u p s�y e s
n
2
1 mtp
Konfigurace návratové cesty Nakonec musíme pro amavisd-new vytvořit návratovou cestu, jejímž prostřednictvím bu de vracet zprávy do postfixových front. Je důležité, aby byla jiná než přenos do amavisd new. V opačném případě hrozí nebezpečí nekonečného cyklu, kdy Postfix odešle zprávu
K a p itola
1 60
12
do amavisd-new, ta se vrátí na stejné místo do postfixových front a Postfix ji znovu poš le amavisd-new. Návratová cesta, která se míjí se všemi předchozími přenosy definovanými pomocí con tencfilter, se zadává v souboru master.cf a může vypadat například takto: #========================================================================= p r i v a t e u n p r i v c h r o o t wa k e u p ma x p r o c c omma n d # s e r v i ce t y p e (yes ) (yes ) (yes ) ( neve r ) ( 1 00 ) # #========================================================================= n 1 27 . 0 . 0 . 1 : 10025 i net n - o c o n t e n t_f i l t e r= - o l o c a l _ r e c i p i e n t_m a p s = - o r e l a y_ r e c i p i e n t_ma p s = - o s m t pd_r e s t r i c t i on_c l a s s e s = - o s m t pd_c l i e n t_ r e s t r i c t i o n s = - o s m t pd_h e l o_ r e s t r i c t i o n s = - o smt pd_s e n d e r_r e s t r i c t i o n s = - o s m t p d _ r e c i p i e n t_ r e s t r i c t i o n s = p e r m i t_my n e t wo r k s . r e j e c t - o my n e t wo r k s = 1 2 7 . 0 . 0 . 0 / 8 - o s t r i c t_ r f c 8 2 1 _e n v e l o p e s =y e s
smtpd
Ze všech voleb v předchozím příkladu j e zcela zásadní prázdný řetězec u parametru c o n t e n t_f i 1 t e r , kterým se vymaže jeho obsah . Zbývajícími volbami se přepíší další para metry v souboru ma i n . c f včetně té, kterou se zruší omezení, jež nemají žádný význam při sledování síťového rozhraní na lokální síti. Po aktualizaci všech nastavení můžeme filtr otestovat. Aktualizace se provede znovuza vedením Postfixu.
Testování filtru amavisd-new Abychom mohli otestovat součinnost Postfixu s programem amavisd-new, musíme nej dříve vyzkoušet, zda je Postfix tomuto programu schopen poslat zprávu a zda ji amavisd -new umí vrátit. Budeme postupovat podle následujících bodů : 1.
Přesvědčíme se, zda Postfix sleduje návratovou cestu .
2.
Pošleme Postfixu zprávu.
3.
Vyzkoušíme, zda antivirový program detekuje testovací vzorek.
Kontrola návratové cesty Když jsme změnili soubor ma s t e r . c f , provedeme aktualizaci nastavení Postfixu a ověří me si v žurnálním souboru , zda se neohlásila nějaká chyba. Poté se přesvědčíme, zda démon s m t p d sleduje port 1 0025 na lokálním počítači - viz následující sezení:
$ tel net 1 27 _ 0 . 0 . 1 10025 2 2 0 ma i l . e x a m p l e . c o m E S M T P P o s t f i x E H LO 1 2 7 . 0 . 0 . 1 2 5 0 - ma i l . e x a mp l e . c o m 250 - P I PE L l N I NG 250 - S I Z E 1 0240000 2 5 0 - V R FY 250 - ETRN
J a k se používaj í exter n í fi ltry
2 5 0 - STARTT L S 2 5 0 - A U T H L O G I N P LA I N 0 I G E S T - M D 5 C RAM - M D 5 250 - X V E RP 250 8B I T M I M E QU I T 2 2 1 Bye
Zaslání testovací zprávy Postfixu Neinfikovanou zprávu by měl Postfix nechat projít systémem. Pošleme zprávu z příka zového řádku a v žurnálním souboru budeme sledovat, jak probíhá její zpracování v Postfixu a v amavisd-new. Můžeme to provést například následujícím příkazem, v němž pošleme soubor main.cf na adresu [email protected]:
# s e ndma i l - f s e n d e r@exampl e . com r e c i p i ent@exampl e . c om < l e t c / p o s t f i x / ma i n . c f Poté nahlédneme do žurnálního souboru. Na konci by mělo být zaznamenáno sezení, které bude začínat přibližně takto (Postfix přiřadí zprávě ID, podle něhož můžeme zprá vu sledovat): J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / p i c k u p [ 1 0 0 9 6 J : 2 7 88 0 2 9 A B 2 9 : u i d=O f r om=< s e n d e r@e x a m p l e . c om > J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / c l e a n u p [ 1 0 6 5 2 J : 2 7 88 0 2 9 A B 2 9 : me s s a g e - i d=< 2 0 04 0 1 3 1 0 9 4 5 0 8 . 2 7 8 8 0 2 9 A B 2 9@ma i l . e x a m p l e . c om > V následujících výpisech bychom měli vidět, jak Postfix předá zprávu programu amavisd-new ke zpracování (v žurnálu se bohužel nezaznamenává ani číslo portu, ani jméno přenosu): J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / q mg r [ 1 0 0 9 7 J : 2 7 88 0 2 9 A B 2 9 : f r om=< s e n d e r@e x a mp l e . c om > . s i z e= 1 2 7 1 . n r c p t = l ( q u e u e a c t i v e ) J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / s m t p [ 1 0 6 6 0 J : 2 7 88 0 2 9 A B 2 9 : t o= < r e c i p i e n t@ex a m p l e . c om > . r e l ay =l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J . d e l ay=O . s t a t u s = s e n t ( 2 5 0 2 . 6 . 0 O k . i d= 2 5 8 0 9 - 0 4 . f r om MTA : 2 5 0 O k : q u e u e d a s 3 7 7 D8 2 9 A B 2 A ) Nyní amavisd-new zprávu prohlédne a zaznamená do žurnálu, že ji nechává projít: J a n 3 1 1 0 : 4 5 : 08 ma i l a ma v i s [ 2 5809 J : ( 2 5 8 0 9 - 04 ) P a s s ed . < s e n d e r@ex a mp l e . c om > - > < r e c i p i e n t@ex a m p l e . c o m > . M e s s a g e - I D : < 2 0 0 4 0 1 3 1 0 9 4 5 0 8 . 2 7 880 2 9 A B 2 9@m a i l . e x a m p l e . c o m > . H i t s : Poté se zpráva vrátí z amavisd-new do fronty v Postfixu. Všimněme si, že druhý démon s m p t d rovněž zaznamená ID zprávy do žurnálu: J a n 31 1 0 : 4 5 : 0 8 ma i l p o s t f i x / s m t pd [ 1 0 6 5 8 J : c o n n e c t f r om l oc a l host [ 1 2 7 . 0 . 0 . 1 J J a n 3 1 1 0 : 4 5 : 08 ma i l p o s t f i x / s m t p d [ 1 0 6 5 8 J : 3 7 7 D8 2 9 A B 2 A : c l i e n t= l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / c l e a n u p [ 1 0 6 5 2 J : 3 7 7 D8 2 9 A B 2 A : me s s a g e - i d=< 2 0 0 4 0 1 3 1 0 9 4 5 08 . 2 7 880 2 9 A B 2 9@ma i l . e x a m p l e . c om > J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / q mg r [ 1 0 0 9 7 J : 3 7 7 D8 2 9 A B 2 A : f r om=< s e n d e r@e x a m p l e . c om > . s i z e= 1 7 2 3 . n r c p t = l ( q u e u e a c t i v e ) J a n 3 1 1 0 : 4 5 : 0 8 ma i l p o s t f i x / s m t p d [ 1 0 6 5 8 J : d i s c o n n e c t f r om l oc a l h o s t [ 1 2 7 . 0 . 0 . 1 J
1 61
Kapitol a 1 2
1 62
Nakonec Postfix předá zprávu k doručení jinému počítači (anebo ji může doručit lokál ně, je-Ii server konečným místem určenO: J a n 31 1 0 : 4 5 : 08 ma i l p o s t f i x / s mt p [ 1 0 6 5 5 J : 3 7 7 D8 2 9 A B 2 A : t o = < r e c i p i e n t@e x a mp l e . c o m > . r e l ay= r e l a y h o s t [ 1 0 . 0 . 0 . l J . d e l ay=O . s t a t u s = s e n t ( 2 5 0 O K i d= l Am r g Y - 0 0 0 7 3 g - 0 0 l
Kontrola testovacího vzorku viru Posledním testem bude simulace infikované zprávy. K tomu účelu si můžeme opatřit tes tovací vzorek viru EICAR ( h t t p : / / www . e i c a r . o r g l a poslat jej Postfixu . Tento vzorek by měly rozpoznat všechny antivirové programy, pokud jej nemají explicitně zablokovaný. Následujícím příkazem bychom například poslali virus uživateli [email protected]:
# s e n d ma i l - f s e n d e r@ex a mp l e . com r e c i p i e n t@ex a m p l e . c om < e i c a r . com Zápisy v žurnálním souboru jsou stejné a ž d o místa, kde amavisd-new začne zprávu zkoumat: F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / p i c k u p [ 3 0 0 5 1 J : 1 3 B 9 E 2 9 A B 2 9 : u i d=O f r om=< s e n d e r@e x a mp l e . c o m > F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / c l e a n u p [ 3 0 7 4 1 J : 1 3 B 9 E 2 9 A B 2 9 : me s s a g e - i d=< 2 0 0 4 0 2 0 6 1 4 4 8 5 4 . 1 3 B 9 E 2 9 A B 2 9@m a i l . e x a m p l e . c om > F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / q mg r [ 1 9 2 9 5 J : 1 3 B 9 E 2 9 A B 2 9 : f r om=< s e n d e r@e x a m p l e . c om > . s i z e=3 4 7 . n r c p t = l ( q u e u e a c t i v e l F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / s mt p [ 3 0 7 4 4 J : 1 3 B 9 E 2 9 A B 2 9 : t o = < r e c i p i e n t@e x a mp l e . c om > . r e l ay =l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J . d e l ay=O . s t a t u s = s e n t ( 2 5 0 2 . 5 . 0 O k . i d= 1 0 2 1 7 - 0 7 . B O U N C E l F e b 6 1 5 : 4 8 : 5 4 ma i l a m a v i s [ 1 0 2 1 7 J : ( 1 0 2 1 7 - 0 7 l I N F E C T E D ( E i c a r - T e s t S i g n a t u r e l . < s e n d e r@e x a mp l e . c om > - > < r e c i p i e n t@e x a m p l e . c o m > . q u a r a n t i n e v i r u s - 20040206 - 1 54854 - 1 0 2 1 7 - 07 . Mes s a ge - I D : < 2 0 0 4 0 2 0 6 1 4 4 8 5 4 . 1 3 B 9 E 2 9 A B 2 9@m a i 1 e x a m p 1 e . c om > . H i t s : .
Když amavisd-new zjistí, že zpráva obsahuje virus, ohlásí to na adresu v i r u s a 1 e r t@e x a m p l e . c om a zprávu vrátí odesilateli : F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / s m t p d [ 3 0 7 4 7 J : c o n n e c t f r om l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / s m t p d [ 3 0 7 4 7 J : 6 3 9 A 7 2 9 A B 2 A : c l i ent=l oca l host [ 1 2 7 . 0 . 0 . 1 J F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / c l e a n u p [ 3 0 7 4 1 J : 6 3 9 A 7 2 9 A B 2 A : me s s a g e - i d=< V A 1 0 2 1 7 - 0 7@m a i l > F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / q mg r [ 1 9 2 9 5 J : 6 3 9 A 7 2 9 A B 2 A : f r om= < > . s i z e= 1 4 6 3 . n rcpt=l ( q ueue a c t i v e l F e b 6 1 5 : 4 8 : 5 4ma i l p o s t f i x / l o c a l [ 3 0 7 4 9 J : 6 3 9 A 7 2 9 A B 2 A : to= . r e l ay =l o c a l . d e l ay=O . s t a t u s = s e n t ( f o rwa r d e d a s 8 4 8 4 8 2 9 A B 2 C l F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / s m t p d [ 3 0 7 4 7 J : d i s c o n n e c t f r om l oc a l host [ 1 27 . 0 . 0 . 1 J F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / s m t p d [ 3 0 7 4 7 J : c o n n e c t f r om l oc a l host [ 1 27 . 0 . 0 . 1 J F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / s m t p d [ 3 0 7 4 7 J : 7 A 2 F D 2 9 A B 2 B : c l i ent=l oca l host [ 1 2 7 . 0 . 0 . 1 J F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / c l e a n u p [ 3 0 7 4 1 J : 7 A 2 F D 2 9 A B 2 B : m e s s a g e i d= < V S 1 0 2 1 7 - 0 7@ma i l >
'4-fi'"
J a k se používaj í externí fi ltry
F e b 6 1 5 : 4 8 : 5 4 ma i l p o s t f i x / q mg r [ 1 9 2 9 5 J : 7 A 2 F D 2 9 A B 2 B : f r om=< > . s i z e= 2 5 5 4 . n r c p t = l ( queue acti v e l F e b 6 1 5 : 4 8 : 5 5 m a i l p o s t f i x / s mt p [ 3 0 7 4 4 J : 7 A 2 F D 2 9 A B 2 B : t o= < s e n d e r@e x a m p l e . c o m > . r e l a y = r e l a y h o s t [ 1 0 . 0 . 0 . l J . d e l a y = l . s t a t u s = s e n t ( 2 5 0 O K i d= l A p 7 H o - 0 0 0 1 4 I - 0 0 l Vrácení zprávy odesilateli není příliš vhodným řešením, neboť odesilatel je v zavirova ných zprávách téměř vždy falešný, nicméně tak je bohužel amavisd-new nastaven im plicitně.
Vyhledávání virů pomocí amavisd-new a proxy-filtru Metoda zkoumání zpráv před zařazením do front, která se v Postfixu nabízí jako jedna z alternativ, je zcela nová. Tento typ filtru se nazývá s m t pd_p r o xy_f i 1 t e r a lze jej pou žívat ve spojení s programem amavisd-new. Na obrázku 1 2 . 3 je znázorněná integrace programu amavisd-new do Postfixu .
Poštovní klient
Server
Postfix smtpd S s m t p d_p r o x y -f i 1 t e r
s m t p d bez s m t p d_p r o xy -f i l t e r
qmg r
amavi sd-new
• Antispam
+ Antivi r 1
Antivi r 2
Obrázek 1 2-3 I nteg race a mavisd-new do Postfixu pomocí p roxy-fi ltru smtpd
1 63
Kapitola 1 2
1 64 Postup při zpracování zprávy pomocí filtru s m t pd_p r o xy-f i 1 t e r : 1.
Poštovní klient pošle zprávu postfixovému démonovi s m t p d .
2.
Démón s m t p d ( s aktivovaným filtrem s m t pd_p r o xy-f i 1 t e r) předá zprávu programu amavisd-new. Všimněme si odlišného postupu ve srovnání s filtrem c o n t e n t_f i 1 t e r , kde žádost o předání zprávy programu amavisd-new předává klientům 1 m t p , resp. s m t p správce fronty.
3.
Program amavisd-new předá zprávu jiným aplikacím (v tomto příkladu dvěma anti virovým programům).
4.
Program amavisd-new sdělí démonovi s m t p d , zda zprávu přijal nebo odmítl. Když ji přijme, vrátí ji paralelnímu démonovi s m t p d , zatímco když ji odmítne, další postup závisí na konkrétní konfiguraci poštovního systému .
5.
Původní démon s m t p d sleduje odpověď programu amavisd-new a zprávu od klienta buď přijme nebo ji odmítne.
POZNÁMKA Fi ltr s m t pd_p r oxy-f i 1 t e r je démon s m t p d rozdělený do dvou částí: • •
Jedna část prohlíží příchozí zprávu pomocí filtru . Druhá část manipuluje se zprávou ve frontách.
V této části si ukážeme, jak se konfiguruje amavisd-new s filtrem s m t pd_p r o xy-f i 1 t e r dle postupu popsaného v kapitole 1 1 . Musí se provést následující kroky: 1.
Nainstalujeme amavisd-new (viz "Instalace amavisd-new" v této kapitole).
2.
Program amavisd-new otestujeme (viz podkapitola "Testování amavisd-new").
3.
Zkonfigurujeme Postfix tak, aby spolupracoval s amavisd-new.
4.
Konfiguraci otestujeme.
Konfigurace Postfixu s amavisd-new a filtrem smtpd_proxy3i1ter Nejdříve musíme definovat přenos, kterým se zprávy budou předávat filtrovacímu pro gramu . K tomu je třeba: 1 . Modifikovat stávající přenos s m t p d ve prospěch amavisd-new. 2.
Vytvořit paralelní proces, který bude zprávu vracet do Postfixu mimo všechny glo bální parametry s m t pd_p r o xy-f i 1 t e r .
3.
Otestovat konfiguraci (viz předchozí část).
Modifikace stávajícího smtpd na proxy Aby démon s m t p d předával zprávy programu amavisd-new, k stávající službě s m t p v sou boru m a s t e r . cf přidáme parametr s m t p d_p r o xy-f i 1 t e r . V následujícím příkladu posílá démon s m t p d zprávy na port 1 0024 na lokálním počítači (což je implicitní nastavení ama visd-new): # # s e rv i ce type # #
=========================================================================
pri vate ( yes )
unpri v (yes )
c h r o o t wa k e u p ( yes ) ( never )
ma x p r o c ( 1 00 )
c omma n d
'a-a"i
J a k se používaj í extern í fi ltry
n n smtpi net - o s m t pd_p r oxy_f i l t e r� 1 0 c a l h o s t : 1 0 0 2 4 - o s m t pd_c l i e n t_c o n n e c t i on_c o u n t_l i m i t� 1 0
20
smtpd
Volbou - o s m t p d_c l i e n t_c o n n e c t i o n_c o u n t_l i m i t � l o s e snižuje maximální počet pro cesů SMTP stanovený ve sloupci m a x p r o c na 20. Tak vysoký počet je zbytečný, přichá zí-li veškerá pošta z důvěryhodných systémů. Na rozdíl od shora popsané procedury filtrování pomocí c o n t e n t_ f i 1 t e r se v souboru ma i n . c f nedefinuje globální parametr, takže není nutné jej přepisovat při vracení zprá vy do postfixového systému front.
Vytvoření paralelního procesu smtpd pro vracení zpráv do postfixových front Aby se zpráva vracela do fronty prostřednictvím s m t p d , který nezajišťuje přenos do ama visd-new, musíme do souboru m a s t e r . c f přidat paralelní proces s m t p d . V tomto příkla du se tento paralelní proces vytvoří v lokálním systému na portu 1 0025: # ������������������������������������������������������������������������ p r i v a t e u n p r i v c h r o o t wa k e u p m a x p r o c c omma n d # s e rv i ce type # (yes ) ( yes ) (yes ) ( neve r ) ( 1 00 ) # ������������������������������������������������������������������������
n 1 2 7 . 0 . 0 . 1 : 1 0025 i net n - o s m t pd_a u t h o r i z e d_x f o r w a r d_h o s t s � 1 2 7 . 0 . 0 . 0 / 8 - o s m t pd_c l i e n t_ r e s t r i c t i o n s � - o s m t pd_h e l o_r e s t r i c t i o n s � - o s m t pd_s e n d e r_ r e s t r i c t i o n s � - o s m t pd_re c i p i e n t_ r e s t r i c t i o n s �p e r m i t_my n e t wo r k s . r e j e c t - o my n e two r k s � 1 2 7 . 0 . 0 . 0 / 8 - o r e c e i v e_o v e r r i d e_o p t i o n s � n o_u n k n own_r e c i p i e n t_c h e c k s
smtpd
Pomocí parametru - o s m t pd_a u t h o r i z e d_x f o rwa rd_h o s t s � 1 2 7 . 0 . 0 . 0 / 8 získá následný filtr s m t p d od předsazeného filtru s m t p d informace o vzdáleném klientovi SMTP. Kon krétně přijme následný filtr s m t p d příkazy X F O RW A R D odeslané ze systémů uvedených v s m t pd_a u t h o r i z e d_x f o rwa rd_h o s t s , což je velice užitečné pro ladění, neboť proces s m t p d bude používat IP adresu původního klienta, nikoli adresu lokálního systému . Ostatní parametry pouze snižují zatížení následného filtru s m t p d , neboť předsazený filtr s m t p d už tuto práci vykonal .
1 65
ČÁSTIII v
,
POKROCILE KONFIGURACE V této části knihy si ukážeme typické situace, v nichž Postfix přichází do styku s jinými aplikacemi, jako například SQL servery, Cyrus SASL, OpenSSL a OpenLDAP . Zde je pře hled kapitol:
Poštovní brány Pošta je předávána jménem poštovních serverů nebo jiných klientú . Ve většině pří padů probíhá předávání po Internetu , zatímco servery jsou bezpečně ukryty za fire wally. V kapitole 13 si ukážeme, jak můžeme jednoduchého zprostředkovatele poštovního provozu změnit na "inteligentní" počítač.
Poštovní server pro několik domén V kapitole 14 jsou popsány dva způsoby, kterými Postfix může zpracovávat poštu pro několik domén. Dále uvidíme, jak zkonfigurovat Postfix, aby místo hledání ve statických mapách využíval služby SQL serveru .
Co je autentizace S MTP Autentizace SMTP je systém pro autentizaci poštovních klientů před zahájením pře dávání zpráv. Autentizace v Postfixu je založena na softwaru Cyrus SASL. V kapitole 15 si ukážeme, jak máme tento systém zkonfigurovat, než jej začneme používat spo lečně s Postfixem .
Jak se provádí autentizace S MTP Pokračování předchozí kapitoly o autentizaci SMTP . V kapitole 1 6 popisujeme au tentizaci na straně klienta i serveru .
Co je bezpečnost transportní vrstvy Š ifrování komunikace v bezpečnostních přenosových vrstvách ( Transport Layer Se cu rity, TLS) mezi Postfixem a ostatními systémy. Postfixová implementace TLS vyu žívá OpenSSL, takže v kapitole 17 se zabýváme nejen popisem TLS , nýbrž i přípravou příslušných certifikátů .
1 68
'éfi'U'
Pokroč i l é konfi g u race
Jak se zajišťuje bezpečnost transportní vrstvy v kapitole 18 si ukážeme, jak má být nastaven postfixový server, aby nabídl šifrová
ní jiným systémům, a jak zajistit, aby je postfixový klient přijal . Také si popíšeme pře dávání uskutečněné na základě certifikátů .
Firemní poštovní server v kapitole 19 si vysvětlíme, jak má být zkonfigurován Postfix, aby uměl dotazovat
server LDAP . Současně pověříme lokálním doručováním MDA (doručovacího agen ta, message delivery agent) a zkonfigurujeme základní server Curier-lMAP . Na konci budeme mít k dispozici kompletní poštovní systém, který získává uživatelská data ze serveru OpenLDAP .
Provozování Postfixu v uzavřeném prostoru (chroot)
v kapitole 20 si řekneme něco o konfiguraci Postfixu v uzavřeném prostoru (v ko
řenovém adresáři, který je změněn příkazem c h r o o t) . Vysvětlíme si, proč musí něk teří démoni pracovat v uzavřeném prostoru a jak má být provozován Postfix v kombinaci se SASL.
KAPITOLA 1 3
POŠTOVN í BRÁNY Poštovní brána (nazývaná taktéž "inteligentní server") je server, který zajišťuje spojení mezi logicky oddělenými sítěmi. Obvykle plní úlohu koncového místa určení v záznamu DNS pro ostatní poštovní servery, které netuší, že jiné poštovní servery se nacházejí za poštovní bránou . V této kapitole si řekneme, jak vytvoříme poštovní bránu, a seznámí me se s charakteristikou skutečných inteligentních serverů . Firmy a poskytovatelé Internetu používají poštovní brány pro řízení příchozího a od chozího provozu SMTP. Nastavení je obvykle takové, že provoz probíhá přes port 25, což je jediný možný přístup k poštovní bráně, a také klienti ve vnitřní síti musí posílat odchozí poštu přes tento počítač. Úlohou firewallu je blokování portů a funkci poštov ní brány zajišťuje Postfix. Na obrázku 1 3 . 1 je znázorněn skupinový server, který zajišťuje předávání všech zpráv poštovní bráně a naopak. Poštovní server chrání skupinový server před útoky zvenčí, ne boť vnější klienti a servery jej nemohou přímo kontaktovat. lokál n í síť
G ro u pware
Internet
Poštov n í server
Dem i l itarizované pásmo Předává n í pošty
Poštov n í server
Obrázek 1 3. 1 Postfix zaj išťuje předávání pro skupi nový server
1 70
'4-hNU
Ka pito l a 1 3
F u n kcional itu poštovní brány m ůžeme rozšířit o další atri buty jako a ntivir nebo cent rá l n í fi ltr spa m ů . Tím chrán íme skupinový softwa re nejen před zlomysl ným spojen ím, nýbrž i před škod l ivým obsahem. Zaj išťujeme- I i předává n í jako sl užbu, v této kapitole si popíšeme, j a k vytvoříme jedno d uchou poštovní brá n u s podporou a utentizace SMTP (viz kapitola 1 6) a bezpečnosti tra nsportn í vrstvy (viz kapitola 1 8).
Základní nastavení Má-li Postfix na externím poštovním serveru zajišťovat předávání pošty určené pro do mény na jiném (vnitřním) serveru , je třeba provést základní nastavení poštovní brány. Postup může být následující: 1.
Nastavíme interní server tak, aby k předávání využíval poštovní hránu .
2.
Zadáme vnitřní domény, pro něž budeme zajišťovat předávání ( r e l a Ld oma i n s l .
3.
Zadáme počítač, pro nějž budeme zajišťovat předávání ( r e l a y h o s t ) .
4.
Definujeme, aby pošta pro příjemce byla předávána dovnitř ( r e l a L r e c i p i e n t_m a p s l .
Nastavení předávacích práv brány Nejdříve musíme našemu "skrytému" poštovnímu serveru povolit přenos na poštovní bránu, a to tak, že jeho IP adresu přidáme do seznamu serverů v parametru my n e t wo r k s . Je-li I P adresa interního poštovního serveru například 1 72 . 16. 1 . 1 , do souboru m a i n . c f poštovní brány přidáme řádek:
my n e two r k s
�
1 27 . 0 . 0 . 0/8 1 72 . 1 6 . 1 . 1 / 32
Přístup k předávání omezíme n a adresu lokálního počítače poštovní brány 0 27.0.0 . 1 ) a interní poštovní server ( v tomto příkladu l 72 . 1 6. 1 . 1), aby ostatní počítače v síti nemohly využívat bránu k předávání.
Nastavení předávací domény v bráně v dalším kroku sdělíme Postfixu, aby přijímal poštu z vnější sítě pro počítač ve vnitřní síti. V parametru r e l a Ld om a i n s je definován seznam domén, pro něž Postfix zajišťuje předávání, i když nemusí být cílovým místem určení. Když například chceme zajišťovat předávání pro doménu e x a m p 1 e . c o m , nastavení provedeme takto:
r e l a y_d oma i n s
�
examp l e . com
Nastavení interního poštovního počítače v bráně Nyní, když brána ví, že má přijímat poštu pro určitou doménu, je třeba jí sdělit, kam ji má předávat. K tomuto účelu musíme vytvořit mapu přenosu , která se může jmenovat řek něme / e t c / p o s t f i x / t r a n s p o r t . Když tedy například chceme předávat zprávy pro do ménu e x a m p l e . c o m na počítač ma i l . o f f i c e . e x a m p l e . c om, soubor může vypadat takto:
e x a m p l e . c om
s m t p : [ ma i l . o f f i c e . e x a m p l e . c o m J
'B-fjiUI
Poštovn í brány
s m t p je typ přenosu definovaný v souboru m a s t e r . c f . Hranaté závorky jsou zde důleži té z toho důvodu , aby Postfix nehledal m a i l . o f f i c e . e x a m p l e . c om podle záznamu typu MX, který pravděpodobně patří serveru samotnému , takže by se pokoušel doručit poš tu sám sobě a zprávy by se zacyklily. Nyní vytvoříme indexovaný soubor příkazem:
# p o s tm a p h a s h : / e t c / p o s t f i x / t r a n s p o r t A nakonec v souboru main.cf nastavíme parametr t r a n s p o rt_m a p s ( a znovu zavedeme Postfix):
t r a n s p o r t_m a p s
h a s h : / etc / postfi x / t ra n sport
Definování příjemců předávání C o dělá z brány "inteligentní server"? Normální brána přijímá všechny zprávy pro všech ny příjemce v příslušné doméně, a to včetně neplatných příjemců , kteří na vnitřním poš tovním serveru vůbec neexistují, a ihned je doručuje. Když uvážíme, kolik dnes po Internetu běhá spamů a zpráv, které se snaží uškodit, a ko lik je příjemců, kteří nemají důvod přijímat poštu zvenčí (např. sdílené složky, interní ro zesílací seznamy nebo i skuteční lidé), bude nám jasné, že s normální bránou, která přijímá úplně vše, mohou být potíže. Zejména proto, že bude předávat zprávy na nee xistující a neautorizované účty. Přijme-li tedy brána zprávu s neexistující adresou , musí odesilateli oznámit, že zprávu nelze doručit. Tím se ovšem po celém Internetu zaplní fronty s poštou zprávami od poš tovních démonů lidem, kteří je nikdy neodeslali, a zprávy odeslané skutečnými uživate li se mezi nimi ztratí. Nepřijme-li Postfix poštu , odpovědnost zůstává na klientovi. Je-li tímto klientem napa dené PC s operačním systémem Windows, nepošle žádné zpětné oznámení. Inteligentní server umí oddělit zrno od plev, neboť má na interním serveru k dispozici seznam právoplatných příjemců . Jsou definovaní parametrem r e l a L r e c i p i e n Lm a p s a j e třeba j e pravidelně aktualizovat. Máme-li například mapu I e t c / p o s t f i x l r e 1 a L r e · c i p i e n t s , v souboru main.cf by měl být řádek:
r e l ay_r e c i p i e n t_m a p s = h a s h : / e t c / p o s t f i x / r e l ay_re c i p i e n t s
UPOZORNĚNí J e-I i defi nová n tento para m etr, mapa musí obsa hovat seznam platných příjemců pře dává n í, j i n a k bude brána nekonzistentn í. Pokud seznam neexistuje, musíme mapu za blokovat příkazem r e l a L r e c i pi e n t_m a p s = . Řekneme-Ii Postfixu, kde má hledat mapu, musí takový seznam skutečně existovat. Jest liže zkonfigurujeme mapu jako v předchozím příkladu , musíme také vytvořit textový soubor jménem I e t c / p o s t f i x l re 1 a Lr e c i p i e n t s s platnými příjemci. Například násle dující soubor aktivuje předávání pro j o h n@ex a m p l e . c o m a 1 i n d a@e x a m p l e . c om:
j o h n@e x a mp l e . c om
OK
171
Kapitola 1 3
1 72 l i n d a@e x a m p l e . c o m
OK
Chceme-li naopak explicitně zablokovat doručování určitému příjemci, místo O K použi jeme kó d chyby a zprávu , např. 5 5 4 D e l i v e ry n o t p e r m i t t e d . Mapu podobně jako v ostatních případech převedeme n a indexovaný (databázový) typ souboru , který jsme definovali v parametru relay_recipiencmaps. Můžeme například za dat příkaz postmap hash:/etc/postfix/reIay_recipients.
POZNÁMKA Máme-I i pouze něko l i k uživate l ů, kteří se navíc obměňuj í jen občas, n e n í těžké vytvo řit jej ich seznam ručně. Spíše vša k budeme pracovat s ve l kým počtem uživate l ů, kteří se mění neustá le, a dokonce je a n i nemusíme všechny znát. Č ást nazva ná " Export platných příjemců z a ktivního ad resáře " v této kapitole je věnová na a utomatizaci tohoto proce su. Konkrétně je popsá no, jak získat seznam p latných příjemců z Exchange serveru 2003 fi rmy M icrosoft.
Pokročilé nastavení brány Pokročilá brána nejen přeposílá poštu ostatním serverům, nýbrž zajišťuje i ochranu pro ti lokálním útokům a automatizuje proces aktualizace seznamu platných příjemců v do méně, do níž předává poštu . V následujících částech si ukážeme několik způsobů , jak vylepšit služby poskytované poštovní bránou .
Zvýšení bezpečnosti Dosud jsme naší instalací Postfixu předávali zprávy s adresou examp 1 e . c o m na vnitřní ser ver ma i 1 o f f i c e . e x a m p 1 e . c om. Je-li to jediná činnost, kterou musí inteligentní počítač provádět (tj . když nedostává poštu pro své lokální uživatele), je možné zablokovat lo kální doručování, aby nebyl zranitelný infikovanými zprávami adresovanými lokálním uživatelům. .
Lokální doručování zablokujeme takto: 1.
Zablokujeme lokální místo určenÍ. Postfixu sdělíme, že není koncovou destinací tak, že parametru my d e s t i n a t i o n přiřadíme prázdnou hodnotu , viz:
my d e s t i n a t i o n 2.
�
Zablokujeme lokální příjemce. Parametru 1 o c a L r e c i p i e n Lm a p s v Postfixu přiřadí me prázdnou hodnotu, takže nebude moci vyhledávat lokální příjemce .
l o c a l _ r e c i p i e n t_ma p s 3.
�
Nastavíme adresu pro přeposlání zpráv adresovaných lokálním příjemcům. Tím, že jsme nastavili parametr l o c a l _ r e c i p i e n t_ma p s na prázdnou hodnotu , jsme zabloko vali všechny lokální příjemce. Brána ovšem musí zůstat konformní s protokolem RFC, takže pro případné pokusy o zneužití lokálních příjemců a také pro správce pošty musíme nastavit adresy, na něž budou takové zprávy z vnitřního serveru přeposílá ny.
';'*i'it'
Poštovn í brány
Vytvoříme cílovou mapu pro parametr v i r t u a l _a l i a s_ma p s U e t c / p o s t f i x / v i r t u a 1 ) a přidáme adresy pro přeposílání zpráv adresovaných uvedeným příjemcům. Ma pa může vypadat například takto:
p o s tma s t e r abuse
p o s t ma s t e r@e x a mp l e . c o m a b u s e@e x a mp l e . c o m
Nyní z tohoto souboru vytvoříme příkazem postmap hash:/etc/postfix/virtua1 in dexovanou mapu a odkaz na ni přidáme do souboru ma i n . c f :
v i r t u a l _a l i a s_ma p s
=
h a s h : /etc/postfi x / v i rtu a l
4 . Vytvoříme zprávu pro ohlášení chybného lokálního doručení. Když jsme zablokova li lokální doručování, musíme také oznámit klientům, kteří se pokusí poslat zprávu inteligentnímu serveru , že jsme zablokovali doručování lokálním příjemcům. Musíme pomocí parametru 1 o c a l _t r a n s p o r t definovat speciální lokální přenos, jímž se bu dou přenášet chybová hlášení. Příkazem na následujícím řádku pošleme všechny lo kální zprávy démonovi e r r o r , který zajistí příslušné chybové hlášení:
l o c a l _t r a n s p o r t 5.
=
e r r o r : l o c a l ma i l d e l i v e ry i s d i s a b l e d
Přesměrujeme odpovědi lokálním službám. Postfix nebude díky krokům, které jsme provedli v předchozích bodech, přijímat poštu pro jiné lokální uživatele než pro správce pošty a případné pokusy o zneužití. Nicméně některé lokální služby (např. c r o n ) využívají Postfix k zasílání stavových hlášení správcům a uživatelům a jako adresu odesilatele uvádějí jméno počítače. Mohou tak nastat potíže, neboť na tako vou zprávu nelze odpovědět. Abychom zamezili pokusům o posílání odpovědí těmto aplikacím, změníme hodno tu parametru my o r i g i n , jehož hodnota se přidává k doménové části internetové adresy. Jeho hodnotu nastavíme na doménu, která má poštovní server a schránky ne bo aliasy pro takové odesilatele. Když například tuto službu poskytuje interní poš tovní server, který je místem určení pro e x a m p 1 e . c om , můžeme zadat toto nastavení:
my o r i g i n 6.
=
e x a mp l e . c om
Nakonec zablokujeme lokálního doručovacího agenta. Sdělíme démonovi ma s t e r , aby nespouštěl lokálního doručovacího agenta - tím jej skutečně vypneme. Soubor ma s t e r . cf upravíme tak, že znakem # "zakomentujeme" řádek (vytvoříme z něho ko mentář) obsahující lokální službu , viz příklad:
# # s e rv i c e type # # smtp i net # 1 oca 1 un i x vi rtual unix l mtp un i x anvi l uni x
========================================================================
pri vate unpri v ( yes ) (yes )
c h root (yes )
n
n n n n n
n n
w a k e u p m a x p r o c c o mm a n d + a r g s ( neve r ) ( 1 00 ) smtpd 1 oca 1 v i rtua l l mt p anvi 1
Po opětovném zavedení už Postfix nebude přijímat zprávy pro lokální příjemce.
1 73
1 74
'a'hihl'
Kapitola 1 3
Spolupráce Postfixu a Exchange Serveru firmy Microsoft Exchange Server firmy Microsoft je nepochybně mocným skupinovým serverem, nicmé ně jeho 'úroveň bezpečnosti a stability není zase až tak žhavá . Řada správců pošty pro to posiluje jeho funkcionalitu o postfixovou poštovní bránu . V této části si probereme, jak v postfixové bráně vytvoříme seznam platných příjemců a jak lze tento proces zau tomatizovat. Nejjednodušší způsob spolupráce mezi Postfixem a Exchange Serverem nastavíme tak, že Posúix předává požadavky Exchange Serveru na základě protokolu LDAP (Lightwe ight Directory Access Protocol). Jakmile počítač zajišťující předávání obdrží zprávu, dotá že se Exchange Serveru , zda náleží platnému příjemci. Na druhé straně je třeba říci, že tento přístup obsahuje jistá rizika a omezení. Dále mohou tyto produkty spolupracovat tak, že Exchange Server předá seznam příjemců postfixovému serveru . Takový způsob je lepší z těchto hledisek:
Bezpečnost Bez ohledu na to, jaký balík provozujeme na vnitřním poštovním serveru , je nutno jej co nejlépe chránit před bezpečnostními hrozbami. Především musí být chráněný firewallem. Dalším pravidlem je, že může provozovat pouze činnosti, které má po voleny, žádné jiné. Mnohého správce systému nejdříve napadne, že Exchange Server by měl poskytovat Postfixu adresy platných příjemců na základě žádostí dle protokolu LDAP . K tomu je třeba na Exchange Serveru otevřít Postfixu port 389 (TCP/UDP), což je sice poměr ně jednoduché, avšak současně se tento port otevře interní síti LAN. Změna směru je bezpečnější způsob. Exchange Server předá Postfixu seznam plat ných příjemců pouze tehdy, když v něm dojde ke změně. Správce Exchange serve ru tak může učinit pomocí s c p nebo r s y n c , k čemuž nepotřebuje otevírat lokální síti porty v demilitarizovaném pásmu .
Výkon Dotazy LDAP jsou ve srovnání s postfixovými indexovými mapami výrazně pomalej ší. Se seznamem platných příjemců probíhá zpracování zpráv na inteligentním ser veru mnohem rychleji.
Stabilita Inteligentní server je určen k ochraně vnitřního poštovního serveru a bylo by kon traproduktivní, kdybychom museli při případném útoku poštovní server odstavit. To by se ovšem snadno mohlo stát, neboť spameři využívají slovníkové útoky k součas nému rozesílání zpráv mnoha příjemcům, což může mít za následek, že server, kte rý má být chráněn, bude zahlcen množstvím dotazů LDAP na platnost příjemců . To by mohlo natolik zpomalit (pokud ne rovnou vyřadit z činnosti) vyhledávání adres, že by se slovníkový útok stal útokem, který by mohl způsobit i odmítnutí služby. Má -Ii být něco odstaveno v důsledku útoku , nechť je to raději inteligentní počítač mimo síť než vnitřní poštovní server. V této části odešleme seznam platných příjemců z Exchange Serveru 2003 Postfixu za jišťujícímu předávání pomocí následujících kroků :
Poštovní brány 1.
Vyexportujeme seznam všech platných příjemců .
2.
Seznam zkopírujeme na počítač zajišťující předávání.
3.
Ze seznamu vyextrahujeme platné příjemce.
4.
Vytvoříme mapu příjemců předávání.
5.
Mapu příjemců předávání oindexujeme.
6. Postup zautomatizujeme .
Export platných příjemců z aktivního adresáře Aktivní adresář, v němž jsou uloženy platné adresy příjemců Exchange Serveru , jsou v produktech Microsoftu označeny příznakem p r o xyAd d r e s s e s . Proxy-adresy z aktivní ho adresáře můžeme vyexportovat pomocí příkazu c s v d e , což je nástroj Exchange Ser veru - nemusíme kvůli tomu psát vlastní skript. Kdybychom například chtěli vyexportovat proxy-adresy do souboru jménem C : \ e x p o r t \ e x a m p 1 e_c om_ r e c i pi e n t s . t x t , můžeme přímo v příkazovém okně zadat příkaz:
C : \ > c s v d e -m - n - g - f " C : \ e x p o r t \ ex a m p l e_c om_ r e c i p i e n t s . tx t " \ - r " ( I ( & ( obj e c t C l a s s- u s e r ) ( obj e c t C a t e g o ry-pe r s o n » \ ( o b j e c t C l a s s-g r o u p O f N a me s ) ( o b j e c t C l a s s-ms Exc h Dy n a m i c D i s t r i b u t i o n L i s t » " - 1 p r oxyAdd r e s s e s
Existuje tisíc různých způsobů, j a k m ůže být uspořádaný a ktivn í ad resá ř, takže n a l eze ní jmen, která se maj í exportovat, m ůže být dosti obtížné. Insta lace Exchange Serveru u m ožňuje n a i nsta lovat něko l i k pod pů rných nástroj ů včetně ed itovacího mod u l u ADS I . Když si jej přidáme k MMC ( M icrosoft Management Conso le) a z konzoly spustíme prog ram mmc.exe, získáme plný přístu p ke j m é n ů m těchto ob jektů v a ktivním ad resá ři. výstu p z předchozího příkazu obsa h uje m nohem víc i nformací, než kol i k j ich Postfix potřebuje. Výstupní soubor m ůže vypadat například takto: D N . p r oxyAd d r e s s e s " C N=Ad m i n i s t r a t o r . C N=U s e r s . DC=e x a mp l e . DC=c o m " . s m t p : a b u s e@e x a mp l e . c om ; S M T P : \ A d m i n i s t r a t o r@e x a mp l e . c om ; X 4 0 0 : c=D E \ ; a = \ ; p= E x a mp l e C o r p o r a t \ ; o= E x c h a n g e \ ; s=Admi n i s t r a t o r \ ; ; s m t p : p o s tm a s t e r@e x a mp l e . c o m " C N=G a s t . C N =U s e r s . DC=e x a mp l e . D C = c om " . " C N=S U P P O RT_3 889 4 5 a O . C N=U s e r s . DC=e x a mp l e . DC=c o m " . " C N= k r b t g t . C N=U s e r s . DC=e x a mp l e . D C = c om " . " C N= I U S R_MA I L . C N=U s e r s . DC=e x a mp l e . DC=c om " . " C N= I WAM_MA I L . C N =U s e r s . DC=e x a mp l e . DC=c om " . " C N=W i l m a P e b b l e . O U =p u r c h a s i n g . DC=e x a mp l e . DC=c om " . s m t p : w i l m a p e b b l e@e x a mp l e . c om ; s m t p : \ w i l ma@e x a mp l e . c om ; s m t p : w i l ma . p e b b l e@e x a m p l e . c o m ; S M T P : w . p e b b l e@e x a m p l e . c om ; s m t p : \ p e b b l e@e x a mp l e . c om ; X 4 0 0 : c=D E \ ; a= \ ; p= E x a m p l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = P e b b l e \ ; g=W i l m a \ ; " C N= B e t ty M c B r i c k e r . OU=p u r c h a s i n g . DC=e x a mp l e . DC=c om " . s m t p : mc b r i c k e r@e x a m p l e . c o m ; s m t p : \ b e t ty mc b r i c k e r@e x a mp l e . c om ; s m t p : b e t ty@e x a m p l e . c om ; s mt p : b e t ty . mc b r i c k e r@e x a mp l e . c o m ; \ S M T P : b . mc b r i c k e r@e x a mp l e . c om ; X 4 0 0 : c=D E \ ; a = \ ; p= E x a mp l e
1 75
Kapito l a
1 76
13
C o r p o r a t \ ; o= E x c h a n g e \ ; \ s=M c B r i c k e r \ ; g= B e t ty \ ; " C N= F r e d F l i n t s t o n e , O U = s a l e s , O C =e x a mp l e , OC=c o m " , s m t p : f r e d f l i n t s t o n e@e x a mp l e . c o m ; \ S MT P : f r e d . f l i n t s t o n e@e x a mp l e . c o m ; s m t p : t . f l i n t s t o n e@e x a mp l e . c om ; s m t p : f r e d@e x a mp l e . c om ; \ s m t p : f l i n t s t o n e@e x a m p l e . c om ; X 4 0 0 : c = O E \ ; a = \ ; p= E x a m p l e C o r p o r a t \ ; o= E x c h a n g e \ ; \ s = F l i n t s t o n e \ ; g= F r e d \ ; " C N=B a r n ey Ru b b l e , O U = s a l e s , OC=e x a mp l e , DC=c o m " , SM T P : b a r n ey . r u b b l e@e x a m p l e . c om ; \ s m t p : b a r n ey r u b b l e@e x a mp l e . c om ; s mt p : r u b b l e@e x a mp l e . c om ; s m t p : b a r n ey@e x a mp l e . c o m ; s m t p : \ b . r u b b l e@ex a mp l e . c o m ; X 4 0 0 : c= D E \ ; a = \ ; p= E x a mp l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = R u b b l e \ ; g= B a r n ey \ ; " C N= B a mm B a mm , O U = i t , DC=e x a mp l e , D C=c om " , s m t p : b a mm b a mm@e x a mp l e . c om ; s m t p : \ b a mm@e x a mp l e . c om ; s mt p : b a mm . b a mm@e x a mp l e . c om ; S M T P : b . b a mm@e x a mp l e . c om ; \ X 4 0 0 : c=D E \ ; a = \ ; p= E x a mp l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = B a m m \ ; g= B a mm \ ; " C N= Sy s t emMa i l b o x { C 5 C 3 E A F C - A3 2 F - 4 9 2 5 - 8 5 A 5 - 3 C 0 8 7 0 9 D E 6 1 7 } , C N=M i c r o s o f t E x c h a n g e Sy s t e m \ O b j e c t s , D C =e x a m p l e , D C = c om " , S MT P : Sy s t em M a i l b o x { C 5 C 3 E A F C A 3 2 F - 4 9 2 5 - 8 5 A 5 - 3 C 0 8 7 0 9 D E 6 1 7 1 \ @e x a m p l e . c om ; X 4 0 0 : c=D E \ ; a = \ ; p= E x a m p l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = Sy s t e m M a i l b o x ? \ C 5 C 3 E A F C - A3 2 F - 4 9 2 5 - 8 5 A 5 - 3 C \ ; " C N= i t - d e p a r t me n t , O U = i t , DC=e x a m p l e , DC=c o m " , S M T P : i t - d e p a r t m e n t@e x a mp l e . c om ; \ X 4 0 0 : c= D E \ ; a = \ ; p= E x a mp l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = i t - d e p a r tm e n t \ ; " C N=p u r c h a s i n g - d e p a r t m e n t , O U =p u r c h a s i n g , DC=e x a m p l e , D C = c om " , SM T P : p u r c h a s i n g d e p a r t me n t@e x a mp l e . c om ; \ X 4 0 0 : c=D E \ ; a = \ ; p= E x a mp l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = p u r c h a s i n g - d e p a r t m e n t \ ; " C N= s a l e s - d e p a r t m e n t , O U=s a l e s , D C =e x a m p l e , DC=c om " , S M T P : s a l e s d e p a r t me n t@e x a m p l e . c om ; \ X 4 0 0 : c=D E \ ; a = \ ; p= E x a mp l e C o r p o r a t \ ; o= E x c h a n g e \ ; s = s a l e s - d e p a r t m e n t \ ; Platnými příjemci jsou hodnoty označené jako smtp (aliasy) a SMTP (primární adresy). Hodnoty přiřazené k smtp a SMTP musíme vyextrahovat, abychom si mohli vytvořit se znam pro postfixový inteligentní server. Můžeme to případně udělat i pomocí skriptu na inteligentním serveru , nyní nám však stačí, že je seznam tam, kde má být.
Odeslání seznamu příjemců na poštovní polítal Existuje mnoho způsobů, jak můžeme zkopírovat soubor z Exchange Serveru na inteli gentní server, k nejlepším z nich patří ovšem příkaz s c p (secure copy), což je automati zovatelná šifrující utilita podporovaná jak systémem Windows, tak i Unixem. Proces automatizace se skládá z těchto kroků : 1 . Ve Windows nainstalujeme klienta s c p , např. PunY. 2.
Na inteligentním počítači vytvoříme účet pro uložení kopie seznamu .
3.
Vytvoříme autentizační klíče.
4. Veřejný klíč přidáme do seznamu autorizovaných klíčů. 5.
Soukromý klíč zkopírujeme na windowsový počítač.
6.
Klíč SSH převedeme do formátu PunY.
7.
Exportovaný soubor zkopírujeme na inteligentní počítač.
Bezpečný klient ve Windows V systému Windows existuje řada různých klientů, kteří ke kopírování souborů využíva jí utilitu s c p . Patří k nim i PunY, což je volně šiřitelný klient Telnetu a SSH. Můžeme si jej stáhnout z h t t p : / / www . c h i a r k . g r e e n e n d . o r g . u k / - s g t a t h a m / p u t t y . K provedení shora popsaných operací ovšem stačí z tohoto balíku stáhnout pouze programy
'4-fii'"
Poštovn í brány
p s c p . e x e a p u t ty g e n . e x e a uložit je do adresáře s cestou, na níž je systém najde, na příklad C : \ W i n d ow s .
Vytvoření účtu, jehož prostřednictvím uskutelnime přenos Abychom mohli přenos provést, musíme na inteligentním serveru vytvořit účet, který bu de sloužit pouze pro uložení vyexportovaného seznamu příjemců . Například pomocí ná sledujícího příkazu vytvoříme uživatele, který se jmenuje e 3 k : fl u s e r a d d e 3 k
Dále musíme příkazem p a s s w d nastavit tomuto účtu heslo pro přihlášení. Použijeme ho jen při nastavování, poté je můžeme zrušit.
Vytvoření autentlzalních klílů v dalším kroku vytvoříme sadu autentizačních klíčů , abychom nemuseli při přenosu sou
borů mezi oběma systémy zadávat heslo. Jako uživatel r o o t na inteligentním počítači se pomocí příkazu s u e 3 k přepneme na uživatele e 3 k a příkazem s s h - key g e n vytvoříme příslušné klíče. Proces vytváření může proběhnout například takto: $ s s h - key g e n - t r s a G e n e r a t i n g p u b 1 i c / p r i v a t e r s a k ey p a i r . E n t e r f i 1 e i n w h i c h to s a v e t h e key ( / h o me / e 3 k / . s s h / i d_ r s a ) : C r e a t e d d i r e c t o ry ' / h o me / e 3 k / . s s h ' . E n t e r p a s s p h r a s e ( em p ty f o r n o p a s s p h r a s e ) : ct E n t e r s a me p a s s p h r a s e a g a i n : Y o u r i d e n t i f i c a t i o n h a s b e e n s a v e d i n / h ome / e 3 k / . s s h / i d r s a . Y o u r p u b 1 i c key h a s b e e n s a v e d i n / h ome / e 3 k / . s s h / i d_ r s a . p u b . T h e k ey f i n g e r p r i n t i s : 1 7 : 7 e : 7 8 : g e : 3 9 : 0 e : 0 4 : b 7 : e e : 6 d : 3 9 : 2 8 : c 6 : 2 1 : e4 : 84 e 3 k@m a i 1 . e x a m p 1 e . c om o Chceme-li, aby proces kopírování proběhl bez nutnosti dalšího zásahu , heslo neza dáme. V opačném případě bychom je museli zadávat při každém kopírování.
Předchozím příkazem vytvoříme dva soubory: . s s h / i d_r s a a . s s h / i d_ r s a . p u b . První z nich je soukromý klíč a je třeba jej střežit (neměl by se dostat na žádný jiný počítač).
Uložení veřejného kUče do seznamu autorizovaných klílů Nyní je třeba zapsat veřejný klíč uložený v souboru i d_r s a . p u b , jehož vlastníkem je uži vatel e 3 k , do seznamu $ H O M E / . s s h / a u t h o r i z e d_key s na serveru SSH . Použijeme k to mu příkaz: $ cd . s s h $ c a t i d_ r s a . p u b »
a u t h o r i z ed_key s
Po vytvoření souboru autorizovaných klíčů se přesvědčíme, zda má soubor a u t h o r i z e d_key s správně nastavena přístupová práva, jinak by server autentizaci dle tohoto sou boru odmítl : $ c hmod 644 a u t h o r i z e d_keys $ l s - 1 a u t h o r i z e d_keys
- rw - r - - r - -
1 e3k
e3k
2 3 0 M a y 1 3 1 0 : 3 8 a u t h o r i z e d_ k e y s
1 77
1 78
';'fiihl
Kapito la 13
Kopírování soukromého klíče do Windows Dále musíme zkopírovat soukromý klíč z inteligentního počítače do systému Windows. Nejsnadněji tak učiníme pomocí příkazu p s c p . e x e na windowsovém stroji. Nechť je IP adresa inteligentního serveru 172. 1 6. 1 . 1 , příkaz pak hude mít tvar:
> C : \ ex p o r t > p s c p e 3 k@1 7 2 . 1 6 . 1 . 1 : / h ome / e 3 k / . s s h / i d_ r s a e 3 k@1 7 2 . 1 6 . 1 . 1 ' s p a s s w o rd : i d_ r s a I O kB I 0 . 9 kB/s I ETA : 00 : 00 : 00
1 00%
Zadáme heslo, které jsme vytvořili v odstavci shora.
Převod klíče SSH do tvaru PuTTY Program PunY používá pro ukládání veřejných a soukromých klíčú jiný formát než vět šina unixových halíkú SSH, je tedy třeha převést soukromý klíč do příslušného tvaru . Konverzi provedeme pomocí utility p u t t y g e n , kterou zadáme na příkazovém řádku:
C : \ e x p o r t > puttygen i d_rs a Tímto příkazem spustíme grafického klienta GUI, který převod provede, viz dialog na ohrázku 1 3 . 2 . PuTTYgen Notice
(i
fl
5uccessfully imported foreign key (Open55H 55H2 private key). To use this key with PuTTY, vou need to use the "5ave private key" command to save it in PuTTY's own format .
1: : : :2.( : : : 11 Obrázek 1 3.2 Ú spěšný přenos k l íče pomocí uti l ity PuTTYgen Zprávu potvrdíme klepnutím n a OK, zohrazí s e dialogové okno, které vidíme n a ohráz ku 13.3. Převedenému klíči přiřadíme jméno (např. e x a m p 1 e_c o m . p p k ) a klepneme na tla čítko Save prlvate key. Jak vidíme na obrázku 1 3 .4, generátor klíče vypíše varování, že ne hyl o zadáno heslo klí če. Klíč uložíme klepnutím na tlačítko Yes a systém Windows má autentizační klíče při praveny k přenosu souboru příkazem s c p na inteligentní počítač.
Kopírování seznamu příjemců na inteligentní počítač Pro zkopírování souboru pomocí utility ps c p . e x e (prostřednictvím PunY) ze systému Windows si ještě necháme otevřené příkazové okno. Při spuštění ps c p musíme identifi kovat soukromý klíč, soubor, který má hýt zkopírován , a uživatele, který jej hude kopí rovat. V našem příkladu je soukromý klíč v souboru e x a m p 1 e_c om . p p k , kopírovat se bude soubor e x a m p l e_c om_ r e c i p i e n t s . t x t a uživatel je e 3 k . Do adresáře I h ome / e 3 k přenese me tento soubor příkazem:
'4-hlii
Poštovn í b rá n y
řl' PuTTY Key Generator Eile
!!;.ey
Con)tersions
Ei
!:!elp
K� --------. Public key for pasting into O penS S H authorized_keys file: ssh·rsa A/lMB 3N zaC1 yc2EA/lMB I w.6MI EAyx6m6.y.WE FV5nkm4j�xN G T af3+V3H Olc 1 mjwnL eaWgssM zS cPuI>.qJ I Pyl8d9aocvehH vRiM O mM drgmQ uO w81 4qIWiLlO fsXY'V/wuJ'r'mdk 6ovB22 +Wwau401+q+2A8cD CQ 7N jpOdH D H 51QbD vnR ttxRXI 8vJ U 4h8yOaR L v4rwE iiU = imported·openssh·key Key fjngerprint Key �omment:
Issh·rsa 1024 66: 55: fd: 1 9: Dc: 1 2: a5: 6f: a2: Oa: 3e: ba: a4: fc:ef: Ob
.::.l
Iimported·openssh·key
Key pgssphrase: CQnfirm passphrase: Actions --------, ýenerate
G enerate a public/private key pair
!,oad
Load an existing private key file S ave P1!blic key
S ave the gener ated key
�ave private key
I I I
" "' ------, Parameters ------------------Type of key to gener ate: r S S HI IR SA)
r S S H 2 QSA '-"::::"':'"--1 1 024
N umber of Qits in a generated key
Obrázek 1 3-3 U l o ž e n í s o u kromého k l íče v PuDYge n PuTTYgen Warníng
Ei
Are you sure you want to save this key without a passphrase to protect it?
Obrázek 1 3-4 Va rovné h l á š e n í uti l ity PuDY o tom, že chybí heslo kl íče
C : \ e x p o r t > p s c p - i e x a m p l e_com . p p k e x a m p l e_c om_ r e c i p i e n t s . t x t
e 3 k@1 7 2 . 1 6 . 1 . 1 : / h ome / e 3 k / A u t h e n t i c a t i n g w i t h p u b l i c k e y " r s a - k ey - 2 0 0 4 0 5 1 2 " e x a m p l e_ c o m_ r e c i e n t s . t x t I 2 kB I 2 . 4 k B / s I ETA :
00 : 00 : 00
I
1 0 0%
P o úspěšném zkopírování souboru n a inteligentní počítač můžeme příkaz pro export souboru (viz "Odeslání seznamu příjemců na poštovní počítač") a předchozí příkaz p s c p přidat do dávky e x p o r t_ v a l i d_ r e c i p i e n t s . b a t . Tu pak můžeme spustit klepnutím na tlačítko myši vždy, když vytvoříme, změníme nebo zrušíme příjemce . Soubor by mohl vypadat například takto:
1 79
Ka pito l a 1 3
1 80
c s v d e - m - n - g - f " C : \ e x p o r t \ e x a m p l e_c om_ r e c i p i e n t s . t x t " \ - r " ( I ( & ( o b j e c t C l a s s =u s e r ) ( o b j e c t C a t e g o ry=p e r s o n ) ) \ ( o bj � c t C l a s s =g r o u p O f N a me s ) ( o bj e c t C l a s s =ms E x c h Dy n a m i c D i s t r i b u t i o n L i s t ) ) \ " - 1 p r oxyAdd r e s s e s p s c p - i e x a m p l e_c om . p p k e x a m p l e_c om_r e c i e n t s . t x t e 3 k@1 7 2 . 1 6 . 1 . 1 : / h ome / e 3 k / A ž s i ověříme, že dávka funguje, můžeme zrušit příkazem u s e rmod L e 3 k kopírování uživatelského hesla na inteligentní počítač, takže vzdálený přístup k účtu e 3 k bude mož ný pouze s použitím autentizačního klíče . -
Vytvoření mapy uživatelů Nyní, když máme soubor Active Directory na inteligentním počítači, můžeme pomocí skriptu ze souboru vyextrahovat příjemce. Nesmíme zapomenout, že: 1.
V produktech Microsoftu se pro označení adres příjemců používá jak SMTP, tak i smtp, takže skript musí obsahovat obě varianty.
2.
Skript musí umět vyřadit některé příjemce, kteří nebudou dostávat poštu zvenčí. Je to například schránka Sy s t emMa i 1 b o x , která se v Exchange Serveru využívá k vnitřní komunikaci.
3 . V následujícím skriptu, který pojmenujeme e x t r a c t_ v a 1 i d_ r e c i pi e n t s , vyextrahuje me všechny platné příjemce a umístíme je do souboru (s výjimkou těch, kteří jsou uvedeni na černé listině) .
II ! / b i n / s h II E x t r a c t a l l a d d r e s s e s t h a t s t a r t w i t h S M T P o r s m t p f r om II an Ac t i v e D i r e c t o ry e x p o r t , but o m i t t h o s e t h a t a r e l i s t e d i n b l a c k l i s t c a t $ 1 I t r - d \ " I t r , \ \ n I t r \ ; \ \ n I awk - F \ : ' / ( SMTP l smtp ) : / { p r i n t f ( " % s \ tOK\ n " , $ 2 ) ) ' I \ g rep - v - f bl a c k l i s t > $ 2 Č erná listina j e v souboru , který může mít například tento tvar:
Admi n i s t ra t o r Sy s t emMa i l b o x Příkazem ext r a c t_v a 1 i d_r e c i p i e n t s spustíme skript, který vytvoří seznam platných pří jemců v souboru r e l a y _ r e c i p i e n t s .
ext r a c t_v a l i d_re c i p i e n t s / h ome / e 3 k / ex a m p l e_c om_re c i p i e n t s . t xt r e l ay_re c i p i e n t s výstup může vypadat například takto:
OK a b u s e@e x a mp l e . c om p o s tm a s t e r@e x a m p l e . c o m O K w i l ma p e b b l e@e x a m p l e . c o m O K OK w i l ma@e x a mp l e . c om OK w i l m a . p e b b l e@e x a m p l e . c o m w . p e b b l e@e x a m p l e . c o m OK p e b b l e@e x a mp l e . c o m O K OK mc b r i c k e r@e x a mp l e . c o m b e t ty mc b r i c k e r@e x a m p l e . c o m O K b e t ty@e x a m p l e . c om OK b e t ty . mc b r i c k e r@e x a mp l e . c o m
OK
Poštovn í brány
14-fiMt'
b . m c b r i c k e r@e x a m p l e . c o m O K f r e d f l i n t s t o n e@e x a m p l e . c o m O K f r e d . f l i n t s t o n e@e x a m p l e . c o m OK OK f . f l i n t s t o n e@e x a m p l e . c o m f r e d @e x a m p l e . c o m O K f l i n t s t o n e@e x a m p l e . c o m O K b a r n ey . r u b b l e@e x a m p l e . c o m O K b a r n ey r u b b l e@e x a m p l e . c o m OK r u b b l e@e x a m p l e . c o m O K b a r n ey@e x a m p l e . c o m O K b . r u b b l e@e x a m p l e . c o m OK b a mm b a mm@e x a m p l e . c o m OK b a mm@e x a m p l e . c o m O K OK b a mm . b a mm@e x a m p l e . c o m b . b a mm@e x a m p l e . c o m O K i t - d e p a r t m e n t@e x a m p l e . c o m O K p u r c h a s i n g - d e p a r t m e n t@e x a m p l e . c o m O K s a l e s - d e p a r t m e n t@e x a m p l e . c o m O K
Jsme-Ii s obsahem souboru spokojeni, pomocí příkazu p o s t m a p z něj vytvoříme mapu (příkaz můžeme zadat například ve tvaru : p o s t m a p h a s h : r e l a y_ r e c i p i e n t s ) a umístíme jej na cestu , na niž ukazuje parametr r e l a y_r e c i p i e n t_m a p s (viz část "Definování pří jemců" shora) . K tomu nám může posloužit například příkaz: ff m v r e l ay_r e c i p i e n t s . d b / e t c / p o s t f i x / r e l ay_re c i p i e n t s . d b
U kazatel r e l ay_ r e c i p i e n t_ma p s nenastavujte ihned na nově vytvořenou mapu r e l ay- r e c i p i e n t s (např. h a s h : / h o m e / e 3 k / r e l a y- r e c i p i e n t s ) ! Pokud by se konverze z ja kéhoko l i d ůvodu řádně neproved la, Postfix by musel tuto sl užbu od m ítnout. Bezpečný postup je takový, že nejdříve provedeme konverzi, a teprve když se úspěšně provede, přesu neme mapu tam, kam u kazuje parametr r e l a y_ r e c i p i e n t_m a p s .
Vytvoření mapy odesilatelů Jako prémii může Postfix získat ze souboru Active Directory seznam odesilatelů , kteří mohou odesílat poštu do vnějšího světa. K tomu si musíme napsat stejný skript jako v části "Vytvoření mapy uživatelů" s jednou malou změnou : V produktech Microsoftu se používá k označení platných odesilatelů SMTP, takže skript musí zpracovat pouze takto označené položky.
POZNÁMKA Takový seznam je užitečný jako opatření proti virům, které při rozesílá n í pošty z vn itřn í sítě používaj í složku Outlook Contacts k vytvá řen í fa lešných ad res odesilatele. Můžeme tedy vytvořit skript, který bude vypadat například takto: ff ! / b i n / b a s h ff E x t r a c t a l l a d d r e s s e s t h a t s t a r t w i t h S M T P f r o m a n A c t i v e D i r e c t o ry ff e x p o r t , b u t o m i t t h o s e t h a t a r e l i s t e d i n b l a c k l i s t c a t $ 1 I t r - d \ " I t r , \ \ n l t r \ ; \ \ n I a w k - F \ : ' / SMTP : / { p r i n t f ( " % s \ tOK\ n " , $ 2 ) } ' I \ g rep - v - f b l a c k l i s t > $ 2
181
Kapitola 1 3
1 82
Seznam vytvořený následujícím příkazem bude kratší než v předchozím případě, neboť neobsahuje aliasy:
# . / ex t r a c t_v a l i d_s e n d e r s / h ome / e 3 k / ex a m p l e_c om_ r e c i p i e n t s . t xt e x a m p l e_c om_s e n d e r s Vyjdeme-li z předchozího příkladu, seznam může vypadat například takto:
w . p e b b l e@e x a mp l e . c o m OK b . mc b r i c k e r@e x a mp l e . c om O K OK f r e d . f l i n t s t o n e@e x a m p l e . c om b a r n ey . r u b b l e@e x a m p l e . c o m O K b . b a mm@e x a mp l e . c o m O K i t - d e p a r tm e n t@e x a mp l e . c om O K p u r c h a s i n g - d e p a r t m e n t@e x a m p l e . c o m O K s a l e s - d e p a r t m e n t@e x a mp l e . c o m O K V předchozím řádkovém příkazu jsme přesměrovali výstup d o souboru e x a m p l e_c o m_s e n d e r s . Nyní z něho příkazem p o s tma p h a s h : e x a m p l e_c om_s e n d e r s vy tvoříme indexovaný soubor a poté vytvoříme omezení (viz kapitola 8), která se vztahují na odesilatele obálky, jak následuje: •
•
Přichází-li pošta z vnitřního serveru, musí na ní být adresa některého platného odesilatele. Nejde-li pošta z vnitřního serveru , toto omezení se neuplatní.
Aby se tato podmíněná omezení uplatnila, musíme konfiguraci Postfixu určitým způso bem doplnit. Definujeme třídu, kterou se spouští omezení tehdy, když zpráva přijde z vnitřního poštovního serveru . Soubor ma i n . cf může obsahovat například takovéto pří kazy:
s m t p d_ r e s t r i c t i o n _c l a s s e s = m u s t_be_v a l i d_s e n d e r €t m u s t be v a l i d_s e n d e r � c h e c k_s e n d e r_a c c e s s h a s h : / e t c / p o s t f i x / e x a m p l e_c om_s e n d e r s rej ect s m t pd_ r e c i p i e n t_ r e s t r i c t i o n s = c h e c k_c l i e n t_a c c e s s h a s h : / e t c / p o s t f i x / e x a m p l e_c om_i p ., r e j e c t_u n a u t h_d e s t i n a t i o n =
o m u s t_be_ v a l i d_s e n d e r j e jméno omezení, které obsahuje podmnožinu těch omezení, jež budou uplatněna, když pošta pochází z vnitřního poštovního serveru ; tento řádek ob sahuje třídy omezení. 49 Definice tohoto omezení obsahuje postup, jak má být zpracována zpráva, která při chází z vnitřního serveru: Nejdříve se ověří seznam platných odesilatelů , ostatní jsou od mítnuty. • Nakonec musíme do souboru / e t c / p o s t f i x / e x a m p l e_c o m_i p společně s akcí, která má být provedena, přidat IP adresu interního poštovního serveru . V příkladu na násle dujícím řádku bude omezení m u s t_b e_v a 1 i d_s e n d e r uplatněno pouze tehdy, když zprá va přijde z 1 72 . 1 6 . 1 . 1 :
m u s t b e v a l i d_s e n d e r
Poštovn í brány
'4-hNG'
Jakmile tyto volby zakonfigurujeme do Postflxu, musíme jej znovu zavést, aby nabyly účinnosti.
Automatické vytváření mapy Proces vytváření mapy na inteligentním počítači lze zautomatizovat. V následujícím příkladu použijeme soubor MakeftIe, který si můžeme stáhnout ze stránek Book of POStfIX ( h t t p : / /www . p o s t f i x - bo o k . c om l .
## M a k e f i l e t o a u t o m a t e m a p b u i l d p r o c e s s ## confi gurati on sett i ngs # L o c a t i o n o f t h e f i l e we e x t r a c t t h e d a t a f r om A O S_O U M P= / h ome / e 3 k / e x a m p l e_c om_r e c i p i e n t s . t x t # L o c a t i o n o f t h e . p r o t o f i l e s P RO T O_PAT H = r e l a y_re c i p i e n t s P RO T O_PAT H 2 =v a l i d_s e n d e r s # des t i n a t i on of s u c c e s s fu l l y b u i l t maps M A P_PAT H = / e t c / p o s t f i x / r e l ay_re c i p i e n t s MA P_PA T H 2 = / e t c / p o s t f i x / v a l i d_ s e n d e r s # type and suffi x of the maps to bui l d O B_TY P E=h a s h O B_ S U F F I X=d b ## M a k e f i l e o p t i o n s # # bui l d a l l maps $ ( MA P _PATH l . $ ( O B_S U F F I X l $ ( MA P _PATH 2 l . $ ( OB_S U F F I X l b l a c k l i s t al l : # e x t r a c t v a l i d r e c i p i e n t s f r om $ ( A O S_ O UM P l t o $ ( P RO T O_ P A T H l . p r o t o $ ( P RO T O_PATH l . p r o t o : $ ( A O S_O U M P l . / e x t r a c t_v a l i d_ r e c i p i e n t s $ ( A O S_O U M P l $ ( P ROTO_PATH l . p r o t o # e x t r a c t v a l i d s e n d e r s f r om $ ( A O S_ O U M P l t o $ ( P RO T O_PAT H 2 l . p r o t o $ ( P RO T O_PAT H 2 l . p r o t o : $ ( A O S_O U M P l . / e x t r a c t_v a l i d_s e n d e r s $ ( A O S_OU M P l $ ( P RO T O_PAT H 2 l . p r o t o # b u i l d m a p o f v a l i d r e c i p i e n t s f r om $ ( P ROTO_PATH l . p r o t o $ ( MAP_PATH l . $ ( O B_S U F F I X l : $ ( P ROTO_PATH l . p r o t o / u s r / s b i n / p o s tm a p - w $ ( O B_T Y P E l : $ ( P RO T O_PATH l . p r o t o && \ m v $ ( P ROTO_PATH l . p r o t o . $ ( O B_S U F F I X l $ ( MAP_PATH l . $ ( O B_S U F F I X l # b u i l d m a p o f v a l i d s e n d e r s f r om $ ( P RO T O_PAT H Z l . p r o t o $ ( MAP_PATHZ l . $ ( OB_S U F F I X l : $ ( P RO T O_PAT H Z l . p r o t o / u s r / s b i n / p o s t m a p - w $ ( O B_TY P E l : $ ( P RO T O_P A T H Z l . p r o t o && \ mv $ ( P RO T O_PAT H Z l . p r o t o . $ ( O B_S U F F I X l $ ( M A P_PAT H Z l . $ ( O B_S U F F I X l # remo v e a l l p r o t o m a p s cl ean : Jakmile se přesvědčíme, že konverze funguje, můžeme vytvořit úlohu, která poběží au tomaticky. V následujícím příkazu zadáme spouštění úlohy po 15 minutách:
0 , 1 5 , 3 0 , 4 5 * * * * cd / r o o t / r e l ay_r e c i p i e n t s && / u s r / b i n / m a k e
Konfigurace Exchange Serveru a komunikace s Postfixem V této části si vysvětlíme, jak zkonfigurujeme Exchange Server, aby k předávání veškeré poš ty využíval pouze pOStfIXOVOU bránu, aniž by přitom došlo k zahlcení postflXového serveru.
1 83
1 84
'4'fi'it'
Ka pito l a 1 3
Exchange implicitně nepřenáší odchozí zprávy přes hránu . K tomu je potřeba upravit konfiguraci, jak následuje : 1.
Z mer1u spustíme Exchange System Manager.
2.
Z menu se stromovou strukturou na levé straně vyhereme server.
3.
Z podstromu vybereme počítač.
4.
Z menu Hosts vybereme Protocols.
5.
Z menu Protocols vybereme SMTP .
6.
Na menu SMTP klepneme pravým tlačítkem a z položky Default SMTP Virtual Server vybereme Properties.
7.
V okně vlastností vybereme tabulku Delivery.
8.
Nyní už se konfigurace blíží ke konci . V následujících částech si popíšeme zhývající kroky.
Nastavení postfixového serveru jako inteligentního serveru Nejprve musíme zkonfigurovat Exchange tak, aby odesílal všechny odchozí zprávy pro střednictvím postfixové brány. Z tabulky Delivery vyhereme Advanced Delivery a zadá me úplné jméno (FQDN) inteligentního serveru (např. p a s tf i x . e x a m p 1 e . c o m), viz obrázek 1 3 . 5 . Advanced Oehvery
EI
Maximum hop count:
130 M asquerade Qomain:
E ulll' ·qualified domain name:
Iexchange. example. com
!;heck D N S
I
.s.mart host:
Ipostfix. example. corrj P ferform reverse DNS lookup on incoming messages Configure external DNS S ervers:
OK
COllfig ure. . .
Cancel
tlelp
Obrázek 1 3.5 Konfig u race u m ístěn í chytrého počítače na Exch a n g e 2003
POZNÁMKA V poli Smart host nelze zadat IP adresu. Buďto m usíme přidat i nte l igentn í počítač do (i ntern í) databáze sl užby DNS, kterou poptává Exchange Server, nebo je nastavíme sta ticky ze souboru h o s t s na Exchange Serveru.
'B-fi'U'
Poštovní brány
Po nastavení FQDN inteligentního serveru je nutné Default SMTP Virtual Server zastavit a spustit, aby se projevily účinky provedených změn .
Omezení odchozího spojení Do této chvíle jsme vynaložili značné úsilí na ochranu vnitřního poštovního serveru před nepatřičným chováním inteligentního serveru . V dalším kroku si ukážeme, jak je nutno ochránit Postfix, aby se nezahltil zprávami z Exchange Serveru . K tomu stačí pouze Olne zit počet odcházejících zpráv.
POZNÁMKA Impl icitn í hodnota Exchange Serveru je 1 000 odchozích spojení současně. Je- I i v odcho zí frontě ta kové m nožství zpráv (což se stává ve vel kých sítích po restartu služby SMTP na Exchange Serveru), budou na intel igentn í počítač tyto zprávy přenášeny po dobu v řádu m i n ut, což m ůže vázat příl iš mnoho prostřed ků i ntel igentního serveru, zejména když i ntern í poštovní server není jedi ný, komu Postfix zaj išťuje služby. V ta kovém případě je lepší nechat Exchange Server zpracovávat odchozí poštu poma lej i . Nemá me-I i k serveru přístu p, můžeme ke snížení počtu spojení využít postfixového mech a n ismu pro sn ižová n í rychlosti popsa ného v kapitole 2 1 . Z tabulky Delivery (doručování) v okně Default SMTP Virtual Server vybereme Out bound Connections (odchozí zprávy) a nastavíme hodnotu na 50, viz obrázek 13.6. V běžných podmínkách se tato hodnota osvědčila. Outbound Connections
13
P" Limit number of l;onnections to: T ime·.Qut (minutes):
P" Limit number of connections per .Qomain to:
125
T CP Qort:
OK
Cancel
tlelp
Obrázek 1 3.6: Omeze n í odchozíc h zpráv v Exc h a n g e
Nastavení NAT Za bránou NAT se postfixový poštovní server může dostat do problémů , neboť tato brá na modifikuje IP-pakety (mění v nich cílovou adresu) ještě před tím, než je předá Post fixu . To znamená, že s m t p d bude sledovat pouze soukromou IP adresu brány, zatímco brána NAT přijímá spojení na "oficiální" IP adrese . To je pouze otázka dohody, neboť protokol RFC říká, že poštovní server má přijímat zprávy adresované na p o s t m a s t e r@ [ a dd r e s s ] , kde a dd r e s s je IP adresa . Některé černé listiny posílají požadované informace pouze na adresy v této podobě .
1 85
1 86
';'hUG'
Kapitola 1 3
Postfix lze zkonfigurovat tak, aby přijímal poštu pro postmaster@[addressl pomocí para metru p r oxy-i n t e r f a c e s . I když Postfix sleduje pouze interní IP adresu , bude přijímat i zprávy. adresované na u s e r@ [ a d d r e s s ] . Má-Ii brána NAT adresu 1 92.0.34 . 1 66, měli by chom parametr nastavit příkazem:
p r o xy_i n t e r f a c e s
�
1 92 . 0 . 34 . 1 6 6
KAPITOLA 1 4
POŠTOVN í SERVER PRO NEKOll K DOMEN v
,
Postfix může zpracovávat zprávy pro více než jednu doménu dvěma různými metodami . První z nich je metoda nazvaná virtuální aliasové domény, jejímž prostřednictvím pouze zvětšíme počet domén, pro něž je server cnovým místem určení. Druhou metodu nazý váme metoda virtuální schránkové domény, tato metoda jde dál, neboť virtuální schrán kové domény nepotřebují lokální účty. V této kapitole si popíšeme, jak zajistit služby SMTP pro několik domén pomocí obou těchto přístupů.
Vi rtuální aliasové domény Postfix obvykle považujeme za cnové místo určení pouze pro jména domén, která jsou zadána parametrem my d e s t i n a t i o n 1 Domény uvedené v my d e s t i n a t i o n nazýváme ka nonické domény, neboť obvykle obsahují všechna jména lokálního počítače (a pravdě podobně i jméno jeho rodičovské domény) . V této kapitole popisujeme několik metod, jak můžeme z Postfixu udělat cnovou destinaci pro další domény. Tyto domény nazývá me virtuální, protože nemají nic společného se skutečným jménem počítače. Základní služby pro virtuální aliasové domény zkonfigurujeme pomocí těchto kroků : 1.
Nastavíme jméno virtuální aliasové domény.
2.
Vytvoříme mapu adres příjemců .
3.
Zkonfigurujeme Postfix tak, aby přijímal poštu pro virtuální aliasové domény.
4. Otestujeme konfiguraci. 5 . Vytvoříme pokročilé mapování. 6. Jednotlivé kroky jsou popsány v následuj ícím textu .
Nastavení jména virtuální aliasové domény V prvním kroku sdělíme Postfixu , že kromě implicitního nastavení je cnovým místem ur čení i pro doménu . V parametru v i r t u a La 1 i a s _d o m a i n s jsou definovány mapy virtuál ních domén. Abychom mohli tento parametr zadat, musíme vytvořit příslušnou mapu ,
Kapitola 1 4
1 88
např. / e t c / p o s t f i x / v i r t u a l _a l i a s_d oma i n s , která obsahuje virtuální domény v násle dujícím tvaru :
.
# v i r t u a l a l i a s d oma i n s p o s t f i x - b o o k . c om
2002 1 1 25
Č íslo vpravo j e datum vytvoření domény, avšak lze j e nastavit zcela libovolně. Postfix je v parametru v i r t u a l _a 1 i a s_d oma i n s nevyužívá, musí zde být uvedeno pouze z for málních důvodů . Jakmile soubor vytvoříme, převedeme jej na indexovanou mapu příkazem:
# p o s t m a p h a s h : / e t c / p o s t f i x / v i r t u a l _a l i a s_d oma i n s
POZNÁMKA Virtuá l n í doménu nesmíme zadat j a ko hodnotu parametru my d e s t i n a t i o n , mohly by vzn i knout neočekáva né potíže. Postfix by nevěděl, má-I i zprávu doručit loká l n ě nebo j i odeslat k virtu á l n ímu přepisu. To je d ůvod, proč bude Postfix p ř i konfi g u raci v ta kovém případě h lásit chybu v žu rná l n ím souboru hodně n a h las.
Vytvoření mapy adres příjemců v dalším konfiguračním kroku vytvoříme soubor / e t c / p o s t f i x / v i r t u a l _a l i a s_m a p s , v němž jsou namapovány adresy příjemců z virtuální aliasové domény n a adresy lokál ních příjemců . V následujícím příkladu jsou jak samostatní, tak i vícenásobní příjemci:
# postf i x - book . com p o s tma s t e r@p o s t f i x - b o o k . c o m a b u s e@p o s t f i x - b o o k . c o m r a l f@p o s t f i x - b o o k . c o m p a t r i c k@po s t f i x - b o o k . c o m
r a l f@e x a m p l e . c om a b u s e@ex a m p l e . c o m . p a t r i c k@e x a mp l e . c o m r a l f@e x a m p l e . c o m p a t r i c k@e x a mp l e . c om
Přesvědčíme se, že soubor obsahuje jak adresu správce pošty (postmaster), tak i adresu pro doručování zpráv s chybnými adresami (abuse), jak ukládá protokol RFC.
UPOZORNĚNí V souboru vi r t u a l _a 1 i a s_ma p s U příjemce na pravé stra ně musí být vždy uvedeno úpl né jméno domény, jinak by vzn i k l příl iš vel ký prostor pro různé výkl ady ad resy. Kdyby byla zadaná pouze loká l n í část ad resy (na př. ra 1 f ) , démon t r i v i a 1 - r ew r i te by přidal doménovou část z my o r i gi n . Loká l n í uživatel r a 1 f@$ my o r i g i n by pak nem usel existovat - to by závise lo na hodnotách my o r i g i n a myd e s t i n a t i o n . Následujícím příkazem vytvoříme indexovanou mapu , přičemž parametrem bude soubor, který jsme právě vytvořili:
# p o s t m a p h a s h : / e t c / p o s t f i x / v i r t u a l _a l i a s_ma p s
Konfigurace Postfixu pro příjem pošty z virtuálních aliasových domén Máme vytvořeny obě mapy, můžeme tedy zkonfigurovat Postfix tak, aby přijímal poštu z virtuální aliasové domény podle pravidel zadaných mapou příjemců . V souboru ma -
Poštovn í server pro něko l i k domén
'B-fi'U'
i n . c f musíme nastavit parametry v i r t u a l _a l i a s _d oma i n s a v i r t u a l _a l i a s_m a p s . S použitím jmen souborů z předchozího příkladu by parametry měly vypadat takto: v i r t u a l _a l i a s_d oma i n s = h a s h : / e t c / p o s t f i x / v i r t u a l _a l i a s_d oma i n s v i r t u a l _a l i a s_ma p s = h a s h : / e t c / p o s t f i x / v i r t u a l _a l i a s_ma p s Postfix znovu zavedeme a virtuální aliasové domény otestujeme způsobem popsaným v další části.
Test nastavení virtuální aliasové domény Nastavení virtuální aliasové domény můžeme otestovat tak, že pošleme zprávu jak exis tujícímu, tak i neexistujícímu příjemci v obou doménách.
Zaslání zprávy na platnou adresu ve virtuální aliasové doméně Zprávu platnému příjemci (správci pošty) můžeme poslat takto:
$ e c h o t e s t I / u s r / s b i n / s e n d ma i l p o s tma s t e r@po s t f i x - b o o k . com V žurnálním souboru si ověříme, zda zpráva prošla. Měly by v něm být přibližně tako véto zápisy:
A p r 1 9 1 1 : 2 0 : 5 0 ma i l p o s t f i x / p i c k u p [ 1 7 8 5 0 J : B 8 C 4 6 2 9 A B 3 8 : u i d=O f r om=< r o o t > A p r 1 9 1 1 : 2 0 : 5 0 ma i l p o s t f i x / c l e a n u p [ 1 7 86 3 J : B 8 C 4 6 2 9 A B 3 8 : me s s a g e · i d=< 2 0 0 4 0 4 1 9 0 9 2 0 5 0 . B 8 C 4 6 2 9 A B 38@m a i l . e x a m p l e . c om > A p r 1 9 1 1 : 2 0 : 5 0 ma i l p o s t f i x / q mg r [ 1 7 8 5 1 J : B 8 C 4 6 2 9 A B 3 8 : f r om=< r o o t@ma i l . e x a m p l e . c om > . s i z e= 2 8 2 . n r c p t = l ( q u e u e a c t i v e l Apr 1 9 1 1 : 20 : 50 ma i l p o s t f i x / l oc a l [ 1 7866 J : B8C4629AB38 : t o= < r a l f@e x a mp l e . c om> . o r i g_t o=< p o s t m a s t e r@p o s t f i x - b o o k . c o m > . r e l a y = l o c a l . d e l ay=O . s t a t u s = s e n t ( ma i l box l Testovací zpráva jde nejprve na adresu p o s tma s t e r@p o s t f i x - b o o k . c o m ; na základě ob sahu mapy v i r t u a l _a l i a s_ma p s jde zpráva adresovaná na p o s tma s t e r@p o s t f i x · b o o k . c o m na adresu r a l f@ex a m p l e . c om. Poté byla doručena lokálně uživateli jménem r a l f , neboť e x a m p l e . c o m je "reálná" doména.
Zaslání zprávy neexistujícímu příjemci ve virtuální aliasové doméně Neexistujícímu příjemci (nouser) můžeme zprávu zaslat například takto:
$ e c h o t e s t I / u s r / s b i n / s e n d ma i l n o u s e r@p o s t f i x - b o o k . c om $ t a i l - f / v a r / l o g / m a i l . l og A p r 19 1 1 : 2 1 : 2 3 m a i l p o s t f i x / p i c k u p [ 1 7 8 5 0 J : 9 B 6 1 F 2 9 A B 3 8 : u i d=O f r om=< r o o t > A p r 1 9 1 1 : 2 1 : 2 3 m a i l p o s t f i x / c l e a n u p [ 1 7 86 3 J : 9 B 6 1 F 2 9 A B 3 8 : me s s a g e · i d=< 2 0 0 4 0 4 1 9 0 9 2 1 2 3 . 9 B 6 1 F 2 9 A B 3 8@ma i l . e x a m p l e . c om > A p r 1 9 1 1 : 2 1 : 2 3 m a i l p o s t f i x / q mg r [ 1 7 8 5 1 J : 9 B 6 1 F 2 9 A B 3 8 : f r om=< r o o t@m a i l . e x a m p l e . c om > . s i z e= 2 8 2 . n r c p t= l ( q u e u e a c t i v e l Apr 1 9 1 1 : 2 1 : 23 ma i l p o s t f i x / e r ro r [ 1 7887 J : 9 B 6 1 F29AB38 : t o=< n o u s e r@p o s t f i x · b o o k . c om > . r e l a y =n o n e . d e l ay=O . s t a t u s = b o u n c e d ( u s e r u n k n ow n i n v i r t u a l a l i a s t a b l e l
1 89
1 90
'a·fiiit'
Ka pitol a 1 4
Tato zpráva byla adresovaná na n o u s e r@p o s t f i x - b o o k . c o m . Taková položka v mapě v i r t u a La l i a s_ma p s neexistuje, takže zpráva je vrácena s chybovým hlášením "user unknowI} in virtual alias table".
Pokročilá mapování Č ím více virtuálních aliasových domén přidáváme, tím pravděpodobnější je, že budeme muset opakovaně přidávat stále stejné položky. V takovém případě přijdou vhod sběrné položky - položky vytvářené pomocí regulárních výrazů a implicitní mapování. Obojí je popsáno v následujících podkapitolách.
Sběrné (catcha/IJ položky
v jistých situacích může být vhodné, když je pošta zasílaná neznámým uživatelům ve vir
tuální aliasové doméně ukládána na jednu sběrnou adresu. V manuálových stránkách vir tual(5) je uvedena řada způsobů , jak toho můžeme docílit pomocí položky v i r t u a l _a 1 i a s_ma p s v mapě. Jedním z těchto způsobů , nikoli nejhorším, je příkaz:
@p o s t f i x - b o o k . c om
c a t c h a l l @e x a m p l e . c o m
Nemůže-li postfixový server nalézt v mapě aliasů v e virtuální aliasové doméně shodu s položkou u n k n o wn u s e r@p o s t f i x - b o o k . c om, na mapuje tuto adresu na sběrnou adresu c a t c h a l l @e x a m p l e . c om.
Položky
5
regulárními výrazy
Poštu adresovanou ve virtuálních aliasových doménách určitým skupinám neexistujících uživatelům můžeme v mapě v i r t u a l _a 1 i a s_ma p s namapovat na sběrnou adresu pomo cí regulárních výrazů . Navíc můžeme porovnávání vzorku v mapě s levou stranou po ložky nahradit porovnáváním s její pravou stranou - jako v následujícím příkladu . Tohoto způsobu můžeme využít, když chceme nalezenou adresu poslat programu uvedenému v některé položce v mapě a 1 i a s_ma p s . Abychom s i učinili představu o tom, jak takový model funguje, nechť položkou v mapě virtual_alias_maps je:
/ A ( . * ) @p o s t f i x - b o o k \ . c o m $ /
c a t c h a l l + $ l@e x a mp l e . c o m
Když přijde zpráva pro neznámého uživatele, stane s e toto: 1.
Zpráva pro unknownuser@po s t f i x - b o o k . c o m se na mapuje na c a t c h a I I + u n kn own user@e x a m p l e . c om .
2.
Postfix doručí zprávu existujícímu lokálnímu příjemci c a t c h a l l @e x a m p l e . C O I)1 , avšak v průběhu doručování programu nastaví vnější proměnnou $ E X T E N S I O N na u n k n o wn u s e r, jak je uvedeno v manuálových stránkách locaI(8). (Parametrem r e c i p i e n t_d e 1 i m i t e r se nastaví oddělovač rozsahu; implicitní hodnota je +)
3.
Pokud program zpracovává poštu pro sběrnou adresu catchall, může použít vnější proměnnou $ E X T E N S I O N k nalezení příjemce a může vytvořit informativní zprávu , kte rou pošle původnímu odesilateli. Příklad takového programu jménem f u z zy je uve den na adrese h t t p : / / www . s t a h l . b a u . t u - b s . d e / - h i l d e b / p o s t f i x .
Poštovn í server pro něko l i k domén
1 91
Existuje mnoho jiných způsobů , jak použít regulární výrazy ve virtuální mapě vi r t u a l _a 1 i a s_ma p s . Jednou ze zajímavých možností je namapovat určitý vzorek na jednoho příjemce. Předpokládejme, že existuje několik adres a d m i n - name@e x a m p l e . c o m a zprávy s těmito adresami chceme uložit do jedné schránky. Do mapy můžeme zkusit zadat na příklad takovouto položku :
l ' a d m i n - . *@p o s t f i x - b o o k \ . c o m $ 1 ma i l b ox@e x a m p l e . c o m To j e jistě mnohem pohlednější způsob, než mapovat vše ručně :
a d m i n - f i r e w a l l @p o s t f i x - b o o k . c o m a d m i n - m a i l @p o s t f i x - b o o k . c o m a d m i n - we b@p o s t f i x - b o o k . c o m
ma i l b ox@e x a mp l e . c o m ma i l b ox@e x a mp l e . c o m ma i l box@e x a mp l e . c o m
Implicitní mapování více domén Někdy potřebujeme mapování více domén zobecnit. Představme s i , ž e naším cílem j e vy tvořit obecného příjemce pro správu pošty bez ohledu na počet virtuálních aliasových domén. K tomu stačí, když do virtuální aliasové mapy přidáme položku :
postma s t e r
p o s t ma s t e r@e x a m p l e . c o m
O d tohoto okamžiku Postfix doručí všechny zprávy, j e ž mají n a místě lokální části adre sy postmaster, na adresu p o s tma s t e r@ex a m p l e . c om. Mohou to být například adresy: •
postmaster@[$proxy_interfaces]
•
postmaster@[$ ineCinterfaces]
•
postmaster@$mydestination
Všimněme si, že všechny uvedené domény nemusí být virtuálními aliasovými doména mi, a navíc, jsou-li uvedeny, mohou být uvedeny pouze některé. Více se dozvíme v ma nuálových stránkách virtuaI(5), kde je tato látka podrobně popsána. Pokud má mít správce pošty ve všech virtuálních aliasových doménách stejnou adresu , je vhodné vy tvořit si příslušný skript a přidat jej do t h e v i r t u a l _a 1 i a s_ma p s .
UPOZORNĚNí V mapě nesmíme používat konfigurační proměnné (například $ my o r i gi n ), neboť Post fix neprová d í jej ich expa nzi. Náš zá pis slouží jen jako i l ustrace.
Virtuální schránkové domény Virtuální schránkové domény jsou domény pro uživatele, kteří nemají svůj vlastní lokál ní účet (tj . pro uživatele, kteří nejsou uvedeni v souboru l e t c / p a s s w d ) . Původně byly ty to domény pouze záplatou s vlastním doručovacím agentem, nyní jsou standardní součástí Postfixu . Doručovací agent v i r t u a 1 vychází z doručovacího agenta 1 oc a 1 . Na rozdíl od něho však nemá přístup k informacím o lokálních uživatelích (uloženým například v souboru l e t c / p a s s w d ) a nemůže vyhledávat jejich jména. Je plně závislý na mapách určitého ty pu, jež nemají nic společného s vlastním operačním systémem.
1 92
';'fi'iC'
Kapitol a 1 4
Existují dva dobré důvody k tomu, aby virtuální doručovací agent nic nevěděl o systé mových účtech :
Rozšiřitelnost V Linuxu je počet příjemců v souboru / e t c / p a s s w d omezen na 65 536. Solaris a BSD takové omezení nemají, neboť mají delší VID. Doručovací agent v i r t u a 1 není vázán tímto omezením.
Bezpečnost Když se při odesílání a přijímání pošty prostřednictvím lokálních účtů nepožadují uži vatelská jména a hesla, s mnohem menší pravděpodobností se budeme muset uchy lovat k různým systémovým kompromisům. Doručovací agent v i r t u a 1 nemusí provádět žádné uživatelské příkazy v shellu a ani nemusí připojovat poštu k lokál ním souborům zadaným uživatelem. Vzhledem k tomu , že tento agent neví nic o systému , nemůže zpracovávat soubory jako $ H O M E / f o rwa rd nebo využívat takové aplikace jako p r o c m a i 1 a va ca t i o n . Byl zreduko ván pouze na doručování zpráv do poštovních schránek . .
Kontrola podpory doručovacího agenta virtual Aby mohl Postfix využívat virtuální schránkové domény, musí být démon m a s t e r scho pen spustit démona v i r t u a 1 ; implicitně toto nastavení platí, viz následující příklad: =======================================================================
fl fl s e r v i c e t y p e fl fl i net smtp
pri vate unpri v (yes ) (yes )
ch root ( yes )
n
n
smtpd
wakeup maxproc ( neve r ) ( 1 00 )
c omma n d + a r g s
l oc a 1
un i x
n
n
1 oca 1
v i r t ua l
un i x
n
n
v i r t ua l
POZNÁMKA M usíme se přesvědčit. zda démon v i r t u a 1 neběží v uzavřeném prostoru (viz pátý slou pec v předchozím příkladu).
Základní konfigurace Při konfiguraci základí virtuální schránkové domény nastavíme doručovacího agenta v i r t u a 1 tak, aby do jedné adresářové struktury ukládal všechny zprávy se stejným VID a GID. Musíme provést následující kroky: 1.
Nastavíme jméno virtuální schránkové domény.
2.
Nastavíme vlastníka souboru doručovacího agenta v i r t u a 1 .
3.
Nastavíme základní adresář schránek domény.
4 . Vytvoříme mapu příjemců . 5.
Vytvoříme mapu aliasů .
Poštovn í server pro něko l i k domén
'B·fiIU'
Nastavení jména virtuální schránkové domény Nejdříve musíme sdělit Postfixu, že je cnovým místem určení jedné nebo více viruálních schránkových domén. V souboru ma i n . cf nastavíme do parametru v i r t u a l _m a i 1 b o x_d o · m a i n s seznam domén. Kdybychom například ve virtuální schránkové doméně chtěli vy tvořit schránku pro e x a m p 1 e . c om, nastavení by vypadalo takto:
v i r t u a 1 _ma i 1 b o x_d oma i n s
�
examp1 e . com
Nastavení vlastníka souboru I když virtuální schránkové domény nevyžadují, aby každá schránka měla jednoznačné ho uživatele, potřebujeme alespoň jedno uživatelské ID (UID) a ID skupiny (GID), aby měl doručovací agent virtual přístup ke schránkám. Mapy vlastníků musíme definovat pomocí parametrů v i r t u a Lu i d_m a p s a v i r t u a l _g i d_ma p s .
Nastavení uživatele K tomu, abychom nastavili vlastníka schránky, musíme nejdříve vytvořit lokálního uži vatele schránky, pokud již neexistuje . Následujícím příkazem vytvoříme uživatele schrán ky jménem v u s e r s UID 1 000:
# useradd vuser - u 1000 UPOZORNĚNí I m p l icitně nesm í m ít vlastník schrá n ky U I D n ižší než 1 00. Jde o bezpečnost n í opatře n í d a n é parametrem v i r t u a l _m i n i m u m_u i d, kterým s e chrá n í citl ivé systémové soubory proti přepisu agentem v i r t u a 1 . V souboru ma i n . c f m ůžeme hodnotu tohoto paramet ru (a tím i h ra n ici) změn it. Když máme vlastníka schránky, musíme sdělit démonu v i r t u a 1 , aby při psaní zpráv sou borovému systému používal jeho VID. V následujícím příkladu nastavíme v souboru ma i n . c f parametr v i r t u a Lu i d_ma p s na hodnotu 1 000:
v i r t u a 1 _u i d_m a p s
�
s t a t i c : 1 000
POZNÁMKA Aby démon v i r t u a 1 používa l výhradně tuto hodnou U I D, zvo l íme statické nastave n í. J i n a k l z e použít i dyna m ické nastave n í, o čemž s e krátce zmíníme až v části " Pokroči lé konfig u race " .
Nastavení skupiny Potřebujeme nejen lokálního uživatele, ale i skupinu . Základní nstavení provedeme tak, že vytvoříme GID se stejnou hodnotou jako UID v předchozí části. Mohli jsme to udělat už příkazem useradd (viz soubor l e t c / g r o u p); pokud nikoli, provedeme následující pň.'k az:
# g roupadd vuser - g 1000 Nyní nastavíme v souboru ma i n . c f parametr v i r t u a 1 _9 i d_ma p s , podobně jako v přípa dě uživatele:
s t a t i c : 1 000
1 93
1 94
'éfi''''
Kapitol a 1 4
Nastavení základního adresáře virtuální schránkové domény Doručovací agent vi r t u a l musí vědět, kde má hledat schránky příjemců . Ú kolem ope račního systému je zpřístupnit aplikacím vnější proměnné a konfigurační soubory, ze kte rých mohou získat údaje o implicitním nastavení systému . Avšak vzhledem k tomu , že doručovací agent nezná vnější proměnné, musíme explicitně zadat, kam se mají předá vat zprávy uživatelům. V souboru ma i n . c f nastavíme parametr v i r t u a l _ma i l b o x_b a s e , čímž zadáme, kam se mají ukládat příchozí zprávy. Viz příklad:
v i r t u a l _ma i l b o x_b a s e
�
/ v a r / s p o o l / v i r t u a l _ma i l b o x e s
POZNÁMKA Plná cesta virtuá l n í sch rá n ky se skládá z hod n oty v i r t u a l _ma i 1 b o x_ba s e a z hodnoty ve vyh l edávací m a pě (popsa n é v n á s l e d uj íc í část i ) . J i ný m i s l ovy, je to $ v i r t u a l _m a i l b o x_ba s e / $ ma i l b o x n a me . P o nastavení parametru v i r t u a L m a i 1 b o x_b a s e je dobré adresář skutečně vytvořit a zpří stupnit uživateli definovanému v předchozích částech:
# m k d i r / v a r / s p o o l / v i r t u a l _ma i l boxes # c h own v u s e r : v u s e r / v a r / s p o o l / v i r t u a l _ma i l boxes # c hmod 7 0 0 / v a r / s p o o l / v i r t u a l _ma i l b o x e s Vytvoření mapy příjemců Příjemce ve virtuální schránkové doméně musíme definovat v mapě. Vytvoříme si na příklad soubor jménem / e t c / p o s t f i x / v i r t u a l _ma i l b o x_ r e c i p i e n t s s úplnými jmény příjemců na levé straně a jmény schránek na pravé straně . Mapa může vypadat napří klad takto:
w i l m a . p e b b l e@e x a m p l e . c o m b e t ty . mc b r i c k e r@e x a mp l e . c o m f r e d . f l i n t s t o n e@e x a m p l e . c om b a r n ey . r u b b l e@e x a mp l e . c o m b a mm . b a mm@e x a mp l e . c o m
wi l ma pe b b l e b e t ty mc b r i c k e r fredfl i ntstone b a r n ey r u b b l e b a mm b a m m /
Démon v i r t u a l předřadí hodnotu parametru v i r t u a l _ma i l b o x_b a s e před jméno schránky, čímž vytvoří úplnou cestu ke schránce. Implicitní tvar schránek je mbox, avšak můžeme použít i tvar Maildir tak, že ke jménu schránky připojíme lomítko (I) jako v pří padě položky b a mm . b a mm@e x a m p l e . c o m v předchozím příkladu . Jakmile jsme se souborem spokojeni, vytvoříme jeho indexovanou verzi příkazem:
# p o s t m a p h a s h : / e t c / p o s t f i x / v i r t u a l _ma i l box_rec i p i e n t s Poté můžeme pomocí parametru v i r t u a l _ma i 1 b o x_ma p s v souboru m a i n . c f sdělit Post fixu , kde nalezne příslušnou mapu :
v i r t u a l _ma i l b o x_m a p s
�
h a s h : / e t c / p o s t f i x / v i r t u a l _ma i l b o x_ r e c i p i e n t s
Poštovní server pro něko l i k domén
'B-fi'''!
Omezení v mapě příjemců v mapě příjemců existují z důvodů bezpečnosti jistá omezení: •
• •
•
Příjemci ve virtuální schránkové doméně nemohou používat rozšířené adresy typu u s e r+ e x t e n s i o n@d om a i n . t l d . Démon v i r t u a 1 nemůže na rozdíl od démona 1 o c a 1 spustit externí program. V mapě můžeme používat regulární výrazy, nikoli však substituce, tj . na pravou stra nu nemůžeme dát například $ 1 . Tabulky nemůžeme prohledávat pomocí démona p r oxyma p .
Vytvoření mapy aliasů Ve virtuální schránkové doméně můžeme mít aliasy, avšak musí být uvedeny ve zvlášt ní mapě, např. I e t c I p o s t f i x l v i r t u a l _ma i 1 b o x_a 1 i a s e s . Na levé straně jsou úplná jmé na aliasů, na pravé straně úplné cílové adresy, jako například:
w i l ma@e x a m p l e . c om p e b b l e@e x a mp l e . c o m
w i l ma . p e b b l e@e x a mp l e . c o m w i l ma . p e b b l e@e x a mp l e . c o m
p o s tma s t e r@e x a mp l e . c om a b u s e@e x a mp l e . c o m
b a mm . b a mm@e x a m p l e . c o m b a mm . b a mm@e x a m p l e . c o m
Znovu vytvoříme indexovanou verzi mapy:
# p o s tma p h a s h : / e t c / p o s t f i x / v i r t u a l _ma i l b ox_a l i a s e s Nakonec pomocí parametru v i r t u a La l i a s_m a p s v souboru m a i n . c f sdělíme Postfixu, že má tuto mapu používat:
v i r t u a l _a l i a s_ma p s = h a s h : / e t c / p o s t f i x / v i r t u a l _ma i l b o x_a l i a s e s P o opětovném zavedení Postfixu bude poštovní server přijímat zprávy pro příjemce ve virtuální schránkové doméně.
Pokročilé konfigurace Máme-li poskytovat služby několika virtuálním schránkovým doménám, je pravděpo dobné, že při ukládání všech zpráv do jediné adresářové struktury vzniknou potíže, ne boť mohou existovat dva uživatelé se stejným jménem. Navíc, oddělené zálohování dat je velmi nešikovné. Problém můžeme vyřešit například tak, že virtuální schránkové do mény pro ukládání zpráv pro různé domény zkonfigurujeme v různých adresářích. Ta ké v nich můžeme používat různé UID a GID. Při nastavování pokročilé konfigurace musíme postupovat takto: 1.
Nastavíme jména virtuálních schránkových domén.
2 . Pro doručovacího agenta v i r t u a 1 nastavíme vlastníka. 3.
Nastavíme základní adresář pro schránky.
4.
Vytvoříme mapu příjemců .
5.
Vytvoříme mapu aliasů .
6.
Nastavíme paměť a přístupová práva.
1 95
1 96
'a-fiNt'
Kapitol a 1 4
Nastavení jmen virtuálních domén Jména virtuálních schránkových domén nastavíme podobně jako v části "Nastavení jmé na virtuáfní schránkové domény" pomocí parametru v i r t u a l _m a i l b o x_d oma i n s , viz ná sledující příklad:
v i r t u a l _ma i l b o x_d oma i n s = e x a m p l e . c o m . p o s t f i x · b o o k . c om
Nastavení vlastníka souboru V pokročilé konfiguraci musíme vytvořit množinu UID a GID pro každou virtuální do ménu příjemců . Řekněme, že pro e x a m p 1 e . c o m chceme používat jméno uživatele a sku piny example a pro p o s t f i X · b o o k . c o m jméno p f x b o o k s . Podrobnosti viz stejnojmenný odstavec shora; uživatele vytvoříme například příkazy:
# # # #
u s e r a d d e x a mp l e - u 1 0 0 1 u s e r a d d pfx b o o k - u 1 0 0 2 g r o u p a d d exampl e - g 1 0 0 1 g r o u p a d d pfxbo o k - g 1 0 0 2
K těmto UID a GID poznamenejme, ž e s e jimi budeme brzy zabývat, a t o jakmile vy tvoříme vyhledávací mapy v části nazvané "Nastavení paměti a přístupových práv".
Vytvoření základního adresáře pro virtuální schránkovou doménu Démonu v i r t u a 1 sdělíme, kam má ukládat zprávy pomocí parametru v i r t u a l _ma i 1 b o x_ba s e , podobně jako v části "Nastavení základního adresáře virtuální schránkové do mény" shora. V této části provedeme stejné nastavení:
v i r t u a l _ma i l b o x_b a s e = / v a r / s p o o l / v i r t u a l _ma i l b o x e s Nicméně, rozdíl mezi nastavením shora a tímto nastavením spočívá v rozdílných přístu pových právech uložených v parametru v i r t u a l _m a i 1 b o x_b a s e . Pokud by tomu tak ne bylo (tj . kdybychom pro ukládání zpráv nepoužívali jiné UID a GID pro každého uživatele a každou doménu), démon v i r t u a l by nemohl zapisovat do podadresářů :
# m kd i r / v a r / s p o o l / v i r t u a l _ma i l b o x e s # c h own v u s e r : v u s e r / v a r / s p o o l / v i r t u a l _ma i l boxes # c hmod 775 / v a r / s p o o l / v i r t u a l _ma i l b o x e s Nyní musíme vytvořit podadresáře (například e x a m p 1 e . c o m a p o s t f i x - b o o k . c om), neboť démon v i r t u a 1 vytvoří pouze mbox nebo Maildir příjemce, nikoli rodičovský adresář je ho domény.
# # # #
mkdi r c h own chgrp chmod
e x a m p l e . c om e x a mp l e exampl e . com/ examp l e e x a mp l e . com/ 7 0 0 examp l e . c o m /
U POZORNĚNí Postfix 2.0 a dřívější nevytvá řej í schrá n ky typu M a i l d i r v rod ičovských ad resá řích se zá pisovým právem " ostatn í " ; M a i l d i r musíme vytvořit předem.
Poštovn í server pro někol i k domén
'4-b'it'
Selže-li doručení zprávy z důvodu přístupových práv, v žurnálním souboru nalezneme zprávu podobnou této:
M a y 2 6 1 2 : 0 4 : 3 3 m a i l p o s t f i x / v i r t u a l [ 1 4 1 9 6 J : wa r n i n g : m a i l d i r a c c e s s p r o b l e m f o r U I D / G I D= 1 0 0 2 / 1 0 0 2 : c r e a t e / v a r / s p o o l / m a i l b o x e s / p o s t f i x b o o k . c o m / p a t r i c k / tm p / l 0 8 5 5 6 5 8 7 3 . P 1 4 1 9 6 . ma i l . e x a m p l e . c om : P e r m i s s i o n d e n i ed May 26 1 2 : 04 : 33 ma i l p o s t f i x / v i r t ua l [ 1 4 1 96 J : wa rn i ng : p e r h a p s you need t o c r e a t e t h e ma i l d i r s i n a d v a n c e
Vytvoření mapy příjemců Nyní musíme ve virtuální schránkové doméně vytvořit mapu platných příjemců . Postup je stejný jako v případě jedné domény s tím rozdílem, že před jména schránek musíme předřadit adresáře. Pak půjdou zprávy pro různé domény do různých adresářů, takže se nemusíme obávat, že nastane konflikt z důvodu shodných jmen. Můžeme vytvořit napň.1dad takovýto soubor / e t c / p o s t f i x / v i r t u a l _ma i 1 b ox_r e c i p i e n t s :
w i l ma . p e b b l e@e x a m p l e . c o m b e t ty . mc b r i c k e r@e x a mp l e . c o m f r e d . f l i n t s t o n e@e x a mp l e . c o m b a r n ey . r u b b l e@e x a m p l e . c om b a mm . b a mm@e x a m p l e . c o m r a l f@p o s t f i x - b o o k . c o m p a t r i c k@p o s t f i x - b o o k . c o m
e x a mp l e . c o m / w i l ma p e b b l e / e x a m p l e . c o m / b e t ty mc b r i c k e r / e x a mp l e . c o m / f r e d f l i n t s t o n e / e x a mp l e . c o m / b a r n ey r u b b l e / e x a m p l e . c om / b a mm b a m m / postfi x - boo k . com/ ra l f/ post f i x - book . com/ pa t r i c k /
Nesmíme zapomenout, že i v tomto případě j e nutné vytvořit indexovanou verzi této mapy:
# p o s tma p h a s h : / e t c / p o s t f i x / v i r t u a l _ma i l box_ r e c i p i e n t s v souboru ma i n . c f musíme opět nastavit parametr v i r t u a l _m a i 1 b o x_m a p s na příslušnou
hodnotu :
v i r t u a l _ma i l b o x_ma p s = h a s h : / e t c / p o s t f i x / v i r t u a l _m a i l b o x _ r e c i p i e n t s Tím jsme se postarali o všechny příjemce s výjimkou aliasů , které vytvoříme stejným způ sobem jako v části "Vytvoření mapy aliasů" shora.
Nastavení paměti a přístupových práv Jak jsme si řekli v části "Nastavení vlastníka souboru " , pro různé virtuální schránkové do mény nemúžeme definovat oddělenou paměť a různá přístupová práva. Místo toho mu síme vytvořit mapy se shodnými UID a GID. Nyní se vrátíme k VID a GID vytvořeným v části "Nastavení vlastníka souboru" . V mapě uvedené v parametru v i r t u a l _u i d_m a p s musíme každé schránce přiřadit VID . V soubo ru ma i n . c f nastavíme jméno mapy h a s h : / e t c / p o s t f i x / v i r t u a l _u i d_m a p :
v i r t u a l _u i d_ma p s = h a s h : / e t c / p o s t f i x / v i r t u a l _u i d_m a p Nyní d o mapy uložíme příjemce. Vlevo bude jeho úplná adresa, vpravo bude UID, viz příklad:
1 97
1 98
'4-fi" P
Kapitol a 1 4
w i 1 ma . p e b b 1 e@e x a mp 1 e . c o m b e t ty . mc b r i c k e r@e x a m p 1 e . c o m f r e d . f 1 i � t s t o n e@e x a m p 1 e . c o m b a r n ey . r u b b 1 e@e x a m p 1 e . c o m b a mm . b a mm@e x a mp 1 e . c om r a 1 f@p o s t f i x - b o o k . c om p a t r i c k@p o s t f i x - b o o k . c o m
1001 1001 1001 1001 1001 1002 1002
POZNÁMKA Nesmíme zapomenout opět vytvořit i ndexova nou verzi m a py příkazem p o s t m a p . V krat ší verzi by vypadala ta kto: @ex a m p 1 e . c om 1 0 0 1 @p o s t f i x - b o o k . c om 1 0 0 2 Mapování GID j e stejné jako v případě UID. Zde j e vzorová mapa / e t c / p o s t f i x / v i r t u a 1 _g i d_m a p , kterou můžeme použít v tomto příkladu :
w i 1 ma . p e b b 1 e@e x a mp 1 e . c o m b e t ty . mc b r i c k e r@e x a mp 1 e . c o m f r e d . f 1 i n t s t o n e@e x a mp 1 e . c o m b a r n ey . r u b b 1 e@e x a mp 1 e . c om b a mm . b a mm@e x a mp 1 e . c o m r a 1 f@p o s t f i x - b o o k . c om p a t r i c k@p o s t f i x - b o o k . c om
1001 1001 1001 1001 1001 1002 1002
Mapu nastavíme v parametru v i r t u a l _g i d_ma p s :
v i r t u a 1 _g i d_ma p s
=
h a s h : / e t c / p o s t f i x / v i r t u a 1 _g i d_m a p
Vzh ledem k tomu, ž e položky v m a pě v i r t u a l _g i d_ma p s jsou přesně stej né jako v ma pě v i rtu a l _u i d_ma ps, práci s vytvá řením G I D si m ů žeme ušetřit a v souboru m a i n . cf se odkážeme na mapu U I D :
Po nastavení map a konfiguračního souboru znovu zavedeme Postfix. O d toho okamži ku bude démon v i r t u a 1 doručovat zprávy do podadresářů pojmenovaných podle do mén příjemců .
Generování map pomocí skriptů Jak jsme si mohli všimnout, démon v i r t u a 1 potřebuje nejméně tři mapy pro vyhledává ní příjemců , schránek a přístupových práv. Značně si ulehčíme život, budeme-li mít skript, který vytvoří všechny mapy z jediného zdrojového souboru, např. / e t c / p o s t f i x / v i r t u a l _b u i 1 d_ma p_s o u r c e , který obsahuje všechny požadované informace. Řek něme například, že zdrojový soubor obsahuje tyto řádky:
w i 1 m a . p e b b 1 e@e x a m p 1 e . c o m b e t ty . mc b r i c k e r@e x a m p 1 e . c o m f r e d . f 1 i n t s t o n e@e x a mp 1 e . c o m b a r n ey . r u b b 1 e@e x a mp 1 e . c o m
examp1 e . com/wi l ma pebb 1 e / e x a m p 1 e . c om / b e t ty mc b r i c k e r / e x a mp 1 e . c o m / f r e d f 1 i n t s t o n e / e x a m p 1 e . c o m / b a r n ey r u b b 1 e /
1001 1001 1001 1001
1001 1001 1001 1001
'4-fi'lC'
Poštovn í server pro někol i k domén b a mm . b a mm@e x a mp l e . c om r a l f@p o s t f i x · b o o k . c o m p a t r i c k@po s t f i x · b o o k . c o m
e x a mp l e . c o m / b a mm b a m m / postfi x - book . com/ ra l f/ p o s t f i x - b o o k . c om / p a t r i c k /
1001 1 002 1 002
1001 1 002 1002
Následující skript (nazvěme jej /etc/postfixJbuild_virtuaLmaps) čte data ze zdroje a vy tváří tři cílové mapy: It ! / b i n / b a s h It It B u i l d a l l v i r t u a l ma i l b o x m a p s f r om o n e sQ u r c e It s e c t i o n : p a t h s
S O U R C E � / e t c / p o s t f i x / v i r t u a l _b u i l d_ma p_s o u r c e V M A P � / e t c / p o s t f i x / v i r t u a l _ma i l b o x_ r e c i p i e n t s V U l D� / e t c / p o s t f i x / v i r t u a l _u i d_ma p V G l D� / e t c / p o s t f i x / v i r t u a l _g i d_m a p AWK� / u s r / b i n / a w k P O S T M A P � / u s r / s b i n / p o s tm a p It s e c t i o n : b u i l d It b u i l d $ v i r t u a l _ma i l b o x_m a p s $ A W K ' l p r i n t f C " % s % s \ n " , $ 1 , $ 2 ) } ' $ S O U RC E > $ V M A P $ PO STMAP h a s h : $ VMAP It b u i l d S v i r t u a l _u i d_ma p s $ A W K ' l p r i n t f C " % s % s \ n " , $ l , $ 3 ) } ' $ SO U R C E > $ VU l D $ PO STMAP h a s h : $ V U l D It b u i l d S v i r t u a l _g i d_ma p s $AWK ' { p r i n t f C " % s %s \ n " , S l , $4 ) } ' $ SOURCE > $ VG l D $ PO STMAP h a s h : S V G l D
POZNÁMKA Tento skript si m ůžeme stá h nout ze strá nek Book of Postfix na http://www . postfix book.co m . (Některé cesty se pochopitelně mohou změn it.) Po spuštění skriptu by měly mít všechny mapy kromě zdrojového souboru a virtuální ali asové mapy stejné datum a stejný čas.
- rw - r - rw - r - rw - r - rw - r - rw- r - rw - r - rw- r-
-r- -r- -r- -r- -r- - r- -r- -
root root root root root root root
root root root root root root root
5 3 2 M a y 2 6 1 2 : 1 2 v i r t u a l b u i l d _ma p_s o u r c e 2 5 1 M a y 2 6 1 3 : 2 1 v i r t u a l _g i d_m a p 1 2 2 88 M a y 2 6 1 3 : Z l v i r t u a l _g i d_m a p . d b 3 9 4 M a y 2 6 1 3 : 2 1 v i r t u a l m a i l b o x_ r e c i p i e n t s 1 2 2 88 M a y 2 6 1 3 : Z l v i r t u a l _ma i l b o x _ r e c i p i e n t s . d b 2 5 1 M a y 2 6 1 3 : 2 1 v i r t u a l u i d _m a p 1 2 2 88 M a y 2 6 1 3 : Z l v i r t u a l _u i d_m a p . d b -
-
-
Virtuální schránkové domény řízené databází Je-li naším úkolem správa firemní sítě nebo sítě poskytovatele připojení k Internetu, Post fix může získávat informace o virtuálních schránkových sítích z databáze. Toto uspořá dání je velice flexibilní, neboť můžeme přenést správu uživatelů na jiné osoby, aniž bychom jim na serveru museli dát přístupová práva uživatele root. Poskytujeme-li plné webové rozhraní, zákazník si sám může spravovat svoje data (přidávat aliasy, měnit hes la SMTP, AUTH, POP3 a lMAP atd.). A protože se změny v databázi projeví ihned, ne musíme zavádět Postfix pokaždé, když změníme nějaká data.
1 99
200
'4-aUM
Ka pito l a 1 4
Na druhé straně, indexované mapy mají rychlejší dobu odezvy a vyhledávání nespotře buje tolik systémových prostředků jako dotazy SQL, neboť není nutno provozovat data bázový s�rver. Navíc, databázová řešení obvykle bývají podstatně složitější. Začne-li docházet k poklesu výkonu způsobenému vyhledáváním v databázi, je vhodné zvážit vytvoření jednoúčelového databázového serveru pro více postfixových serverů (a jiné služby) . V kombinaci s vyvažovacími mechanismy zátěže (např. cyklická obslu ha) a s využitím speciálního hardwaru můžeme tímto způsobem zajistit vysoce výkonné poštovní služby. V této části si ukážeme, jak se implementují virtuální schránkové domény řízené data bází. Tou databází bude MySQL, postupovat budeme podle následujících bodů : 1.
Zjistíme, zda je v naší konfiguraci Postfixu namapována podpora MySQL.
2.
Pokud není, přidáme ji.
3.
Zkonfigurujeme databázi .
4.
Otestujeme funkci virtuální schránkové domény řízené databází.
POZNÁMKA M a py řízené data bází se mohou používat i j i nde než ve virtuá l n ích sch rán kových do ménách. J ej ich použití m ůže vycházet z mnoha j i ných scénářů. Postfix také pod poruje Postg reSQL a LDAP (konfi g u race Postg reSQL je prakticky totožná s konfi g u rací MySQL; LDAP je popsá na v kapitole 1 9).
Ověření podpory MyS Q L Než začneme konfigurovat Postfix pro práci s databází MySQL, měli bychom si ověřit, zda daná instalace podporuje tento typ map. Můžeme to provést pomocí příkazu p o s t c o n f - m, po jehož zadání se vypíší všechny podporované typy map. Je-li mezi nimi i My SQL, měli bychom to vidět na výpisu , jako v následujícím příkazu : fl p o s t c o n f - m
btree cidr e n v i ron hash l dap
mys q l
ni s pere p r oxy regexp s d bm stati c un i x Pokud podpora v naší instalaci není, je třeba buď nainstalovat z distribuce operačního systému balík Postfixu, který tuto podporu obsahuje, nebo ji doplnit do Postfixu ručně a poté jej znovu nainstalovat, viz následující část.
'B·a'it'
Poštovn í server pro něko l i k domén
Vytvoření Postfixu s podporou MyS Q L Při vytváření Postfixu s podporou tabulek S Q L začneme tím, ž e lokalizujeme hlavičkové soubory a knihovny, které Postfix potřebuje ke své činnosti. Adresář hlavičkových sou borů najdeme pomocí příkazu :
# f i n d l u s r - n a m e ' my s q l . h ' I u s r I i n e 1 u d e / my s q l I my s q l . h Vidíme, že hlavičkové soubory tohoto konkrétnmo systému jsou v adresáři I u s r l i n e l u d e / my s q l . Klientské knihovny MySQL pak najdeme pomocí příkazu :
# f i n d l u s r - n a m e ' l i bmy s q l e l i e n t . * ' /usr/l /usr/l /usr/l lusr/l
i b / my s q l i b / my s q l i b / my s q l i b / my s q l
/l /l /l /l
i bmy s q l e l i bmy s q l e l i bmy s q l e l i bmy s q l e l
i ent . so . l 0 i ent . so . l 0 . 0 . 0 i en t . s o i ent . a
Z výpisu vidíme, že knihovny jsou v adresáři / u s r l l i b / my s q l . Když nyní známe cesty k těmto souborům, můžeme nastavit příslušné proměnné v post fixovém souboru Makefile, kterým se provede konfigurační proces. Pomocí následujících příkazů nastavíme příslušné cesty a provedeme konfiguraci :
$ $
m a k e t i dy m a k e ma k e f i l e s C C A RGS= ' - D H A S_MY S Q L - I / u s r / i n e l u d e / my s q l ' A U X L I B S= ' - L I u s r I I i b / my s q l - 1 my s q l e 1 i e n t - 1 z 1 m ' ma k e -
$
Poté Postfix nainstalujeme a postupem popsaným v předchozí části s i ověříme, zda v se znamu podporovaných map přibyl typ MySQL.
Konfigurace databáze Nyní jsme připraveni vytvořit databázi na ukládání dat, které se vztahují k virtuálním do ménám. K databázi MySQL se nyní připojíme jako uživatel r o o t a databázi vytvoříme . Následujícím příkazem vytvoříme databázi jménem ma i 1 :
my s q l > C R EAT E DATA BAS E ' ma i l ' ;
Kompletn í množ i n u příkazů SQL uvedených v této části je možno stá hnout ze strá nek The Book of Postfix na ad rese h t t p : / / www . p o s t f i x - b o o k . e om. Pokud bychom si potře bova l i poněkud osvěžit znalosti o SQL, na adrese at h t t p : I I s q l z o o . n e t na lezneme text A Gentle I ntrod uction to SQL.
Vytvoření tabulky domén Domény, které má Postfix považovat za své cílové destinace, uložíme do tabulky, již mů žeme nazvat například v i r t u a l _ma i 1 b o x_d oma i n s . Tabulku musíme nejdříve vytvořit:
my s q l > C R EATE TAB L E ' v i rt u a l _ma i l b o x_d o m a i n s ' ( ' I d ' i n t ( l O ) u n s i g n e d N O T N U L L a u t o_i n e r e m e n t , my s q l > my s q l > ' d o ma i n ' v a r e h a r ( 2 5 5 ) d e f a u l t N U L L .
201
202
'4-fiNG' my s q l > my s q l > my s q l >
�
Kapito l a 14 P R I MARY KEY ( ' I d ' ) , F U L LT E X T KEY ' d oma i n s ' ( ' d oma i n ' ) TY P E-My I SAM C O M M E N T- ' P o s t f i x v i r t u a l a l i a s e s ' ;
Pokud se příkaz úspěšně provedl , můžeme do tabulky přidat i virtuální domény. Napří klad examle .com přidáme do tabulky pomocí příkazu SQL:
my s q l > I N S E RT I NTO v i r t u a l _ma i l box_d oma i n s VALU E S ( I , ' ex a m p l e . c om ' ) ;
Přidávání uživatelů v tomto okamžiku je třeba vytvořit tabulku , jejíž každý řádek obsahuje příjemce, jméno schránky, VID a GID. Můžeme ji pojmenovat v i r t u a l _u s e r s ; její struktura je velmi po dobná sloupcům v souboru / e t c / p a s t f i x / v i r t u a l _b u i 1 d _m a p _ s a u r c e , kterou jsme pro bírali v části "Generování map pomocí skriptů" shora .
POZNÁMKA Následuj ící tab u l ka je vytvořená pod le ta b u l ky MySQL SMTP AUTH v kapitole 1 8. Obsa h uje hesla a další i nformace, takže ji m ůžeme použít jako zá ložn í a utentizačn í zd roj jak pro SMTP, tak i pro virtuá l n í schrán kové domény. Tabulku vi r t u a Lu s e r s vytvoříme pomocí příkazu :
my s q l > C R EAT E TAB L E ' v i r t u a l _u s e r s ' ( my s q l > ' i d ' i n t ( l l ) u n s i g n e d NOT N U L L a u t o_i n c r eme n t , my s q l > ' u s e r n ame ' v a r c h a r ( 2 5 5 ) NOT N U L L d e f a u l t ' O ' , my s q l > ' u s e r r e a l m ' v a r c h a r ( 2 5 5 ) NOT N U L L d e f a u l t ' ma i l . ex a m p l e . c om ' , my s q l > ' u s e r p a s swo r d ' v a r c h a r ( 2 5 5 ) NOT N U L L d e f a u l t ' l s t P@s s ' , my s q l > ' a u t h ' t i n y i n t ( 1 ) d e f a u l t ' 1 ' , my s q l > ' a c t i v e ' t i ny i n t ( l ) d e f a u l t ' 1 ' , my s q l > ' ema i l ' v a r c h a r ( 2 5 5 ) NOT N U L L d e f a u l t my s q l > ' v i r t u a l _u i d ' sma l l i n t ( 5 ) d e f a u l t ' 1 0 0 0 ' , my s q l > ' v i r t u a Lg i ď s m a l l i n t ( 5 ) d e f a u l t ' 1 0 0 0 ' , my s q l > ' v i r t u a l _ma i l b ox ' v a r c h a r ( 2 5 5 ) d e f a u l t N U L L , my s q l > P R I MARY KEY ( 'iď ) , my s q l > U N I Q U E K E Y ' i ď ( ' i ď ) , my s q l > F U L LT E X T KEY ' r e c i p i e n t ' ( . ema i l ' ) my s q l > ) TY P E-My I SAM COMM E N T- ' SMTP AUTH a n d v i r t u a l u s e r s ' ; Pole a c t i v e je volitelné; můžeme jím blokovat uživatelské schránky (což může být uži tečné, například když uživatel neplatí, a chceme mu tedy zrušit službu , nikoli však účet) . Tabulku musíme otestovat. Následujícím příkazem přidáme zkušební řádek:
my s q l > I N S E RT I NTO v i r t u a l _u s e r s VALU ES my s q l > ( 5 , ' b a mm . b a mm ' , ' ma i l . e x a m p l e . com ' , ' l s t P@s s ' , 1 , 1 , my s q l > ' b a mm . b a mm®ex a mp l e . c om ' , 1 0 0 1 , 1 0 0 1 , ' e x a m p l e . c o m / b a mm b a mm / ' ) ;
Vytvoření tabulky pro virtuální aliasy Poslední tabulka, kterou musíme vytvořit, je tabulka pro virtuální aliasy. Podobně jako v případě ostatních map obsahují řádky jména aliasů a skutečné adresy příjemců . Ta bulku jménem v i r t u a l _a 1 i a s e s vytvoříme takto:
'4-hUC'
Poštovn í server pro něko l i k domén
my s q l > C R EATE TAB L E ' v i r t u a l _a l i a s e s ' ( my s q l > ' I d ' i n t ( 1 0 ) u n s i g n e d NOT NU L L a u t o_i n c r eme n t , my s q l > ' a l i a s ' v a r c h a r ( 2 5 5 ) d e f a u l t N U L L , my s q 1 > ' v i r t u a l _u s e r_ema i l ' text , ( ' Id ' ) , my s q l > P R I MA RY K E Y my s q l > F U L LT E X T K E Y ' a l i a s e s ' ( ' a l i a s ' , ' v i r t u a Lu s e r_ema i l ' ) my s q l > ) TY P E-My I SAM COMM E N T- ' P o s t f i x v i r t u a l r e c i p i e n t s ' ; Také tuto tabulku musíme naplnit daty. Můžeme začít aliasy, které vyžaduje protokol RFC:
my s q l > I N S E RT I NTO v i r t u a l _a l i a s e s V A L U E S ( I , ' p o s tma s t e r@ex a m p l e . com ' , ' b a mm . b a mm@e x a m p l e . com ' ) ; my s q l > I N S E RT I NTO v i r t u a l _a l i a s e s VALU E S ( 2 , ' a b u s e@ex a m p l e . c om ' , ' b a mm . b a mm@ex a m p l e . com ' ) ;
Vytvoření uživatele MySQL v Postfixu Naším posledním úkolem při konfiguraci databáze je vytvoření uživatele MySQL, který by mohl zadávat dotazy. Jeho přístupová práva by měla být omezena, aby nemohl mo difikovat data . Následujícím příkazem přidáme nového uživatele jménem postfix, který se může připojit z lokálního počítače:
my s q l > C O N N ECT my s q l ; my s q l > I N S E RT I NTO u s e r V A L U E S ( ' l oc a l h ost ' , ' postfi x ' , ' ' V ' , ' Y ' , ' Y ' , ' Y ' , ' Y ' , ' Y ' , ' Y ' . ' Y ' , 'Y' , 'Y' , 'Y' , 'Y' , 'Y' , 'Y' ) ; my s q l > U P DATE my s q l . u s e r S ET p a s swo rd-PASSWORD ( " Y a n g g t ! " ) W H E R E u s e r- ' p o s t f i x ' A N D h o s t- ' l o c a l h o s t ' ; my s q l > F L U S H P R I V I L E G E S ; I
,
Přístupová práva účtu musíme omezit pouze na čtení (SELECT). Postfix by neměl mít možnost tabulky měnit ani je vytvářet. Použijeme k tomu příkaz GRANT:
my s q l > G RANT USAGE ON * . * TO ' po s t f i x ' @ ' l o c a l h o s t ' I D E NT I F I E D BY PASSWO RD ' 2 fc87 9 7 1 4 f 7 d 3 e 7 2 ' ; my s q l > G RANT S E L E CT O N m a i l . v i r t u a l _a l i a s e s TO ' p o s t f i x ' @ ' l o c a l h o s t ' ; my s q l > G RANT S E L E CT O N m a i l . v i r t u a l _u s e r s TO ' p o s t f i x ' @ ' l o c a l h o s t ' ; my s q l > G RANT S E L E CT ON ma i l . v i r t u a l _ma i l box_d oma i n s TO ' p o s t f i x ' @ ' l o c a l h o s t ' ;
Konfigurace Postfixu pro užívání databáze Když konfigurujeme dotazovací systém SQL pro Postfix, ve speciálním souboru musíme nastavit tyto parametry. Postfix je nahradí a vytvoří posloupnost příkazů SQL, která kon čí příkazem SELECT.
user Jméno uživatele, který se připojuje k databázi.
password Uživatelské heslo. Musí se skládat z nešifrovaného textu .
203
204
'a-h'!M
Kapitola 1 4
hosts Seznam jednoho nebo více úplných jmen (FQDN) nebo IP adres SQL serverů . Pokud se POStfixu nepodaří navázat spojení s prvním z nich, pokusí se navázat je s jiným v náhodném pořadí. Není-li dostupný žádný server, Postfix úlohu odloží, dokud ně který server nepřejde do on-line režimu . Pokud je serverem lokální počítač, Postfix automaticky používá unixový doménový socket místo spojení TCP/UDP.
dhname Databáze, k níž se Postfix připojí.
tahle Jméno tabulky, která obsahuje data virtuální domény.
selecCfield Pole, které obsahuje výsledek dotazu (např. adresu uživatele).
where_field Pole, které se porovnává s obsahem databáze (například alias).
additionaCconditions Další podmínky dotazu ; můžeme se například dotazovat pouze na aktivní účty. Ten to parametr je volitelný. V tabulce 1 4 . 1 je znázorněno, jaký mají pole indexované mapy vztah k parametrům da tabáze . Můžeme ji použít například tehdy, když vytváříme příkaz SELECT a nevíme přes ně, která pole máme použít.
Tabulka 1 4. 1 : Vzta h mezi pol i indexova né mapy a parametry databáze Typ mapy
LHS (levá strana)
RHS (pravá strana)
Podmrnky
indexova ná m a pa ta b u l ka SQL
levý sloupec w h e r e_f i e l d
pravý slou pec s e l e c t_f i e l d
a dd i t i on a l cond i t i on s
Ochrana konfigurace v současnosti podporuje Postfix dva způsoby konfigurace příkazů SELECT databáze My
SQL (a PostgreSQL). První vyžaduje, aby v souboru m a i n . cf bylo zapsáno uživatelské jméno postfixového SQL serveru, což ovšem není příliš bezpečné, takže tento způsob nebudeme uvádět (soubor ma i n . cf obvykle není chráněn proti čtení, takže k těmto dů věrným informacím se může dostat každý uživatel systému). Trvá-li někdo na používání této metody, příslušné informace nalezne v postfixovém adresáři r e a d m e v souboru M Y S Q L_ R E A D M E , upozorňujeme však, že Postfix nebude tento způsob v dalších verzích podporovat. Druhá metoda je mnohem bezpečnější. Příkazy SELECT (včetně uživatelského jména a hesla) jsou ve zvláštních souborech mimo ma i n . c f , budou uloženy v podadresářích přístupných pouze Postfixu a uživateli root (jejich umístění je uvedeno v souboru ma i n . c o.
'4-Uiit'
Poštovní server pro něko l i k domén
Souborovou strukturu nastavíme tak, že nejprve vytvoříme adresář, např. l e t c / p o s t f i x / s q l , a zadáme příslušná přístupová práva:
# mkdi r /etc/postfi x/sql # c h own p o s t f i x l e t c / p o s t f i x / s q l # chgrp root letc/postfi x/sql # c hmod 5 0 0 l e t c / p o s t f i x / s q l Nyní sem můžeme ukládat soubory. Jsou zde ukryty před (téměř všema) zvědavýma očima.
Konstrukce dotazu na domény příjemců První soubor, který musíme do adresáře uložit, bude definovat parametry dotazu na do mény, pro něž se Postfix pokládá za místo určení. Do souboru , např. I e t c / p o s t f i xl s q l l v i r t u a Lma i 1 b o x_d oma i n s . cf, přidáme tuto konfiguraci:
user = postfi x pa s sword = Ya nggt ! d b n a m e = ma i l t a b l e = v i r t u a l _m a i l b o x d o ma i n s s e l e c t_f i e l d = d o m a i n w h e r e_f i e l d = d o m a i n hosts = l oc a l host Jak bylo uvedeno výše, tyto parametry odpovídají hodnotám v příkazu SQL S E L E C T . Pří kaz pro tento soubor bude mít následující tvar, přičemž domainpart je doménovou čás tí adresy příjemce příchozí zprávy:
my s q l > S E LECT doma i n F ROM v i r t u a l _ma i l box_doma i n s W H E R E doma i n
-
' doma i npa r t '
Může se zdát poněkud zvláštní, že čteme doménu z tabulky, když ji známe, avšak po intou tohoto dotazu je, zda v databázi existuje řádek se shodnou doménovou částí. Po kud není, odpověď na dotaz je negativní a Postfix ví, že není cílovou destinací pro tuto doménu.
POZNÁMKA Ž ádný z těchto příkazů S E L E C T nem usíme zadávat (Postfix je vytváří a utomaticky, když pracuje s data bází), avšak je dobré je znát, když ladíme data bázové dotazy. Nyní musíme sdělit Postfixu (v souboru ma i n . c f), aby používal MySQL a kde najde pa rametry pro v i r t u a l _m a i 1 b o x_d oma i n s . Specifikace vypadá spíše jako normální indexo vaná mapa, avšak klíčové slovo h a s h je zde nahrazeno slovem my s q l :
v i r t u a l _m a i l b o x_d oma i n s = my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _ma i l b o x_d o ma i n s . c f
205
206
'a-fiNt'
Kapitola 1 4
Vytváření dotazů n a UID a QID Dále musíme přidat parametry pro dotazy U I D a G I D (určují vlastníka virtuálního schrán kového s'ouboru). K souboru jménem I e t c / p o s t f i xl s q l l v i r t u a l _u i d_ma p s . cf přidáme tyto řádky:
user postfi x p a s sword Ya nggt ! d b n a me ma i 1 tabl e v i r t u a l _u s e r s s e l e c t_f i e l d v i rt u a l u i d w h e r e_f i e l d em a i l hosts l oca l host =
=
=
=
=
=
=
Příkaz S E L E C l , který odpovídá tomuto souboru , může vypadat například takto ( recipient je adresa příjemce příchozí zprávy):
my s q l > S E L E C T v i r t u a l _u i d F ROM v i r t u a l _u s e r s W H E R E ema i l
-
' re c i p i e n t '
Pomocí parametru v i r t u a l _u i d_ma p s v souboru ma i n . c f sdělíme Postfixu , kde nalezne dotazy SQL pro hledání VID:
v i r t u a l _u i d_ma p s
=
my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _u i d_m a p s . c f
Vytvoření dotazu na GID je podobné UID. Pro vytvoření příkazu SQL SELECT použije me soubor I e t c / p o s t f i xl s q l / v i r t u a l _g i d_ma p s . c f :
user postfi x pa s sword Yanggt ! d b n a m e = ma i l tabl e v i r t u a l _u s e r s s e l e c t_ f i e l d v i r t u a l _g i d w h e r e_f i e l d ema i l hosts l oc a l host =
=
=
=
=
=
Odpovídající příkaz SQL S E L E C l pro tento soubor vypadá takto:
my s q l > S E L E C T v i r t u a l _g i d F ROM v i r t u a l _u s e r s W H E R E ema i l
-
' re c i p i en t '
Poté sdělíme Postfixu , kde m á hledat GID. Parametr v i r t u a l _g i d_ma p s v souboru ma i n . c f nastavíme na dotazovací soubor SQL:
v i r t u a l _g i d_ma p s
=
my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _g i d_m a p s . c f
Vytvoření dotazu na příjemce Asi nejdůležitějším dotazem je dotaz na získání jména uživatelovy schránky, je-Ii dána adresa příjemce . Do souboru I e t c I p o s t f i xl s q l / v i r t u a l _m a i 1 box_r e c i p i e n t s . cf při dáme tyto parametry pro vytvoření dotazu:
user postfi x p a s sword Yanggt ! dbn ame ma i l tabl e v i rt u a l u s e r s =
=
=
=
'4-h'"
Poštovn í server pro něko l i k domén s e l e c t_f i e l d v i r t u a l _m a i l b o x w h e r e_f i e l d em a i l a d d i t i o n a l _c o n d i t i o n s and acti ve '1' hosts l oc a l host �
�
�
�
�
Všimněme si parametru a d d i t i o n a l _c o n d i t i o n s . Parametry v tomto souboru odpovída jí následujícímu příkazu S E L E C T :
my s q l > S E LECT v i r t u a l _ma i l b ox F ROM v i r t u a l _u s e r s W H E R E ema i l A N D a ct i ve '1'
-
' re c i p i en t '
-
Parametrem v i r t u a l _ma i 1 b o x_m a p s řekneme Postfixu, kde má hledat příjemce náležejí cí k virtuálním schránkám a tyto schránky. V souboru ma i n . c f musíme přidat tento řá dek:
v i r t u a l _ma i l b o x_m a p s
�
my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _m a i l b o x_ r e c i p i e n t s . c f
Vytvoření dotazu na aliasy Nakonec musíme specifikovat parametry pro dotazy na virtuální aliasy. Do souboru , na příklad / e t c / p o s t f i x / s q l / v i r t u a l _a l i a s_m a p s . c f , uložíme tyto řádky:
user postfi x pas sword Yanggt ! dbname ma i l tabl e v i r t u a l _a l i a s e s s e l e c t_f i e l d v i r t u a l _u s e r em a i l w h e r e_f i e l d al i as hosts l oc a l host �
�
�
�
�
�
�
Tomuto souboru odpovídá následující příkaz S E L E C T :
my s q l > S E L ECT v i r t u a l _u s e r_ema i l F ROM v i rtua l _a l i a s e s W H E R E a l i a s
-
' re c i p i en t '
Úplně nakonec ještě musíme pomocí parametru v i r t u a l _a 1 i a s_ma p s v souboru ma i n . c f říct Postfixu, kde najde konfigurační soubor pro dotazy n a aliasy:
v i r t u a l _a l i a s_ma p s
�
my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _a l i a s_ma p s . c f
Všechny provedené změny pak aktualizujeme opětovným zavedením Postfixu a může me začít s testováním.
Test virtuálních schránkových domén řízených databází Ladění chyb v Postfixu a v MySQL může být poměrně krušné, když přesně nevíme, kde máme hledat. Z toho důvodu bychom měli testovat oba systémy odděleně . Pokud pro jdou testy MySQL, lze usoudit, že problém musíme hledat v postfixové konfiguraci.
Test MySQL Ú plně nejdříve bychom měli otestovat, zda je platné uživatelské jméno a heslo, které jsme zadali v konfiguračním souboru, a můžeme-li zadávat dotazy MySQL.
207
208
'4-fiUC'
Kapito l a 1 4
Poté vyzkoušíme spojení s databází, v níž jsou uložena data virtuálních schránkových do mén. Oba testy nalezneme v následujícím příkladu :
'
ft my s q l - u p o s t f i x - p - h l o c a l h o s t - A P o úspěšném přihlášení s e objeví tento výstup :
W e l c ome t o t h e My S O L m o n i t o r . C omma n d s e n d w i t h ; o r \ g . Y o u r My S O L c o n n e c t i o n i d i s 1 4 4 t o s e r v e r v e r s i o n : 3 . 2 3 . 5 8 Ty p e ' h e l p ; ' o r ' \ h ' f o r h e l p . Ty p e ' \ c ' t o c l e a r t h e b u f f e r . my s q l > Příkazem CONNECT se připojíme k poštovní databázi a vypíše se potvrzení:
my s q l > C O N N E C T m a i l ; Connect i on i d : 145 C u r re n t d a t a ba s e : ma i l my s q l > Nezdaří-li se spojení se serverem, musíme znovu ověřit uživatelské jméno a heslo, které jsme zadali v části "Vytvoření uživatele MySQL v Postfixu" . Dále musíme prověřit příka zy G R A N T z téže části.
Dotaz na doménu příjemce Nyní pomocí příkazu S E L E C T ověříme, jestli postfixový uživatel MySQL umí vyhledávat virtuální schránkové domény v tabulce v i r t u a l _ma i l b o x_d oma i n s . Zadáme například následující příkaz:
my s q l > S E L EC T d o ma i n F ROM v i r t u a l _ma i l b o x_d oma i n s W H E R E doma i n - ' ex a m p l e . c om ' ; Provede-li se úspěšně, měl by se objevit výstupní řádek, který obsahuje vstup dotazu (vzpomeňme si, že takové je korektní chování, viz část "Konstrukce dotazu na domény příjemců"): +- - - - - - - - - - - - -+
I doma i n
+- - - - - - - - - - - - -+
I examp l e . com I
+- - - - - - - - - - - - -+
1 row i n s e t ( 0 . 0 0 s e c ) Pokud se nenajde, ověříme si, zda doména v tabulce skutečně existuje. Jednoduše to můžeme provést tak, že vynecháme člen W H E R E a necháme si vypsat všechny řádky:
my s q l > S E L E C T d oma i n F RO M v i r t u a l _ma i l b o x_d oma i n s ;
Dotaz na UID a GID virtuální schránky Dále prověříme, zda uživatel MySQL je schopen získat známou adresu pn)emce. Vy zkoušíme pole v i r t u a l _u i d ve známé adrese příjemce v tabulce v i r t u a Lu s e r s jako v následujícím úspěšném pokusu , kde je provedeno mapování z b a mm . b a mm@e x a m p l e . c om na UID virtuální schránky 1 0 0 1 :
Poštovn í server pro něko l i k domén
'4-hMM
my s q l > S E L E C T v i r t u a l _u i d F ROM v i r t u a l _u s e r s W H E R E ema i l ' b a mm . b a mm@e x a m p l e . com ' ; +- - - - - - - - - - - - -+
I v i r t u a l _u i d I
+- - - - - - - - - - - - -+
1001 I
+- - - - - - - - - - - - -+
1 row i n s e t ( 0 . 0 0 s e c ) Totéž provedeme pro GID:
my s q l > S E L E C T v i r t u a l _9 i d F ROM v i r t u a l _u s e r s W H E R E ema i l ' b amm . b a mm@ex a m p l e . c om ' ; +- - - - - - - - - - - - -+
I v i r t u a l _g i d I
+- - - - - - - - - - - - -+
1001 I
+- - - - - - - - - - - - -+
1 row i n s e t ( 0 . 0 0 s e c )
Dotaz na schránky příjemců Otestujeme, zda postfixový uživatel MySQL umí najít schránku určitého příjemce. Vzpo meňme si, že jde o v i r t u a l _m a i 1 b o x v tabulce v i r t u a Lu s e r s . V následujícím příkladu je b a mm . b a mm@e x a m p l e . c om na mapováno na schránku e x a m p 1 e . c o m l b a mm b a mm l (typu Ma ildir) :
my s q l > S E L E C T v i r t u a l _ma i l box F ROM v i r t u a l _u s e r s W H E R E ema i l ' b a mm . b a mm@ex a m p l e . com ' ; +- - - - - - - - - - - - - - - - - - - - - - -+
I v i r t u a l _ma i l b o x
+- - - - - - - - - - - - - - - - - - - - - - -+
I e x a mp l e . c om / b a mm b a mm l I
+- - - - - - - - - - - - - - - - - - - - - - -+
1 row i n s e t ( 0 . 00 s e c )
Dotaz na aliasy Poslední ověření se týká aliasů . Zkusíme získat adresu příjemce známého aliasu (pole v i r t u a Lu s e r _ema i l v tabulce v i r t u a l _a l i a s e s ), viz příklad:
my s q l > S E L E C T v i r t u a l _u s e r_ema i l F ROM v i r t u a l _a l i a s e s W H E R E a l i a s ' po s tma s t e r@ex a mp l e . com ' ; +- - - - - - - - - - - - - - - - - - - - - - -+
I v i r t u a l _u s e r_ema i 1
+- - - - - - - - - - - - - - - - - - - - - - -+
I b a mm . b a mm@e x a mp l e . c om I
+- - - - - - - - - - - - - - - - - - - - - - -+
1 row i n s e t ( 0 . 00 s e c )
209
210
'4-fi'i'
Kapito l a 1 4
Test Postfixu Vyhledávání Postfixu v databázi MySQL můžeme otestovat, aniž bychom posílali jakou koli zprávu . Příkazem p o s t m a p můžeme zadat libovolný dotaz včetně dotazů v tabulce MySQL. Obecný tvar příkazu p o s tma p , kterým se zadává databázový dotaz, vypadá takto:
/I p o s tma p - q " v a l u e " my s q l
: p a t h - t o - p a r a me t e r - f i 7 e
V následujícím příkladu sdělíme Post fixu , že se má dotázat na známou virtuální schrán kovou doménu:
/I p o s t m a p -q " e x a m p l e . c om" my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _ma i l b ox_d oma i n s . c f Pokud se nalezne, vypíše se na příkazovém řádku :
exampl e . com Nenajde-Ii se, ověříme, zda tabulka obsahuje dané jméno virtuální domény (viz část "Do taz na doménu příjemce"). Bude-Ii tento test úspěšný, ověříme uživatelské jméno a hes lo v souboru v i r t u a l _ma i 1 b o x_d oma i n s . c f .
Dotazy n a U l D a GID V testech budeme pokračovat tak, ž e požádáme Postfix, aby zadal databázový dotaz na UID a GID známého příjemce, který náleží ke známé virtuální schránce.
/I postmap -q "bamm . bamrr@examp l e . com" my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _u i d_ma ps . c f 1001 /I postmap - q "bamm . bamrr@examp l e . com" my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _g i d_maps . c f 1001
Dotaz n a příjemce Dále ověříme, zda umí Postfix vytvořit dotaz na známého příjemce. Příkaz postmap, kte rý odpovídá příkazu SELECT v předchozí části "Dotaz na schránky příjemců" , vypadá tak to:
/I p o s tma p - q " b a mm . b a mrr@ex a m p l e . c om " my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _ma i l box_r e c i p i e n t s . c f e x a mp l e . c o m / b a mm b a mm /
Dotaz n a aliasy V posledním testu sdělíme Postfixu , aby vytvořil databázový dotaz na známý alias adre sy virtuálního uživatele. Ú spěšný dotaz vypadá takto:
/I p o s t m a p - q " p o s tma s t e r@ex a m p l e . com" my s q l : / e t c / p o s t f i x / s q l / v i r t u a l _a l i a s_ma p s . c f b a mm . b a mm@e x a m p l e . c o m
KAPITOLA 1 5
PRI NCI PY AUTENTIZACE SMTP Autentizace SMTP je způsob identifikace poštovních klientů, který je nezávislý na IP adresách. Při tomto způsobu identifikace je možné předávat poštu i pro takové klienty, jejichž IP adresy nejsou pro server důvěryhodné. Tato kapitola tvoří základ k autentizaci SMTP (SMTP AUTH). Dozvíme se něco nejen o jejích výhodách, nýbrž i o instalaci a kon figuraci balíku Cyrus SASL, jehož prostřednictvím se provádí autentizace v Postfixu.
Architektura a konfigurace systému Cyrus SASL V dávných dobách přenášely servery SMTP poštu všech klientů na libovolné místo ur čení. Když se objevil spam, přenosoví agenti dostali za úkol přenášet poštu pouze od ur čitých klientů . Tvůrci těchto agentů se rozhodli, že budou takové klienty rozpoznávat podle jejich IP adres, a správci museli konfigurovat systémy tak, aby odmítaly nedůvě ryhodné klienty (viz obrázek 1 5 . 1 ) . Pokusy o zneužití předávání pošty jsou v současnosti denním chlebem a správci tráví spoustu času tím, že zavádějí na servery další a další omezení (viz kapitola 8). Řízení pře dávání založené na IP adresách je ovšem velmi složité zejména dnes, kdy existují ex trémně rozsáhlé a distribuované sítě, a v případě mobilních uživatelů je prakticky neuskutečnitelné. Internet
Lokál n í síť
Poštovní kl ient
Důvěry hodná I P adresa
Poštovní server
Nedůvěry h odná I P adresa
Poštovní k l ient
L--___�
Předá-___-IIIo.I vání
Poštovní server
Obrázek 1 5. 1 Modern í poštovní servery o d m ítaj í předávat poštu z ned ůvěryhod ných IP ad res
Kapitola 1 5
212
Mobilní uživatelé (jejich definice je uvedena v RFC 2977) potřebují mít přístup ke svým prostředkům bez ohledu na to, na které části Internetu se právě nacházejí. Bohužel, té měř nikdy nepoužívají tutéž IP adresu, a navíc ani oni, ani správci pošty neznají IP adresu předem, takže pravidla vztahující se na statickou adresu nejsou v tomto případě k užitku. Existuje několik způsobů, jak zajistit předávání pro mobilní uživatele: •
Metody SMTP-after-POP a SMTP-after-lMAP
•
Autentizace podle protokolu SMTP
•
Předávání na základě certifikátu
•
Virtuální privátní sítě (VPN)
Metody SMTP-after-POP a SMTP-after-lMAP (viz obrázek 1 5.2) přenášejí problém identi fikace na servery POP a lMAP. Zde jsou základní kroky identifikace pomocí metod SMTP-after-POP a SMTP-after-lMAP:
1 . Poštovní klient se autentizuje vůči serveru POP, resp. lMAP. 2. Po úspěšné autentizaci zapíše server POP, resp. lMAP, IP adresu klienta do databá ze sdílené s poštovním serverem, kde zůstane zapsaná po určitou omezenou dobu.
3. Poštovní klient se pokusí předat zprávu prostřednictvím serveru SMTP. 4.
Server SMTP se dotáže, zda je IP adresa klienta v databázi. Pokud ano, přenos se uskuteční. Internet
Lokál n í síť
IP a d resa
Obrázek 1 5.2 Autentizace pro předává n í metodou SMTP-after-POP Autentizace SMTP probíhá na úrovni uživatele root (viz obrázek 1 5.3). Zde jsou základ ní kroky identifikace pomocí metody SMTP AUTH:
1 . Server SMTP nabídne SMTP AUTH poštovnímu klientovi. 2. Klient předá svoje autentizační údaje serveru. 3.
Server je ověří, a shledá-Ii je vyhovující, povolí předání.
Principy a utentizace SMTP
Poštovní k l ient
.... IP ad resa ...
213
Poštovní server
L
... S MTP AUTH ...
Poštovní klient
Př�d9' va n l
Poštovní server
I
Obrázek 1 5-3 Autentizace pro předává n í metodou SMTP AUTH Předávání založené na certifikátu, který je popsán v kapitole 18, vychází z výměny a ově ření klientských certifikátů podle protokolu TI.S (viz obrázek 15.4). Zde jsou základní kroky přenosu založeného na certifikátech: L
Server SMTP nabídne poštovnímu klientovi spojení na základě protokolu TIS.
2. Klient pošle serveru svůj certifikát. 3. Server certifikát ověří, a pokud jej rozpozná (tj. patří do množiny certifikátů, které jsou serveru známy), povolí klientovi předání.
Poštovní server
Poštovní k l ient
Soukromý certifikát Veřej n é
�-----
certifikáty
Předá· vá n í ------�----�
Poštovn í server
Obrázek 1 5-4 Autentizace pro předává n í pomocí k l ientského certifikátu Ve virtuálních privátních sítích (VPN) se přístup klientů k poštovnímu serveru uskuteč ňuje prostřednictvím bezpečné virtuální sítě, která je součástí Internetu. Předávání je v nich založeno na IP adresách, neboť správci nad nimi mají plnou kontrolu. Vzhledem k tomu, že konfigurace VPN nemá nic společného s konfigurací serveru SMTP, tato kni ha se jí nezabývá. Zde jsou základní kroky použití VPN: 1.
Počítač poštovního klienta se spojí s VPN.
2. Server SMTP povolí klientovi ve virtuální síti předávání založené na IP adrese klienta.
214
'4-fiue'
Kapito l a 1 5
Který přístup je nejlepší? Předávání podle protokolu TLS založené na certifikátech je skvělé, nehoť poskytuje vy soký stu peň bezpečnosti, avšak mnoho poštovních klientů jej dosud nepodporuje. Režie se správou klientských a serverových certifikátů není triviální. Tyto dva faktory určují, kudy by se mělo ubírat úsilí vedoucí k všeobecnému rozšíření této metody v rámci vel kých společností a poskytovatelů připojení k Internetu . Pokud zatím nehodláte používat předávání založené na certifikátech, v úvahu zřejmě přicházejí SMTP-after-POP, SMTP AUTH nebo VPN . Z hlediska architektury systému není SMTP-after-POP ani zdaleka ideálním řešením, ne boť se odehrává mimo server a mimo protokol, jimž by řešení příslušelo. Problém se pře souvá na jiné servery (POP: resp. IMAP), které jsou přinejmenším stejně složité jako SMTP, a řešení je tedy pouhým provizoriem. Věci se tak značně komplikují, neboť tyto servery spolu musí komunikovat. Určitě je také vyvinuly jiné týmy, takže vzrůstá riziko nekompatibility, což se projevuje zejména u novějších verzí. Nevhodné uspořádání není jediným nedostatkem řešení SMTP-after-POP. Vinou skuteč nosti, že je založeno na IP adresách, neposkytuje ani dostatečnou míru bezpečnosti. Ne ní nikterak obtížné zfalšovat IP adresu - útočník je schopen zjistit IP adresu poštovního klienta , který právě na určitou dobu obdržel povolení k předávání, a zneužít ji ještě v průběhu tohoto intervalu. Musí-Ii se klient autentizovat při přenosu každé zprávy, je tento způsob zneužití nemožný. Systém založený na virtuální síti je snadno nastavitelný, když už takovou síť máme, avšak zřizovat ji pouze kvůli poštovnímu serveru by si vyžádalo značné úsilí. VPN také vyža dují průběžnou údržbu , neboť každý nový mobilní uživatel musí mít tento software k dis pozici. Hledáte-Ii něco jednoduchého, nezávislého a bezpečného, nejvhodnějším řešením hude pravděpodobně SMTP AUTH .
SASL: Jednoduchá autentizace a bezpečnostní vrstva V Postfixu je implementována autentizace pomocí SASL (Simple Autbentication and Secu rity Layer), což je bezpečnostní rámec popsaný v RFC 2222 (pochopení jeho principů je důležité pro pochopení autentizace samotné). Existuje několik implementací SASL, Postfix využívá knihovny Cyrus-SASL odvozené z původní implementace v projektu Cyrus.
POZNÁMKA Projekt Cyrus je název projektu nového poštovního systém u kampusu na Ca rneg ie Mel Ion U n iversity v Pittsburghu, viz http://asg.web.cm u .edu/cyrus. SASL se skládá ze tří vrstev, které musíme zkonfigurovat. Na obrázku 1 5 . 5 vidíme tyto tři vrstvy: autentizační rozhraní, ověřovací mechanismus a autentizační metodu . V aplikacích, které využívají rámec SASL, se proces autentizace skládá z těchto kroků : 1.
Aplikace podporující SASL (např. postfixový démon s m t pd) sleduje síťové spojení.
2.
Klient se připojí a zahájí autentizaci v těchto čtyřech podkrocích :
Pri ncipy a utentizace SMTP a) Vybere konkrétní ověřovací mechanismus v rámci SMTP AUTH . b) Připraví si svoje ověřovací údaje v souladu s požadavky mechanismu . c) Sdělí serveru, který ověřovací mechanismus si vybral. d) Přenese ověřovací údaje. 3.
Aplikace si uloží informace o vybraném mechanismu a ověřovací údaje.
4 . Aplikace předá informace ovladači mechanismu , který je předá ověřovací službě. 5.
Ověřovací služba vyvolá autentizační proceduru , např. / e t c / s h a d ow, která porovná autentizační údaje s příslušnými položkami.
6.
Ověřovací služba předá výsledek ověřovací procedury démonu s m t p d .
7.
Démon s m t p d provede akci, která závisí n a výsledku ověření. Může například povo lit autentizovaným uživatelům předávat poštu .
Autentiza č n í rozh ra n í
Ověřovací mecha n is m u s
Metoda (sl užba p ro ověřován í hesel)
Obrázek 1 5-5 Vrstvy SASL V následující části si vysvětlíme Cyrus SASL podrobněji. Popíšeme si celé autentizační rozhraní, autentizační metody, ověřovací mechanismy a autentizační proceduru . Dále pak si řekneme, jak se připravuje Cyrus SASL a Postfix k tomu, aby poskytoval službu SMTP AUTH na straně serveru.
Autentizační rozhraní Ú kolem autentizačního rozhraní je sdělit klientovi, ž e lze provádět autentizaci a které ověřovací mechanismy jsou k dispozici. Mnoho služeb, z nichž budeme namátkou jme novat LDAP a SMTP, může vyžadovat autentizaci, avšak používají odlišné protokoly na bázi klient/server. Z toho důvodu SASL samotný nemá autentizační rozhraní. Přenechá vá je speciálním službám a jejich protokolům, aby se sjednoti! způsob autentizace vůči klientům. Místem, kde se setkávají server a klient, je dialog SMTP . Protokolem ESMPT se autenti zace integruje do dialogu tím, že se stane jednou z funkcí poštovního serveru. Zda je funkcionalita SMTP AUTH součástí poštovního serveru, můžeme zjistit pomocí příkazu EHLO, viz následující příklad:
215
216
'4-h'lM
Kapitola 1 5
$ t e l n e t ma i l . exampl e . c om 2 5 2 2 0 ma i l . e x a mp l e . c om E S M T P P o s t f i x E H LO c l i e n t . exampl e . com 2 50 - ma i l � examp l e . com 250 - P I PE L l N I NG 250 - S I Z E 20480000 2 5 0 - V R FY 2 5 0 - E T R N 250 - A U TH PLA IN L OG I N 250 - A U TH-PLA IN L OG I N
2 5 0 - X V E R P 250 8 B I TM I M E QU n 2 2 1 Bye Řádky vysazené tučnou kuzivou v předchozím výstupu jsou příznakem podpory auten tizace SMTP ověřovacími mechanismy PLAIN a LOGIN. Druhý z těchto řádků (s rovnít kem) je uveden kvůli poštovním klientům, kteří se neřídí závěrečnou specifikací SASL.
UPOZORNĚNí Rozhra n í a p l i kace je zakonfi g u rová no v a p l i kaci, která prová d í SMTP AUTH . V Postfixu, kde tato úloha n á l eží démonovi s m t pd, si konfi g u raci rozhra n í popíšeme v kapitole 1 6.
Ověřovací mechanismy SMTP AUTH Ověřovací mechanismy SMTP AUTH , jako např. PLAIN a LOGIN, definují ověřovací stra tegii používanou v průběhu autentizace . Mechanismy nabízené serverem v aplikačním rozhraní ukazují, že v tomto případě jde o dialog SMTP . Při zahájení autentizace si kli ent vybere příslušný ověřovací mechanismus, o výběru informuje server a teprve potom pošle svoje autentizační údaje. Cyrus SASL nabízí široký výběr ověřovacích mechanismů SASL, jež se liší způsobem pře nosu autentizačních údajů a úrovní bezpečnosti, kterou zajišťují. Některé z nich jsou ne standardní a jsou určeny pro specifické klienty. Uživatel nemusí používat všechny dostupné mechanismy; stačí, když se do Postfixu zakonfigurují pouze některé .
V prostředích, kde je n utno zaj istit podporu k l i entů Windows, Mac OS a U n ix, je nej lepší používat PLAI N, LOG I N a CRAM - M O S . Mechanismy jsou zde:
ANONYMOUS Ověřovací mechanismus ANONYMOUS (definovaný v RFC 2245) byl vytvořen kvůli anonymnímu přístupu k poštovním službám. Chce-li jej klient používat, stačí, když serveru zašle libovolný řetězec. Server pak klientovi povolí předávání.
UPOZORNĚNí Nechcete-I i, a by na serveru vzn i kl o otevřené předává n í, nepoužívejte mech a n ismus ANONYMOUS. Spameři jej uměj í zneužít.
Pri ncipy a utentizace SMTP
'a-aNC'
CRAM-MD5, DlGEST-MD5 Knihovna Cyrus SASL podporuje dva ověřovací mechanismy se "sdíleným utajením": CRAM-MDS a jeho následníka DlGEST-MDS . Tyto metody jsou založeny na skuteč nosti , že klient a server sdílejí nějaký tajný údaj , obvykle je to heslo. Server vygene ruje výzvu založenou na tajném údaji a klient svojí odpovědí prokáže, že tento údaj zná . To je mnohem bezpečnější způsob než pouhé posílání nezašifrovaného hesla po síti, server však musí mít utajený údaj někde uložen. EXTERNAL
Ověřovací mechanismus EXTERNAL umožňuje spojit autentizační údaje TLS/SSL se SASL. Konkrétně jde o to, že pomocí mechanismu EXTERNAL můžeme v průběhu komunikace TLS/SSL vyextrahovat z autentizačních údajů určitou podobu uživatel ského jména.
GSSAPI, KERBEROS_v4 V knihovně Cyrus SASL jsou dva ověřovací mechanismy, jež využívají autentizační systém Kerberos: KERBEROS_V4, který by měl být schopen použít jakoukoli imple mentaci Kerberos v4, a GSSAPI (testovanou proti MIT Kerberos vS a Heimdal Ker beros vS). Vzhledem k tomu , že tyto mechanismy využívají infrastrukturu systému Kerberos, nemají vlastní databázi hesel.
POZNÁMKA KERBE ROS_V4 má bohužel u rčité bezpečnostní problémy. M ísto toho je lépe použít GSSAPI.
NTLM Mechanismus NTLM je nestandardní a nezdokumentovaný mechanismus vyvinutý fir mou Microsoft. V distribuci SASL je jen kvůli klientům (např. Outlook) a serverům (např. Exchange) tohoto výrobce.
OTP Ověřovací mechanismus OTP (one-firne pad) je podobný mechanismům CRAM-MDS a DlGEST-MDS v tom, že využívá princip sdíleného tajného údaje a výměny vý zva/odpověď. OTP se však považuje za bezpečnější než ostatní mechanismy pracu jící na stejném principu, neboť tajný údaj se používá k vygenerování a uložení posloupnosti jednorázově používaných hesel, což znemožňuje útoky na bázi opako vání hesla a tajný údaj nemusí být uložen na serveru.
PLAIN, LOGIN Autentizační údaje posílané pomocí ověřovacího mechanismu PLAIN se přenaSe}1 v zakódované podobě na základě 64bitového šifrování textu . Tento mechanismus je jednoduchý a je implementován ve většině klientů , avšak řetězce šifrované na 64bi tové bázi jsou snadno dešifrovatelné. Mechanismus LOGIN je stejný jako PLAIN, avšak používá se v klientech, kteří nerespektují protokol RFC (např Outlook Express).
UPOZORNĚNí Skutečnost, že se a utentizačn í údaje posílaj í po síti jako nešifrova ný text, zakládá zn ač né bezpečnostní riziko. Každý, kdo má k d ispozici pi rátské prog ra my jako s n o r t nebo
217
218
'B-fi'lC'
Kapitola 1 5
t c p d ump, si m ůže tyto utajené údaj e přečíst. Problém lze do j i sté m íry odstra n it, když zko m b i n ujeme TLS s a utentizací SMTP prostřed n i ctvím nešifrova ného textu. Konkrétně m ůžeme. sdě l it Postfixu, a by nabízel ověřovací mecha nismus založený na přenosu ne šifrova ného textu až po ustaven í sezen í TLS (viz kapitola 1 8).
SRP V ověřovacím mechanismu SRP je zkombinována bezpečnost autentizace pomocí sdíleného utajení s jednorázovými hesly v mechanismu OTP . SRP je založen na prin cipu šifrování pomocí veřejného klíče a na heslech - nikoli tedy na certifikátech .
Autentizační metody (služby pro ověřování hesel) Ověřovací mechanismy se využívají v autentizačních metodách (nazývaných také služby pro ověřování hesef) , které mají na starost komunikaci mezi aplikacemi používajícími au tentizaci SMTP a procedury pro ukládání autentizačních údajů . Cyrus SASL nabízí dvě služby pro ověřování hesel : saslauthd a auxprop. Liší se od sebe ověřovacími mechanismy a připojovací procedurou . Aplikace nabízející autentizaci pro střednictvím svého rozhraní si musí vybrat, kterou službu pro ověřování hesel použije. (Jak se tyto služby konfigurují, si ukážeme později v části "Instalace a konfigurace Cyrus SASL" .) Zde je přehled služeb:
sas1autbd saslauthd je samostatný démon, k jehož spuštění musíme mít oprávnění superuživa tele. Může se připojit k mnoha autentizačním procedurám, avšak pouze k takovým, jež vyžadují práva superuživatele (např. / e t c / s h a d ow). Metoda saslauthd je omezena na nešifrované ověřovací mechanismy (PLAIN a LOGIN).
auxprop auxprop je sběrná služba pro ověřování hesel v celé řadě pomocných zásuvných mo dulů (plug-inJ. Každý takový modul je specializovaný na jeden určitý typ autentizační procedury, např. sasldb2 nebo SQL servers.
U POZORNĚNí Zásuvné moduly a uxprop se při pojují k a utentizačn ím proced u rá m s oprávněními a p l i kace, která prová d í a utentizaci . V Postfixu je t o a p l i kace smtpd, j e ž běží s nej n ižším možným oprávněním. Verze Cyrus SASL n i žší než 2.x měly prostřed n i ctvím a uxprop přístup k / e t c / s h a d ow, což vyžadova lo zvýšení přístu pových práv démona prováděj ícího SMTP AUTH a současně sn ižova lo ú roveň bezpečnosti Postfixu. D ů razně varujeme před používá n ím proced u r, kvů l i n i m ž se musí zvyšovat přístu pová práva .
Autentizační procedury v posledním kroku si Cyrus SASL vyžádá jednu nebo více autentizačních procedur k ově
ření autentizačních údajů poskytnutých klientem. Služba pro ověření hesel je porovná s údaji uloženými v této proceduře. Oficiální seznam autentizačních procedur podporo vaných systémem Cyrus SASL obsahuje:
'a-fiid'
Pri ncipy a utentizace SMTP imap Server IMAP ověřuje autentizační údaje.
kerberos Cyrus SASL ověřuje lístky procedury Kerberos.
ldap Cyrus SASL čte autentizační údaje ze serveru OpenLDAP.
pam Cyrus SASL může číst data z libovolného modulu zpřístupněného prostřednictvím PAM (Pluggable Authentication Modules).
passwd/shadow Cyrus SASL může i z / e t c / s h a d ow).
číst
data
z uživatelské databáze ( l e t c / p a s s w d ,
případně
sasldb2 Cyrus SASL má svoji vlastní databázi jménem s a s 1 d b 2 . Tuto databázi potřebuje ke své činnosti server Cyrus lMAP, avšak k autentizaci není nutný server IMAP .
sql Cyrus SASL využívá uživatelská data na serveru SQL. V současnosti jsou podporova nými servery MySQL a PostgreSQL.
Plánování autentizace SMTP na straně serveru Chceme-li, aby se autentizace prováděla na našem poštovním serveru , je k tomu nutno provést tyto dva kroky: 1.
Zjistit, kteří klienti budou používat SMTP AUTH, a stanovit příslušné ověřovací me chanismy.
2.
Definovat autentizační proceduru , která se bude používat, a přiřadit k ní příslušné služby pro ověřování hesel.
Nalezení klientů a stanovení ověřovacích mechanismů Jednou z e zásad počítačové bezpečnosti j e , ž e nemůže být napadena služba, která nee xistuje. Proto je vhodné za konfigurovat do Postfixu pouze ty ověřovací mechanismy, kte ré bude uživatel potřebovat. V malé síti, kde máme dobrý přehled o použitých poštovních klientech, lze tyto mechanismy velmi efektivně omezit. V tabulce 1 5 . 1 je zjed nodušená verze referencí klientů SASL ( h t t p : / / www . me l n i k o v . c a / me 1 / d e v e 1 / SA S L_C 1 i e n t Re f . h t m l ) , kterou vytvořil Alexej Melnikov, a seznam ověřovacích mechanismů podporovaných těmito klienty. Tabulka poskytuje skutečně zevrubný přehled protokolů POP, lMAP, ACAP a LDAP AUTH, používaných poštovními klienty. Nicméně i když budeme podporovat pokud možno co nejmenší počet klientů , je vhod né mít v nabídce ověřovací mechanismy PLAIN, LOGIN a CRAM-MD5, neboť je podpo ruje většina klientů .
219
220
'B-fi'iC'
K a p itola
15
POZNÁMKA N i komu asi neu n i kne, že v tabu lce 1 5- 1 je uvedeno méně ověřovacích mecha nismů než v referen'ční příručce SASL. M ech a n ismů je vel m i m noho, jej ich seznam tedy bylo n utné poněkud zkrátit, n icméně ty, které jsou v ta bulce uvedeny, budou v heteroge n n ím pro střed í IT nejvíce k užitku. Poté, co stanovíme ověřovací mechanismy poštovních klientů , je třeba vybrat příslušnou autentizační proceduru .
Tabulka 1 5. 1 : Ověřovací mech a n ismy k l ientů používaj ících systém SMTP AUTH Kl ient
AKMail Bal ! (SecureBat !) Control Data's I I MAPSP Eudora Pro 4 .3 and later fetchmail 5.0.3 Forte Allent Gnus JavaMail MH UCl 6.8.3 Mozilla 1 .0 Mulberry v3 mutl 1 .2.5i Netscape Messenger 4.51 + nmh 1 .0.4 Novell Evolution Orangsoft Winbiff > 2 .30 Outlook Express> 4 .03 Outlook > 983 Palad in PalmOS Eudora Pegasus Mail3 .1 2 Pine 4 .33 and later PMMail Sylpheed Wan derlust 1
2
3
CI) = co
::E
II) co
::E :::E
>Z co Z C
c II: u
ne ne ne ne ne ne ne ne ? ne ne n/al ne 2 ne ne ne ne ne ne ne ne ne ne ano
ano ano ano ano ne ne ano ne ne ano ano n/a ne ne ano ano ne ne ano ano ano ano ne ano ano
II) co
::E ,.!.
CI) ... c:I
Ci ne ano ne ne ne ne ne ne ne ne ano n/a ne ne ano ne ne ne ne ne ne ne ne ano ano
-' c z II: ...
� ...
;;: c CI) CI) c:I
ne ne ne ne ne ne ne ne ne ano ne n/a ano ne ne ne ne ne ne ne ne ne ne ne ne
ne ne ne ne ne ne ne ne ne ne ano n/a ne ne ne ne ne ne ne ne ne ano ne ne ne
... ..
e .. -e ..
II) co Z
::E :::E
co -'
-' Iz
::E
Z
""
C;
:3 ll.
c II: U CI)
>... "" CI)
ne ne ne ne ne ne ne ne ne ne ne n/a ne ne ano ne ne ne ne ne ne ano ne ne ano
ne ano ne ano ne ne ano ano ne ne ano n/a ne ne ne ano ano ano ne ne ano ano ne ano ano
ne ne ne ne ne ne ne ne ne ne ano n/a ne ne ano ne ano ano ne ne ne ne ne ne ne
ne ano ano ano ne ne ne ano ne ano ano n/a ano ne ano ano ne ne ne ne ne ano ne ne ne
ne ne ne ne ne ne ne ne ne ne ne n/a ne ne ne ne ne ne ne ne ne ne ne ne ano
ne ne ano ne ne ne ne ne ne ne ne n/a ne ne ne ne ne ne ne ne ne ne ne ne ne
Nepodporuje SMTP přímo; závisí na lokálním MTA Viz knihovna eMU SASL. Podporuje návrh 1 0 specifikace SMTP AUTH Ctj. "AUTH - " , nikoli však "AUTH "J.
Definování autentizační procedury a služby pro ověřování hesel Přirozeným, avšak nikoli zcela bezpečným místem pro uložení autentizačních údajů je systémová databáze lokálních uživatelů l e t c / p a s s wd . Autentizační procedura už existu je a pokud nejsme poskytovatelé připojení, máme zřejmě vytvořeny účty pro všechny uživatele pošty. Boužel, mnozí správci vytvářejí uživatelské účty přístupné pro shel!. Každý, kdo je scho pen získat přístup k uživatelským jménům a heslům, se snadno dostane na server Ca tím
Pri ncipy a utentizace SMTP
22 1
pádem se asi také může stát superuživatelem, neboť s uživatelským účtem je to mnohem snaz..� O. Tato skutečnost samotná může být dostatečným důvodem k výběru takové au tentizační procedury, která nemá nic společného s uživateli systému . Teoreticky nemá mít ideální autentizační procedura žádný vztah k uživatelům systému, zejména používáme-li nešifrovaný ověřovací mechanismus, neboť následky prozrazení autentizačních údajů používaných pouze pro předávání pošty nejsou tak vážné ve srov nání s prolomením ochrany systému . Můžeme používat uzavřenou databázi, jako např. s a s l d b , SQL server, nebo dokonce LDAP server. V tabulkách 1 5 . 2 a 1 5 . 3 jsou uvedeny ověřovací mechanismy, které můžeme používat pro každý typ autentizační procedury. Všimněme si, že výběrem procedury je také dáno, která služba pro ověření hesel se bu de používat.
Tabulka 1 5.2: Autentizač n í proced u ry a ověřovací mecha n ismy kompat i bi l n í se sl užbou pro ověřová n í hesel sasl a uthd
AutentizaCnf procedura
getpwent normální uživatelé systému) kerberos Ipam ri map (vzdálený server IMAP) shadow I dap
z
z
Ln co ::E
Ln co ::E
,.:. ....
CI>
S ll..
a co .....
c
:E 5
(lJ
2i
�
ll..
::E .... . ....
ano
ano
ne
ne
ne
ne
ano ano ano ano ano
ano ano ano ano ano
ne ne ne ne ne
ne ne ne ne ne
ne ne ne ne ne
ne ne ne ne ne
z
Tabulka 1 5.3: Autentizačn í proced u ry a ověřovací mec h a n ismy kom pati b i l n í se sl užbou pro ověřová n í hesel auxprop
Autentizačnf procedura
z
S
ll..
sasldb2 sQ l
ano ano
z
a o ..... ano ano
Ln co ::E
:E
c II: Y
ano ano
Ln co ::E
,.:. ....
CI> (lJ
2i ano ano
::E
....
ll..
..... ....
ano ano
ano ano
o
z
Když jsme s e rozhodli pro některou autentizační proceduru , můžeme zkonfigurovat Cy rus SASL pro s m t p d .
Instalace a konfigurace systému Cyrus SASL Prostřednictvím systému Cyrus SASL zajišťuje Postfix funkcionalitu SMTP AUTH jak pro poštovní klienty, tak i svoji vlastní (když ji nabídne vzdálený server). Potřebujeme-li zkonfigurovat klienta s m t p jen pro autentizaci se vzdáleným serverem, stačí pouze nainstalovat Cyrus SASL a pokračovat dle kapitoly 1 6 . Má-li Postfix plnit úlohu MTA, který nabízí SMTP AUTH vzdáleným poštovním klientům, je nutno Cyrus SASL nainstalovat a zkonfigurovat. Postfixu je třeba sdělit, jak má spolu-
222
'4-fi'iC'
Kapitol a 1 5
pracovat se systémem Cyrus SASL, když chceme používat SMTP AUTH na straně serve ru. V každém případě je nutno provést toto: 1.
Nains1:alujeme Cyrus SASL.
2.
Vytvoříme konfigurační soubor postfixové aplikace.
3.
Zkonfigurujeme přihlašování a přihlašovací úroveň.
4.
Nastavíme službu pro ověřování hesel .
5.
Vybereme ověřovací mechanismus pro SMTP AUTH.
6.
Zkonfigurujeme s a s l a u t h d nebo a u x p r o p .
7.
Otestujeme autentizaci.
Instalace systému Cyrus SASL Není-Ii systém Cyrus SASL v operačním systému již předinstalován nebo není-Ii součástí instalačního balíku, je třeba si jej stáhnout z knihovny Download Cyrus Software na we bových stránkách h t t p : / / a s g . w e b . e m u . e d u / ey r u s / d own 1 o a d .
UPOZORNĚNí V následuj ícím výkladu budeme před pokládat, že číslo verze Cyrus SASL je nejméně 2 . 1 . 1 7, přičemž pochopitel n ě při čen í této kn ížky budou k d ispozici už verze novější. Kdyby někdo z j a kéhoko l i d ůvodu trval na verzi 2. 1 . 1 7, n a lezne ji na ú l ožišti CVS na ad rese h t t p : / / a s g . w e b . e m u . e d u / e y r u s / d own l o a d / a n o n e v s . h t m l . Po rozbalení je v Cyrus SASL nutno přejít do adresáře SOURCE. Je-Ii verze, kterou bu deme konfigurovat, stažená z CVS, musí se spustit s h . / SM a k e f i l e , kterým se vytvoří konfigurační skript. Pro všechny procedury popsané ve zbytku této kapitoly se Cyrus SASL zkonfiguruje pomocí následujícího příkazu : II . / e o n f i g u r e \
- - wi t h - p l u g i n d i r-/ u s r / l i b / s a s 1 2 \ - -di sabl e-j ava \ - - d i s a b l e - k rb4 \ - - wi t h - d b l i b-be r k e l ey - - w i t h - s a s l a u t h d-/ v a r / s t a t e / s a s l a u t h d \ - - w i t h o u t - pwc h e c k \ - - w i t h - d e v r a n d om-/ d e v / u r a n d om - - enabl e - c ram \ - - enabl e - d i gest \ - - enabl e - pl a i n \ - - e n a b l e - l og i n \ - - d i s a b l e - o tp \ - - enabl e - sql \ - - w i t h - l d a p-/ u s r \ - - w i t h - my s q l - / u s r \ - - w i t h - pg s q l -/ u s r / l i b / p g s q l
POZNÁMKA Cyrus SASL má mnohem víc konfi g u račních voleb. Více se m ůžeme dozvědět, když ve zd rojovém ad resá ři zadáme příkaz . / c o n f i gu re - he 1 p. Pokud ovšem některou z uvedených proced u r nepotřebujeme, m ůžeme vol by změn it.
Principy a utentizace SMTP Jakmile pomocí konfiguračního skriptu vytvoříme soubor Makefile, můžeme systém Cy rus SASL vytvořit příkazem m a k e a nainstalovat jej příkazem m a k e i n s t a l l , který je nut no zadat jako uživatel r o o t . Poté j e třeba vytvořit symbolický odkaz. Instalační proces uloží knihovny SASL implicit ně do I us r I I o c a 1 I I i bl sa s 1 2 , avšak parametry v konfiguračním skriptu jsou nastavené tak, že Cyrus SASL bude hledat knihovny v I u s rl 1 i b I s a s 1 2. Odkaz se vytvoří takto:
# l n - s / u s r / l oca l / l i b/ s a s 1 2 / u s r / l i b/ s a s 1 2 Nakonec se musíme podívat, je-li nastaven démon sy s 1 o g d tak, aby sledoval hlášení vy tvořená systémem Cyrus SASL. Cyrus SASL se připojí k službě a u t h , a pokud jsme tuto službu dosud nepotřebovali, do souboru s y s l o g . c o n f přidáme následující řádek a poté restartujeme démona s y s l o g d :
auth . *
Ivarll og/auth
Vytvoření konfiguračního souboru pro postfixové aplikace Aplikace, které nabízejí služby SASL, musí vědět, jak mají pracovat s knihovnami SASL. V systému Cyrus SASL existuje pro každou aplikaci zvláštní konfigurační soubor, nikoli jeden velký soubor pro všechny. Pro různé aplikace tedy lze definovat různé konfigura ce. Konfigurační soubor Postfixu se jmenuje s m t p d . c o n f , neboť v Postfixu je implicitní aplikací, která zajišťuje služby SASL, démon s m t p d . Soubor je implicitně uložen v adre sáři l u s r l l i b / s a s 1 2 .
POZNÁMKA V d istribuci Debian musí být soubor smtpd .conf u l ožen v ad resáři letc/postfixlsasl. V některých operačních systémech obsahuje soubor s m t p d . c o n f určitá implicitní nasta vení; je třeba si to zjistit. Pokud tento soubor vůbec neexistuje, vytvoříme jej jako uživa tel r o o t následujícími příkazy:
# t o u c h / u s r / l i b / s a s 1 2 / smtpd . c o n f # c h m o d 644 l u s r / l i b / s a s 1 2 / smtpd . c o n f Předchozími příkazy existující konfigurační soubory nepoškodíme. Jakmile máme vytvo řený konfigurační soubor, můžeme započít s konfigurací, v níž stanovíme, jakým způso bem se budou v Postfixu využívat knihovny SASL.
Syntaxe konfi guračn ího souboru systém u Cyrus je j i ná než v Postfixu . Každý parametr a jeho hodnota m usí být na samostatném řádku, parametry jsou u končeny dvojtečkou a hodnoty se oddělují mezera m i .
Konfigurace hlášení a úrovně hlášení Prvním parametrem v souboru l u s r l l i b / s a s 1 2 / s m t p d . c o n f , který musíme zkonfiguro vat, je parametr 1 og_l e v e 1 . Jeho přípustné hodnoty jsou uvedeny v tabulce 1 5 .4.
224
'4-h'!M
Ka pitol a 1 5
Tabulka 1 5.4: H od n oty úrovně h lá še n í v Cyr u s SASL Hodnot� log_level
Popis
o
Ž ádná h láše n í H láše n í neobvyklých chyb; i m p l icitně H l ášení všech pochyben í při a utentizaci Méně závažná va rová n í Větší rozsa h n e ž v 3 Větší rozsa h než v 4 Sledová n í intern ích protoko l ů Sledová n í i nterních protokol ů včetně hesel
2 3 4 5 6 7
Při konfiguraci a testování systému Cyrus SASL by měla být nastavena úroveň hlášení nej méně na 3. V souboru s m t p d . c o n f ji nastavíme takto: tf G l o b a l p a r a me t e r s
l o g_l e v e l : 3
Jak budeme procházet dalším textem, tento soubor poroste.
Nastavení služby pro ověřován í hesla v následujícím kroku řekneme Postfixu , kterou službu pro ověřování hesla budeme vy
užívat k autentizaci uživatelů . V tomto bodě je třeba se rozhodnout mezi saslauthd a aux prop, neboť následující kroky už se v závislosti na konkrétní službě podstatně liší. Cyrus SASL získává informaci o zvolené službě z parametru pwc h e c k_me t h o d . Chceme-Ii používat saslauthd, zkonfigurujeme s m t p d takto: tf G l o b a l p a r a m e t e r s
l o g_l e v e l : 3 pwc h e c k_m e t h o d : s a s l a u t h d
Pokud bychom chtěli používat pomocné zásuvné moduly, v souboru s m t p d . c o n f musí být: tf G l o b a l p a r a m e t e r s
l o g_l e v e l : 3 pwc h e c k_me t h o d : a u x p r o p
Výběr ověřovacího mechanismu SMTP AUTH Výběr ověřovacího mechanismu ponechává systém Cyrus SASL na klientovi. Aby nedo cházelo k autentizačním chybám, při výběru bychom se měli vyvarovat těchto kroků : •
•
Neměli bychom nabízet ověřovací mechanismus, který nemáme zakonfigurovaný. Například když nepoužíváme Kerberos, server jej nabídne a klient si jej vybere, au tentizace se neprovede. Jako službu pro ověřování hesla vybereme saslauthd, avšak v ověřovacím mechanis mu se neomezíme pouze na nešifrovaný text. V takovém případě autentizace selže, neboť saslauthd neumí pracovat s jiným ověřovacím mechanismem než PLAIN a LOGIN.
Pri nci py a utentizace SMTP o tom, jaké náš selVer nabízí ověřovací mechanismy, se můžeme přesvědčit pomocí pa
rametru m e c h_l i s t . Když například používáme saslauthd, soubor s m t p d . c o n f musí vy padat takto:
# G l o b a l p a r a me t e r s l O 9-l e v e l : 3 pwc h e c k_me t h o d : s a s l a u t h d m e c h_l i s t : P LA I N L O G I N Při použití pomocných zásuvných modulů je možné vybrat jiný seznam, např. :
# G l o b a l p a r a me t e r s l o g_l e v e l : 3 pwc h e c k_me t h od : a u x p r o p m e c h_l i s t : P LA I N L O G I N C RAM - M D 5 D I G E S T - M D 5 Když tedy máme vybraný ověřovací mechanismus, musíme zkonfigurovat buď saslauthd nebo pomocný zásuvný modul . Konfigurace saslauthd je popsána v následující části, za tímco konfigurace auxprop je popsána v části nazvané "Konfigurace pomocných zásuv ných modulů (auxprop)" .
Konfigurace saslauthd saslauthd je samostatný démon, který komunikuje s autentizačními procedurami. Konfi gurujeme jej pomocí řádkových voleb. Než tohoto démona spustíme, je třeba provést ty to kroky: 1.
Zjistíme, které autentizační procedury podporuje démon saslauthd.
2.
Připravíme prostředí pro saslauthd.
3.
Zkonfigurujeme příslušnou autentizační proceduru .
Podporované autentizační procedury Kdyby démon saslauthd nepodporoval autentizační proceduru , kterou hodláme použít, příliš daleko bychom se nedostali. Seznam autentizačních procedur podporovaných da nou verzí démona saslauthd si můžeme vypsat pomocí příkazu s a s l a u t h d - v , viz ná sledující příklad:
# s a s l a uthd - v sasl authd 2 . 1 . 1 7 a u t h e n t i c a t i o n m e c h a n i s m s : g e t pw e n t p a m r i m a p s h a d o w l d a p Všiměme si, že procedury jsou ve výpisu označeny jako "autentizační mechanismy" . Po zor, nesměšovat s "ověřovacími mechanismy" systému SMTP AUTH, jako např. PLAIN nebo CRAM-MD5. Není-Ii zvolený mechanismus v seznamu, je třeba znovu vytvořit Cyrus SASL. Příslušné volby pro výběr procedury zjistíme pomocí příkazu . / c o n f i g u r e - - h e l p , který zadáme ve zdrojovém adresáři systému Cyrus SASL.
225
226
'4-hNM
Kapitol a 1 5
Příprava prostředí pro saslauthd Sockety a soubory s PID ukládá saslauthd do stavového adresáře. Instalační skripty systé mu Cynfs SASL tento adresář nevytvářejí, avšak instalujeme-Ii tento systém z binárního balíku (např. RPM), instalační program může stavový adresář vytvořit. Implicitní adresář je l v a r l s t a t e l s a s 1 a u t h d , používá se však i adresář l v a r l r u n l s a s 1 a u t h d . Umístění stavového adresáře můžeme nastavit v průběhu vytváření pomocí volby --with saslauthd=DIR v konfiguračním skriptu . Ověřit si můžeme stavový adresář, když spustí me saslauthd v režimu ladění:
# s a s 1 a u t h d - a s h a d ow - d s a s 1 a u t hd [ 3 1 0 7 6 ] : ma i n s a s 1 a u t h d [ 3 1 0 7 6 ] : ma i n s a s 1 a u t h d [ 3 1 0 7 6 ] : ma i n s a s 1 a u t h d [ 3 1 0 7 6 ] : ma i n s a s 1 a u t hd [ 3 1 0 7 6 ] : ma i n s a s 1 a u t hd [ 3 1 0 7 6 ] : ma i n s a s 1 a u t h d [ 3 1 0 7 6 ] : ma i n s a s 1 a u t h d [ 3 1 0 7 6 ] : ma i n
n u m_p r o c s : 5 m e c h_o p t i o n : N U L L run_p a t h
:
I va rl r u n l s a s 7 a u t h d
a u t h_me c h : s h a d ow cou 1 d not c hd i r to : I v a r / ru n / s a s 1 authd c h d i r : N o s u c h f i 1 e o r d i r e c t o ry C h e c k t o m a k e s u r e t h e d i r e c t o ry e x i s t s a n d i s w r i t a b 1 e by t h e u s e r t h i s p r o c e s s r u n s a s .
V předchozím výstupu je stavový adresář, v němž bude saslauthd vytvářet socket, určen příkazem r u n_pa t h . Všimněme si, že ladicí výstup říká, že tento adresář neexistuje. Pokud skutečně neexistuje, musíme jej vytvořit a zpřístupnit pouze uživateli root a čle nům root. Můžeme to provést například takto:
# mkdi r I v a r l s t a t e/ s a s 1 a uthd # c h own r o o t : r o o t I v a r l s t a t e / s a s 1 a u t h d # c hmod 7 5 0 I v a r l s t a t e / s a s 1 a u t h d
Použití jiného stavového adresáře Chceme-Ii používat jiný stavový adresář než implicitní (například když už v systému ně jaký existuje), můžeme přepsat implicitní nastavení pomocí řádkové volby m d i r. Kdy bychom například chtěli používat adresář l v a r l r u n I s a s 1 a u t h d , démona můžeme spustit takto: -
# s a s 1 a u t h d - m I v a r / r u n / s a s 1 a u t h d - a s h a d ow Cestou je jméno adresáře, které neobsahuje jméno socketu ( mu x ) . Volba kvůli autentizační proceduře; vysvětlíme si ji v následující části.
-
a je uvedena
Nicméně, musíme sdělit i Postfixu, kde je nový stavový adresář, a to tak, že nastavíme parametr s a s 1 a u t h d_p a t h v souboru s m t p d . c o n f . Tentokrát musí obsahovat i jméno sou boru socketu , jak vidíme v následujícím příkladu na řádku vysazeném tučnou kurzivou :
# G 1 0 b a 1 p a r a me t e r s 1 o g_l e v e 1 : 3 pwc h e c k_me t h o d : s a s 1 a u t h d # s a s 1 a u t h d p a r a me t e r s s a s 7 a u t h d_pa t h :
I va rl r u n l s a s 7 a u t hdl mux
Když máme stavový adresář vytvořený, můžeme připojit saslauthd k autentizační proceduře.
Pri ncipy a utentizace SMTP
227
Konfigurace autentizační procedury pro saslauthd v démonovi saslauthd zadáváme jméno autentizační procedury pomocí volby
a ba c k e n d_n a m e . Mělo by to být jedno ze jmen, které vypíše příkaz s a s l a u t h d - v (viz tabul ka 1 5 . 2) . V následujícím příkladu se ze souboru skrytých hesel čte pomocí procedury s h a d ow . -
# s a s l a u t h d - a s h a d ow V následujícím textu jsou uvedeny nejčastěji používané autentizační procedury (použí vané démonem saslauthd). Jejich úplný seznam nalezneme v manuálových stránkách saslauthd(8).
Autentizace z lokálních účtů saslauthd má přístup k lokálnímu souboru hesel na většině systémů Unix a v těch systé mech, které podporují skrytá hesla, i k lokálnímu souboru skrytých hesel. Z normálního souboru hesel U e t c / p a s s w d ) se čte pomocí parametru - a g e t pw e n t .
# s a s l a u t h d - a g e t pwent V systémech, které využívají skrytá hesla, zpřístupníme soubor / e t c / s h a d ow tak, že spustíme saslauthd jako uživatel r o o t s volbou a s h a d ow: -
# s a s l a u t h d - a s h a d ow
Autentizace z PAM Pro autentizaci uživatelů SMTP saslauthd podporuje PAM (Pluggable Autbentication Mo dules). Přístup k procedurám podporovaným PAM zajistíme tak, že vytvoříme soubor / e t c / p a m . d / s m t p a přidáme konfigurační parametry odpovídající příslušným požadav kům a systému , anebo přidáme odpovídající nastavení do / e t c / p a m . c o n f . V systému Red Hat Fedora Core 1 bychom d o souboru / e t c / p a m . d / s m t p mohli přidat například:
#%PAM - l . O auth account
req u i red req u i red
/ l i b / s e c u r i ty / p a m_s t a c k . s o s e r v i c e= s y s t e m - a u t h / l i b / s e c u r i ty / p a m_s t a c k . s o s e r v i c e = s y s t em - a u t h
POZNÁMKA Konfi g u rační soubor musíme poj menovat s m t p, neboť RFC 2554 říká, ž e jméno sl užby SMTP pro SASL je s m t p . Postfix předá hodnotu s m t p jako j méno sl užby do fu n kce s a s l _s e r v e r _n e w ( ) . Toto jméno se pak předá do sasl a uthd a odtud do PAM, které nao pak v s m t p vyh ledá pokyny pro a utentizaci. Jestliže jsme PAM zkonfigurovali, spustíme saslauthd takto:
# s a s l authd - a pam Autentizace s e serverem IMAP saslauthd podporuje neobvyklou autentizační proceduru , kterou se připojuje k serveru IMAP . Je odlišná od ostatních, neboť ověřuje uživatelské jméno a heslo, nikoli však kni hovny SASL.
Kapitola 1 5
228
lMAP zkonfigurujeme jako autentizační proceduru pro saslauthd se dvěma parametIY. Prvním je obvyklý -a, kterým vybereme proceduru a potom pomocí -o zadáme server lMAP, vi� následující příklad:
# s a s l a u t h d - a r i ma p - O i ma p . e x a m p l e . c om Autentizace z LDAP saslauthd si umí přečíst autorizační údaje ze serveru OpenLDAP. Dotazy na LDAP a pa rametIY pro připojení k serveru LDAP však mohou být velmi složité, takže je nezadává me na příkazovém řádku, nýbrž jsou čteny ze zvláštního souboru . Jeho implicitní jméno je l u s r I I o c a 1 l e t e I s a s 1 a u t h d . e o n f , pomocí parametru O můžeme zadat i jiné jméno. -
Následuje příklad souboru s a s l a u t h d . e o n f :
l d a p_s e r v e r s : l d a p : 1 1 1 2 7 . 0 . 0 . 1 1 l d a p : 1 1 1 7 2 . 1 6 . 1 0 . 7 1 l d a p_b i n d_d n : c n = s a s l a u t h d . d e = e x a m p l e . d e= e o m l d a p_b i n d_pw : Y a n g g t ! l d a p_t i me o u t : 1 0 l d a p_t i me_l i m i t : 1 0 l d a p_s e o p e : s u b l d a p_s e a r e h_ba s e : d e= p e o p l e . d e= e x a m p l e . d e= e o m l d a p_a u t h_me t h o d : b i n d l d a p_ f i l t e r : ( 1 ( & ( e n =% u ) ( & ( u i d= % u@% r ) ( s mt pA u t h =Y ) ) ) l d a p_d e b u g : O l d a p_ v e r b o s e : o f f l d a p_s s l : n o l d a p_s t a rt_t l s : n o l d a p_ r e f e r r a l s : y e s Dotaz (definovaný zde pomocí parametrů 1 d a p_s e a r e h_ba s e a 1 d a p_ f i 1 t e r) závisí ob vykle na konkrétní konfiguraci.
POZNÁMKA Parametrů LDAP je m nohem více, než které zde uvá d íme. Kompletn í seznam je uveden v mod u l u a u t h_l d a p démona saslauthd. Máme-li konfiguraci uloženou například v l e t e / s a s 1 a u t h d . e o n f, spustíme saslauthd takto:
# s a s l authd - a l dap - O letc / s a s l a uthd . eonf
Konfigurace pomocných zásuvných modulů (auxprop) Aplikace, které používají pomocné zásuvné moduly systému auxprop, spouštějí na rozdíl od procedur založených na saslauthd zásuvné moduly přímo. Konfiguraci získávají tyto moduly z konfiguračního souboru samotné aplikace SASL. Jak jsme se zmínili už dříve, konfiguračním souborem aplikace v Postfixu je soubor s m t p d . e o n f . V následující části si ukážeme, jak konfigurovat pomocné zásuvné moduly převzaté ze zdrojové knihovny SASL.
';'h'"
Pri ncipy a utentizace SMTP POZNÁMKA
Existuje m nohem více zásuvných mod u l ů , než je zde uvedeno. Příkladem m ůže být mo d u l 1 d a pd b, který najdeme v podadresá ři / c o n t r i b zd rojových sou borů Open LDAP. Ten to mod u l je vyn i kaj ící, avšak obtížně se i n sta l uje, neboť k němu neexistuje M akefi le a n i j i ný podobný nástroj . Diskuse v této kapitole je zaměřena spíše na střed ně pokročilé uživatele.
Zásuvný modul sasldb2 Standardním zásuvným modulem systému Cyrus SASL je sasldb2, který můžeme využí vat zejména v Cyrus lMAP, avšak lze jej využít i samostatně. Má dvě utility: s a s 1 p a s s wd 2 pro uživatelský management a s a s 1 d b 1 i s t u s e r s 2 pro výpis všech uživatelů v sasldb2.
U POZORNĚNí Jména databáze i nástroje končí zna kem ,, 2 " , neboť oba ná leží do Cyrus SASL 2.x. To to rozl iše n í je n utné, a by nedocházelo ke konfl i ktům s Cyrus SASL 1 .x, neboť mezi tě m ito dvěma verzem i byl změněn Cyrus SASL API . Na razíte-I i na nástroj, který nekončí znakem ,, 2 " , je pravděpodobně určen pro verzi Cyrus SASL 1 .x a nebude funkční ve ver zi 2. K tomu , abychom zkonfigurovali Cyrus SASL se sasldb2, je třeba provést následující dva kroky: 1.
Vytvoříme databázi sasldb2.
2.
SASL zkonfigurujeme tak, aby četl z této databáze .
Vytvořeni databáze sasldb2 Databázi sasldb2 vytvoříme pomocí příkazu sa s 1 p a s s w d 2 , který zadáme jako uživatel r o o t . Když zadáme volbu - c , databázi vytvoříme v souboru / e t c / s a s 1 d b 2 . V následujícím příkladu vytvoříme databázi, přidáme uživatele a oblast my h o s t n a me náležející k Postfixu (databázi nelze vytvořit dříve, než přidáme uživatele):
# s a s 1 p a s swd2 - c - u ' p o s t c o n f - h my h o s t n a me ' t e s t P a s sword : Aga i n ( fo r v e r i f i c a t i on J :
Zásuvný mod u l sasldb2 vyžaduje kromě a utentizačn ích údaj ů také oblast. Postfix pou žívá j a ko oblast parametr s m t pd_s a s 1 _1 o c a l _d om a i n (impl icitně je prázdný). V Postfixu m ůže být ke každému procesu s m t p d jen jedna oblast, což omezuje a utentizaci pouze na jed i nou oblast. Poté co jsme vytvořili databázi, omezíme přístup pouze na uživatele r o o t a skupinu postfi x:
# c hmod 6 4 0 / e t c / s a s 1 d b 2 # chgrp postfi x /etc/ s a s 1 db2 # 1 5 -1 /etc / s a s 1 db2 - rw - r - - - -
1 root
postfi x
1 2 2 88 F e b
4 1 6 : 23 /etc / s a s 1 db2
Pokud nabídneme mechanismus OTP , musíme také Postfixu povolit zápis d o databáze, aby mohl značit expirovaná hesla. Když potřebuje mít do databázového souboru přístup jiná skupina , je nutno změnit vlastnictví a přístupová práva.
229
230
'a'*iiit'
Kapitola 1 5
Konfigurace SASL pro čteni z databáze sasldb2 Informace o databázi sasldb2 poskytneme Postfixu tak, že pomocí editoru změníme sou bor s m t p ct . c o n f . Službou pro ověřování hesla bude a u x p r o p a její typ zásuvného modu lu bude s a s l d b :
ff G l o b a l p a r a m e t e r s l o g_l e v e l : 3 pwc h e c k_me t h o d : a u x p r o p m e c h_l i s t : P LA I N L O G I N C RAM - M 0 5 O I G E S T - M 0 5 ff a u x i l i a ry P l u g i n p a r a me t e r s a u x p r o p_p l u g i n : s a s l d b
Zásuvný modul sql Cyrus SASL 2 nabízí přístup do dvou oblíbených relačních databází: MySQL a Postgre SQL. Obě jsou přístupné prostřednictvím pomocného zásuvného modulu s q l a obě ma jí stejné konfigurační parametry:
sqCengine Parametr s q l _e n g i n e udává typ databáze. Ve verzi Cyrus SASL 2 . 1 . 1 7 si můžeme vy brat mezi my s q l a p g s q l .
sqChostnames Parametr s q l _h o s t n a m e s udává jméno databázového serveru . Lze uvést jedno nebo několik úplných jmen (FQDN) nebo IP adresy oddělené čárkami. Vybereme-li lokál ní počítač, SQL server se pokusí komunikovat prostřednictvím socketu .
sqCdatabase Parametr s q l _d a t a b a s e definuje jméno databáze.
sqCuser Parametr s q l _u s e r definuje jméno uživatele databáze.
sqCpasswd Parametr s q l _p a s swd definuje heslo uživatele databáze (jako nešifrovaný text).
sql_select Parametr s q l _s e l e c t definuje příkaz S E L E C T , který se používá k nalezení hesla da ného uživatele a dané oblasti.
sqCinsert Parametr s q l _i n s e r t definuje příkaz I N S E RT , kterým se pomocí knihovny SASL vy tvářejí uživatelé v databási SQL (zpřístupní se programům, např. saslpasswd2).
sqCupdate Parametr s q l _u p d a t e definuje příkaz U P OAT E , kterým se pomocí knihovny SASL ne bo zásuvného modulu aktualizují uživatelé v databázi SQL pro ověřovací mechanis mus, např. OTP. Parametr s q l _u p d a t e se musí používat v kombinaci s parametrem s q l _i n s e r t .
Pri ncipy a utentizace S MTP
'a-h'!M
sqCusessl Parametrem s q l _u s e s s 1 nastavíme šifrované spojení s databází. Implicitně je vypnu té C s q l _u s e s s l : n o ) ; SSL aktivujeme, nastavíme-Ii hodnotu tohoto parametru na 1 , o n nebo t r u e . V systému Cyrus SASL jsou pro nastavování parametrů v databázových dotazech k dis pozici tato makra :
%u Toto makro se nahradí uživatelským jménem zadaným v průběhu autentizace. %p Tímto se zadává volné místo pro heslo; je to implicitní jméno sloupce pro heslo ve tvaru nešifrovaného textu .
%r Toto makro se nahradí oblastí zadanou v průběhu autentizace. %v Specifikace hodnoty, kterou se nahradí stávající hodnota v průběhu operací SQL U P DAT E nebo I N S E RT .
V defi n ici dotazu v souboru smtpd.conf musí být ma kra uzavřena do apostrofů (').
Konfigurace MySQL pro SASL Při konfiguraci MySQL pro SASL v Postfixu musíme nejdříve vytvořit databázi a tabulku. V následujícím příkladu příkazu SQL vytvoříme tabulku s implicitními poli vyžadovaný mi systémem Cyrus SASL a navíc s polem, kterým je možno uživateli zablokovat přístup k předávání:
my s q l > C R EATE TAB L E ' u s e r s ' ( ' i d ' i n t ( l l ) u n s i g n e d NOT N U L L a u t o_i n c rement , ' u s e r n ame ' v a r c h a r ( 2 5 5 ) NOT N U L L d e f a u l t ' O ' , ' u s e r r e a l m ' v a r c h a r ( 2 5 5 ) NOT N U L L d e f a u l t ' ma i l . ex a m p l e . c om ' , ' u s e r p a s s w o r d ' v a r c h a r ( 2 5 5 ) NOT N U L L d e fa u l t ' l s t P@s s ' , ' a u t h ' t i ny i n t ( l ) d e f a u l t ' 1 ' , P R I MA RY K EY ( ' i ď ) , U N I Q U E K EY ' i ď ( ' i d ' ) ) TY P E-My I SAM COMM E N T- ' SMTP AUTH r e l a y u s e r s ' ; Jak vidíme, všechna pole ( i d , u s e r n a m e , u s e r r e a l m, u s e r p a s s w o r d a a u t h ) mají implicit ní hodnoty. Zvláště je důležité, že implicitní hodnotu má i heslo, takže případný útočník by s prázdným heslem neuspěl. Dále musíme vytvořit uživatele MySQL s oprávněním číst z autorizační databáze a zapisovat do ní. Pomocí následující posloupnosti příkazů vy tvoříme uživatele jménem p o s t f i x :
my s q l > C O N N ECT my s q l ; my s q l > I N S E RT I N TO u s e r VALU E S ( ' l o c a l h o s t ' . ' po s t f i x · . " , ' Y ' , ' Y ' . ' Y ' , ' V ' , ' Y ' . ' Y ' . ' Y ' , ' Y ' . ' V ' , ' Y ' , ' Y ' , ' Y ' 'Y' , 'Y' ) : my s q l > U P DATE my s q l . u s e r S ET p a s swo rd-PASSWORD ( " Y a n g g t ! " ) W H E R E u s e r- ' p o s t f i x ' A N D h o s t- ' l o c a l h o s t ' ; my s q l > G RANT S E L E CT , U P DATE O N m a i l . u s e r s TO ' p o s t f i x ' @ ' l o c a l h o s t ' ; my s q l > F L U S H P R I V I L E G E S ; •
Pomocí následujícího příkazu přidáme do tabulky testovací položku :
23 1
232
'4-UiU'
Kapitola 1 5
my s q l > I N S E RT I NTO ' u s e r s ' VALU E S ( I , ' t e s t ' , ' ma i l . ex a m p l e . c om ' , ' t e s t p a s s ' , O ) ; Nakonec, po nastavení databáze mySQL, zkonfigurujeme do souboru s m t p d . c o n f po mocné zásuvné autentizační procedury, například takto:
U G l o b a l p a r a me t e r s l o g_l e v e l : 3 pwc h e c k_me t h od : a u x p r o p m e c h_l i s t : P LA I N L O G I N C RAM - M D 5 D I G E S T - M D 5 U a u x i l i a ry P l u g i n p a r a me t e r s a u x p r o p_ p l u g i n : s q l s q l _e n g i n e : my s q l s q l _h o s t n a m e s : l o c a l h o s t s q l _d a t a b a s e : m a i l s q l _u s e r : p o s t f i x s q l _p a s s wd : Y a n g g t ! s q l _s e l e c t : S E L E C T % p F RO M u s e r s W H E R E u s e r n a me AND a u t h '1' s q l _u s e s s l : n o
' %u ' AND userrea l m
' %r '
�
Všimněme si služby pro ověřování hesel a zásuvného modulu sql . Význam ostatních pa rametrů a maker nalezneme v části "Zásuvný modul sql" shora .
POZNÁMKA Podrobné i nformace o parametrech a zápisu Cyrus SASL jsou uvedeny v o p t i o n s . h t m l .
Konfigurace PostgreSQL pro SASL Postup přípravy databáze PostgreSQL pro SASL je podobný jako v případě databáze My SQL. Následuje příklad vytvoření poštovní databáze v PostgreSQL:
U c r e a t e d b ma i l C R E A T E DATABA S E Nyní se k databázi připojíme a vytvoříme tabulku pro uživatele SASL:
U psql - d ma i l W e l come t o p s q l 7 . 3 . 4 , t h e P o s t g r e S Q L i n t e r a c t i v e t e rm i n a l . Ty p e : \ c opy r i g h t f o r d i s t r i bu t i on t e rms \h f o r h e l p w i t h SQL c omma n d s \ ? f o r h e l p o n i n t e r n a l s l a s h c omma n d s \ g o r t e rm i n a t e w i t h s em i c o l o n t o e x e c u t e q u e ry \q to q u i t ma i l �U C REATE TAB LE publ i c . u s e r s ma i l - U ( i d i nt4 NOT N U L L , ma i l C U " u s e rn ame" v a r c h a r ( 2 55 ) . ma i l Uf ma i l ( # " u s e r r e a l m" v a r c h a r ( 2 5 5 ) . " u s e r p a s sword" v a rcha r ( 2 5 5 ) . ma i l ( # a u t h i nt2 D E FAU LT O . ma i l Uf CONSTRA I NT i d P R I MARY KEY ( i d ) ma i 1 C U ma i 1 ( # ) W I THOUT O I DS ; N OT l C E : C REATE TAB LE / P R I MARY KEY wi l l c reate i mp l i c i t i ndex ' i d ' for t a b l e u s e r s ' C R EATE TAB L E
Pri ncipy a utentizace SMTP ma i l =41 COMMENT ON TAB LE publ i c . users IS ' ma i l u s e r s ' ; COMM E N T ma i 1 =41 Dále vytvoříme uživatele s oprávněním číst a psát z/do databáze:
m a i l =# C R EAT E U S E R p o s t f i x PASSWORD ' Y a n g g t ! ' NOC REAT E D B N O C R EAT E U S E R ; C REATE U S E R Uživateli poskytneme do tabulky přístup pomocí příkazů SELECT a UPDATE :
ma i l =# G RANT U P DATE , S E L E C T O N u s e r s TO p o s t f i x ; GRANT V dalším kroku vytvoříme v poštovní tabulce testovací položku : ma i l =# I N S E RT I NTO u s e r s VALU ES ( ' 1 ' , ' t e s t ' , ' ma i l . ex a m p l e . c om ' . ' t e s t p a s s ' . ' 1 ' ) ; Nakonec, máme-li vytvořenou databázi PostgreSQL, můžeme v souboru s m t p d . c o n f zkonfigurovat pomocné zásuvné moduly:
# Gl oba l pa rame t e r s 1 og_l e v e l : 3 pwc hec k_method : a uxprop mec h_l i s t : P LA I N LOG I N C RAM - MD5 D I GEST - MD5 # a u x i l i a ry P l u g i n pa ramet e r s a uxprop_p l u g i n : s q l s q l _e n g i ne : p g s q l s q l _h o s t n a me s : l oc a l h o s t s q l _d a taba s e : ma i l s q l _u s e r : post f i x s q l _pa s swd : Y a nggt ! s q l _s e l ect : S E L ECT %p F ROM u s e r s W H E R E u s e r n ame = ' %u ' AND rea l m = ' % r ' AND a ut h = ' 1 ' s q l _u s e s s l : n o Pokud jsme skončili konfiguraci, můžeme autentizaci otestovat.
Test autentizace Zkonfigurovali jsme Cyrus SASL buď se saslauthd nebo s pomocnými moduly a s jednou autentizační procedurou a teď bychom měli tento systém před konfigurací SMTP AUTH v Postfixu otestovat dle postupu uvedeného v kapitole 1 6 . Zkušenosti ukazují, že větši na obtíží se SMTP AUTH vzniká v důsledku problematických instalací systému Cyrus SASL a není zaviněna Postfixem samotným. Nejdříve se musíme rozhodnout, jakými nástroji budeme systém testovat. Není-li Cyrus SASL nainstalován ze zdrojového kódu , nemusí jít o zcela jednoduchý úkol (implicitně jsou nástroje v podadresáři / s a m p l e zdrojové distribuce). Pokud byl systém Cyrus SASL součástí distribuce operačního systému, měli bychom vyhledat programy client a server.
233
234
'4-anC'
Ka p itola 1 5
POZNÁMKA Jména binárních souborů nejsou v rá mci ba l íků s operačn ím i systémy a n i zdaleka konzi stentn í a'v některých ba l ících ani nejsou všechny. Je vhodné se pod ívat do ba l íků cy r u s * - d e v e l na jména prog ra m ů . Nemusí se totiž nutně jmenovat client a server. Firma Red Hat například dodává směs verzí 1 .x a 2.x systém u Cyrus SASL a binární sou bo ry jsou ve verzi 2.x přejmenované na s a s 1 - s a mp 1 e - c l i e n t a s a s 1 - s a mp 1 e - s e r v e r . Až najdeme programy c1ient a selVer, test autentizace bude probíhat dle následujících bodů:
1.
Používáme-li jako službu pro ověřování hesel autentizační proceduru saslauthd, spustíme saslauthd.
2.
Vytvoříme konfigurační soubor programu selVer.
3 . Spustíme program selVer. 4.
Autentizaci otestujeme programem c1ient.
Spuštění saslauthd Vybereme-li jako službu pro ověřování hesel autentizační proceduru saslauthd (tu , kte rá nepoužívá pomocné zásuvné moduly, např. sasldb nebo databázi SQL), z příkazové ho řádku spustíme saslauthd v ladicím režimu . Nelze použít skript, nebylo by totiž možné zadat volbu od, kterou se zajistí, že hlavní program saslauthd nepřejde do režimu démona, nýbrž zůstane připojený k terminálu a bude vypisovat ladicí výstupy. Zde je příklad spuštění saslauthd pro autentizaci skrytého hesla:
# s a s l a uthd - m s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 1 ] s a s l a u t h d [ 44 0 2 ] s a s l a u t h d [ 44 0 1 J s a s l a u t h d [ 44 0 1 J s a s l a u t h d [ 44 0 1 J s a s l a u t h d [ 44 0 1 ]
/ v a r / s t a t e / s a s l a u t h d - a s h a d ow - d : ma i n n u m_p r o c s 5 : ma i n mec h_o p t i o n : N U L L : ma i n r u n_p a t h / v a r / run / s a s l a uthd : ma i n a u t h_me c h s h a d ow : i p ci n i t u S i n g a c c e p t l oc k f i l e : / v a r / r u n / s a s l a u t h d /mux . a ccept : d e t a c h_tty ma s t e r p i d i s : O : i p ci n i t l i s t e n i n g on s o c k e t : / v a r / r u n / s a s l a u t h d / m u x : ma i n u s i n g p r o c e s s mod e l : g e t_a c c e pt_l o c k a c q u i red a ccept l oc k : h a v e_b a by for ked c h i l d : 4402 : h a v e_b a by for ked c h i l d : 4403 : h a v e_ba by f o r k e d c h i l d : 4404 : h a v e_b a by f o r k e d c h i l d : 4405
Vytvoření konfiguratního souboru programu server Nyní musíme vytvořit konfigurační soubor programu selVer. Vzpomeňme si, že každá aplikace SASL vyžaduje vlastní konfigurační soubor; v případě testovacího programu ser ver to bude soubor s a m p l e . c o n f . Nejjednodušší způsob je vytvořit symbolický odkaz na soubor s m t p d . c o n f , viz příklad:
# cd / u s r / l i b/ s a s 1 2 / # l n - s smtpd . conf sampl e . conf
Pri ncipy a utentizace SMTP
Spuštění programu server Otevřeme nový shell a spustíme program server s volbami -s a -p, abychom specifiko vali službu a port:
# s e r v e r - s rcmd - p 8000 t ry i n g 1 0 . 1 . 6 s o c k e t : A d d r e s s f a m i l y n o t s u p p o r t e d by p r o t o c o l t ry i n g 2 . 1 . 6 Musíme se přesvědčit, že jsme zadali port, který se zatím nepoužívá .
POZNÁMKA Jakou má fu n kci r c md, ne ní dostatečně zdokumentová no.
Test pomocí programu client Nakonec spustíme program client, který se připojí k programu server a požádá nás, aby chom zadali autentizační ID, autorizační ID a heslo. Při výběru ověřovacího mechanis mu na příkazovém řádku použijeme volbu -m. V následujícím příkladu je uveden test autentizace a autorizace ID a předání testu hesla na lokální počítač ( 1 27.0.0. 1 ) :
# c l i e n t - s rcmd - p 8000 - m P LA I N 1 2 7 . 0 . 0 . 1 r e c e i v i n g c a p a b i l i ty l i s t . . . r e c v : { l l } P LA I N L O G I N P LA I N L O G I N p l e a s e enter a n a uthent i ca t i on i d : test pl ease enter a n a uthor i z a t i on i d : test P a s sword : send : { 5 } P LA I N send : { l l y
send : { l8 } tes t [ O ] te s t [ O ] testpa s s succes sful a uthent i cati on cl os i ng connect i on
Zajímá nás zpráva s u c c e s s f u l a u t h e n t i c a t i o n . Můžeme také sledovat komunikaci na straně programu server. V následujícím příkladu vidíme navázání spojení a získání au tentizačních údajů, které se mají ověřit:
# s e r v e r - s rcmd - p 8000 t ry i n g 1 0 . 1 . 6 s o c k e t : Add r e s s f a m i l y n o t s u p p o r t e d by p r o t o c o l t ry i n g 2 . 1 . 6 a ccepted new connect i on send : I l l } P LA I N L O G I N recv : { 5 } P LA I N recv : { I } y
recv : { l8 }
235
Kapito l a 1 5
236 tes t [ O J te s t [ O J testpa s s s uc c e s s fu 7 a u t h en t i ca t i on
' tes t '
c l os i ng connect i on . Používáme-li proceduru , která vyžaduje saslauthd, můžeme se nakonec podívat, co se děje po ověření autentizačních údajů. Výsledek by měl být asi takový:
# s a s l a u t h d - m / v a r / r u n / s a s l a u t h d - a s h a d ow - d 5 n u m_p r o c s s a s l a u t h d [ 4547 ] : ma i n s a s l a u t h d [ 4547 J : ma i n m e c h_o p t i o n : N U L L / v a r / run / s a s l a uthd r u n_p a t h s a s l a u t h d [ 4 5 4 7 J : ma i n s a s l a u t h d [ 4 5 4 7 ] : ma i n a u t h_me c h s h a d ow s a s l a u t h d [ 4 5 4 7 J : i p c_i n i t u s i ng a ccept l oc k f i l e : / v a r / r un / s a s l authd /mux . accept s a s l a u t h d [ 4 5 4 7 J : d e t a c h_tty ma s t e r p i d i s : O s a s l a u t h d [ 4 5 4 7 J : i p c_i n i t l i sten i ng on socket : / v a r / r un / s a s l a uthd /mux s a s l a u t h d [ 4 5 4 7 J : ma i n u s i n g p r o c e s s mo d e l a c q u i red a ccept l oc k s a s l a u t h d [ 4 5 4 8 J : g e t_a c c e p t_ l o c k s a s l a u t h d [ 4 5 4 7 J : h a v e_ba by for ked c h i l d : 4548 s a s l a u t h d [ 4 5 4 7 J : h a v e_ba by forked c h i l d : 4549 forked c h i l d : 4550 s a s l a u t h d [ 4 54 7 J : h a v e_ba by forked chi l d : 4551 s a s l a u t h d [ 4 5 4 7 J : h a v e_ba by rel e a s ed a ccept l oc k s a s l a u t h d [ 4 5 4 8 J : r e l _a c c e p t_l o c k s a s 7 a u t hd[4 548] : do_a u t h [ r e a 7 m- ] [me c h- s h a dow]
a u t h s uc c es s : [us e r= t e s t ] [ s e r v i ce- r cmd]
s a s l a u t h d [ 4 5 4 8 J : d o_ r e q u e s t s a s l a u t h d [ 4 5 4 8 J : g e t_a c c e pt_l o c k
respons e : OK a c q u i red a ccept l oc k
Případných problémů bychom se měli zbavit, provedeme-li následující kroky: 1.
Používáme-li službu pro ověření hesla saslauthd, v ladicím výstupu najdeme [ r e a s o n= . . . J .
2 . Ověříme, zda je v autentizační proceduře správně zadán uživatel a heslo. 3.
Přesvědčíme se, jestli má saslauthd přístupová práva k autentizační proceduře.
4.
Zkontrolujeme, jestli jsme při zadávání uživatele a hesla zadali správné znakové ře tězce.
Po úspěšné autentizaci zkonfigurujeme podle návodu v kapitole 16 démona s m t p d , aby chom mohli poštovním klientům nabídnout SMTP AUTH.
Budoucnost SMTP AUTH Současná implementace SMTP AUTH zdaleka není konečnou verzí. Budoucí verze Post fixu určitě doznají podstatných změn. Nyní se knihovny SASL, které zajišťují přístup k ověřovacím procedurám, sestavují k démonovi s m t p d a spouštějí se z něj (je to stejný démon, který komunikuje s poštovními klienty). Na obrázku 1 5 .6 je znázorněno, jak jsou jednotlivé součásti systému propojeny:
';'fihC'
Pri ncipy a utentizace SMTP
smt pd
Poštovn í k l ient
Autentiza č n í p roced u ra
K n i hovny SASL
Obrázek 1 5.6 Současné začlenění SASl do Postfixu Přístup k autentizačním procedurám obvykle vyžaduje privilegovaného uživatele, takže každý, kdo dokáže proniknout do démona odpovědného za SMTP AUTH, se dostane do blízkosti uživatelské databáze. Postfix se pokud možno vyhýbá privilegovaným proce sům, zejména když přijde autentizační démon do styku se sítí (vždy nepřátelskou). Na víc, složitost je nepřítelem bezpečnosti a Cyrus SASL je nepochybně složitý systém. Někdy v budoucnosti bude v Postfixu nový démon (bude se jmenovat třeba s a s 1 d), je hož jediným úkolem bude propojit Postfix s knihovnami systému Cyrus SASL. Komuni kace mezi Postfixem a novým démonem bude pokud možno co nejjednodušší. Na obrázku 1 5 .7 vidíme, jak by mohlo nové propojení vypadat.
Pošto v n í kl ient
�
smt pd
�
sas l d
K n i hovny SASL
r-+
Autentiza č n í p roced u ra
Obrázek 1 5.7 Budoucí začlenění SASl do Postfixu V novém uspořádání bude démon, který musí komunikovat se sítí, méně zranitelný. Tím se Postfix o další krok přiblíží k jednomu z hlavních cílů - být bezpečnou službou .
237
KAPITOLA
16
JAK SE PROVÁDí AUTENTIZACE SMTP Předávání zpráv autorizovaných poštovních klientů s dynamickou IP adresou zajišťuje postfixový server prostřednictvím autentizace SMTP (SMTP AUTH) , aniž by se vytvořilo otevřené předávání. V této kapitole si ukážeme, jak se nastavuje SMTP AUTH na straně serveru i na straně klienta .
Jak ověříme podporu SMTP AUTH I když zdrojový kód Postfixu obsahuje podporu autentizace SMTP , implicitně je zablo kovaná, neboť příslušné knihovny systému SMTP AUTH nejsou součástí Postfixu . Při pří pravě k provozu je třeba Postfixu sdělit, že má tyto knihovny zahrnout do systému . Řada distribucí Postfixu se nicméně dodává s podporou SMTP AUTH . V konkrétní kon figuraci přítomnost této podpory snadno ověříme pomocí příkazu 1 dd ' p o s t c o n f - h d a e m o n_d i r e c t o r y ' / s m t p d , který zadáme jako uživatel r o o t a ve výpisu budeme hledat l i bs a s 1 2 . so:
# l d d ' p o s t c o n f - h d a emon_d i r e c t o ry ' / s m t p d l i bl dap . so . 2 > / u s r / l i b / l i b l d a p . s o . 2 ( OxOO l 1 7 000 ) l i b l be r . s o . 2 > / u s r / l i b / l i b l be r . s o . 2 ( Ox008a 9000 ) l i bpc re . s o . O > I l i b/ l i bpc re . so . O ( OxOOb86000 ) 7 i b s a s 7 2 . s o . 2 �> / u s r / 7 i b / 7 i b s a s 7 2 . s o . 2 ( Ox001 01 000) ., l i bs s l . so . 4 > l l i bl l i bs s l . s o . 4 ( OxOOb l l OOO ) l i b c ry p t o . s o . 4 > / l i b / l i b c ry p t o . s o . 4 ( O x 0 0 9 7 7 0 0 0 ) l i bg s s a p i _k r b 5 . s o . 2 > / u s r / l i b/ l i bg s s a p i_krb5 . s o . 2 ( OxOOa fcOOO ) l i bkrb5 . so . 3 > / u s r / l i b / l i b k r b 5 . s o . 3 ( OxOOa6 fOOO ) 1 i b c o m_e r r . S O . 2 > I I i b l l i b c o m_e r r . S O . 2 ( O x O O a 6 a O O O ) l i b k 5 c ry p t o . s o . 3 > / u s r / l i b / l i b k 5 c ry p t o . s o . 3 ( O x O O a d 8 0 0 0 ) l i bresol v . so . 2 > / l i b / l i b resol v . s o . 2 ( Ox00965000 ) l i bd l . s o . 2 > l l i b / l i bd l . s o . 2 ( Ox008b8000 ) l i bz . s o . l > / u s r / l i b/ l i bz . s o . l ( Ox008bdOOO ) �
�
�
�
�
�
�
�
�
�
�
�
l i bd b - 4 . 1 . s o => / l i b / l i bd b - 4 . 1 . s o ( OxOOc 1 8000 ) l i bn s l . s o . l => I l i b l l i bn s l . s o . l ( Ox008feOOO )
Kapitola 1 6
240 l i bc . s o . 6 > / l i b / l 1 i b c ry p t . s o . l > I I / l i b/ l d · l i n ux . s o . 2 l i b p t nr e a d . s o . O > �
�
�
i bc . s o . 6 ( Ox 0 0 7 6 eOOO ) i b l l i b c ry p t . s o . l ( O x 0 0 8 d O O O O ) > / l i b/ l d · l i n ux . s o . 2 ( Ox00759000 ) / l i b/ l i bpthread . s o . O ( Ox009 1 2000 )
�
o Výpis obsahuje 1 i b s a s l . s o . 2 , což je aktuální verze Cyrus SASL, a plyne z něj , že Post fix byl zkompilován s podporou autentizace SMTP, a lze ji tedy do Postfixu zakonfigu rovat.
POZNÁMKA Postfix podporuje i sta rší verzi Cyrus SASL, a to 1 . 5. Na lezneme- I i ve výpisu příkazu Idd 1 i b s a s l . s 0 . 7, Postfix byl zkomp i l ová n v této starší verzi. Pokud je ve výpisu pouze 1 i b · s a s l . s o . 7 , bylo by vhodné zvážit a ktual izaci systému Cyrus SASL na verzi 2; a utentizač ní proced ura v této verzi dozna la oproti verzi 1 . 5 podstatná vylepše n í.
Jak přidáme do Postfixu podporu SMTP AUTH Není-li v Postfixu nainstalovaná podpora SASL a chceme používat systém SMTP AUTH, musíme Postfix přebudovat. Nejprve v systému vyhledáme knihovny a hlavičkové sou bory Cyrus SASL. Knihovny najdeme například pomocí příkazu:
# f i n d / u s r - n a me ' l i b s a s l * . * ' / u s r / l i b/ s a s 1 21 l i bs a s l db . l a /usr/l i b/sas1 2/1 i bsa s l db . a iu s r / l i b / s a s 1 2 / 1 i b s a s l d b . s o . 2 . 0 . 1 5 / u s r l l i b / sa s 1 2 / 1 i bs a s l db . so /usr/l i b/sas1 2 / 1 i bsa s l db . so . 2 /usr/l i b/ l i bsas1 2 . so . 2 . 0 . 1 5 /usr/l i b/ l i bsas1 2 . so . 2 /usr/l i b/ l i bsas1 2 . 1 a /usrll i b/ l i bsas1 2 . a /usrll i bl l i bsas1 2 . so Vidíme, že knihovna Cyrus SASL 2 je v adresáři / u s r l l i b . Poznamenáme si jej a pokra čujeme hledáním hlavičkových souborů :
# f i n d / u s r - n ame ' * s a s l * . h ' / u s r / i n c l ude / s a s l / s a s l . h / u s r / i ncl ude/ sa s l / s a s l pl ug . h / u s r / i n c l ude / s a s l / s a s l u t i 1 . h
POZNÁMKA Distribuce Linuxu maj í h l avičkové soubory a k n i hovny v různých ba l ících v domnění, že tím ušetří m ísto na d isku. Když se nám nepodaří h lavičkové souboru v systém u naj ít, i když k n i hovny v něm jsou, musíme n a i nsta lovat ba l íky SASL, které končí na - d e v ne bo - d e v e l . Nemáme-li knihovny Cyrus SASL v systému , musíme se vrátit ke kapitole 1 5 , kde je po pis jejich instalace do systému . Jakmile víme, kde máme knihovny i hlavičkové soubo ry, vytvoříme Postfix podle následujícího postupu : 1.
Rozbalíme zdrojové soubory Postfixu jako normální uživatel .
J a k se provád í a utentizace SMTP 2.
Přejdeme do tohoto zdrojového adresáře.
3.
Zadáme příkazy make ma k e f i l e s a m a k e s následujícími volbami:
'a-fi'it'
CCA RGS-" D U S E_SAS L_AUTH - I / u s r / i n e 1 u d e j s a s 1 AUX L I 6 S-" - L l u s r I I i b - 1 s a s 1 2 " ma ke ma k e f i l e s $ ma ke -
Je nutno si uvědomit, že uvedené volby se vztahují pouze k systému SASL; můžeme zadat i jiné volby, jak je uvedeno v souborech * _ R E A D M E uložených v adresáři R E A DM E_F I L E S ve stromu zdrojových souborů Postfixu . 4.
Přihlásíme se jako superuživatel ( r o o t).
5.
Provádíme-li první instalaci, zadáme příkaz ma k e i n s t a l l , jinak v případě aktualiza ce nebo jen nahrazení stávající instalace zadáme m a k e u p g r a d e .
6 . Ověříme, zda Postfix obsahuje podporu SASL podle postupu uvedeného n a začátku této kapitoly.
Autentizace SMTP na straně serveru V této části kapitoly si vysvětlíme, jak zkonfigurujeme postfixový server s m t p d tak, aby poštovním klientům nabízel autentizaci prostřednictvím SMTP AUTH. Jakmile provede me autentizaci, klient může předávat poštu prostřednictvím postfixového serveru i teh dy, když je jeho IP adresa mimo rozsah IP adres definovaných konfiguračním parametrem my n e t w o r k s .
UPOZORNĚNí Aby byl S MTP AUTH správně zkonfig u rova ný, nestačí zkonfig u rovat a sestavit pouze postfixové k n i hovny s k n i hovn a m i systém u Cyrus SASL, nýbrž je n utno tento systém zkonfi g u rovat tak, a by kom u n i kova l s a utentizačn í proced u rou . Pod robnosti viz kapi tola 1 5. Na obrázku 1 6 . 1 vidíme poštovního klienta, který se před odesláním zprávy do vzdále né destinace autentizuje s poštovním serverem. Server předá zprávy pouze tehdy, když jeho ověřovací údaje souhlasí s některými údaji uloženými v databázi.
Aktivace a konfigurace serveru Poté, co jsme zkonfigurovali autentizační proceduru v SASL (viz kapitola 1 5), musíme zkonfigurovat i server. Postup je následující: 1 . Aktivujeme SMTP AUTH na straně serveru . 2.
Nastavíme ověřovací mechanismus SASL, který se bude nabízet klientům.
3. V systému SMTP AUTH nastavíme podporu nestandardních klientů . 4.
Nastavíme oblast, kterou bude Postfix předávat knihovně SASL.
5.
V Postfixu nastavíme povolení k předávání.
POZNÁMKA Nastavit Postfix tak, a by běžel v uzavřeném prostoru (ch rooted) a a by nabízel a utenti zaci pomocí SMTP AUTH není složité. Autentizaci na stra ně serveru nastavíme pod le po kyn ů v této kapitole. J a k m i l e ověříme jej í funkčnost v normá l n ím rež i m u, budeme
24 1
242
Kapitola 1 6
postupovat podle prlkladu v kapitole 20, kde je SMTP AUTH součásti Postfixu běžícího v uzavřeném prostoru. Pošto v n í server Postfix
Poštovn í kl ient
uživ : heslo: / ano ne o bl : a p I 'I k
SASL
Soubor, a p l i kace, data báze
Obrázek 1 6-1 Arch itektura SMTP AUTH na stra ně serveru Aktivace SMTP AUTH na straně serveru Nejdříve musíme v postfJxovém serveru smtpd aktivovat autentizaci SMTP na straně ser veru, neboť implicitně je zablokovaná. Aktivaci provedeme pomocí parametru smt pd_s a s l _a u t h_e n a b l e v souboru ma i n . c f :
Konfigurace ověřovacího mechanismu v SASL Nyní je třeba definovat ověřovací mechanismus, který bude Postfix nabízet poštovním klientům. V systému Cyrus SASL je těchto mechanismů k dispozici několik, od anonym ní "autentizace" až po velice silné systémy typu Kerberos. Mechanismus zadáváme pomocí parametru smt pd_s a s l _s e c u r i ty_o pt i o n s . Zadáváme seznam voleb oddělených čárkami, a to z následujícího výběru:
n o a nonymous Nastavením n o a n onymo u s zajistíme, že server skutečně ověří klientovy autentizační údaje. Toto nastavení je implicitní a není dobré je měnit, neboť spameři znají ano-
J a k se provád í a utentizace SMTP nymní autentizaci SMTP . Je vhodné se přesvědčit, že u parametru s m t pd_s a s l _s e c u r i ty_o p t i o n s je uvedeno n o a n o nym o u s ; jinak téměř jistě dojde ke zneužití k otevře nému předávání.
n o p 1 a i n t e xt Pomocí n o p 1 a i n t e x t z voleb vyloučíme všechny nešifrované ověřovací mechanismy, např. P LA I N nebo L O G I N . To je vhodné opatření, neboť autentizační údaje obsahující nešifrovaný text jsou na síti předmětem trvalého zájmu .
noact i ve Tímto nastavením vyloučíme mechanismy, které jsou neúčinné proti aktivním (niko li tedy slovníkovým) útokům . Nepatří k nim například mechanismus založený na vzá jemné autentizaci .
n o d i c t i on a ry Klíčovým slovem n o d i c t i o n a ry vyloučíme všechny mechanismy prolomitelné po mocí slovníkového útoku . Slovníkový útočník se pokouší zjistit heslo hrubou silou zkouší různé kombinace tak dlouho, až nalezne tu správnou .
mut u a La u t h Jedinou hodnotou parametru , při níž j e možno provést vzájemnou autentizaci, j e m u t u a l _a u t h . Při tomto způsobu se musí server autentizovat klientovi a naopak. Při tes tování této konfigurace není nutné tento parametr měnit; implicitní nastavení parametru s m t pd_s a s 1 _s e c u r i ty_o p t i o n s = n o a n o n y mo u s nás ochrání před spame ry, avšak nevylučuje nešifrovaný mechanismus, což nám poněkud usnadní ladění. Až tento způsob otestujeme, zrušíme autentizaci pomocí nešifrovaného textu tak, že pa rametr smtpd_sasl_security_options v souboru main.cf rozšíříme přinejmenším takto:
s m t pd_s a s 1 _s e c u r i ty_o p t i o n s = n o a n o n y m o u s , n o p 1 a i n t e x t
Poštovní k l ient, který používá k a utentizaci nešifrova ný text, posílá uživatelské jméno a heslo j a ko řetězec v kódová n í base64. Dešifrovat takový text je vel m i snad né, takže každý, kdo odposlouchává d i a log SMTP, m ůže tato data zneužít. V případě kl ienta Out look Express je to bohužel jediný podporova ný mechan ismus. Když už chceme nabízet nešifrova ný mechan ism us, m ě l i bychom ta k č i n it pouze prostřed nictvím šifrova né ko m u n i kačn í vrstvy, viz kapitola 1 8.
Konfigurace podpory SMTP AUTH pro nestandardní poštovní klienty Dále musíme pravděpodobně sdělit Postfixu, aby v dialogu SMTP nabízel alternativní zápis, a to kvůli nestandardním klientům, kteří by jinak systém SMTP AUTIi nemohli používat. Je-li autentizace pomocí SMTP AUTH nabízena v souladu s RFC 2222, nestandardní poš tovní klienti ji nerozpoznají. Rozumějí pouze zápisu , který byl v návrhu standardu , kde se mezi příkazem AUTH a ověřovacím mechanismem používalo místo mezery rovnítko ( ). Klienti známí pod označením "nestandardní" (broken) jsou starší verze Microsoft Outlook, Microsoft Outlook Express a Netscape Mail. Jejich podporu zajistíme, když na stavíme b r o k e n _s a s La u t h_c 1 i e n t s v souboru ma i n . c f takto: =
243
Kapitola 1 6
244
Po opětoyném zavedení Postfixu se v dialogu SMTP objeví další řádek AUTH, který ob sahuje rovnítko, viz příklad:
# t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . exampl e . com E S M T P P o s t f i x E H LO c l i e n t . exampl e . com 2 5 0 - ma i l . e x a m p l e . c o m 2 50 - P I PE L l N I NG 250 - S I Z E 5 1 200000 2 5 0 - V R F Y 2 5 0 - E T RN 2 5 0 - AU T H L O G I N P LA I N 250 - A U TH- L OG I N PLA IN
2 5 0 8 B I TM I M E QU I T
Konfigurace oblasti SASL Někdy můžeme potřebovat nastavit v souboru ma i n . c f r e a 1 m, aby se posílal službě pro ověřování hesel Cyrus SASL, a to v závislosti na konkrétní verzi systému Cyrus SASL a na konkrétní službě. Chce-li se klient autentizovat, Postfix pošle systému Cyrus SASL spo lečně s autentizačními údaji i r e a 1 m. V Postfixu můžeme definovat r e a 1 m pomocí para metru s m t pd_s a s l _ l o c a Ld oma i n v souboru m a i n . c f . Implicitně je tento parametr prázdný a může i prázdný zůstat, dokud nepoužijeme pomocný zásuvný modul, který r e a 1 m potřebuje:
Aby se shodl s používanou službou pro ověřování hesel, měli bychom jej změnit:
auxprop Služby, které používají pomocné rekvizity kromě oblasti. Nastavíme s m t pd_s a s 1 _1 0 c a Ld oma i n na oblast, kterou používá SMTP AUTH v autentizační proceduře. Když například uživatelé SMTP AUTH v souboru / e t c / s a s l d b 2 mají oblast e x a m p l e . c o m , zadáme:
saslauthd před verzí Cyrus SASL 2.1.17 Před verzí systému Cyrus SASL 2 . 1 . 1 7 nepracoval saslauthd s oblastmi; nelze je pou žívat. Hodnotu od parametru musíme odstranit:
saslauthd pro Cyrus SASL 2.1.17 saslauthd pro Cyrus SASL 2 . 1 . 1 7 neví, co má dělat s oblastí, takže tuto informaci ig noruje. Oblast může být libovolná, parametr s m t pd_s a s 1 _ 1 o c a l _d oma i n není třeba měnit.
'4-fiNG'
J a k se prová d í a utentizace SMTP sasIauthd Cyrus SASL 2.1.19
Ve verzi Cyrus SASL 2 . 1 . 1 9 a v pozdějších verzích je posílání oblasti konfigurovatel né. Aby se oblast předávala procesu pro ověřování hesel, je třeba použít volbu -T.
Konfigurace povolení k předávání Nakonec musíme sdělit Postfixu, aby povolil předávání pro klienty autentizované pro střednictvím SASL. K tomu je třeba do seznamu s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s přidat p e r m i t_s a s La u t h e n t i c a t e d . Viz následující příklad:
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s [. ] p e rm i t_s a s l _a u t h e n t i c a t e d . p e rm i t_my n e t wo r k s . r e j e c t_u n a u t h_d e s t i n a t i o n [. ] .
.
.
.
Musíme se přesvědčit, zda jsme dali klíčové slovo p e rm i t_s a s l _a u t h e n t i c a t e d v para metru dostatečně dopředu, aby nebyl klient provádějící autentizaci dříve vyřazen vinou jiného pravidla (nejčastěji r e j e c t_u n a u t h_d e s t i n a t i o n ) . Skončili jsme s e základním nastavením serveru SMTP AUTH. Konfiguraci zavedeme a za hájíme testování.
Test SMTP AUTH na straně serveru Při testování SMTP na straně serveru musíme provést tyto kroky: 1.
V poštovním žurnálu ověříme, zda umí hledat chyby, které Postfix detekuje jako své vlastní.
2.
V dialogu SMTP se přesvědčíme, že s m t p d nabízí SMTP AUTH.
3.
Autentizujeme uživatele, abychom se přesvědčili, že Postfix umí komunikovat se systémem Cyrus SASL.
4.
Vzdálenému uživateli pošleme testovací zprávu, abychom ověřili, že autentizovaný uživatel může přes server předávat zprávy do nelokálních destinací.
Test žurnálu Ž urnální soubor otestujeme tak, ž e následujícím příkazem vypíšeme všechny řádky z / v a r I I og / m a i I I o g , které obsahují slova reject, error, warning, fatal nebo panic násle dovaná dvojtečkou O.
/I e g r e p ' ( rej e c t l e r r o r l wa r n i n g l fa t a l l p a n i c ) : ' / v a r l l o g / ma i l l o g Neměly by se objevit žádné chyby související se SMTP AUTH; v opačném případě je tře ba hledat v konfiguraci případné překlepy anebo chyby, které se týkají Cyrus SASL. Nyní aktivujeme "sdílný" žurnální režim démona s m p t d a ponecháme jej v platnosti po celou dobu testování SMTP AUTH. Režim nastavíme pomocí v v příkazu s m t p d v sou boru m a s t e r . c f : -
/I ======================================================================== /I s e r v i ce t y p e p r i v a t e u n p r i v c h r o o t w a k e u p m a x p r o c c omma n d + a r g s (yes ) ( yes ) (yes ) ( never ) ( 1 00 ) /I /I ========================= ===============================================
245
Kapitola 1 6
246 smtp
j net
II s m t p s i n e t
n
n
smtpd - v
n
n
smtpd
Změny vstoupí v platnost p o opětovném zavedení Postfixu .
Test dialogu SMTP v dalším testu se přesvědčíme, že Postfix nabízí SMTP AUTH poštovním klientům, aby věděli, kdy mají zahájit autentizaci. Připojíme se k serveru a představíme se mu pomocí příkazu EHLO (SMTP AUTH pracuje pouze v rozšířené komunikaci SMTP), viz příklad: $ t e l n e t ma i l . ex a m p l e . c om 2 5 2 2 0 ma i l . exampl e . com ESMTP P o s t f i x E H LO c l i e n t . exampl e . c om 2 5 0 - m a i l . e x a mp l e . c o m 250 - P I PE L l N I NG 2 50 - S I Z E 1 0 240000 2 5 0 - V R FY 2 5 0 - ETRN 2 5 0 - STARTT L S 250 - A U TH N TLM L O G I N PLA IN O I G ES T - M05 CRAM - M05 250 - A U TH- N TLM L OG I N PLA I N O I G ES T - M05 CRA M - M05
250 - XVERP 2 5 0 8 B I TM I M E QU I T 2 2 1 Bye J e zřejmé, ž e parametrem AUTH nejen aktivujeme SMTP AUTH, nýbrž poskytneme i možné autentizační mechanismy. Dále následuje téměř identický řádek pro nestan dardní klienty.
V případě, že server nenabízí parametr AUTH, musíme ověřit, zda jsme provedli násle dující úkony: • •
•
Zkompilovali jsme Postfix s podporou Cyrus SASL Zkonfigurovali jsme správně základní parametry a v souboru ma i n . c f nemáme žád né překlepy; parametry ověříme pomocí příkazu postconf -no Pomocí příkazu EHLO (nikoli HELO) jsme se připojili ke správným serverům.
Autentizace uživatele K autentizaci uživatele je nutné, aby nám autentizační procedura poskytla řetězec zakó dovaný base64, který obsahuje platné uživatelské jméno a heslo. Je-li například uživa telské jméno t e s t a heslo t e s t p a s s , zadáme příkaz: $ perl
- MM I M E : : B a s e64 - e ' p r i n t e n c o d e_ba s e 64 ( " t e s t \ O t e s t \ O t e s t p a s s " ) ; '
výstup bude vypadat takto:
d G V z d A B O Z X N O A H R l c 3 RwY X N z Nyní se napojíme na server a příkazem EHLO spustíme rozšířenou komunikaci SMTP. Po té pomocí AUTH PLAIN sdělíme Postfixu, že se chceme autentizovat pomocí nešifrova ného textu v kódování base64. Následuje příklad, jak může takový úspěšný test vypadat:
J a k se prová d í a utentizace SMTP
'a'h'lD
$ t e 1 n e t ma i 1 . ex a m p 1 e . com 25 2 2 0 ma i l . e x a m p 1 e . c o m E S M T P P o s t f i x E H LO c 1 i e n t . e x a m p 1 e . c om 2 5 0 - ma i 1 . e x a m p 1 e . c o m 250 - P I PE L l N I NG 250 - S I Z E 10240000 2 5 0 - V R FY 2 5 0 - E T R N 2 5 0 - STARTT L S 2 5 0 - A U T H N T L M L O G I N P LA I N O I G E S T - M 0 5 C RAM - M 0 5 2 5 0 - A U T H = N T L M L O G I N P LA I N O I G E S T - M 0 5 C RAM - M 0 5 250 - XVERP 2 5 0 8B I TM I M E AUTH P LA I N d G V z d A B O Z X NOAH R 1 c 3 RwY X N z 235 Authent i ca t i on successful QUIT 2 2 1 Bye Vidíme, že se vypsalo potvrzení 2 3 5 A u t h e n t i c a t i o n s u c c e s s f u 1 . Nastane-Ii nějaký pro blém a server odpoví 535 Error: a u t h e n t i c a t i o n fa i 1 e d , zkusíme : •
Podívat se, jestli nejsou chyby v žurnálním souboru .
•
Ověřit uživatelské jméno a heslo v autentizační proceduře.
•
• •
Zkontrolovat konfiguraci Cyrus SASL v l u s r I I i b l s a s 1 2 1 s m t p d . c o n f dle popisu v ka pitole 1 5 . Došlo-Ii v souboru / u s r l l i b / s a s 1 2 / s mt p d . c o n f ke změně, znovu zavést Postfix. Dešifrovat zakódovaný řetězec a porovnat jej s původním vstupem (pokud bychom chtěli testovat i prázdné bajty, přesměrujeme výstup do souboru a otevřeme jej tex tovým editorem). Viz příklad:
$ p e r 1 - MM I M E : : B a s e 64 - e ' p r i n t d e c o d e_ba s e 6 4 ( " d G V z d A B O Z X NOAH R 1 c 3 RwY X N z " ) ; ' testtesttestpa ss
Pokud by se měl žurnál posílat d o konference, mělo by se z něho odstran it uživatelské jméno a heslo, neboť jsou uvedeny ve " sd ílném " rež i m u . J i nou možností je vytvořit si testovacího uživatele, kterého hned po skonče n í testů vymažeme.
Předání testovací zprávy Nyní jsme se konečně dostali k tomu , aby Postfix povolil autentizovanému uživateli pře dat zprávu . Nejdříve však musíme zjistit, zda dřívější povolení nejdou proti novým au tentizačním pravidlům. Provedeme to tak, že se připojíme z počítače nebo ze sítě, která nemá povolení k předávání bez autentizace SMTP . Dvojího ověření dosáhneme, když nejdříve zkusíme poslat zprávu bez SMTP AUTH. Nemáme-Ii přístup k žádnému klientovi mimo oblast definovanou v my n e tw o r k s , zablo kujeme tento parametr a po dobu testu nastavíme my n e t wo r k s_s ty 1 e = h o s t . Tím ome zíme povolení k předávání pouze na server, takže jej můžeme otestovat libovolným počítačem. K serveru se připojíme dle postupu popsaného v předchozí části, avšak po úspěšné au tentizaci nezadáme příkaz QUIT. Místo toho budeme pokračovat v normální komunika-
247
248
'a'hUt:.
Kapito l a 1 6
ci SMTP a pošleme zprávu nelokálnímu uživateli . Následuje příklad, v němž pošleme zprávu z adresy j o h n . d o e@e x a mp l e . c o m na adresu e c h o@p o s t f i x - b o o k . c om: $ t e l n e t ma i l . exampl e . c om 25 2 2 0 ma i l . e x a mp l e . c om E S M T P P o s t f i x E H LO c l i e n t . exampl e . c o m 2 5 0 - ma i l . exampl e . com 250 - P I PE L l N I NG 250 - S I Z E 1 0240000 2 5 0 - V R FY 2 5 0 - E T R N 2 5 0 - A U T H O I G E S T - M 0 5 C RAM - M 0 5 G S SA P I P L A I N L O G I N 2 5 0 - A U T H = O I G E S T - M 0 5 C RAM - M 0 5 G S SA P I P LA I N L O G I N 2 5 0 - X V E R P 2 5 0 8 B I TM I M E AUTH P LA I N d G V zdABO Z X NOAH R l c 3 RwY X N z 235 Authen t i ca t i on s u c c e s s f u l M A I L F ROM : 250 O k RC PT TO : < e c h o@p o s t f i x - b o o k . com> 250 O k DATA 354 End d a t a w i t h < C R > < L F > . < C R > < L F > T h i s i s a s e r v e r s i d e SMTP AUTH t e s t . I f t h e ma i l i s a c c e p t e d . r e l ay i n g wo r k s .
250 O k : queued a s 3FF15E1C65 QU n 2 2 1 Bye C o n n e c t i o n c l o s ed by f o r e i g n h o s t . Všimněme si zprávy 250 Ok, kterou server poslal jako odpověď na RCPT TO : příkaz; to je obvykle příznivé znamení, avšak potvrzení je třeba dokončit. Pokud se to nepodaří, měli bychom zkusit: • •
Podívat se, jestli nejsou chyby v žurnálním souboru . Přesvědčit se, zda jsme správně nastavili permicsasl_authenticated dle popisu v jed né z předchozích částí, která se jmenuje "Konfigurace povolení k předávání" .
•
Důkladně zkontrolovat zakódovaný řetězec.
•
Zkontrolovat, zda nejsou v dialogu SMTP překlepy.
Pokročilá nastavení serveru Od té doby, co se v Postfixu objevil systém SMTP AUTH, přibyly z důvodu lepšího ovlá dání SMTP AUTH některé parametry. V následující podkapitole si řekneme, jaké jsou v Postfixu další možnosti.
Selektivní nabízení SMTP AUTH Z nabídky SMTP AUTH můžeme některé sítě vyřadit. Tato možnost je velmi užitečná v případě, když máme některé poštovní klienty Netscape (Netscape 4.x), kteří trvají na používání SMTP AUTH, jakmile se jim nabídne, bez ohledu na skutečnost, zda byli tím to způsobem zkonfigurováni .
J a k se prová d í a utentizace S MTP Nastavíme parametr s m t pd_s a s 1 _e x e e p t i o n s_n e two r k s v souboru ma i n . e f a poté pou žijeme buď parametry, které Postfix zná ze své vlastní konfigurace, např. my n e t w o r k � , ne bo budeme definovat seznam IP adres v notaci CIDR (např. 172. 16.0. 1 17/32):
s m t pd_s a s 1 _e x e e p t i o n s_n e t w o r k s = $ my n e t wo r k s . 1 7 2 . 1 6 . 0 . 1 1 7 / 3 2
Omezení okruhu odesilatelů Autentizovaný poštovní klient může posílat zprávy s libovolným odesilatelem. Klienty můžeme nicméně omezit na určitý okruh adres odesilatelů. Pomocí parametru s m t p d_s e n d e r _1 o g i n_ma p s definujeme cestu k mapě, kde se porovnává adresa odesila tele s přihlašovacími jmény SASL. Mapa, která se může jmenovat řekněme l e t e / p o s t · f i x / s m t pd_s e n d e r_ 1 o g i n_ma p , vypadá například takto:
f 1 i n t s t o n e@e x a mp 1 e . e o m r u b b 1 e@e x a m p 1 e . e o m s a 1 e s@ex a m p 1 e . c om
f1 i ntstone rubb1 e f1 i ntstone . rubb1 e
Levá strana mapy obsahuje odesilatele, na pravé straně je jedno nebo více přihlašova cích jmen oddělených čárkami. Konverzi mapy provedeme příkazem p o s t m a p , např. p o s tma p h a s h : / e t c / p o s t f i x / s m t pd_s e n d e r_ 1 o g i n_m a p , a Postfixu sdělíme, že má číst mapu uvedenou v souboru ma i n . c f .
Místo mapy typu h a s h můžeme použít i NIS, LDAP nebo SQL. Když Postfix ví o mapě, musíme vybrat jedno ze dvou omezení, kterými určíme, jak se má naložit s klientem, jehož odesilatel obálky nesouhlasí s přihlašovacím jménem.
rej e c t_s e n d e r_1 o g i n_m i s m a t c h Tímto příkazem omezíme všechny klienty bez ohledu n a to, zda s e autentizovali pomo cí SMTP .
rej e c t_u n a u t h e n t i c a t ed_s e n d e r_1 o g i n_mi s m a t c h Tímto příkazem omezíme pouze klienty, kteří s e neautentizovali pomocí SMTP. Do seznamu omezení s m t p d _ r e e i p i e n t_ r e s t r i c t i o n s v souboru m a i n . c f přijde jeden z těchto parametrů :
s m t pd_re c i p i e n t_ r e s t r i e t i o n s
Autentizace SMTP na straně klienta Postfixoví démoni s m t p a 1 mtp na straně klienta používají k autentizaci SMTP se vzdále ným serverem systém Cyrus SASL. V klientské konfiguraci je nutno zkonfigurovat pouze
249
2 50
'a·a'!M
Kapitola 1 6
POStfIX o Cyrus SASL se nemusíme starat. Oba démoni, smtp i lmtp, umějí využívat me chanismy podporované knihovnou Cyrus SASL. -
Poštovn í kl ient
I----SMTP AUTH
--
..
Poštovní server
t doména :uživatel : heslo
� Obrázek 1 6-2 Arch itektura SMTP AUTH na stra ně k l ienta Na obrázku 16.2 vidíme postfixového démona s m t p , který se účastní sezení SMTP AUTH se vzdáleným poštovním serverem. Klient ( s m t p ) posílá autentizační údaje uložené v souboru hesel, aby od vzdáleného serveru získal povolení k předávání.
AUTH p ro p ostfixového klienta
SMTP
Konfigurace autentizace SMTP pro postfixového klienta je mnohem jednodušší než stej ná konfigurace pro server. I když potřebujeme knihovnu Cyrus SASL, vlastní systém Cy rus SASL konfigurovat nemusíme. Postupovat budeme takto:
1 . Požádáme server o ověřovací mechanismy. 2. Aktivujeme SMTP AUTH na straně klienta. 3. Poskytneme soubor s autentizačními údaji SMTP AUTH. 4. Zkonfigurujeme PostflX tak, aby tento soubor používal. 5.
Zablokujeme autentizační mechanismy, které nejsou bezpečné.
Ověření platného autentizalniho mechanismu Nejdříve musíme zjistit, které ověřovací mechanismy vzdálený server nabízía přesvědčit se, zda naše instalace systému Cyrus SASL tyto mechanismy podporuje. Připojíme se k poštovnímu serveru a pozdravíme jej příkazem EHLO, aby se vypsal seznam mecha nismů, viz následující příklad:
$ t e l n e t m a i l . r emot e - e x a m p l e . c om 2 5 2 2 0 ma i l . remot e - exampl e . com ESMTP E H LO m a i l . ex a m p l e . com 2 5 0 - ma i l . r e m o t e - e x a mp l e . c o m 2 50 - P I PE L I N I NG 2 50 - S I Z E 1 0240000
J a k se prová d í a utentizace SMTP
'a-a"M
2 5 0 - V R FY 2 5 0 - ETRN 2 5 0 - STARTT LS 250 - A U TH L O G I N PLA I N O I G ES T - M05 CRA M - M05 250 - A U TH= L OG I N PLA IN O I G ES T - M05 CRA M - M05
250 - XVERP 2 5 0 8B I TM I M E QUIT 2 2 l By e Vidíme, že server nejen podporuje mechanismy LOGIN, PLAIN, DlGEST-MD5 a CRAM MD5, ale také nezapomíná na nestandardní klienty, kteří jsou popsáni v části "Konfigu race SMTP" shora . Nyní si vypíšeme knihovny v knihovním adresáři Cyrus SASL. Je-li například předpona instalace Cyrus / u s r l l o c a l , zadáme:
# l s - 1 / u s r / 1 o c a 1 / 1 i b / s a s 1 2 / 1 i b* . s o výstup by pak mohl vypadat přibližně takto:
/ u s r / l oca l / u s r / l oc a l / u s r / l oca l /usr/l oca l / u s r / l oca l / u s r l l oca l
/l /l /l /l /l
i b/sas1 2/1 i b/sas1 2/1 i b/sas1 2/1 i b/sas1 2/1 i b/sas1 2/1 II i b/sas1 21l
i b a n onymo u s . s o i b c r a mmd 5 . s o i b d i g e s tmd 5 . s o i bl og i n . so i bpl a i n . so i bsa s l db . so
Snadno zjistíme, že tato instalace podporuje ověřovací mechanismy ANONYMOUS, CRAM-MD 5 , DlGEST-MD5, LOGIN a PLAIN. (Pozor, libsasldb.so není knihovna autenti začních mechanismů .) Jakmile máme tyto informace, porovnáme mechanismy, které vzdálený server nabízís vý pisem knihoven systému Cyrus SASL z našeho serveru , a dozvíme se, prostřednictvím ja kých ověřovacích mechanismů bude náš klient schopen se připojit k serveru .
Aktivace SMTP AUTH na straně klienta Implicitně je autentizace SMTP na straně klienta zablokovaná. Aktivujeme ji pomocí pa rametru s m t p_s a s l _a u t h_ e n a b l e v souboru ma i n . c f , který nastavíme na y e s .
Tímto příkazem aktivujeme SMTP AUTH n a straně klienta; zbývá ještě sdělit Postfixu, kde nalezne utajená data potřebná k autentizaci a který z mechanismů (z těch, co nabízí ser ver) může Postfix použít.
Uložení autentizačních údajů Dalším krokem bude příprava dat, která použije postfixový klient, když s e bude chtít au tentizovat s jedním nebo více vzdálenými servery. Jako uživatel r o o t si vytvoříme mapu / e t c / p o s t f i x/ s a s l _p a s s w d , pokud už neexistuje:
# t o u c h / e t c / p o s t f i x / s a s l _p a s swd
251
252
'4-hMM
Kapitola 1 6
Postfix mj'l PY otevírá vždy před přechodem do uzavřeného prostoru (ch root), takže ta to ta b u l ka m ůže být bezpečně m i mo tento prostor. Tento soubor upravíme tak, že na levou stranu přidáme úplné jméno poštovního serve ru, který vyžaduje autentizaci, a na pravou stranu dáme uživatelské jméno a heslo od dělené dvojtečkou . Zde je příklad nastavení uživatelského jména a hesla pro m a i l . e x a mp l e . c o m a r e l a y . a n o t h e r . e x a m p l e . c om:
ma i l . e x a m p l e . c o m rel ay . a n o t h e r . exampl e . com
test : testpa ss u s e r n a me : p a s s w o r d
P o provedených změnách v souboru s a s l _p a s swd změníme přístupová práva tak, aby jej mohl číst pouze uživatel r o o t ; vzpomeňme si, že obsahuje důvěrné informace, které by neměl být schopen přečíst lokální uživatel. Změnu provedeme pomocí příkazů c h ow n a c hmod:
# c h own root : root / e t c / p o s t f i x / s a s l _p a s swd && c hmod 600 / e t c / p o s t f i x / s a s l _p a s swd
POZNÁMKA o přístupová práva Postfixu se nem usíme obávat; ten si přečte soubor s a s l _p a s swd ješ tě před tím, než se sta ne uživatelem s menšími oprávněními a než p řejde do uzavřené ho prostoru.
Jakmile jsou nastavena příslušná oprávnění, mapový soubor převedeme na indexovanou mapu s možností rychlejšího vyhledávání (toto je nutno provést pokaždé, když se změ ní s a s l _p a s swd ) :
# p o s tma p h a s h : / e t c / p o s t f i x / s a s l _p a s s w d
Konfigurace Postfixu pro použití autentizačních údajů SMTP AUTH Dále musíme sdělit postfixovému klientu , kde nalezne právě vytvořenou mapu s auten tizačními údaji . Do parametru s m t p_s a s l _p a s s w o r d_m a p s v souboru m a i n . c f nastavíme úplnou cestu k souboru s a s l _p a s s w d , přičemž současně je třeba zadat příznakem h a s h typ této mapy, viz příklad:
s m t p_s a s l _p a s s w o rd_m a p s
�
h a s h : / e t c / p o s t f i x / s a s l _p a s s w d
Omezení autentizačních mechanismů Posledním krokem při konfiguraci klienta je zablokování mechanismů , které nejsou bez pečné. V parametru s m t p_s a s l _s e c u r i ty_o p t i o n s nastavíme seznam typů mechanismů (oddělených čárkami), které klient nesmí používat (viz část "Konfigurace mechanismů SASL" shora). Implicitně je tento parametr nastaven na n o a n o n y mo u s , avšak měly by se pokud možno zablokovat nešifrované mechanismy (tj . pokud náš server podporuje ně jaký šifrovací mechanismus, např. D1GEST-MD5 nebo CRAM-MD5). Za tím účelem při dáme do souboru ma i n . cf tento řádek:
s m t p_s a s l _ s e c u r i ty_o p t i o n s
�
n o a n onymou s . n o p l a i ntext
J a k se provád í a utentizace S MTP
Nabízí- I i vzdá lený server pouze nešifrova né mech a n ismy, které ovšem nechceme pou žívat v nezašifrova né vrstvě, zj istíme, jest l i server náhodou nenabízí STARTTLS. Pokud ano, m ůžeme pod le popisu v kapitole 1 8 nastavit Postfix tak, a by používa l TLS a k l i ent tudíž bude posílat svoje a utentizačn í údaje až po ustaven í šifrova né kom u n i kačn í vrst vy.
Test SMTP AUTH na straně klienta Testování autentizace kl ienta provedeme jak lokálním, tak vzdáleným způsobem: 1.
Ověříme autentizační údaje na vzdáleném serveru , abychom se přesvědčili, že jsou platné a že jsou serveru známy.
2.
Ověříme žurnální soubor.
3.
K odeslání testovací zprávy vzdálenému uživateli použijeme Postfix, čímž se pře svědčíme o tom, že můžeme předávat zprávy prostřednictvím tohoto serveru .
Ověření autentizačních iídajů se vzdáleným serverem Nejdříve musíme ověřit, zda uživatelské jméno a heslo skutečně platí. Připojíme se k vzdálenému serveru (viz část "Autentizace uživatele") a provedeme autentizaci pomo cí daného jména a hesla.
POZNÁMKA Pokud nenabízí vzdá lený server nešifrova ný mech a n ismus v nezašifrova né kom u n i kač ní vrstvě, m ůžeme se pokusit ustavit seze n í TLS pomocí para m etru s_c 1 i en t v OpenSSL, pod ívat se, jest l i nabízí nešifrova ný mech a n ism usa poté vyzkoušet AUTH . Pod robnosti viz kapitola 1 8. Také m ůžeme vyzkoušet konfig u raci autentizačn ích údaj ů s poštovn ím kl ientem G U I (tj . s g rafickým rozhran ím), který podporuje různé a utentizačn í mechan ismy. Z k l i e nta ode šleme zprávu, a bychom ověři l i, zda server přij a l a utentizační údaje. Když se přesvědčíme o tom, že server přijímá naše uživatelské jméno a heslo, můžeme se zaměřit na konfiguraci Postfixu.
Ověření žurnálního souboru v dalším kroku zkusíme pomocí oblíbeného příkazu e g r e p najít v postfixovém žurnál
ním souboru obvyklé chyby: 11 e g r e p ' ( r e j e c t l e r r o r l wa r n i n g l f a t a l l p a n i c ) : ' / v a r / l o g / ma i l 1 o g
Zaslání testovací zprávy vzdálenému uživateli v posledním testu zašleme pomocí smtp, což je démon poštovního klienta Postfix, zprá
vu do vzdálené destinace. Odeslání se bude skládat z těchto kroků : 1.
Zvýšíme množství výpisů démona s m t p .
2.
Odešleme zprávu d o vzdáleného místa určení.
3.
V žurnálním souboru ověříme, zda byla potvrzena úspěšná autentizace.
253
254
'B-Miit'
Kapitol a 1 6
Nastavení podrobnějších výpisů v
smtp
Objem výpisů démona s m t p v žurnálním souboru zvětšíme tak, ž e v souboru m a s t e r . c f přidáme k. programu s m t p argument -v, viz dále (pozor na záměnu řádku s m t p d a pro gramu s m t p):
# ======================================================================== # s e r v i c e t y p e p r i v a t e u n p r i v c h r o o t wa k e u p m a x p r o c c omma n d + a r g s (yes ) # (yes ) ( never ) ( 1 00 ) (yes ) # n n smtp smtpd i net n n #smtps smtpd i net
smtp
un i x
n
smtp - v
Po opětovném zavedení konfigurace Postfixu bude démon s m t p sledovat komunikaci SMTP AUTH a vyhodnocování autentizačních údajů , tj . například šifrování a dešifrování řetězců .
UPOZORNĚNí Asi by nebylo vhod né posílat žurná l n í soubor do konferencí, neboť se do něho a uten tizačn í údaje zapisuj í j a ko nešifrova ný text. Před odes l á n ím bychom m ě l i změn it uživa telské jméno a heslo (například na XXX).
Odeslání testovací zprávy do vzdáleného mlsta urlení Funkčnost autentizace na straně klienta si ověříme pomocí grafického poštovního klien ta, jehož prostřednictvím přeneseme zprávu postfixovému démonovi . Téhož dosáhneme i následujícím příkazem, když pošleme zprávu na adresu e c h o@p o s t f i x - b o o k . c om, od kud se zpráva vrátí odesilateli obálky i s kompletní hlavičkou a tělem původní zprávy:
$ ma i l - s ' Te s t i n g e l i e n t s i d e a u t h e n t i e a t i o n ' e e h o@po s t f i x - b o o k . com Tes t i ng . . . Ce : $
Ověřeni úspěšné autentizace v žurnálním souboru Nakonec se pomocí příkazu grep podíváme, jestli proběhla autentizace úspěšně:
# g r e p ' 2 3 5 A u t h e n t i c a t i o n s u e c e s s f u l ' / v a r / l o g / ma i l l o g Pokud šlo vše dobře, měli bychom nalézt jeden nebo několik řádků podobných násle dujícímu , který říká, že autentizace s re 1 a y . e x a m p 1 e . c om funguje:
J a n 2 0 1 2 : 4 0 : 3 9 ma i l p o s t f i x / s mt p [ 2 1 7 4 0 J : < r e l a y . e x a m p l e . c o m [ 1 7 2 . 1 6 . 0 . 1 0 0 J : 235 Authent i ca t i on successful
POZNÁMKA Ta ké bychom m ě l i m ít ve sch rá nce novou zprávu . Ověříme j ej í h lavičku.
'4-h'"
J a k se provád í a utentizace S MTP
Klient Imtp Konfigurace postfixového klienta 1 m t p tak, aby používal SMTP AUTH , je velice podob ná konfiguraci klienta s m t p (viz část "AUTH pro postfixového klienta SMTP"). Můžeme se řídit následujícím postupem: 1.
V souboru ma i n . c f provedeme nastavení l m t p_s a s La u t h_e n a b l e vujeme autentizaci SMTP AUTH na straně klienta.
2.
Vytvoříme soubor s autentizačními údaji SMTP AUTH . Postup je uveden v části "Ulo žení autentizačních údajů", avšak místo s m t p_p a s swd použijeme l m t p_p a s s wd (po chopitelně bychom měli sdílet soubor s autentizačními údaji s klientem s m t p).
3.
Zkonfigurujeme Postfix tak, aby používal autentizační údaje SASL; v souboru ma i n . cf nastavíme l m t p_s a s l _p a s s w o r d_ma p s e t c / p o s t f i x / l m t p_p a s s w d .
�
y e s , čímž akti
�
4.
Klienta omezíme pouze n a používání bezpečných autentizačních mechanismů (viz následující část) .
Omezení
1 mtp
na skupinu autentizačních mechanismů
Při stanovení zákazu autentizačních mechanismů , které nejsou bezpečné, budeme u dé mona 1 m t p postupovat velmi podobně jako v případě démona s m t p v části "Omezení au tentizačních mechanismů" . Chceme-li například vyřadit z používání nešifrované mechanismy, nastavíme parametr l m t p_s a s Ls e c u r i ty_o p t i o n s takto:
l m t p_s a s l _s e c u r i ty_o p t i o n s
�
n o p l a i n t e x t . n o a n o n y mo u s
Oproti nastavení démona s m t p existuje nicméně jedna drobná odlišnost: Nachází-li s e kli ent 1 m t p na stejném počítači jako postfixový server a komunikují-li prostřednictvím soc ketů , je možné poněkud zmírnit i nastavení 1 m t p a povolit nešifrovaný mechanismus:
l m t p_s a s l _s e c u r i ty_o p t i o n s
�
n o a n o nymo u s
Test SMTP AUTH pro klienta
1 mt p
Při testování klienta 1 m t p použijeme stejný postup jako v části "Testování SMTP AUTH na straně klienta" shora . Můžeme požadovat použití i m t e s t, což je utilita v balíku Cyrus IMAP . To může být užitečné zejména tehdy, když chceme, aby postfixový klient 1 m t p doručoval poštu serveru LMTP, který s e dodává s e serverem Cyrus IMAP.
255
KAPITOLA 1 7 v
CO J E BEZPECNOST TRANSPORTNI VRSTVY ,
Z dosavadního výkladu je zřejmé, že Postfix je ze systémového hlediska poměrně bez pečný systém - to znamená, že snahou Postfixu je vyloučit běžná zranitelná místa, je jichž vinou by mohlo dojít k napadení systému . Při vší úctě k této snaze je však třeba říci, že přece jen ještě něco chybí. Problém je v tom, že SMTP nás neochrání před vetřelci, kteří se mohou dostat k pake tům přenášeným po síti. Zní to dost neutěšeně, a i když se můžeme domnívat, že oba vy jsou poněkud přehnané, existují skutečně pádné důvody k tomu , abychom konverzaci SMTP chránili před slídily. Když si například nějaká společnost vyměňuje data po Internetu prostřednictvím poš tovních serverů , měla by uvažovat o šifrování těchto dat. Každý, kdo používá SMPT AUTH s autentizací na bázi nešifrovaného textu , má důvod k obavám tohoto druhu. Po síti se v TCP paketech přenáší citlivý obsah zpráv a také hesla a každý, kdo má přístup k přenosovým trasám těchto datových toků, si může vypsat tyto pakety na svém počíta či a může si datový tok zrekonstruovat. Tento problém lze odstranit pomocí TLS (Transport Layer Security), což je systém, který šifruje komunikaci mezi dvěma počítači před zahájením přenosu . V Postfixu dokonce můžeme používat TLS k povolování předávání na základě certifikačního systému . V té to kapitole se budeme věnovat teoretickým úvahám o úloze TLS v systému Postfix, a to jako poštovního klienta, poštovního serveru a poštovního serveru , který povoluje pře dávání na základě klientských certifikátů . Po dočtení této kapitoly už se budeme umět rozhodnout, kdy má smysl používat TLS včetně příslušenství.
Základy TLS Implicitní komunikace klient/server není šifrovaná. Klient pouze ustaví spojení TCP a za hájí přenos dat (viz obrázek 1 7 . 1 ) . Pokud obsah nebyl zašifrován jiným systémem, pře náší se jako nešifrovaný text, který může číst každý, kdo je schopen sledovat datový tok . Nezvaný posluchač tedy vidí obsah zpráv, a pokud má možnost se dostat i ke směrova či, může tento obsah i měnit.
Kapito l a 1 7
258 I n ternet
Loká l n í síť •
I
Pošto v n í server
t-
From : To :
S e n d e r < s e n d e r@e x a m p l e . c o m >
Re c i p i e n t < r e c i p i e n t@e x a m p l e . c o m )
$ubject :
F o r g o t my p a s s w o r d !
The o l d o n e wa s
" R i l n@K , "
but
1 c a n n o t l og .
-1
Poštovní kl ient
J
I Obrázek 1 7-1 Nešifrovaná komun ikace, kterou přečte každý Používají-li klient i server TLS (viz obrázek 17 . 2), útoky tohoto druhu nepřipadají v úva hu, neboť systém splňuje tři podmínky:
Důvěrnost Komunikace mezi klientem a serverem je skrytá uvnitř šifrovaného sezení. Žádná tře tí strana, která nemá přístup ke klientovi nebo k serveru, není schopna rozluštit pře nášená data.
Integritu I když je možný útok zprostředkovatele (man-in-tbe-middle attack), obě strany jsou schopny ihned zjistit změnu obsahu zprávy.
Prokázání autentičnosti Klient a server si mohou vyměňovat certifikáty ověřené důvěryhodnou certifikační autoritou (CA), jimiž prokazují autentičnost zúčastněných počítačů . Certifikát obsa huje mimo jiné úplné jméno (FQDN) počítače. Jediný možný útok, který by měl být odhalen ještě před odesláním dat, je předstírání cizí identity ("maškaráda"). Internet
Loká l n í s íť Poštovní server
L..usoo
I �
1=
Š 'I f rova na' t ra nspor t n 'i vrs Iv a -.xxx J ( O x O O b a d O O O ) 7 i b 7 dap , s o , 2 -> / us r/ 7 i b / 7 i b 7 dap , s o . 2 ( Ox00882000) l i b l b e r . s o . 2 �> / u s r / l i b / l i b l b e r . s o . 2 ( O x 0 0 6 4 6 0 0 0 ) 7 i b s a s 7 2 . s o . 2 -> / us r/ 7 i b / 7 i b s a s 7 2 . s o . 2 ( Ox0098a OOO) l i b d b - 4 . 2 . s o � > / l i b / t l s / l i bd b - 4 . 2 . s o ( O x O O a 7 3 0 0 0 )
309
31 0
'a-h'lD
Kapito l a 1 9
l i bn s l . s o . 1 ) l l i b / l i bn s l . s o . 1 ( Ox00835000 ) l i b r e s o l v . s o . 2 ) I l i b/ l i b r e s o l v . s o . 2 ( Ox00655000 ) l i bc . s o . 6 ) I l i b / t l s / l i bc . s o . 6 ( Ox004e6000 ) l i bd l . s o . 2 ) l l i b l l i b d l . s o . 2 ( O x 0 0 6 0 3 0 0 0 ) 1 i bs s l . s o . 4 ) I I i b l l i bs s l . s o . 4 ( Ox0084cOOO ) l i b c ry p t o . s o . 4 ) I l i b / l i b c ry p t o . s o . 4 ( O x 0 4 3 7 7 0 0 0 ) l i bp t h r e a d . s o . O ) I l i b / t l s / l i bp t h r e a d . s o . O ( Ox 0 0 6 1 cOOO ) I l i b/ l d · l i n ux . so . 2 ) I l i b/ l d - l i n ux . so . 2 ( Ox004cdOOO ) l i b g s s a p i _k r b 5 . s o . 2 ) l u s r / l i b / l i b g s s a p i _k r b 5 . s o . 2 ( O x O O d 0 9 0 0 0 ) l i b k r b5 . s o . 3 ) l u s r / l i b / l i b k r b5 . s o . 3 ( Ox006da OOO ) l i b c o m_e r r . s o . 2 ) I l i b / l i b c om_e r r . s o . 2 ( O x 0 5 8 f d O O O ) l i b k 5 c ry p t o . s o . 3 ) l u s r / l i b / l i b k 5 c ry p t o . s o . 3 ( O x 0 5 9 0 2 0 0 0 ) l i bz . s o . 1 ) l u s r / l i b / l i bz . s o . 1 ( Ox00609000 ) =
=
=
=
=
=
=
=
=
=
=
=
=
Řádky s knihovnami ldap a sasl2 říkají, že do Postfixu už byla zakonfigurovaná podpo ra LDAP a SASL. Jak se konfiguruje SASL, jsme se dozvěděli v kapitole 1 5 . Nyní navíc potřebujeme pod poru LDAP. K tomu musíme velmi opatrně zkombinovat vnější proměnné CCARGS a AUXLIBS. Nejdříve se přesvědčíme, že jsme připravili SASL takto: $ C C A RGS-" - D U S E_SAS L_AUTH
-
I / u s r I I o c a 1 I i n e 1 u d e A U X L I 8S-" - L I u s r I I o e a 1 I I i b
- l s a s 1 2 " ma ke ma k e f i l e s Při vytváření knihoven Cyrus SASL s podporou LDAP musíme nejdříve v systému najít knihovny LDAP a hlavičkové soubory:
# f i n d l u s r - n ame ' l i b l d a p* . * ' l u s r l l oca l I I i bl l i bl dap . so . 2 lusr/l oca l / l i b/ l i bl dap . so . 2 . 0 . 122 l u s r / l o c a l / l i b / l i b l d a p_r . s o . 2 l u s r / l o c a l / l i b / l i b l d a p_r . s o . 2 . 0 . 1 2 2 lusrll oca l I I i b/ l i bl da p . so lusrll oca l I I i bl l i bl dap . a l u s r / l o c a l / l i b / l i b l d a p_r . s o l u s r / l o c a l / l i b / l i b l d a p_r . a # f i n d l u s r - n ame ' l i b l b e r * . * ' l u s r / l oca l / l i b/ l i bl be r . s o . 2 . 0 . 1 2 2 l u s r l l o c a l I I i b l l i b l be r . s o . 2 l u s r l l oca l l l i b / l i b l be r . s o l u s r l l oca l l l i b l l i b l be r . a Z tohoto výstupu je zřejmé, že knihovny LDAP jsou v I u s r I I o c a 1 I I i b ; cesty I u s r I I i b a I u s r I i n c 1 u d e kompilátor, preprocesor a sestavovací program prohledávají automatic ky. To pouze vezmeme na vědomí a poté vyhledáme odpovídající hlavičkové soubory příkazem: # f i n d l u s r - n ame ' * l d a p* . h ' l u s r / l oca l / i nc l ude / l d a p . h l u s r / l o c a l / i n c l u d e / l d a p_c d e f s . h l u s r / l o c a l / i n c l u d e / l d a p_s c h ema . h l u s r / l o c a l / i n c l u d e / l d a p_ u t f 8 . h l u s r / l o c a l / i n c l u d e / l d a p_f e a t u r e s . h
Firem n í poštovní server
'U·fiiU'
POZNÁMKA Nem ůžeme- I i naj ít h lavičkové soubory LDAP, i když máme v systém u přísl ušné k n i hov ny, měl i bychom pravděpodobně nai nsta lovat vývojové bal íky LDAP z operačního systé m u . M usíme naj ít ba l íky, jej ichž j méno končí na - d e v nebo - d e v e 1 . Nyní už víme, kde máme hledat podporu LDAP i SASL, s oprávněními běžného uživate le tedy rozbalíme zdrojové soubory Postfixu a přejdeme do adresáře, kde jsou uloženy. Postfix pak zkonfigurujeme a vytvoříme s volbami pro SASL ( - D U S E SAS L A U T H ) i pro LDAP ( - D H A S_ L D A P ) , takto:
C C A RGS=" - D H A S _ L D A P - D U S E S A S L_A U T H - I / u s r / 1 o c a 1 / i n c 1 u d e " A U X L I B S =" - l l d a p - l l be r - L/ u s r / 1 o c a 1 / 1 i b - l s a s 1 2 " $ ma ke m a k e f i 1 e s $ m a ke Jakmile se vytváření dokončí, změníme se na superuživatele ( r o o t ) a spustíme make install nebo make upgrade, záleží, zda chceme instalovat nebo aktualizovat. Nakonec ověříme přítomnost podpory SASL a LDAP (popis je uveden na začátku této kapitoly).
Vyhledávání LDAP Na postfixové diskusní skupině není příliš mnoho dotazů vztahujících se k LDAP, ze jména ve srovnání s databázemi . Mnozí lidé se domnívají, že provozování Postfixu (Či čehokoli jiného) s LDAP se podobá černé magii, a snaží se mu za každou cenu vyhnout. Toto je ovšem jiný případ. Konfigurační kroky v případě LDAP vypadají takto: 1.
Vytvoříme adresář pro konfigurační soubory LDAP .
2.
Vytvoříme konfigurační soubor Postfixu s podporou LDAP .
3.
Otestujeme dotaz LDAP.
4.
Zkonfigurujeme Postfix.
V následujících částech si tento postup zopakujeme dvakrát, jednou pro lokální příjem ce a podruhé pro aliasy.
Vytvoření konfiguračního adresáře LDAP Správně zkonfigurovaný server LDAP odmítá dotazy vztahující se k chráněným datům v adresáři . Je totiž nutno se nejdříve vůči LDAP autentizovat ("vytvořit si vazbu"). Více si o tom povíme v části "Pokročilé konfigurace" v této kapitole; nyní provedeme pouze prv ní krok tohoto procesu . Musíme si vytvořit konfigurační adresář, a to z toho důvodu , že autentizační údaje pro vytvoření vazby musí být uloženy ve zvláštních postfixových kon figuračních souborech, nikoli však v ma i n . c f , kde by si je mohl každý přečíst.
UPOZORNĚNí K vytvá řen í konfi g u rací LDAP v externích sou borech je n utno m ít Postfix ve verzi 2.x. Všechny konfig u rační parametry LDAP mohou být v sou boru m a i n . c f, avša k vzh ledem k tomu, že v tomto souboru jsou i hesla uživate l ů LDAP, není to příl iš bezpečný způsob. Autentizačn í údaje by si tak mohl přečíst každý uživatel U n ixu, který používá Postfix. Pokud přesto trvá me na tom, a by byly a utentizačn í údaje u l oženy v souboru ma i n . c f, bylo by vhod né si přečíst část " Zpětná kom pati b i l ita " v m a n u á l ových strá n kách Ida p_ta ble(5).
31 1
312
';'fl'!M
Kapitola 1 9
Konfigurační adresář vytvoříme tak, že jako uživatel r o o t vytvoříme adresář l e t c / p o s t f i x / l d a p , k němuž budou mít přístup pouze r o o t a Postfix. Uložíme do něho konfigu rační sou l? OIy map LDAP a odkaz na ně přidáme do souboru ma i n . c f .
# m kd i r l e t c / p o s t f i x / l d a p # c h g r p postfi x letc / postfi x / l d a p # c h mod 7 5 0 l e t c / p o s t f i x / l d a p
Přidání dotazů LDAP pro lokální uživatele Nyní si všimneme základních parametrů pro dotazování serveru LDAP . Začneme zablo kováním operací vytváření vazeb na LDAP . Potom vytvoříme množinu parametrů , které nám poskytnou informace k ověření lokálních příjemců .
Zablokování vazeb LDAP Postfix se před dotazováním implicitně pokouší autentizovat vazbou LDAP . Při prvním spuštění je vhodné zablokovat tuto autentizaci, aby se věci co nejvíce zjednodušily. Po mocí následujícího konfiguračního parametru vytvoříme dotazovací konfigurační soubor jménem I e t c / p o s t fi x / l d a p / l o c a l _r e c i p i e n t s . c f , jímž se vypne vytváření vazeb:
bi nd = no Konfigurace LDAP serveru Postfixu můžeme říct, kde najde adresářovou službu pomocí konfiguračních parametrů s e r v e r_h o s t a s e r v e r_p o r t . Parametr servechost definuje spojení typu ( l d a p : / / , 1 d a p s : I I nebo 1 d a p i : I ! ) jako součást jednoho nebo několika serverových URL, které mohou zahrnovat serverový port. Implicitní hodnotou tohoto parametru je s e r v e r_h o s t = l da p : l l l oca l hos t : 389. Volitelně můžeme nastavit servecport (jehož implicitní port je 389) tak, aby definoval serverový port, avšak to má smysl pouze tehdy, když všechny LDAP servery posloucha jí na stejném portu . Jinak můžeme port pouze připojit ke každému URL zvlášť, jak ná sleduje:
s e r v e r_h o s t = l d a p : l l m a i l . e x a m p l e . c om : 3 89 , l d a p s : l l a u t h . e x a m p l e . c om : 6 3 6 LDAP server v této kapitole běží n a stejném počítači jako jiné servery a poslouchá n a im plicitním portu 389. V takovém případě můžeme nastavit s e r v e r_h o s t takto:
s e r v e r_h o s t = l d a p : / / m a i l . e x a mp l e . c om Specifikace větve Dále musíme v Postfixu nastavit počáteční větev pro vyhledávání pomocí parametru s e a r c h_ba s e . Nemá implicitní hodnotu , j e tedy nutno jej vždy nastavit. Přidáme část d n vět ve uživatelských objektů :
s e a r c h_ba s e = o u = p e o p l e , d c= e x a m p l e , d c= c o m
'S·fiihl
F i rem n í poštovní server Definice atributů výsledků LDAP
Konfiguraci mapy LDAP dokončíme tak, že definujeme atributy, v nichž jsou klíče, pod le nichž Postfix vyhledává . Logika je stejná jako u všech ostatních map. Jména paramet rů klíčů a hodnot, které se porovnávají s indexovanými mapami, najdeme v tabulce 19. 1 .
Tabulka 1 9. 1 : Vzta h mezi p o l i v i n d exové mapě a paramet ry dota z u LDAP Typ mapy
Levá strana
Pravá strana
indexova ná mapa Dotaz LDAP
kl í č q u e ry_f i l t e r
hodnota r e s u l La t t r i b u t e . r e s u l t_f i l t e r
Podmrnky
Jak vidíme, klíčový atribut dotazu definujeme pomocí parametru q u e ry-f i 1 t e r . V sou ladu s příkladem z adresáře Example Inc. specifikujeme atribut pro poštovní adresu lo kálního příjemce (atribut ma i 1 ) a definujeme část úplné adresy, kterou bude Postfix poskytovat serveru LDAP. Nahrazení vypadají takto:
%s %u %d
T h e c o mp l e t e m a i l a d d r e s s ( f o r e x a m p l e . b a mm@e x a m p l e . c o m ) T h e l o c a l p a r t w i t h o u t t h e @ a n d t h e d o m a i n ( f o r e x a m p l e . b a mm ) T h e d o ma i n p a r t w i t h o u t t h e l o c a l p a r t a n d t h e @ ( f o r e x a mp l e . exampl e . com )
Vzhledem k tomu , že adresářové položky v této kapitole obsahují pouze úplné poštov ní adresy, např. b a mm@e x a m p l e . c om, budeme používat znak %. Postfix zkonfigurujeme na dotazy založené na úplném jménu domény takto:
POZNÁMKA Standard n í syntaxe dotazů LDAP a výsledků je defi nova ná v RFC 2254 ( h t t p : I I www . r f c - e d i t o r . o r g I r f c I r f c 2 2 5 4 . t x t ) . Dotaz m ůžeme specifi kovat zcela l i bovo l ným způsobem . Máme- I i ve schématu například atribut j ménem m a i l boxActive, který ozna čuje a ktivní (n i ko l i zablokova nou) sch rá n ku, parametry dotazu mohou vypadat ta kto: q u e ry_f i l t e r = ( & ( m a i l =% s ) ( ma i l b o x A c t i v e= l ) ) Nyní musíme definovat atributy, které bude Postfix používat při dotazu na výsledek. K dispozici jsou dva parametry: r e s u l t_a t t r i b u t e pro konfiguraci aktuálního atributu a r e s u l t_f i 1 t e r pro odfiltrování částí výsledku dotazu LDAP, které nebudeme potře bovat. V této kapitole pouze musíme ověřit existenci lokální poštovní adresy, neboť v této ka pitole je doručovacím agentem Courier mail drop, nikoli Postfix. Postfix pouze potřebu je vědět, zda je adresa lokálního příjemce platná, takže můžeme použít kterýkoli vrácený atribut.
POZNÁMKA To znamená, že Postfix a kceptuje jakoukoli hodnotu, kterou vrátí server LDAP, j a ko dů kaz, že k příchozí zprávě existuje loká l n í příjemce. Když server LDAP nevrátí žádnou hodnotu, Postfix zprávu od m ítne.
313
Kapito l a 1 9
314
Vybereme jednoduchý atribut, který se při testování dotazu snadno identifikuje. V našem případě vyhovuje u i d, takže zde je postup při jeho konfiguraci jako výsledný atribut v konfiguračním souboru Postfixu l o c a l _ r e c i p i e n t s . c f :
r e s u l t_a t t r i b u t e = u i d Aktivace mapy dotazů Když jsme spokojeni se souborem / e t c / p o s t f i x / l d a p / l o c a l _r e c i p i e n t s . c f , musíme aktivovat tuto mapu v hlavní konfiguraci Postfixu . V souboru ma i n . c f nastavíme para metr l o c a l _ r e c i p i e n t_ma p s na seznam map, v nichž bude Postfix vyhledávat lokální příjemce . Výkonnost hledání v LDAP se zvýší pomocí proxy mapy (viz kapitola 5):
l o c a l _ r e c i p i e n t_ma p s = p r o xy : l d a p : / e t c / p o s t f i x / l d a p / l o c a l _ r e c i p i e n t s . c f Proces založený na proxy mapě se dotazuje jménem několika klientů a může (avšak ne musO výsledky ukládat do vyrovnávací paměti. Jakmile vytvoříme novou mapu , znovu zavedeme Postfix a můžeme začít testovat.
Test přijemců LDAP Jediný test, který můžeme v tomto okamžiku provést, je ověření, zda Postfix umí vyhle dávat platné lokální příjemce . Zprávu ještě poslat nemůžeme, protože nemáme zkonfi gurováno lokální doručování. Na lokálního příjemce (např. b a mm@e x a m p l e . c o m ) se dotážeme pomocí příkazu p o s t m a p . Ještě předtím se ovšem musíme přepnout do režimu uživatele Postfixu v našem systému, neboť musíme mít jistotu , že smíme číst konfigurač ní soubor LDAP a zadávat dotazy. Úspěšný test vypadá takto:
/I s u - p o s t f i x
$ / u s r / s b i n / p o s tma p
-
q " b a mm@e x a mp l e . com" l d a p : / e t c / p o s t f i x / l d a p /
l o c a l _re c i p i e n t s . c f b a mm b a mm Dotaz vrátí hodnotu uid adresy b a mm@e x a m p l e . c om; v tomto případě je hodnota atributu b a mm b a mm, takže konfigurace je funkční. Kdyby nebyla, do příkazu p o s t m a p přidáme pa rametr - v, aby se vypsal důvod nefunkčnosti. Navíc bychom mohli do konfiguračního souboru dotazů LDAP přidat ještě parametr d e b u g l e v e l :
debugl evel = 1
POZNÁMKA Ú roveň ladění m ůžeme zvýšit až na 3, čímž získáme ještě další pod robnosti k danému problém u .
Dotazy LDAP na aliasy Chceme-li zkonfigurovat Postfix tak, abychom se mohli serveru LDAP dotazovat na alia sy, provedeme stejné konfigurační kroky jako v části "Přidání dotazů LDAP na lokální příjemce", navíc však musíme specifikovat jiný parametr r e s u l t_a t t r i b u t e pro výsled ky a musíme použít i parametr q u e ry-f i 1 t e r , abychom z výsledku vyextrahovali pouze určitý atribut.
'B-Uiit'
F i re m n í poštovn í server
Aliasy se ve vzorovém adresářovém serveru přiřazují atributu ma i 1 d r o p v dané položce. Proto může konfigurační soubor pro aliasy (například / e t c / p o s t f i x / l d a p / v i r t u a l _a 1 i a s e s . c f ) vypadat přibližně takto:
bi nd � no s e r v e r_h o s t � l d a p : / / ma i l . e x a m p l e . c o m s e a r c h_ba s e � o u� p e o p l e , d c� e x a mp l e , d c� c o m q u e ry_f i l t e r � ( m a i l d r o p�% s ) r e s u l t_a t t r i b u t e � ma i l Konfigurace Postfixu pro dotazovací mapy aliasů LDAP Máme-Ii hotový dotazovací konfigurační soubor LDAP, musíme jej připojit ke konfigura ci Postfixu tak, že v souboru ma i n . cf nastavíme parametr v i r t u a l _a 1 i a s_ma p s . Syntaxe je stejná jako v případě mapy příjemců popsané v části "Aktivace dotazovací mapy":
v i r t u a l _a l i a s_m a p s � p r o xy : l d a p : / e t c / p o s t f i x / l d a p / v i r t u a l _a l i a s e s . c f Zavedeme novou konfiguraci Postfixu a můžeme začít testovat.
Test dotazovací mapy aliasů LDAP Jako v předchozím případě nemůžeme konfiguraci LDAP prozatím otestovat pomocí zkušební zprávy, můžeme však zadat příkaz p o s tma p . Připomeňme si, že v adresáři je p o s t m a s t e r@e x a m p l e . c om aliasem pro b a mm@e x a m p l e . c om. Přepneme se do režimu uži vatele Postfixu a zkusíme, jestli mapa aliasů funguje, viz:
li s u - p o s t f i x $ / u s r / s b i n / p o s t m a p q " p o s tma s t e r@examp l e . com" l d a p : / e t c / p o s t f i x / l d a p / v i r t u a l _a l i a s e s . c f b a mm@e x a mp l e . c o m -
Pokud z tohoto příkazu nedostaneme žádný výstup, přidáme parametr -v, abychom na stavili obsáhlejší výpis. Také můžeme do konfiguračního souboru LDAP přidat parametr d e b u g l e v e l (a podle požadovaného objemu vypisovaných informací zvýšit jeho hodno tu až na 3):
debugl evel � 1 Test seznamů Vzpomeňme si, že aliasy jsou v seznamech jednoduchého typu (část "Vytváření objektů typu seznam" v této kapitole). Proto bychom měli být schopni pomocí příkazu p o s t m a p získat ze seznamu jmen vícenásobné příjemce:
/I s u - p o s t f i x $ / u s r / s b i n / p o s tma p - q " a l l @examp l e , com" l d a p : / e t c / p o s t f i x / l d a p / v i r t u a l _a l i a s e s . c f b a mm@e x a m p l e . c om , p e b b l e@e x a mp l e . c o m , mc b r i c k e r@e x a m p l e . c om , f l i n t s t o n e@e x a m p l e . c om , r u b b l e@e x a mp l e . c o m Z výsledku složeného z několika adres Postfix vytvoří seznam adres oddělených čárka mi, jako v předchozím příkladu .
31 5
316
'a'hihl
Kapitol a 1 9
Převod doručování na Courier maildrop Konfigurace v této kapitole nevyužívá žádného z postfixových doručovacích agentů (démony' 1 o c a 1 , ma i 1 d r o p ani v i r t u a 1 ). Jedním z důvodů je skutečnost, že nemají ně které funkce jako filtrování nebo kvóty jako externí agenti . Uživatel b a mm b a mm například může umístit všechny zprávy určené pro p o s tma s t e r@ex a m p l e . c o m do jedné podsložky. V této části si ukážeme, jak je třeba zkonfigurovat Postfix, aby převedl lokální doručo vání na Courier maildrop.
Vytvoření lokálního přenosu Začneme definicí nové transportní služby v souboru m a s t e r . c f . Nemusíme se obávat ko lize se stávající službou LDA (máme-li ji činnou), neboť Postfix nebude novou službu používat, dokud v souboru ma i n . c f neprovedeme příslušné změny. Nový transport bu de využívat rouru a bude se . jmenovat m a i l d r o p . Do souboru ma s t e r . c f přidáme konfigurační řádky:
ma i l d rop un i x n n p i pe f l a g s = R h u u s e r= v m a i l a r g v = / u s r / l o c a l / b i n / m a i l d r o p - d $ { r e c i p i e n t }
-
w 75
Význam příznaků, jak jsou uvedeny v p i p e ( 8 ) :
R
Předsazení hlavičky r e t u r n - p a t h , která obsahuje adresu odesilatele obálky. Dé monovi 1 o c a 1 to ukládá RFC 282 1 .
h
Konverze jména domény na příkazovém řádku do adresy $ r e c i p i e n t a jména počítače $ n e x t h o p do dolních znaků .
u
Konverze lokální části adresy $ r e c i p i e n t na příkazovém řádku na malá písme na.
user
user=vmail specifikuje, že / u s r I I o c a 1 / b i n / m a i 1 d r o p - d $ { r e c i p i e n t } by měl fungovat jako uživatel v m a i 1 , což je uživatel , s nímž se setkáme při nastavování Courier maildrop.
-w
Nastavení úrovně varování pro deliverquota(8) n a 7 5 procent kvóty adresáře . Nechceme-li kvótu uplatňovat, můžeme tento příznak vynechat.
Po přidání této služby provedeme editorem změnu v souboru ma i n . c f , aby ji Postfix za čal využívat pro lokální přenosy.
l o c a l _t r a n s p o r t = m a i l d r o p
Používá n í ma i 1 d r o p m ísto loká l n ího agenta s sebou přináší dva ved l ejší efekty. Z a prvé, démon 1 o c a 1 h ledá v a l iasových ma pách, zatímco Courier m a i l d rop n i ko l i . O tomto pro blému jsme se už z m ín i l i v části " Konfi g u race Postfixu pro dotazovací m a py a l iasů LDAP " , když jsme nastavova l i para m etr v i r t u a l _a l i a s_ma p s . Druhé omezení spočívá v tom, že m a i l d r o p neh l ídá zacyklení způsobené Del ivered-To, pokud nezkonfigu ruje me přísl ušné pravidlo. Tuto možnost probereme v části " Vytvá řen í fi ltrů " . Omezení paralelního dorul:ování zpráv Před testováním nového přenosu se musíme přesvědčit, zda je zkonfigurován pro doru čování pouze jedinému uživateli v daném okamžiku. Tento způsob je obvyklý u většiny
F i rem n í poštovní server
'a-h'"
serverů a nevede ke ztrátě výkonnosti. Stejné omezení lokálního přenosu má dokonce i Postfix a zadává se parametrem l o c a l _d e s t i n a t i o n _ r e c i p i e n t_l i m i t . Syntaxe parametru pro vytvoření limitu pro ostatní LDA je s e r v i c e n a me_d e s t i n a t i on_re c i p i e n t_l i m i t , přičemž senJicename je rovno prvnímu poli v souboru ma s t e r . c f . Právě definovanou službu Courier maildrop doplníme do souboru ma i n . c f následujícím řádkem:
Nyní znovu zavedeme Postfix a můžeme začít testovat.
Test LDA LDA otestujeme tak, že pouze pošleme zprávu na jednu z adres v mapě příjemců a na hlédneme do žurnálu . Z výpisu by mělo být patrné, že Postfix používá nový přenos po mocí m a i 1 d r o p :
I / u s r / s b i n / s e ndma i l - f n n p o s tma s t e r@ex a mp l e . com fl t a i l -f / v a r / l o g / ma i I I og J u n 2 9 1 4 : 3 9 : 1 3 m a i l p o s t f i x / p i c k u p [ 5 1 2 2 J : A C 7 B 9 4 4 0 0 C : u i d=O f r om= < > J u n 29 1 4 : 39 : 1 3 ma i l p o s t f i x / c l e a n up [ 5 1 2 7 J : AC7 B94400C : me s s a g e - i d= < 2 0 0 4 0 6 2 9 1 2 3 9 1 3 . AC 7 B 9 4 4 0 0 C@m a i l . e x a m p l e . c om > J u n 2 9 1 4 : 3 9 : 1 3 m a i l p o s t f i x / q mg r [ 5 1 2 3 J : A C 7 B 9 4 4 0 0 C : f r om= < > . s i z e=2 8 5 . n r c p t = l ( q u e u e a c t i v e ) J u n 29 1 4 : 39 : 1 3 ma i l p o s t f i x / p i pe [ 5 1 30 J : AC7B94400C : t o = < b a mm@e x a m p l e . c o m > . o r i g_t o=< p o s tm a s t e r@e x a mp l e . c o m > , r e l a y=ma i l d r o p . d e l ay=O . s t a t u s = s e n t ( e x a m p l e . c o m ) J u n 2 9 1 4 : 3 9 : 1 3 m a i l p o s t f i x / q mg r [ 5 1 2 3 J : A C 7 B 9 4 4 0 0 C : r e mo v e d
fl e c h o f o o
Není-li použití přenosu pomocí ma i 1 d r o p z e žurnálu zřejmé, v souboru m a s t e r . c f na stavíme podrobnější výpis s m t p d , znovu zavedeme konfiguraci a pošleme další zprávu .
Konfigurace Courier maildrop Courier maildrop j e LDA, ktetý přebírá zprávy o d přenosového agenta typu Postfix a ukládá je do schránky příjemce ve tvaru Maildir; ma i 1 d r o p může také sloužit jako filtr zpráv. Další zajímavou možností je stanovení kvót pro adresáře (zprávy ve tvaru Maildir se ukládají do adresáře jako samostatné soubory).
Příprava systému Systém Courier mail drop nepovolí neautorizovaným uživatelům zápis d o schránek. Než začneme vytvářet moduly, musíme si vybrat důvěryhodné uživatele a skupiny. Vytvoří me si alespoň jednoho nového uživatele s UID a GID, která odpovídají hodnotám za daným v atributech uidNumber a gidNumber v adresáři LDAP. Courier maildrop a lMAP získávají tyto atributy z adresáře v průběhu přístupu do schránky. Vzorová konfigurace z této kapitoly používá následující UID a GID:
u i d N umbe r : 1 003 g i d N umbe r : 1 003
317
318
';'fj'ifI'
Kapitola 1 9
Pokud ještě tohoto uživatele a tuto skupinu nemáme, musíme je vytvořit. Například v Li nuxu vytvoříme uživatele a skupinu jménem v m a i 1 pomocí následujících příkazů :
# u s e r a ďd - u 1 0 0 3 vma i 1 # g r o u p a d d - g 1 0 0 3 vma i 1
Instalace Courier Maildrop Podpora LDAP v Courier mail drop byla v době vzniku této knihy ve fázi beta testování. Při správné konfiguraci už systém funguje, není však ještě zcela vyřešeno korektní hláše ní chyb. Soudě z tempa předchozího vývoje lze odhadnout, že až se tato kniha dostane k čtenáři, zmíněné problémy by už měly být vyřešeny. Skutečný stav prací na vývoji systé mu můžeme zjistit na adrese h t t p : / / www . c o u r i e r - mt a . o r g / d own 1 o a d . p h pflma i 1 d r o p . Archiv vyextrahujeme jako normální uživatel a přejdeme d o právě vytvořeného adresáře. Systém Courier maildrop používá GNU Autoconf, takže systém vytvoříme těmito příkazy: $ . / c o n f i g u r e - - e n a b 1 e - re s t r i c t - t r u s ted-1 - - e n a b 1 e - t r u s t ed - u s e r s - ' r o o t vma i 1 '
- - en a b 1 e - t r u s t e d - g r o u p s- ' r o o t vma i 1 ' - - en a b 1 e - ma i 1 d i r q u o t a - - w i t h - t r a s h q u o t a - - e n a b 1 e - ma i 1 d r o p 1 d a p Musíme se přesvědčit, ž e jsme specifikovali - - e n a b 1 e - m a i l d r o p 1 d a p . Pokud chceme mít i podporu kvót, přidáme - - e n a b 1 e - m a i 1 d i r q u o t a a - - w i t h - t r a s h q u o t a , avšak doporu čujeme nejdříve ještě nahlédnout do části "Příprava kvót" . Až se dokončí konfigurační skript, zadáme příkaz make. Jde-li vše hladce, přejdeme do režimu root a zadáme ma ke install-strip install-man, abychom nainstalovali jednotlivé binární moduly a manu álové stránky. Pokud už máme m a i l d r o p nainstalovaný, můžeme se věnovat postfixovému démonovi p i p e , který ovšem nemůže běžet jako proces uživatele r o o t . Problému se vyhneme tak, že příznak binárních modulů mail drop nastavíme na setuid r o o t .
# c h mod 7 5 0 / u s r / l o c a l / b i n / ma i l d r o p # c hmod u + s / u s r / l o c a l / b i n / ma i l d r o p # c h own r o o t : v ma i l / u s r / l o c a l / b i n / ma i l d r o p # l s - 1 / u s r / l o c a l / b i n / ma i l d r o p - rw s r - x - - - 1 r o o t v ma i l 1 6 5 5 5 2 Jun 2 5 1 2 : 48 / u s r / l oc a l / b i n / ma i l d ro p Nemusíme se obávat, že tím obcházíme bepečnostní politiku Postfixu . Démon p i p e spustí m a i 1 d r o p , který běží jako root, avšak jakmile získá UID a GID, ihned přejde do režimu příslušného uživatele a skupiny.
Konfigurace Courier maildrop Nejsnáze nastavíme konfiguraci m a i 1 d rop pro LDAP tak, že zkopírujeme vzorový soubor jménem m a i l d r o p l d a p . c o n f i g ze zdrojového adresáře m a i l d r o p do / e t c / m a i l d r o p l d a p . c o n f i 9 (zde hledá Courier mail drop konfigurační soubor LDAP implicitně). Pak sou bor pomocí editoru upravíme tak, aby vyhovoval naší konfiguraci. V případě vzorového příkladu v této kapitole by měl mít tento obsah :
h o s t n a me ba s ed n fi 1 ter
ma i l . e x a m p l e . c o m d c= e x a m p l e , d c= c o m & ( objectc l a s s=i netorgperson )
'a-fi'U'
Firem n í poštovn í server t i meout s e a r c h_me t h o d ma i l _a t t r u i d_a t t r u i d n umber a t t r g i d n u m b e r_a t t r ma i l d i r_a t t r h ome d i r e c t o ry_a t t r q u o t a_a t t r
5 ma i l ma i l uid u i d N um b e r g i d N um b e r ma i l b o x h ome D i r e c t o ry quota
Vytvoření schránek typu Maildir Všichni uživatelé na firemním poštovním serveru jsou virtuální. Nemají žádný vztah k účtům lokálních uživatelů , a když vytvoříme uživatele v adresáři LDAP, nevytvoří se ani domovský adresář, ani schránka. Před testováním programu ma i 1 d r o p musíme vytvořit schránky uživatelů . Nyní je vytvo říme ručně, později pochopitelně tento proces zautomatizujeme pomocí skriptu . V systé mu Courier maildrop existuje utilita ma i 1 d i rma k e , která vytvoří schránku Maildir a implicitně i několik podsložek. Kvůli lokalizaci schránek nahlíží ma i 1 d r o p do atributu homeDirectories na serveru LDAP. Jelikož jsme se však přepnuli na virtuální uživatele, můžeme si vytvořit kostru adresáře například v /home/mailskel, kterou pak prostě zkopírujeme do domovských adresářů uživatelů , aniž bychom se museli starat o příslušná přístupová práva. Vnější kostra adresáře se vytvoří takto:
# m kd i r / h ome / ma i l s k e l # c h g r p vma i l / h om e / ma i l s ke l # c hmod 7 7 0 / h om e / ma i l s ke l # l s - d a l l / h om e / ma i l s k e l v ma i l d rw x r wx · · · 6 root
4 0 9 6 J u n 2 8 1 7 : 5 2 / h om e / ma i l s k e l
Nyní můžeme vytvořit další adresář jménem / h o m e / m a i 1 s k e 1 / . t e m p 1 a t e D i r a vlastníkem učinit v m a i 1 :
# m k d i r / h ome /ma i l s ke l / . t empl a t e D i r # c h own vma i l / h om e / ma i l s k e l / . t empl a t e D i r / # c h g r p vma i l / h ome / ma i l s ke l / . t empl a t e D i r / # c hmod 7 0 0 / h ome / ma i l s ke l / . t emp l a t e D i r / # l s - d a l l / h om e / ma i l s k e l / . t empl a t e D i r d rwx · · · · · · 2 vma i l vma i l 4 0 9 6 J u n 29 2 2 : 2 7 / h ome / ma i l s k e l / . t empl a t e D i r Teď máme vše připraveno k tomu, abychom vytvořili skutečný adresář pro poštu . Než však zadáme příkaz m a i l d i rma k e , musíme se přepnout do režimu uživatele v ma i l , aby měl později maildrop přístup ke kopii tohoto adresáře:
# s u - vma i l $ ma i l d i rma ke / h ome /ma i l s k e l / . t empl a t e D i r / M a i l d i r Ověříme, zda se vytvořily příslušné adresáře: $ l s - l a / h om e / ma i l s k e l / . t empl a t e D i r / M a i l d i r
tota 1 20
31 9
Kapitola 1 9
320 d rwx - - - - - d rwx - - - - - d rwx - - - - - d rwx - - - ' - d r wx - - - - - -
5 3 2 2 2
v ma i l vma i 1 vma i 1 vma i 1 vma i 1
vma i l v ma i l vma i 1 vma i 1 vma i 1
4096 4096 4096 4096 4096
Jun Jun Jun Jun Jun
29 29 29 29 29
22 : 31 22 : 3 1 22 : 3 1 eur 22 : 3 1 new 2 2 : 3 1 tmp
Vidíme, ž e vznikl adresář Maildir s e třemi podadresáři e u r , n ew a t m p , k a m s e ukládají zprávy z inbox (v závislosti na jejich stavu). Několikrát ještě zadáme příkaz maildinnake, abychom vytvořili podsložky D r a f t s , Trash a Spam:
$ ma i l d i rma ke - f D r a ft s / h ome / ma i l s ke l / . t empl a t e D i r / M a i l d i r $ ma i l d i rma ke - f T r a s h / h om e / ma i l s ke l / . t empl a t e D i r / M a i l d i r $ ma i l d i rma ke - f S p a m / h om e / ma i l s ke l / . t empl a t e D i r / M a i l d i r $ 1 s - l a / h om e / ma i l s ke l / . t empl a t e D i r / M a i l d i r tot a l 3 2 d rwx - - - - - 8 v ma i l v ma i l 4096 Jun 2 9 2 2 : 39 d rwx - - - - - 3 vma i 1 4096 Jun 29 22 : 31 vma i l d rwx - - - - - 2 vma i 1 vma i 1 4096 Jun 29 22 : 3 1 eur d rwx - - - - - 5 vma i 1 vma i 1 4096 Jun 29 22 : 39 . Dra fts d rwx - - - - - 2 v ma i l vma i 1 4 0 9 6 J u n 2 9 2 2 : 3 1 n ew d rwx - - - - - 5 vma i 1 vma i 1 4096 Jun 29 22 : 39 . Spam d rwx - - - - - vma i 1 2 vma i 1 4 0 9 6 J u n 2 9 2 2 : 3 1 tmp d rwx - - - - - 5 vma i 1 vma i l 4096 Jun 29 22 : 39 . T r a s h Všimněme si, že každý z těchto podadresářů má podadresáře e u r , n e w a t m p . Š ablona adresáře s e nyní stane kostrou všech dalších virtuálních schránek. Vlastnictví a přístupová práva při kopírování uchováme tak, že jako superuživatel zadáme e p - p Ro Schránku pro b a mm b a mm vytvoříme například takto:
/I c p - p R / h om e / ma i l s ke l / . t empl a t e D i r / / v a r / s p o o l / ma i l / b a mm b a mm /I 1 s - a l l / v a r / s p o o l /m a i l / b ammb a mm tota l 1 2 d rwx - - - - - 3 vma i 1 vma i l 4 0 9 6 J u n 2 9 d rw x r wx - - 9 root vma i l 4 0 9 6 J u n 2 9 d rwx - - - - - 8 vma i 1 vma i l 4 0 9 6 J u n 2 9 /I l s - a l l / v a r / s p o o l /ma i l / b a mmbamm / M a i l d i r / total 32 d rwx - - - - - 8 vma i l vma i 1 4 0 9 6 J u n 2 9 d rwx - - - - - 3 vma i l vma i 1 4 0 9 6 J u n 2 9 d rwx - - - - - 2 vma i l vma i l 4 0 9 6 J u n 2 9 d rwx - - - - - 5 vma i l vm a i l 4 0 9 6 J u n 2 9 d rwx - - - - - 2 vma i 1 vma i 1 4 0 9 6 J u n 2 9 d rwx - - - - - 5 v ma i l vm a i l 4 0 9 6 J u n 2 9 d rwx - - - - - 2 vm a i l vma i l 4 0 9 6 J u n 2 9 d rwx - - - - - 5 vma i 1 vm a i l 4 0 9 6 J u n 2 9
22 : 31 22 : 55 2 2 : 3 9 Ma i 1 d i r 22 : 39 22 : 31 22 : 31 22 : 39 22 : 31 22 : 39 22 : 31 22 : 39
eur . Drafts n ew . Spam tmp . Trash
Adresáře pro ostatní uživatele prozatím nebudeme vytvářet, nejdříve si přečteme násle dující část.
Vytváření filtrů zpráv Když jsme vytvořili šablonu adresáře, můžeme pro Courier maildrop vytvořit implicitní množinu doručovacích filtrů . Nejdříve si v e t e / m a i 1 d r o p r e zkonfigurujeme globální
F i rem n í poštovní server množinu pravidel, která vyhovuje všem příjemcům pošty na serveru . Pro účely ladění bu de šikovné, když pomocí následujícího pravidla umístíme do domovských adresářů všech uživatelů žurnální soubor:
l og f i l e " $ HO M E / ma i l d rop . l og " Nyní se už můžeme věnovat filtrům. Prvním pravidlem v následujícím příkladu zamezí me zacyklení typu Delivered-To, jak jsme se už zmínili v části "Vytvoření lokálního pře nosu " . Toto pravidlo by mělo vždy být na začátku souboru ma i 1 d r o p r c , aby se uplatnilo před všemi ostatními akcemi. Druhé pravidlo říká programu m a i 1 d r o p , aby všechny zprá vy, které mají Yes v položce X-Spam-Status v hlavičce, uložil do podsložky .spam v uži vatelské schránce ( $ O E F A U L T l :
l o g f i l e " $ H O M E / ma i l d r o p . l o g " i f ( l ' O e l i v e r e d - T o : $ l O G N A M E@m a i l . e x a m p l e . c o m / : h { e c h o " T h i s me s s a g e i s l o o p i n g , i t a l r e a dy h a s my D e l i v e r e d - T o : H e a d e r ! " 1 EX I TCODE exi t i f ( / ' X - Spam - Status : V e s l { t o S D E FAU LT / . s p a m l Individuální filtrování zajistíme tak, ž e d o domovského adresáře každého z uživatelů při dáme soubor . ma i l f i l t e r s dalšími pravidly. Musí být správně nastavena přístupová práva tohoto souboru , jinak jej ma i 1 d r o p odmítne . Pro uživatele b a mm b a mm je vytvoříme takto:
/I s u - vma i l $ c d I v a r l s p o o l / ma i l / ba mmbamm $ t o u c h . ma i l f i l t e r $ c h mod 6 0 0 . ma i l f i l t e r Připomeňme si, že uvedený uživatel j e současně správcem pošty. Z toho důvodu jsou filtrovací pravidla v . ma i 1 f i 1 te r nastavena tak, aby se zprávy s adresou příjemce p o s t ma s t e r@e x a m p l e . c o m archivovaly v adresáři . p o s t m a s t e r .
i f ( / ' T o . * p o s tma s t e r@e x a m p l e \ . c o m / ) { t o " S D E FA U L T / . p o s t ma s t e r / "
POZNÁMKA Globá l n í pravidla fi ltrová n í maj í před nost před i n d ivid u á l n ím i pravidly uživatele. Složku . p o s t m a s t e r jsme pochopitelně ještě nevytvořili, takže před tím, než toto pravi dlo začneme používat, ji musíme vytvořit. Přejdeme do režimu uživatele v m a i 1 a zadá me příkaz maildirmake:
/I s u - vma i l $ cd I v a r l s p o o l / ma i l / ba mmbamm $ ma i l d i rma ke - f p o s tma s t e r M a i l d i r
32 1
322
'4'h'lM
Kapito l a 1 9
Filtrovací pravidla programu ma i 1 d r o p nám značně usnadní život, neboť nezávisí na poš tovním klientovi. ° možnostech filtrování programu maildrop se dočteme více v manu álových )itránkách maildropfilter(5), přičemž zvláštní pozornost bychom měli věnovat příkladu uvedenému v h t t p : / / www . d o t f i 1 e s . c o m v části "Other" .
Příprava kvót Kvóty vypadají jako velmi příjemná vlastnost systému ma i 1 d r o p , avšak než je použijeme, měli bychom si být vědomi toho, že jde o poněkud kontroverzní opatření, které není vždy spolehlivé . Následující prohlášení Victora Duchovního shrnuje hledisko vývojářů Postfixu : " Opravdovým zádrhelem je, že uživatelé "maildir++ ve skutečnosti nestojí o ro bustní kód kvót, ktetý by fungoval zaručeně a kdykoli! ° robustnosti si jenom rá di povídají (není třeba vytvářet nový stavový soubor. . . ), jak snadno se používá (není třeba se starat o rozhraní kvót souborového systému, kvóty lze povolit pro konfigurovatelné omezení funkcionality). Toto hledisko je pochopitelně známo (viz h t t p : / / www . i n t e r 7 . c o m / c o u r i e r i m a p / R E A DM E . m a i 1 d i r q u o t a . h t m l ), avšak mnozí správci přece jen dávají přednost výhodám Courier mail drop i za cenu něktetých nedostatků . Každá situace je jiná, je třeba se roz hodnout, čemu dáme přednost. Pokud máme o kvóty zájem, nejdříve přidáme na řádek volbu -w 75, viz část "Vytváře ní lokálního přenosu" . Varovné hlášení se vypíše, když se vyčerpá 75 procent kapacity adresáře (měkký limit). Š ablonu varovného hlášení si musíme vytvořit sami . Š ablonu vy tvoříme jako textový soubor jménem /usr/local/etc/quotawarnmsg, ktetý obsahuje zprá vu , přibližně takto:
F r om : MA I L E R - D A E M O N < > To : V a l ued C us tomer : ; 5 u b j e c t : M a i l q u o t a wa r n i n g M i me - V e r s i o n : 1 . 0 C o n t e n t - Ty p e : t e x t / p l a i n ; c h a r s e t = i s o - 88 5 9 - 1 C o n t en t - T r a n s fe r - E n c od i ng : 7 b i t Y o u r ma i 1 b o x on t h e s e r v e r i s n o w m o r e t h a n 7 5 % f u l l . 5 0 t h a t y o u c a n c o n t i n u e t o r e c e i v e m a i l y o u n e e d t o r e mo v e s ome me s s a g e s f r om y o u r m a i l b o x . Když ma i 1 d r o p ukládá varovné hlášení do schránky příjemce, přidá k němu ID zprávy a datové hlavičky.
Test Courier maildrop Nyní můžeme otestovat instalaci Courier mail drop. Provedeme čtyři kroky: 1 . Test spolupráce Courier maildrop s Postfixem. 2.
Doručení zprávy programu Courier mail drop pomocí programu sendmail, ktetý je součástí Postfixu .
3.
Test filtrů .
4.
Test kvót.
'B-;jnc,
F i rem n í poštovní server Test Courier maildrop jako samostatného programu v režimu uživatele v m a i l provedeme místo Postfixu příkaz m a i 1 d r o p :
/I s u - vma i l $ / u s r / l o c a l / b i n / ma i l d r o p - d b a mm@ex a mp l e . com t h i s i s a t e s t me s s a g e Zprávu odešleme tak, že n a řádku zadáme povel C T R L D . Pomocí výstupního kódu ově říme, zda se mail drop ukončil správně: -
$ echo $ ? O Nula na výstupu říká, že příkaz i doručení proběhly úspěšně. Pochopitelně můžeme ta ké ověřit, jestli v adresáři b a mm přibyl nový soubor:
$ l s 1 / v a r / s p o o l /ma i l / b a mmbamm / M a i l d i r / n ew tota 1 4 - rw - - - - - - 1 v ma i l vma i l 2 3 Jun 3 0 1 2 : 12 1 08 8 5 9 0 3 4 2 . M 9 7 5 0 1 8 P 6 5 8 9 V 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 2 I 0 0 0 1 84 0 E_0 . ma i l . e x a m p l e . c om . S=4 -
Pokud jsme aktivovali zápis do žurnálu, najdeme v něm další důkaz doručení zprávy:
Date : Mon Aug 9 09 : 05 : 5 6 2004 From : S u bj : F i l e : / v a r / s p o o l / m a i l / b a m m b a mm / M a i l d i r
( 12)
Test Courier maildrop s Postfixem Postfix s programem mail drop otestujeme tak, že pomocí binárních souborů programu sendmail prozkoumáme žurnál :
/I e c h o f o o I / u s r / s b i n / s e ndma i l - f r u b b l e@examp l e . c om b a mm@ex a mp l e . com /I t a i l -f / v a r / l o g / ma i l l og J u l 2 6 2 3 : 2 0 : 5 8 m a i l p o s t f i x / p i c k u p [ 2 7 88 3 J : 6 0 8 D D 2 2 9 E F 5 : u i d=O f r om=< r u b b l e@e x a mp l e . c om > J u l 26 23 : 20 : 58 ma i l p o s t f i x / c l e a n u p [ 28429 J : 608DD22 9 E F 5 : me s s a g e - i d=< 2 0 0 4 0 7 2 6 2 1 2 0 5 8 . 6 0 8 D D 2 2 9 E F 5@ma i l . e x a m p l e . c om > J u l 2 6 2 3 : 2 0 : 5 8 m a i l p o s t f i x / q mg r [ 2 7 8 8 2 J : 6 0 8 D D 2 2 9 E F 5 : f r om=< r u b b l e@e x a m p l e . c om> . s i z e=2 8 8 . n r c p t = l ( q u e u e a c t i v e ) J u l 26 2 3 : 2 0 : 58 ma i l p o s t f i x / p i p e [ 28 4 3 2 J : 6 0 8 D D 2 2 9 E F 5 : t o= < b a mm@e x a mp l e . c o m > . r e l a y=ma i l d r o p . d e l ay=O . s t a t u s = s e n t ( e x a m p l e . c o m ) J u l 2 6 2 3 : 2 0 : 5 8 m a i l p o s t f i x / q mg r [ 2 7 8 8 2 J : 6 0 8 D D 2 2 9 E F 5 : r e m o v e d Z žurnálního souboru j e zřejmé, ž e zpráva byla předána z Postfixu d o programu mail drop. Máme-Ii v / e t c / m a i l d r o p r c aktivovaný zápis do žurnálu, měli bychom v něm na jít přibližně takovouto položku :
D a t e : Mon J u l 2 6 23 : 24 : 4 2 2004 F r om : r u b b l e@e x a m p l e . c o m ( r o o t ) Subj : F i l e : / v a r / s p o o l / ma i l / b a m m b a mm / M a i l d i r
( 34 5 )
323
Ka pito l a 1 9
324
Tato položka říká, že zpráva od r u b b 1 e@e x a m p l e . c o m (identifikovaná Postfixem v reži mu r o o t ) byla doručena do / v a r / s p o o l / m a i 1 / b a mm b a mm / M a i 1 d i r, což je vstup Bamm Bamm.
Test flitrů Courier mall drop Filtrování otestujeme tak, že vytvoříme a pošleme soubor jménem t e s t me s s a g e s něčím, co by spustilo filtrovací pravidla v / e t c / ma i l d r o p r c . Zde je zpráva, která by měla pra covat s pravidlem pro filtrování spamů z části "Vytváření filtrů " :
F r om : B a r n ey < r u b b l e@e x a mp l e . c om > T o : B a mm B a mm < b a mm@e x a m p l e . c o m > S u b j e c t : T e s t m e s s a g e t a g g e d a s S PAM X - Spam - Statu s : Ves foo bar Pomocí programu sendmail pošleme zprávu :
# / u s r / s b i n / s endma i l - f r u b b l e@examp l e . com b a mm@ex a mp l e . com < t e s t me s s a g e Kromě kontroly podsložky s p a m zkontrolujeme i soubor m a i 1 d r o p . l o g . Měl by vypadat takto:
Date : F r om : Subj : Fi l e :
Mon J u l 2 6 2 2 : 29 : 24 2004 B a r n ey < r u b b l e@e x a m p l e . c om > T e s t me s s a g e t a g g e d a s S PAM / v a r / s p o o l / m a i l / b a m m b a mm / M a i l d i r / . s p a m /
(412 )
Zpráva byla doručena do podsložky .spam, takže globální filtr pracuje. Nyní změníme testovací zprávu tak, abychom zjistili, zda pracuje i lokální filtr:
F r om : B a r n ey < r u b b l e@e x a m p l e . c o m > T o : P o s t m a s t e r < p o s t m a s t e r@e x a mp l e . c o m > Subj ect : Test mes s a g e f o r Pos tma s t e r Tuto zprávu pošleme n a adresu p o s tma s t e r@e x a m p l e . c om:
# / u s r / s b i n / sendma i l -f rubbl e@examp l e . com p o s tma s t e �examp l e . com < tes tmes s a g e Aby s e potvrdilo, ž e zpráva přišla d o složky správce, soubor ma i 1 d r o p . 1 o g b y měl vy padat takto:
Date : F rom : Subj : Fi l e :
Mon J u l 26 23 : 36 : 48 2004 B a r n ey < r u b b l e@e x a m p l e . c om > T e s t me s s a g e f o r P o s tm a s t e r / v a r / s p o o l / m a i l / b a mm b a mm / M a i l d i r / . p o s t m a s t e r
( 391 )
Test kvót v systému Courier maildrop Pokud jsme zkonfigurovali ma i l d rop tak, aby využíval kvóty v Maildir, musíme otestovat, zda funguje měkký i tvrdý limit. Vytvoříme soubor t e s tme s s a g e o velikosti 5 MB:
# d d i f- / d e v / z e r o o f-/ r o o t / t e s tme s s a g e bs-SM c o u n t- l 1+0 r e c o r d s i n
F i rem n í poštovn í server
iéa"i
1+0 r e c o r d s o u t # l s - a l l t e s tme s s a g e - rw - r - - r - - 1 r o o t r o o t 5 2 4 2 8 8 0 J u l 2 7 0 9 : 2 5 t e s tme s s a g e Dále pomocí 1 d a pm o d i f nastavíme spodní kvótu B a mm B a mm . Hodnoty parametru s o f l i m i t bychom měli dosáhnout po odeslání jednoho souboru t e s t me s s a g e a h a r d l i m i t po odeslání druhého. Vytvoříme soubor, například m o d i fy-b a m m b a mm_q u o t a . 1 d i f , včet ně změn:
d n : u i d = b a mm b a mm . o u = i t . o u = p e o p l e . d c= e x a mp l e . d c= c o m c h a n g e t y p e : m o d i fy repl ace : quota quota : 6990507S Poté spustíme ldapmodify a importujeme změny z m o d i fy-b a mm b a mm_q u o t a . 1 d i f :
# l d a pm o d i fy - x - D " c n-Ma n a g e r , d c-examp l e . d c-com" - w s e c r e t - f mod i fy_b a mmba mm_q u o t a . l d i f Když je vše nastaveno, můžeme na b a mm@e x a m p l e . c o m odeslat první testovací zprávu :
# / u s r / s b i n / s e ndma i l - f r u b b l e@e x a m p l e . c om b a mm@ex a mp l e . com < / r o o t / t e s tme s s a g e Ověříme, zda byla zpráva doručena d o schránky B a mm B a mm: fl l s - l a
- rw - - - - - - - 1 v m a i l v m a i l 5 2 4 3 2 2 1 J u l 2 7 0 9 : 3 8 1 0 9 0 9 1 3 8 9 2 . \ M 2 4 0 1 9 P 2 9 6 2 9 V 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 2 I 0 0 2 2 9 E F 6_0 . m a i l . e x a m p l e . c om . S= 5 2 4 3 2 2 1 - rw - r - - - - - 1 v m a i l v m a i l 4 4 7 J u l 2 7 0 9 : 3 8 1 0 9 0 9 1 3 8 9 3 . \ M 9 3 2 0 6 2 P 2 9 6 2 9 V 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 2 I 0 0 2 2 9 F O O_w a r n . m a i l . e x a m p l e . c om . S= 4 4 7
Vidíme další zprávu s varovným řetězcem na místě jména souboru. Prohlédneme jej po mocí příkazu c a t :
#ca t 10909 1 3893 . M932062P29629V000000000000030 2 I 00229FOO_wa r n . ma i l . exampl e . c om\ . S \-447 F r om : MA I L E R - DA E M O N < > To : V a l u e d C u s t ome r : ; S u bj ec t : Ma i l q u o t a wa rn i n g M i me - V e r s i o n : 1 . 0 C o n t e n t - Ty p e : t e x t / p l a i n ; c h a r s e t= i s o - 88 5 9 - 1 C o n t e n t - T r a n s fe r - E n c o d i n g : 7 b i t Y o u r m a i l b o x o n t h e s e r v e r i s n ow m o r e t h a n 7 5 % f u l l . S o t h a t y o u c a n c o n t i n u e t o r e c e i v e m a i l y o u n e e d t o r e m o v e s ome me s s a g e s f r om y o u r m a i l b o x . Maildrop zprávu doručil a ve schránce příjemce vytvořil varovné hlášenÍ. Vzhledem k to mu , že je 75 procent schránky zaplněno, další zpráva překročí tvrdý limit a maildrop j i vrátí n a r u b b 1 e@e x a m p l e . c om :
# / u s r / s b i n / s endma i l - f rubbl e@exampl e . com bamm@exampl e . c om < / root / t e s tmes s a g e V žurnálu vidíme, ž e zpráva byla vrácena odesilateli:
325
326
';.aUtl•
Kapitola 1 9
# t a ; l - f I v a r / l o g / ma i l l o g J u l 2 7 0 9 : 5 9 : 1 8 ma i l p o s t f i x / p i c k u p [ 2 9 7 88 J : 4 C 0 8 3 2 2 9 F 0 9 : u i d=O f r om=< r u b b l e@e x a mp l e . c o m > J u l 2 7 0 9 : 5 9 : 1 8 ma i l p o s t f i x / c l e a n u p [ 2 9 7 9 3 J : 4 C 0 8 3 2 2 9 F 0 9 : me s s a g e - i d=< 2 0 0 4 0 7 2 7 0 7 5 9 1 8 . 4 C 0 8 3 2 2 9 F 0 9@m a i l . e x a m p l e . c o m > J u l 2 7 0 9 : 5 9 : 1 8 ma i l p o s t f i x / q mg r [ 2 9 7 8 9 J : 4 C 0 8 3 2 2 9 F 0 9 : f r om=< r u b b l e@e x a mp l e . c om> . s i z e = 5 2 5 0 84 3 . n r c p t=1 ( q u e u e a c t i v e ) J u l 2 7 0 9 : 5 9 : 1 9 ma i l p o s t f i x / p i p e [ 2 9 7 9 5 J : 4 C 0 83 2 2 9 F 0 9 : t o=< b a mm@e x a mp l e . c om> . r e l a y=ma i l d r o p . d e l ay=1 . s t a t u s = b o u n c e d ( pe rm i s s i o n d e n i e d . C omma n d o u t p u t : m a i l d r o p : ma i l d i r o v e r q u o t a . ) Vrácením se odesilateli [email protected] oznamí, že zprávu nebylo možno doručit z následujícího důvodu: < b a mm@e x a mp l e . c o m > : p e rm i s s i o n d e n i e d . C omma n d o u t p u t : ma i l d r o p : m a i l d i r o v e r q u o t a .
Konfigurace Courier IMAP Posledním serverem, který musíme zkonfigurovat, je Courier lMAP . Podporuje tvar Ma ildir a nabízí klientovi služby POP, POP-S SL, IMAP a IMAP-SSL.
Instalace Courier IMAP Abychom mohli nainstalovat server Courier lMAP, musíme si z h t t p : / / www . c o u r i e r m t a . o r g / d ow n 1 o a d . p h pfh m a p stáhnout zdrojový kód. V režimu normálního uživatele vy extrahujeme archiv, přejdeme do nového adresáře a zadáme configure, viz příklad:
$ . / c o n f i g u r e - - e n a b l e - w o r k a r o u n d s - fo r - i ma p - c l i e n t - b u g s - - e n a b l e - u n i c o d e - -wi t h o ut - a uthpgsql - - wi thout - s oc k s $ ma ke Kde jsou na počítači uloženy knihovny LDAP, zjistí konfigurační proces automaticky:
POZNÁMKA V systém u Red Hat m usíme ke konfig u račním vo lbám přidat - - w i t h - r e d h a t . Jakmile je konfigurace ukončena, přepneme se do režimu uživatele root a zadáme ma ke install install-configure, čímž nainstalujeme jak software, tak i dokumentaci.
Konfigurace Courier IMAP s autentizačním démonem LDAP Autentizační proces v Courieru je modulární (pokud jsme zkompilovali Courier lMAP s implicitními volbami, moduly budou umístěny v us rl 1 i bl c o u r i er - i m a p l 1 i b e x e c l a u t h 1 i b). Abychom zkonfigurovali autentizačního démona systému Courier ( a u t h d a e m o n ) vý lučně pro autentizaci LDAP, změníme v l u s r / l i b / c o u r i e r - i ma p / e t c / a u t h d a em o n r c hodnotu parametru a u t h mod u l e l i s t takto:
a u t h m o d u l e l i s t= " a u t h l d a p " Z důvodu konzistentnosti bychom z a u t h m o d u l e l i s t měli odstranit jména všech ostat ních modulů. A když už budeme editovat soubor a u t h d a emo n r c , na konci souboru změ níme (nebo přidáme) parametr v e r s i o n tak, aby obsahoval pouze a u t h d a em o n d . l d a p (jinak authdaemon vybere první modul a u t h d a em o n d . * , n a který narazí):
'4-*i'it'
F i re m n í poštovn í server
v e r s i o n= " a u t h d a em o n d . l d a p "
Konfigurace autentizační procedury Nyní musíme autentizační proceduru informovat o serveru LDAP a o adresáři. Modul a u t h d a e m o n d . 1 d a p zkonfigurujeme změnou implicitních položek v souboru / u s r / l i b / c o u r i e r - i ma p / e t c / a u t h l d a p r c , aby byly ve shodě se serverem a adresářem. Aby tato úprava fungovala v příkladu uvedeném v této kapitole, musíme specifikovat ná sledující parametry:
L D A P_S E RV E R L D A P_BA S E D N L D A P_MA I L L D A P _F I L H R L D A P_HOM E D I R L D A P_MA I L D I R L D A P_MA I L D I R Q U O TA L D A P_C L E A R P W L D A P_U I D L D A P_G I D
ma i 1 . e x a m p l e . c o m d c= e x a mp l e , d c = c o m ma i 1 C o bj e c t C l a s s = i n e t o r g p e r s o n l h o m e D i r e c t o ry ma i l b o x quota u s e r P a s sword u i d N umbe r g i d N umbe r
POZNÁMKA V souboru a u t h l d a p r c by neuškod i l o pár komentá řů.
Vytvoření certifikátu I MAP Už nám zbývá pouze vytvořit pro Courier lMAP bezpečnostní certifikát. I když Courier jeden vytváří automaticky při spuštění i m a p d - s s l (má na to utilitu m k i m a p d c e r t), ve sku tečnosti jej nemůžeme použít, neboť není podepsán naší certifikační autoritou: Certifikát vytvoříme v těchto krocích: 1.
Za předpokladu , že jsme si vytvořili vlastní certifikační autoritu , jak je uvedeno v ka pitole 17, vytvoříme certifikát i m a p d takto:
# o p e n s s l r e q - n ew - n o d e s - keyout i ma pd_p r i v a te_key . pem - o u t i ma pd_p r i v a t e_key . p em - d a y s 3 6 5 2. Veřejný certifikát vytvoříme tak, ž e podepíšeme klíč vlastní certifikační autoritou:
# o p e n s s l c a - p o l i cy p o l i cy_a nyt h i n g - o ut i ma pd_p u b l i c_ce r t . pem - i n f i l e s i ma pd_p r i v a t e_key . p em 3.
Certifikační soubor pro Courier lMAP se od souborů pro Postfix TLS a OpenLDAP poněkud liší. Soubor i ma pd . p e m vytvoříme tak, že oba soubory zřetězíme:
# c a t i ma pd_p r i v a t e_key . pem i ma pd_pu b l i c_ce r t . pem > i ma p d . pem 4.
Certifikát zkopírujeme tam, kde jej Courier najde, a ochranu soukromého klíče v tom to souboru zajistíme nastavením příslušných přístupových práv:
# cp i ma pd . pem / u s r / l i b / c o u r i e r - i ma p / s h a r e / i ma pd . pem # c hmod 600 / u s r / l i b / c o u r i e r - i ma p / s h a r e / i ma p d . pem # c h own root / u s r / l i b / c o u r i e r - i ma p / s h a r e / i ma pd . pem
3 27
328
'a'fi'ip 5.
Kapitola 1 9
Spustíme nový proces imapd:
# / u s r / l i b / c o u r i e r - i ma p / l i bexec / i ma pd - s s l . r c s t a r t 6.
Spuštění s i ověříme pomocí příkazu ps:
# p s a u xwww I g r e p i ma pd - s s l root 1 6 7 6 0 . 0 0 . 3 1 9 4 0 500 ? S 1 6 : 08 0 : 00 / u s r / l i b / \ c o u r i e r - i ma p / l i b e x e c / c o u r i e r t c pd - a d d r e s s =O \ - s t d e r r l o g g e r= / u s r / l i b / c o u r i e r - i ma p / s b i n / c o u r i e r l o g g e r \ - s t d e r r l o g g e r n a m e= i m a p d - s s l - ma x p r o c s =40 - ma x p e r i p=4 \ - p i d= / v a r / r u n / i m a p d - s s l . p i d - n o d n s l o o k u p - n o i d e n t l o o k u p 9 9 3 / u s r / l i b / c o u r i e r - i ma p / b i n / c o u r i e r t l s \ r o o t 1 68 0 0 . 0 0 . 2 1 9 5 2 3 4 0 ? S 1 6 : 0 8 0 : 0 0 / u s r / l i b / \ c o u r i e r - i ma p / s b i n / c o u r i e r l o g g e r i m a p d - s s l root 1 8 1 0 0 . 0 0 . 4 4600 564 p t s / O S 1 7 : 24 0 : 00 g rep i ma pd - s s l
POZNÁMKA Když zmemme priority, můžeme si do své ho ad resáře zkop írovat skripty z / u s r / l i b / c o u r i e r - i ma p / l i b e x e c a použít je ke spuštění a zastaven í progra m u Couri er.
Test serveru IMAP Dostupnost serveru lMAP a možnost přihlášení ověříme tak, že se napojíme na port 143 serveru a vytvoříme sezení. K serveru se připojíme takto:
# t e l n e t ma i l . exampl e . com 1 4 3 * O K [ C A P A B l L l TY l MA P 4 r e v 1 U l D P L U S C H l L D R E N N AM E S PA C E \ T H R E AD=O R D E R E D S U B J E C T T H R E AD= R E F E R E N C E S S O RT a U OTA \ l D L E A C L AC L 2=U N l O N STARTT L S J C o u r i e r - l MA P r e a dy . \ C o py r i g h t 1 9 9 8 - 2 0 0 4 D o u b l e P r e c i s i o n . I n c . \ S e e C O P Y l N G f o r d i s t r i b u t i o n i n f o r ma t i o n . Po uvítací zprávě se můžeme přihlásit:
l o g i n b a mmbamm b a mm_p a s s w o r d . O K LOG l N O k Nyní vybereme inbox, abychom se přesvědčili, zda složka funguje, jak má:
* * * * * *
s e l ect I NBOX F LA G S ( \ D r a f t \ A n s w e r e d \ F l a g g e d \ D e l e t e d \ S e e n \ Re c e n t l O K [ P E RM A N E N T F LA G S ( \ * \ D r a f t \ A n s w e r e d \ F l a g g e d \ D e l e t e d \ S e e n l J L i m i t e d 5 E X l STS O RECENT O K [ U l DVA L l D l TY 1 089237 7 4 9 J O k O K [ MY R l G H T S " a c d i l r s w " J AC L O K [ R EA D - W R l T E J O k
Nakonec se odhlásíme :
l ogout * B Y E C o u r i e r - l MA P s e r v e r s h u t t i n g d ow n O K L O G O U T c o mp l e t e d
F i rem n í poštovní server
Test IMAP pomoci TLS K testování lMAP prostřednictvím TLS použijeme místo programu te 1 n e t utilitu s_c 1 i e n t z OpenSSL. Připojíme ji k portu 993 (port imaps). Tento klient vypíše kousek textu, kterým se ověřuje certifikát, ale po ustavení spojení jej můžeme používat pouze jako v předchozím nešifrovaném spojení. Mělo by to vypadat takto:
# o p e n s s l s_c l i e n t - CA f i l e / u s r / s h a r e / s s l / c e r t s / c a c e r t . pem - c o n n e c t l oc a l h o s t : 99 3 C O N N E CT E D ( 0 0 0 0 0 0 0 3 l d e p t h= l / C= E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U =C e r t i f i c a t i o n A u t h o r i ty / \ C N=ma i l . e x a m p l e . c o m / ema i l Add r e s s=c e r tm a s t e r@ex a m p l e . c om v e r i fy r e t u r n : l d e p t h=O / C = E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U= I MA P s e r v i c e s / C N=ma i l . e x a m p l e . c o m / ema i l Add r e s s = p o s tma s t e r@ex a mp l e . c o m v e r i fy r e t u r n : l Cert i fi cate c ha i n O s : / C=E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U= I MA P s e r v i c e s / \ C N=ma i l . ex a m p l e . c o m / ema i l Add r e s s = p o s tma s t e r@ex a mp l e . c o m i : / C=E X / ST=E x a m p l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / OU=C e r t i f i c a t i o n Au t h o r i ty / C N=ma i l . e x a m p l e . c o m / ema i l Add r e s s =c e r tma s t e r@ex a mp l e . c om Server cert i fi cate - - - - - B E G I N C E RT I F I CAT E - - - - M I I E D DCCA3WgAw I BAg I B A z A N B g k q h k i G9wOBAQQFADC B s D E LM A k GA l U E B h M C R V g x E TA P B g N V BAgTC E V 4 Y W l w b G l h M RMw E Q Y D V Q Q H Ewp F e G F t c Gx l d G 9 u M RUwEwY D V Q Q K Ewx F e G F t c G x l I E l u Y y4 x I DAe B g N V BA s T F O N l c n Rp Z m l j Y X Rp b 2 4 g Q X V O a G9y a X R5 M R kw FwY D V QQ D E x B t Y W l s LmV4Y W l wbGU u Y 2 9 t M S U w l wY J K o Z l h v c N AQ k B F h Z j Z X J O b W F z d GV y Q G V 4 Y W l w b G U u Y 2 9 t M B 4 X DTAO M D c xM z E z NT U zM l o X DT A l M D c xM z E z NT U z M l owg a Y x C z AJ B g N V BA Y TA k V Y M R Ew DwY DVQQ I Ew h F e G F t c Gx p Y T E T M B E GA I U E B x M K RX h h b X B s Z X Rv bj E V M B M GA I U EC h M M RX h h b X B s Z S B J bm M u M RYwFAY DVQQ L E w l J T U F Q I H N l c n Z p Y 2 V z M R kw F wY D V Q Q D E x B t Y W l s LmV 4 Y W l wb GU u Y 2 9 tM S U w l wY J K o Z l h v c N AQ k B F h Zw b 3 N O bW F z d G VyQG V 4 Y W l w b GU u Y 2 9 tM I GfMAOGCSq G S l b 3 D Q E BAQUAA4GN A D C B i Q K B g QC 9 5 U U tw3d V V Gg h N L P E N 3 Y Bw / i KM k X t N h X l l LA U E s h Z E I DGGj B l q 9W8 QC4m L B O s WTY LTXWU b v o J HmBCmf 6 t z V v O i 9 3 2 r4 KT D z a n L P 7 E D c 4 t v g 80 u h Fx U E k a l V A+ l g 3 1 5 0 Y 8 v l L I O Y W x S 8 f pmRQ E N Y HW n c o S h m X R P j g4w0 6 / 2 p Z a a w I DAQABo4 I B P D C CATgwCQY D V ROTBA l wADAs B g l g h k g B h v h CAQO E H x Y d T3 B l b l NTTC B H ZW 5 1 c m F O ZWQ g Q 2 Vy d G l m a W N h d GUwHQY D V R O O B B Y E F F K6 1 + F M c q c C 3 M / E m 3 X 2 1 8J C n 8 J u M I Hd B g N V H S M E g d U w g d K A F M N G Z 7 / N o r S 6 W p J QJ Z 2 I h D n o9 7 i X o Y G2 p I Gz M I GwMQ swCQY D VQQG EwJ F W D E RMA8GA I U E C B M I R X h h b X B s a W E x E zA R B g N V BA c T C k V 4 Y W l w b G V O b 2 4 x FTAT B g N V BAoT D E V 4 Y W lwbGU g S W 5 j Lj E g M B 4 GA l U E C x M X Q 2 Vyd G l m a W N h d G l v b i B B d X Rob3 J p d H kxGTA X B g N V BAMT E G l h a Wwu Z X h h b X B s Z S 5 j b 2 0 x J TAj B g kq h k i G9wOB C Q E W Fm N l c n Rt Y X N O Z X J AZ X h h b X B s Z S 5 j b 2 2 CAQAwDQY J K o Z l h v c NAQ E E BQADg Y EA i q d / n O v i h p l EW F+K7 h g b p t 1 9 v 1 3 t zy u E 3 T M S I 3 0 X t G n Q t Y N L T v x 3 e a Y D B e c U Q a I l q l o c Q B s v z 1 7+n o z 9 j w D 6 9 U 1 BWUANwx D u O b PHmn r 7 C e e P V n v 6 fAy Z 4 J g 9 x 8 v A P z D D N u / Tu88MO k E V Q 2 X T 3 5 0 PM+g Dy3Mw4 4 N r Y B 2 x h ky 8 P t g= - - - - - E N D C E RT I F I CAT E - - - - s u b j e c t = / C= E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U= I MA P s e r v i c e s / \ C N=ma i l . e x a m p l e . c om / ema i l Ad d r e s s = p o s tma s t e r@ex a mp l e . c o m i s s u e r= / C= E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U=C e r t i f i c a t i o n A u t h o r i ty / \ C N=ma i l . e x a m p l e . c om / ema i l Add r e s s=c e r tma s t e r@ex a mp l e . c o m
329
330
'a-hiU'
Ka p itola 1 9
N o c l i e n t c e r t i f i c a t e CA n a m e s s e n t S S L h a n �s h a k e h a s r e a d 1 2 0 2 by t e s a n d w r i t t e n 3 4 0 by t e s New . TLSv 1 / S S Lv3 . C i p h e r i s AES256 - SHA S e r v e r p u b l i c key i s 1 0 2 4 b i t SS L - Se s s i on : TLSv 1 Protocol Ci pher AES256 - SHA Ses s i on - l D : 7AA6 E 0 3 1 9 7 6 D8 B 3 8 4 6 F 1 B 2 C 8 FC B E B E B 7 7 7 C 8 9 B A D 1 6 E 5 4 8 C O D8 F E O B 1 7 0 B F 1 D4 9 B S e s s i on - l D - ctx : M a s t e r - Key : E 4 1 C E 3 9 B 9 8 E F F3 3 9 5 9 3 6 4 0 4 F 7 1 4 2 D 2 8 0 4 FA7 B B E 6 3 A D B 6 A 5 7 F 3 F B 5 1 \ 3A7 5 6 E 6 D 5 5 F 5 4 8A 5 7 6 5AC 2 7 F 9 9 F8 6 2 F 4 6 6 6 4 1 3 1 C 7 2 Key - A r g : None K r b 5 P r i n c i pa 1 : N o n e S t a r t T i me : 1 08 9 7 3 2 7 3 8 Ti meout : 300 ( s ec ) V e r i fy r e t u r n c od e : O ( o k ) * O K [ CAPA B l L l T Y l MA P 4 r e v 1 U l D P L U S C H l L D R E N NAM E S PAC E T H R E A D=O R D E R E D S U B J E C T T H R EAD=RE F E R E N C E S S O RT OUOTA l D L E AUTH=P LA l N AC L AC L 2=U N l O N J C o u r i e r - l MA P r e a dy . \ C o py r i g h t 1 9 98 - 2 0 0 4 D o u b l e P r e c i s i o n . I n c . i n f o r ma t i o n . l og i n b a mm®ex amp l e . com b a mm_s e c ret O K LO G l N O k . l og o u t * BY E C o u r i e r - l MA P s e r v e r s h u t t i n g d own O K L O G O U T c o mp l e t e d c l o s ed Gratulujeme! Máme nyní funkční poštovní server založený na LDAP. Ještě ale musíme udělat pár věcí.
Pokročilé konfigurace Poštovní server je funkční, avšak musíme ještě něco dokončit. V tomto okamžiku každý, kdo se může připojit k serveru LDAP, může získat data vztahující se k bezpečnosti, na příklad atribut userPassword. Navíc všechna data získaná různými servery (včetně Post fixu) realizují svá sezení v nešifrovaném textu . Nejvyšší prioritou by mělo být zpřísnění těchto bezpečnostních opatření. V této části si ukážeme, jak využijeme vazby na server LDAP k omezení toho, co server může poslat klientovi. Navíc uvidíme, jak šifrovat vlastní sezení LDAP . Jako bonus si zkonfigurujeme autentizaci SMTP založenou na ldapdb a použijeme ji k prosazení firemní bezpečnostní politiky, kterou zabráníme potenciálnímu zneužití adresy odesilatele.
Rozšíření adresáře Ř ízení přístupu k adresáři LDAP a prosazení autentizace SMTP vyžaduje vytvoření účtů pro všechny servery, které jsou závislé na tomto adresáři. Z toho důvodu musíme rozší řit adresářový strom a přidat další větev, v níž budou servery odděleny od uživatelů . Na
F i re m n í poštovn í server
33 1
obrázku 19.3 je znázorněna nová větev, která se jmenuje o u =a u t h , d c= e x a mp 1 e , d c= c o m a obsahuje objekty třídy účet.
dn : uid:
ui d - p o s t fi x . ou-a u t h . d c - e x a m p 1 e . d c - c o m postfi x
u s e r P a s sword :
{ S H A } 7 j s / s t C L R N q 3 a y Z Wx y j v 1 B 4 C f o s
obj e ct C l a s s :
account
obj e c tC l a s s :
s i mp l e S e c u r i tyObj e c t
d e s c r i p t i on :
Pos t f i x B i nd u s e r
Obrázek 1 9-3 Autentizační větev fi rmy Example Inc. V nešifrovaném adresáři použijeme tyto atributy a tato schémata: d n : o u =a u t h , d c=e x a mp 1 e , d c = c o m ou : auth obj ectC 1 a s s : o r g a n i za t i ona 1 Un i t d n : u i d = p o s t f i x , o u=a u t h , d c= e x a mp 1 e , d c= c o m ui d : postfi x obj ectC 1 a s s : account o b j e c t C 1 a s s : s i mp 1 e S e c u r i t y O b j e c t descri pti on : Postfi x Bi nd user u s e r P a s s w o r d : { C R Y Pl } 9 1 G R s J N H N 5 D r I d n : u i d = c o u r i e rma i 1 d r o p , o u = a u t h , d c=e x a mp 1 e , d c= c o m u i d : c o u r i e rm a i 1 d r o p obj ectC1 a s s : a c c o u n t obj e c t C 1 a s s : s i mp 1 e S ec u r i tyObj ect d e s c r i pt i on : C o u r i e r Ma i 1 d rop B i nd u s e r u s e r P a s s w o r d : { C RY P l } 1 A 8 i O d mwZ R C 8 6 d n : u i d = c o u r i e r i ma p , o u =a u t h , d c= e x a mp 1 e , d c= c o m u i d : c o u r i e r i ma p objectC1 a s s : account o b j e c t C 1 a s s : s i mp 1 e S e c u r i t y O b j e c t d e s c r i p t i o n : C o u r i e r I MA P B i n d u s e r u s e r P a s s w o r d : { C RY P T l S l t 1 / 3 E Nmj k l s d n : u i d= l d a p d b , o u=a u t h , d c= e x a m p 1 e , d c= c o m
332
'a-a'!M
Kapitola 1 9
u i d : l d a pd b obj ectCl a s s : i netOrgPerson g i v e n N ame : l d a pdb s n : l d a pd b c n : l d a pd b u s e r P a s s w o r d : A v a Ag 0 7 i m a i l : l d a pd b s a s l AuthzTo : l da p : / / / o u =p e o p l e , d c= e x a m p l e , d c= c o m ? ? s u b ? C o b j e c t c l a s s = i n e t O r g P e r s o n ) Všechny seIVery, které prostřednictvím modulu Idapdb používají adresář LDAP (Postfix, Courier maildrop, Courier lMAP a Cyrus SASL), budou mít svůj vlastní účet. Atributy v objektu u i d = l d a p d b , o u =a u t h , d c= e x a m p 1 e , d c= c o m se liší od ostatních takto: •
Heslo je uloženo v nešifrovaném tvaru kvůli sdílenému autentizačnímu mechanismu DIGEST-MD5 (tento mechanismus nepoužívá šifrovaná hesla).
•
K autentizaci uživatelů se bude místo u i d používat nový atribut ma i 1 .
•
Atribut s a s l A u t h z T o definuje, kde l d a p d b najde jinou identitu uživatele.
Přidání autentizace pro servery PIVní funkcí, kterou budeme implementovat, je předávání prostřednictvím autentizace SMTP, tak aby mohli posílat poštu i mobilní a vzdálení uživatelé s IP adresami mimo lo kální důvěryhodnou síť. Z části ,Jak se provádí autentizace SMTP" už známe tento po stup bez použití LDAP, avšak tentokrát vytvoříme a zkonfigurujeme Cyrus SASL se zásuvným modulem Idapdb. Můžeme to provést i se samostatným démonem saslauthd, který je však bohužel omezen pouze na nešifrované mechanismy. Po dočtení této části by měl být náš postfixový seIVer schopen nabídnout klientům nešifrované mechanismy (PLAIN, LOG IN) a sdílené mechanismy (CRAM-MD5, DIGEST-MD5). Autentizační proces se poněkud liší od procesu popsaného v kapitole 16, kde popisuje me součinnost Postfixu a Cyrus SASL, neboť v něm se k ověření autentizace používá au torizační ID. Tento identifikátor pochází z projektu Cyrus lMAP, kde je možné, aby za skupinu uživatelů vystupoval jeden uživatel. Můžeme například nastavit Cyrus lMAP tak, že bezprizorní zprávu si může přečíst každý, aniž by se muselo měnit heslo. Autentizační proces Idapdb probíhá takto: 1.
Poštovní klient, který používá autentizaci SMTP, se připojí k seIVeru Postfix a přene se jméno uživatele (a heslo, pokud používáme nešifrovaný mechanismus). Toto jmé no je v kontextu SASL autentizační ID.
2.
Postfixový démon s m t p d požádá knihovnu SASL o ověření autentizačních údajů. Kni hovna tuto úlohu deleguje na zásuvný modul Idapdb, který kontaktuje seIVer LDAP .
3.
Konfigurace Idapdb pro démona s m t p d obsahuje jméno a heslo jiného uživatele Odapdb přenáší heslo, pouze když klient používá nešifrovaný mechanismus). Toto jméno nazýváme autorizační ID v kontextu SASL, neboť má povolení získat heslo od uživatele (autentizační ID).
4.
Získá-li Idapdb od LDAP seIVeru heslo, porovná je s heslem, které zadal klient. Přes ná metoda ověření závisí na mechanismu , který používá klient. Nešifrovaný mecha nismus znamená, že se provede pouze porovnání řetězců , v případě sdíleného mechanismu jsou řetězce s použitím hesla transformovány a pak jsou porovnány.
F i rem n í poštov n í server
333
Pokud obě metody uspějí, autentizace je úspěšná a Idapdb vrátí informaci do SASL, kte rý oznámí Postfixu, že může povolit předávání.
Aplikace záplaty Idapdb Zásuvný modul dodal do Cyrus SASL tvůrce OpenLDAP Howard Chu, aby byla ve sdí leném mechanismu možná autentizace SASL. I když modul Idapdb měl být součástí bu doucího Cyrus SASL, nedostal se do stávající verze (jde o verzi Cyrus SASL 2 . 1 . 19). Pro zjednodušení, aby v Idapdb přibyla podpora Cyrus SASL, vytvořili jsme záplatu , kterou si můžeme stáhnout ze stránek h t t p : / / www . p o s t f i x - b o o k . c om. Záplatu přidáme d o zdrojových souborů Cyrus SASL tak, ž e rozbalíme platnou distribu ci SASL a přejdeme do nového adresáře. Postup je zřejmý z následujícího příkladu :
# patch - p l < patchi ng fi 1 e patch i ng fi 1 e patchi ng fi 1 e patchi ng fi 1 e patchi ng fi 1 e patchi ng fi 1 e patchi ng fi 1 e patch i ng f i 1 e patch i ng f i 1 e patch i ng fi 1 e
. . / c y r u s - s a s l - 2 . 1 . 1 9 - 1 d a pd b . p a t c h c o n f i g / o p e n 1 d a p . m4 conf i g u re . i n doc / i n s t a l l . htm1 d o c / o pt i on s . htm1 d o c / rea dme . h tm1 d o c / sy s a d m i n . htm1 1 i b/stati copen . h p1 ugi n s / 1 dapdb . c p1 ugi n s /Makefi 1 e . am p 1 u g i n s /ma k e i n i t . s h
Pokud vše proběhne hladce, vytvoříme Cyrus SASL takto (všimněme si volby -withldap·):
# . / confi g u re \ - - wi t h - p 1 u g i n d i r-/ u s r / 1 i b / s a s 1 2 \ - -di sab1 e-j ava \ - - d i s a b 1 e - k r b4 \ - - wi t h - d b 1 i b-be r k e 1 ey \ - - w i t h - s a s 1 a u t h d-/ v a r l s t a t e / s a s 1 a u t h d - - w i t h o ut - pwc h e c k \ - - w i t h - d e v r a n d om-/ d e v / u r a n d om \ - - enab1 e - c ram \ - - enab1 e - d i gest \ - - enab1 e - p1 a i n \ - - e n a b 1 e - 1 og i n \ - - d i s a b 1 e - ot p \ - - wi t h - 1 d a p- / u s r - -wi th - 1 dapdb Když je konfigurační proces ukončen, můžeme příkazem make install nainstalovat ne bo aktualizovat běžnou verzi SASL. Pokud jsme to již neudělali, vytvoříme symbolický odkaz z l u s r I I o c a 1 I I i bl s a s 1 2 do / u s r I I i bl s a s 1 2 , neboť tam bude hledat knihovny. Nové knihovny Idapdb by potom měly být v / u s r l l i b / s a s 1 2 :
# l s - l a 1 i b 1 d apdb . * - rwx r - x r ' x 1 r o o t r o o t 1 rwx rwx rwx 1 r o o t r o o t 1 rwx rwx rwx 1 r o o t r o o t - rwx r - x r - x 1 r o o t ro o t
7 0 2 J u 1 1 6 2 0 : 4 3 1 i b 1 d a pd b . 1 a 1 9 J u 1 1 6 2 0 : 4 3 1 i b 1 d a pd b . s o - > 1 i b 1 d a pd b . s o . 2 . 0 . 1 9 1 9 J u 1 1 6 2 0 : 4 3 1 i b 1 d a p d b . s o . 2 - > 1 i b 1 d a pd b . s o . 2 . 0 . 1 9 94948 J u 1 1 6 2 0 : 4 3 1 i b 1 d a pd b . s o . 2 . 0 . 1 9
334
';-}ilit'
Ka pitol a 1 9
Konfigurace Idapdb Už v části "Přidání autentizace pro servery" jsme si vysvětlili, že musíme vytvořit konfi guraci SoASL pro postfixového démona s m t p d v souboru / u s r / l i b / s a s 1 2 / s m t p d . c o n f , aby byl SASL dostupný z Postfixu . Zde je příklad:
pwc h e c k_me t h o d : a u x p r o p a u x p r o p_p l u g i n : l d a p d b m e c h_l i s t : P LA I N LO G I N D I G E S T - M D 5 C RAM - M D 5 l d a p d b_u r i : l d a p : / / ma i l . e x a m p l e . c o m l d a p d b_i d : p r o xy u s e r l d a p d b_pw : p r oxy_s e c r e t l d a p d b_me c h : D I G E S T - M D 5 l o g_l e v e l : 7 Dalšími parametry, které se vztahují k LDAP, jsou 1 d a p d b_ i d a l d a p d b_pw. Uživatelské jméno je autorizační ID. (Vzpomeňme si, že zásuvný modul Idapdb vyžaduje, aby dé mon s m t p d používal autorizační ID ještě před tím, než získá identitu uživatele pošty a provede novou autentizaci .)
Konfigurace autorizační politiky OpenLDAP Nyní máme Postfix nastaven tak, že může vytvořit vazbu na server OpenLDAP, avšak ješ tě musíme zkonfigurovat démona s l a p d , aby se uživatel mohl autentizovat a autorizovat a mohl se stát jiným uživatelem. Nejdříve vybereme politiku , která definuje, jak by měl s l a p d zpracovávat autentizované uživatele. Parametr s a s 1 - a u t h z - po 1 i cy v souboru s l a p d . c o n f nastavíme na jednu z následujících hodnot:
none
Zablokování autorizace . Toto nastavení j e implicitní.
f r om
Od každého uživatele LDAP vyžaduje, aby explicitně povolil jednomu nebo ně kolika uživatelům plnit roli autorizace. K tomuto účelu musí ke svému uživatel skému objektu přidat atribut s a s l A u t h z F r o m , který obsahuje dn (rozlišitelné jméno, distinguisbed name) uživatele, který může převzít jejich identitu .
to
Implicitní povolení všem uživatelům plnit roli autorizace. Při této politice si uži vatel ke svému uživatelskému objektu přidá atribut s a s l A u t h z T o , který definuje převzetí identity jiného uživatele tam, kde je to možné. Správce adresáře LDAP musí vytvořit pravidlo, jímž omezuje počet uživatelů oprávněných převzít jinou identitu (prevence zneužitO.
both
Aktivace obou politik, f r om i t o .
POZNÁMKA Další informace na lezneme v kapitole 1 0 průvodce " OpenLDAP Admin istrator's Gu ide " ( h t t p : / / www . open l d a p . o r g / d o c / a dm i n 2 2 / s a s l . h tml #SAS L % 2 0 P r oxy%20Au t h o r i z a t i o n ) . V této knize budeme používat politiku t o , neboť se domníváme, že pro správce je snaz ší používání cizí identity omezit než přidávat atribut ke každému uživatelskému objektu . Pro účely příkladu uvedeného v této kapitole zakonfigurujeme tuto politiku do souboru s l a p d . c o n f přidáním řádku:
s a s l - a u t h z - p o l i cy
to
F i rem n í poštovní server Konfigurace vazeb SASL na Open LDAP Poslední krok procesu aktivace vazeb SASL na server OpenLDAP vyžaduje konfiguraci s 1 a pd s tou větví adresáře, v níž jsou uloženy autentizační údaje. Také musíme specifi kovat atribut dotazu pro danou autentizaci ID. To provádí vyhledávací filtr jménem s a s l ' r e g e x p , který definuje, kde má vazba s m t p d (autorizační ID) hledat uživatele, které chce autentizovat. Filtr přidáme do konfiguračního souboru s l a p d . c o n f takto:
s a s 1 - regexp u i d � ( . * ) , c n � . * , c n �a u t h 1 d a p : l l l d c�e x a m p 1 e , d c� c o m ? ? s u b ? ( & ( o b j e c t c 1 a s s � i n e t O r g P e r s o n ) ( ma i 1 � $ 1 ) )
POZNÁMKA Předchozí reg u l á r n í výraz neh ledá uid (při h l ašovací jméno), nýbrž poštovní adresu . Č i n í ta k ú mysl ně; m nozí LSP a poskytovate lé poštovních sl užeb používaj í ad resu j a ko při hlašovací jméno. K tomu existuje m noho d ůvod ů, přičemž dva nej d ů l ežitější jsou, že uživate l si musí pamatovat o jed n u hodnotu méně a také se snáze sdílej í a utentizačn í data s j i nými systémy, na příklad servery Rad i us. Po zavedení filtru znovu spustíme server OpenLDAP, nahlédneme do žurnálu, zda se ne vyskytly případé problémy, a můžeme zahájit testování.
Test zásuvného modulu Idapdb v konfiguraci ldapdb si musíme ověřit tři skutečnosti: •
Omezení mechanismů
•
Přímé vazby SASL
•
Autentizaci založenou na ldapdb
Test omezení mechanismů Přesvědčíme se o účinnosti parametru mec h_1 i s t v konfiguraci l u s rl 1 i b / s a s 1 2 1 s 1 a pd . c o n f . Příkazem ldapsearch vypíšeme mechanismus, který s 1 a pd nabízí klientům: # 1 d a p s e a r c h - L L L - x - s b a s e - b "" " ( obj e c t C 1 a s s=* ) " s u ppo r t e d S A S LMec h a n i sms dn : s u ppo rtedSASLMec h a n i sms : D I G E ST - MD5 Vypadá-li výstup takto, j e vše v pořádku . Jinak musíme v souboru s l a p d . c o n f hledat překlepy.
Test přímého spojení SASL Příkazem 1 d a pw h o a m i ověříme, zda se uživatel v adresáři může přímo spojit se s l a p d používajícím SASL (bez zásuvného modulu Idapdb): # 1 d a pw h o a m i - u b a mm@ex a mp 1 e . c om SA S L / D I G E S T - M D 5 a u t h e n t i c a t i o n s t a r t e d P1 ea se enter your pas sword : S A S L u s e r n a m e : b a mm@e x a mp 1 e . c o m SAS L S S F : 1 28 SAS L i n s t a 1 1 i n g 1 ay e r s d n : u i d � b a m m b a mm , o u � i t , o u � p e o p 1 e , d c�e x a m p 1 e , d c� c o m
336
'a-fiid'
Kapito la 1 9
Tímto testem ověříme, zda se skutečně můžeme autentizovat jako uživatel. Pokud niko li, nemůžeme dále pokračovat. Musíme se vrátit k části "Konfigurace vazeb SASL na OpenLDj'\P" a podívat se, jestli jsme někde neudělali chybu .
Test autentizace Idapdb Cyrus SASL obsahuje utility, které se jmenují s e r v e r a cl i e n t a kterými můžeme otes tovat autentizaci nezávisle na j iných serverech. Pomohou nám vyloučit případné vedlej ší efekty, které by se mohly projevit například v Postfixu, a rovněž i problémy spojené se SASL, resp. Idapdb. Nejdříve si vytvoříme symbolický odkaz ze souboru s m t p d . c o n f na soubor s a m p 1 e . c o n f , který bude používat program s e r v e r : # cd / u s r / l i b / s a s 1 2 / # l n - s smtpd . c o n f s a mpl e . c o n f Nyní otevřeme terminálové okno a spustíme program server: # . / s e r v e r - s r cmd - p 2 3 t ry i n g 1 0 . 1 . 6 s o c k e t : A d d r e s s f a m i l y n o t s u p p o r t e d by p r o t o c o l t ry i n g 2 . 1 . 6 Otevřeme drahé terminálové okno a spustíme program c l i e n t s LDAP uid uživatele na serveru LDAP. Tento program si vyžádá autentizační ID a autorizační ID. V případě uži vatele b a mm b a mm ( d n : u i d� b a mmb a mm . o u � i t . o u�p e o p l e . d c � e x a m p l e . d c� c o m ) je postup následující: # . / c l i e n t - s r cmd - p 23 -m P LA I N ma i l . ex a m p l e . com r e c e i v i n g c a p a b i l i ty l i s t . . . r e c v : { 3 1 1 L O G I N P LA I N D I G E S T - M D 5 C RAM - M D 5 L O G I N P LA I N D I G E S T - M D 5 C RAM - M D 5 p l e a s e e n t e r a n a u t h e n t i c a t i o n i d : b a mm b a mm p l e a s e e n t e r a n a u t h o r i z a t i o n i d : b a mm b a mm P a s sword : send : { 5 1 P LA I N send : { l l Y send : { 29 1 b a mm b a mm [ O J b a m m b a mm [ O J b a mm_s e c r e t successful authenti cati on c l os i ng connect i on
POZNÁMKA Autorizačn í ID bude n a h razeno hodnotou para m etru s a m p l e . c o n f, avšak ještě je potřebujeme k výpisu výzvy.
1 d a p d b_ i d
v souboru
Pokud autentizace proběhla úspěšně (jako v předchozím případě), autentizace založená na Idapdb funguje. V opačném případě je nutno nahlédnout do žurnálních souborů (au tentizace a Cyrus SASL) a najít chybu .
F i rem n í poštovní server
'4-fiiU'
Ochrana adresářových dat Tomu , kdo zadává LDAP seIVeru dotaz, by z bezpečnostních důvodů neměla být do stupná všechna data. Právo číst data ze seIVeru můžeme omezit tak, že vytvoříme se znamy oprávněných uživatelů (access control lists, ACL), tj . uživatelů, kteří mají vazbu na LDAP seIVer. Proces se skládá ze dvou kroků : 1 . V konfiguraci seIVeru LDAP omezíme čtení. 2.
Balíky závislé na LDAP zkonfigurujeme s možností vytvoření vazby na seIVer LDAP .
Omezení čtení adresáře V části "Rozšíření adresáře" jsme do adresáře přidali uživatele s vazbou . Nyní musíme dé monovi slapd sdělit, do kterých částí adresáře mají tito uživatelé přístup a do kterých čás tí mají přístup ostatní (například anonymnO uživatelé. Do souboru / e t c / o p e n 1 d a p / s 1 a p d . c o n f přidáme následující pravidla:
U Ac c e s s r u l e s f o r s a s l A u t h z T o a c c e s s t o d n . s u b t r e e- " d c- e x a m p l e , d c-c o m " a t t r- s a s l A u t h z T o wri te b y d n . b a s e- " c n -M a n a g e r , d c- e x a mp l e , d c- c o m " read by * U Ac c e s s r u l e s f o r u s e r P a s s w o r d U a u t h e n t i c a t e d u s e r s ( s e l f ) a n d t h e d i r e c t o ry M a n a g e r m a y U c h a n g e t h e i r ( ow n ) p a s s w o r d . U a ny b ody e l s e m a y a c c e s s t h e p a s s w o r d s d u r i n g a u t h e n t i c a t i o n a c c e s s t o d n . s u b t r e e- " d c- e x a mp l e , d c- c o m " a t t r- u s e r P a s s w o r d by s e l f wri te b y d n . b a s e- " c n-Ma n a g e r , d c- e x a mp l e , d c - c o m " wri te read b y d n . b a s e- " u i d-c o u r i e r i ma p , o u -a u t h , d c- e x a m p l e , d c- c o m " auth by * U Ac c e s s r u l e s f o r u i d N u mb e r , g i d N um b e r , m a i l b o x , h ome D i r e c t o ry , q u o t a U The on l y Dne to change thei r v a l ues i s Manager . U A p p l i c a t i o n s t h a t n e e d t h e s e v a l u e s m a y r e a d t h em . U A u t h e n t i c a t e d u s e r s m a y r e a d t h e i r own d a t a . U A n y b ody e l s e m a y n o t a c c e s s t h e s e d a t a . a c c e s s t o d n . s u b t r e e- " d c- e x a mp l e , d c- c o m " a t t r-u i d N u m b e r a t t r-g i d N u m b e r a t t r-ma i l b o x a t t r= h o me D i r e c t o ry a t t r=q u o t a wri te by d n . b a s e- " c n -M a n a g e r , d c- e x a m p l e , d c- c o m " read b y d n . b a s e- " u i d - c o u r i e r i m a p , o u - a u t h , d c- e x a m p l e , d c- c o m " b y d n . b a s e- " u i d-c o u r i e rma i l d r o p , o u -a u t h , d c- e x a mp l e , d c- c o m " r e a d read b y d n . b a s e- " u i d-p o s t f i x , o u -a u t h , d c - e x a m p l e , d c- c o m " read by s e l f none by * U Ac c e s s r u l e s f o r a t t r i b u t e s ma i l , u i d a n d ma i l d r o p U Appl i c a t i o n s may a c c e s s t h e s e a t t r i butes . U A u t h en t i c a t ed u s e r s may d o 5 0 a s wel l U A n y b o d y e l s e m a y r e a d t h em a s w e l l a c c e s s t o d n . s u b t r e e- " d c- e x a mp l e , d c- c o m " a t t r s-ma i l a t t r-u i d a t t r-ma i l d r o p read b y d n . b a s e- " u i d - c o u r i e r i ma p , o u -a u t h , d c-ex a m p l e , d c- c o m " read b y d n . b a s e- " u i d-p o s t f i x , o u -a u t h , d c= e x a mp l e , d c= c o m " read b y d n . b a s e= " u i d= l d a p d b , o u =a u t h , d c= e x a m p l e , d c= c o m " read by sel f
337
338
'4-finC'
Kapitola 1 9
read by * /I F a l l b a c k r u l e /I Any a t t r i b u t e t h a t wa s n ' t a d d r e s s e d a b o v e m a y be r e a d by a n y o n e . a c c e s s fo * . by * r e a d Poté server LDAP znovu spustíme . To je relativně jednoduchá množina pravidel ACL, která vyhovuje schématům a aplika cím v této kapitole . Můžeme vytvořit i jemnější pravidla; viz manuálové stránky access(S) nebo některá z knih o LDAP .
Konfigurace klientů s vazbou na LDAP Máme-li vytvořeny ACL, musíme zkonfigurovat každý z balíků, které budou využívat ser ver LDAP pro vytvoření vazby.
Konfigurace Postfixu jako uživatele s vazbou Aby mohl být Postfix připojen k serveru LDAP jako uživatel s vazbou , musíme změnit parametry stromu v konfiguračních souborech v adresáři / e t c / p o s t f i x / l d a p . )de o pa rametry bi n d , bi n d_d n a bi n d_pw: • •
•
Uživatele aktivujeme pomocí parametru b i n d , který nastavíme na hodnotu y e s . Parametrem b i n d_d n nastavíme rozlišitelné jméno uživatele s vazbou . V příkladu v té to kapitole můžeme nastavit b i n d_d n = u i d=po s t f i x , o u = a u t h , d c = e x a m p l e , d c= c o m . Parametr b i n d_pw nastavíme na heslo (v nešifrovaném textu) .
POZNÁMKA Vid íme, že tato data musíme zabezpečit, neboť obsa h uj í heslo. To je d ůvod, proč jsme na začátku této ka pitoly vytvoři l i pro konfiguračn í soubory dotazů LDAP zvláštní adre sář. Všechny konfigurační soubory v adresáři / e t c / p o s t f i x / l d a p by měly obsahovat při bližně takovéto řádky:
bi nd = yes bi nd dn u i d=p o s t f i x , o u =a u t h , d c=ex a m p l e , d c= c o m b i n d_pw = Y a n g g t !
Konfigurace Courier Maildrop jako uživatele s vazbou Parametry Courier Maildrop jsou téměř shodné s parametry Postfixu s tím rozdílem, že zde nejsou parametry na aktivaci systému vazeb (pokud neuvedeme rozlišitelné jméno, Courier se nepokusí o vazbu). Do souboru / e t c / m a i l d r o p l d a p umístíme parametry b i n d d n a b i n d pw, konfigurace bude vypadat asi takto:
bi nddn b i n d pw
u i d=c o u r i e r m a i l d r o p , o u= a u t h , d c= e x a m p l e , d c= c o m Y rj 6H 1 6 r
UPOZORNĚNí Vzh l edem k tomu, že máme heslo v nešifrova ném textu, m usíme si ověřit, zda j e sou bor / etc /ma i 1 d r o p 1 d a p přístupný pouze uživate l i r o o t .
'a,a"M
Firem n í poštovn í server Konfigurace Courier I MAP jako uživatele s vazbou
Poslední klient, kterého musíme zkonfigurovat jako uživatele s vazbou, je Courier IMAP . Podobně jako v případu Courier Maildrop musíme v souboru I u s r I I i b l c o u r i e r i m a p l e t c l a u t h 1 d a p r c nastavit pouze dva parametl)' L DA P _B I N D D N a L D A P _B I N D P W : -
L D A P_B I N D D N L D A P_B I N D P W
u i d=c o u r i e r i m a p . o u=a u t h . d c= e x a mp l e . d c= c o m X 5 mY p 1 6 p
UPOZORNĚNí Opět si m usíme ověřit, zda konfi g u rační soubor I MA P i m a p / e t c / a u t h l d a p r c ) j e přístupný pouze uživatel i r o o t .
LDAP U u s r l l i b / c o u r i e r
Test omezení serverů Při testování serverů vyjdeme z části "Test příjemců LDAP" ; stačí, když se přesvědčíme, jestli všechny komponenty mohou číst data ze serveru LDAP. Nastanou-Ii jakékoli pro blémy, musíme si prohlédnout žurnální sou bol)'. Zejména se musíme důkladně podívat do žurnálního souboru s l a p d . Pokud bychom chtěli změnit úroveň výpisu , musíme na stavit jinou hodnotu parametru l o g 1 e v e 1 , viz manuálové stránky s 1 a pd . c o n f ( 5 ) .
Šifrování dotazů LDAP I když teď máme data na serveru LDAP zabezpečená před neoprávněnými uživateli, ješ tě nic jsme neudělali pro jejich ochranu při přenosu po nezabezpečené síti. V této části si popíšeme použití TLS při ochraně komunikační vrstvy.
Konfigurace TLS pro OpenLDAP Než zkusíme zkonfigurovat TLS pro instalaci LDAP, ověříme si, zda s 1 a pd podporuje TIS. Příkazem 1 d d aplikovaným na soubor s 1 a pd se obvykle prozradí závislost s 1 a pd na kni hovně SSL, pokud podporuje TIS : # l d d / u s r / s b i n / s l a pd l i b s l a pd_d b - 4 . 1 . s o =) l u s r / l i b / l i b s l a p d_d b - 4 . 1 . s o ( O x O O l 1 6 0 0 0 ) l i b s a s 1 2 . s o . 2 =) l u s r / l i b / l i b s a s 1 2 . s o . 2 ( O x 0 0 1 0 1 0 0 0 ) l i b k r b 5 . s o . 3 =) l u s r / l i b / l i b k r b 5 . s o . 3 ( O x O O a 6 f O O O ) l i b k 5 c ry p t o . s o . 3 =) l u s r / l i b / l i b k 5 c ry p t o . s o . 3 ( O x O O a d 8 0 0 0 ) l i b c o m_e r r . s o . 2 =) I l i b / l i b c om_e r r . s o . 2 ( O x O O a 6 a O O O ) 7 i bs s 7 . s o . 4 =) 1 7 i b I 7 i b s s 7 . s o . 4 ( OxOObl l 00 0 J l i b c ry p t o . s o . 4 =) I l i b / l i b c ry p t o . s o . 4 ( O x 0 0 9 7 7 0 0 0 ) l i b c ry p t . s o . 1 =) I l i b / l i b c ry p t . s o . 1 ( O x 0 0 8 d O O O O ) l i b r e s o l v . s o . 2 =) I l i b / l i b r e s o l v . s o . 2 ( O x 0 0 9 6 5 0 0 0 ) l i b d l . s o . 2 =) l l i b l l i b d l . s o . 2 ( O x 0 0 8 b 8 0 0 0 ) l i bw r a p . s o . O =) l u s r / l i b / l i bw r a p . s o . O ( O x O O b f e O O O ) l i b p t h r e a d . s o . O =) I l i b / l i b p t h r e a d . s o . O ( O x 0 0 9 1 2 0 0 0 ) l i b c . s o . 6 =) I l i b / l i b c . s o . 6 ( O x 0 0 7 6 e O O O ) l i b g s s a p i _ k r b 5 . s o . 2 =) l u s r / l i b / l i b g s s a p i _ k r b 5 . s o . 2 ( O x O O a f c O O O ) l i b z . s o . 1 =) l u s r / l i b / l i b z . s o . 1 ( O x 0 0 8 b d O O O ) I l i b / l d - l i n u x . s o . 2 =) I l i b / l d - l i n u x . s o . 2 ( O x 0 0 7 5 9 0 0 0 ) 1 i b n s 1 . 5 0 . 1 =) I I i b l l i b n s 1 . 5 0 . 1 ( O x 0 0 8 f e O O O )
Soubor s 1 a pd s TLS zkonfigurujeme takto:
339
Ka p itola 1 9
340 1.
Pro 5 1 a p d vytvoříme certifikát X509.
2.
Zkonfigurujeme 5 1 a p d tak, aby nabízel TLS .
3.
Zkon figurujeme klienty LDAP tak, aby používali TIS.
Vytvoření certifikátu X509 pro slapd Podobně jako u jiných serverů nabízejících šifrování odvozené od SSL musíme vytvořit certifikáty pro slapd, které budou obsahovat veřejné a soukromé klíče. Jak tyto certifi káty vytvoříme, je popsáno v kapitole 17. Za předpokladu , že provozujeme vlastní cer tifikační autoritu , vytvoříme pro 5 1 a pd soubor se soukromými klíči j ménem 5 1 a p d_p r i v a t e_key . p e m : # o p e n s s l r e q - n ew - n o d e s - k ey o u t s l a p d_p r i v a t e_key . p em - o u t \ s l a p d_p r i v a t e_key . p em - d a y s 3 6 5 Následuje analogický s l a pd_p u b l i c_c e r t . p e m :
příkaz,
kterým
vytvoříme
veřejný
klíč
jménem
# o p e n s s l c a - p o l i cy p o l i cy_a ny t h i n g - o u t s l a pd_p u b l i c_c e r t . p em - i n f i l e s \
s l a pd_p r i v a te_key . p em Nyní vytvoříme podadresář jménem c e r t 5 pro klíče uložené v / e t c / o p e n l d a p . Po zko pírování souborů typu . pem do podadresáře by měl výstup vypadat takto:
# 1 5 - 1 a /et c /open l d a p / c e r t 5 / tot a l 2 4 d rwx - - - 2 l dap l dap d rwx r - x r - x 4 root root - rw - - - 1 l dap l dap - rw - - - 1 l dap l dap -
-
- - -
- -
-
4096 4096 1 624 3807
Jun Jun Jun Jun
21 2l 21 2l
22 : 31 23 : 1 2 2 2 : 3 1 s l a p d_p r i v a t e_key . p e m 2 2 : 3 1 s l a p d_p u b l i c_c e r t . p e m
UPOZORNĚNí M usíme se přesvědčit, zda jsme změn i l i vlastn íka a přístu pová práva tak, a by k sou bo ru měl přístup pouze uživatel, který spouští s l a p d .
Konfigurace slapd pro TLS Informace o umístění certifikačních souborů poskytneme démonovi 5 1 a pd pomocí čtyř parametrů v souboru 5 1 a pd . c o n f :
T L S CAC e r t i f i c a t e F i l e / u s r / 5 h a r e / s s l / c e r t 5 / c a c e r t . p e m T L S C e r t i f i c a t e F i l e / e t c / o p e n l d a p / c e r t s / 5 1 a p d_p u b l i c_ c e r t . p e m T L S C e r t i f i c a t e Key F i l e / e t c / o p e n l d a p / c e r t 5 / s 1 a p d_p r i v a t e_key . p e m T L S V e r i fy C l i e n t d e m a n d Parametr T L S C AC e r t i f i c a t e F i 1 e určuje umístění certifikátu CA. V tomto příkladu bude 5 1 a pd hledat certifikát pouze v jednom souboru , může jich však být více. V takovém pří padě bychom vynechali jméno souboru a 5 1 a pd bude hledat v celém adresáři . Adresář můžeme také indexovat pomocí c r e h a 5 h , což je utilita OpenSSL, viz kapitola 1 8.
POZNÁMKA Certifikát CA by měl být u m ístěn tak, a by jej moh l i používat i zbývaj ící kl ienti LDAP.
F i rem n í poštovn í server Konkrétní způsob autentizace můžeme stanovit pomocí parametru T L S V e r i fy C l i e n t na stavením na jednu z hodnot n e v e r , a I I ow, t ry nebo d em a n d . Musíme zjistit, zda nasta vení TIS funguje i na straně klienta, takže tento parametr nastavíme na hodnotu d e m a n d , abychom u klientů prosadili používání TIS . Tím s e toto zjišťování zjednoduší.
Konfigurace TLS pro klienty LDAP v této části si ukážeme, jak zapojíme podporu LDAP v Postfixu a v Courier lMAP na stra
ně klienta. V tomto okamžiku nemůže Courier Maildrop provozovat TIS, avšak nevadí to, neboť LDA nemusí znát žádné uživatelské heslo.
Zapnutí podpory LDAP v Postfixu Postfix potřebuje kvůli přístupu na LDAP server prostřednictvím TIS vlastní veřejný cer tifikát a soukromý klíč. Soubory s klíči jsme vytvářeli v kapitole 17, můžeme je znovu použít. Abychom mohli aktivovat TIS prostřednictvím LDAP, musíme ke všem konfiguračním souborům v / e t c / p o s t f i x / l d a p přidat následující parametry:
vers i on = 3 t l s_c a _c e r t_f i l e = / u s r / s h a r e / s s l / c e r t s / c a c e r t . p e m t l s_c e r t = / e t c / p o s t f i x / c e r t s / p o s t f i x_pu b l i c_ c e r t . p e m t l s_key = / e t c / p o s t f i x / c e r t s / p o s t f i x_p r i v a t e_ k ey . p em s t a r t_t l s = y e s Parametry mají tyto funkce :
v e r s i on Nastavení verze protokolu LDAP . Implicitně používá Postfix verzi 2, avšak TIS vyža duje verzi 3.
t l s ca c e r t_fi l e Specifikace certifikátu CA.
t l s_c e r t Specifikace veřejného certifikátu pro Postfix.
t l s_key Specifikace soukromého klíče pro Postfix.
s t a rt_t l s Aktivace TIS.
Aktivace dotazů LDAP pro Courier IMAP K aktivaci LDAP prostřednictvím TIS pro Courier lMAP používáme jinou strategii než v případě Postfixu, neboť Courier nemá vlastního klienta LDAP, nýbrž používá klienta OpenLDAP . Musíme jej zkonfigurovat a pak oznámit systému Courier lMAP, aby si vy žádal LDAP prostřednictvím TLS od klienta OpenLDAP . Konfigurační soubor klienta OpenLDAP se většinou nazývá / e t c / o p e n l d a p / l d a p . c o n f . Podporu TIS aktivujeme pomocí parametrů T L S_ * :
34 1
3 42
'a'hdC'
Kapitol a 1 9
U R l l d a p : / I ma i l . e x a m p l e . c o m B A S E d c= e x a m p l e , d c= c o m T L S_CAC �T / u s r / s h a r e / s s l / c e r t s / c a c e r t . p e m T L S_C E RT / e t c / o p e n l d a p / c e r t s / s l a p d_p u b l i c_c e r t . p em T L S_ K E Y / e t c / o p e n l d a p / c e r t s / s l a p d_p r i v a t e_key . p em T L S_ R E Q C E RT d ema n d Parametry jsou podobné parametrům v Postfixu :
T L S_CAC E RT Specifikace certifikátu CA, kterou používají ostatní balíky v této kapitole.
T LS_C E RT Specifikace veřejného certifikátu klienta .
T L S_KEY Specifikace soukromého certifikátu klienta . Můžeme znovu použít certifikát a klíč dé mona s l a p d .
T LS_REQ C E RT Specifikace politiky vyžádání certifikátu serveru . Nastavením na d em a n d prosadíme
TLS nebo ukončíme spojení. Vzhledem k tomu , že jsme už klienta OpenLDAP informovali o certifikátu a o klíčích, musíme už jen v souboru / u s r / l i b / c o u r i e r - i m a p / e t c / a u t h l d a p r c oznámit Courier [MAP, aby pro LDAP vyžadoval TIS:
L D A P_T L S Položili jsme poslední kousek mozaiky. Nyní můžeme restarovat Courier !MAP a otestovat jej.
Test TLS Parametry, které jsme právě doplnili do konfigurace, celou věc značně zkomplikovaly, proto musíme testovat velmi pečlivě: 1.
Otestujeme aplikaci, na kterou se obracejí všichni ostatní - server LDAP . Otestujeme vlastního klienta serveru LDAP.
2.
Pokud funguje, zkusíme, zda Postfix můžeme připojit. Ověříme, zda je Courier [MAP schopen používat klienta LDAP, aby získal protokol SSL.
Test serveru OpenLDAP Prvním testem zjistíme, zda server OpenLDAP nabízí certifikáty TLS . K tomu skutečně ne existuje žádný jednoduchý příkaz. Musíme to ověřit na portu 389 (kde obvykle nalezne ma TIS 1 pro LDAP). Zjistíme, zda můžeme přejít na port 636 (kde OpenLDAP nabízí SSL), abychom se přesvědčili, zda bude s 1 a pd spokojen s certifikáty. K serveru se připojíme pomocí utility s_c 1 i e n t takto: # ope n s s l s_c l i e n t - CAfi l e / u s r / s h a r e / s s l / c e r t s / c a c e rt . pem - c o n n e c t l o c a l h o s t : 63 6 CDNN EC T E D ( 00000003 l d e p t h= l / C = E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U=C e r t i f i c a t i o n A u t h o r i ty / \
F i rem n í poštovní server
'a-hMM
C N=ma i l . e x a m p l e . c o m / ema i l Ad d r e s s=c e r tma s t e r@ex a mp l e . c o m v e r i fy r e t u r n : l d e p t h=O / C= E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U = L D A P s e r v i c e s / \ C N=ma i l . e x a m p l e . c o m / ema i l Ad d r e s s =l d a pma s t e r@e x a mp l e . c om v e r i fy r e t u r n : l C e rt i f i c a t e c ha i n
o s : / C= E X / ST= E x a m p l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U = L D A P s e r v i c e s / \
C N=ma i l . ex a m p l e . c o m / ema i l Add r e s s= l d a pm a s t e r@e x a mp l e . c om i : / C= E X / S T= E x a m p l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U=C e r t i f i c a t i o n A u t h o r i ty / \ C N=ma i l . e x a m p l e . c o m / ema i l Add r e s s=c e r tma s t e r@ex a mp l e . c o m s : / C=E X / S T= E x a m p l i a / L= E x a mp l e t o n / O = E x a mp l e I n c . / O U=C e r t i f i c a t i o n A u t h o r i ty / \ C N=ma i l . e x a m p l e . c o m / ema i l Add r e s s =c e r t ma s t e r@ex a mp l e . c o m i : / C= E X / S T= E x a m p l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U=C e r t i f i c a t i o n Au t h o r i ty / \ C N=ma i 1 . e x a m p l e . c o m / ema i l Ad d r e s s=c e r tm a s t e r@e x a m p l e . c o m
Server cert i fi cate - - - - - B E G I N C E RT I F I CAT E - - - - M I I E D DCCA3WgAw l BAg I BAj A N B g k q h k i G9wO BAOO FADC B s D E LMA k GA l U E B h M C R V g x E TA P B g N V BAgTC E V 4 Y W l w b G l h M RMw E O Y DVOOH Ewp F e G F t c Gx l d G9 u M RUwEwY D V O O K Ewx F e G F t c Gx l l E l u Y y 4 x l DAeBg N V B A s T F O N l c n Rp Z m l j Y X Rp b 2 4 g 0 X V O a G9y a X R5 M R kw FwY D V OO D E x B t Y W l s L m V 4 Y W l w b G U u Y 2 9 t M S Uw l wY J K o Z l h v c N AO k B F h Z j Z X J O b W F z d GVyOGV 4 Y W l wbGU u Y 2 9 tM B 4 X DTAO M D c xM z E z NTOwN l o X DTA l M D c x M z E z NTOw N l owg a Y x C z AJ B g N V BA Y TA k V Y M R EwDwY DVOO I Ew h F e G F t c G x p Y T E T M B E GA I U E B x M K RX h h b X B s Z X R v b j E V MBMGA I U E C h M M RX h h b X B s Z S B J bmM uMRYw FAY DVOO L Ew l M R E FO I H N l c n Z p Y 2 V z M R kw FwY D V O O D E x B t Y W l s L m V 4 Y W l w b G U u Y 2 9 t M S U w l wY J K o Z l h v c N AO k B F h Z s Z G FwbW F z d G VyOGV4Y W l wbG U u Y 2 9 t M I GfMAOGC S q G S l b 3 D O E BAOUAA4 G N A D C B i O K B g O D c q V cy P n 4 q h I 6 5 s A d P g u + E t 2 v z W s y H T / I T 3 9 m Z 6 G q r h l 5 0 a / eOA7 L z GmU K R / t / W 4 0 1 28yg N / u d p k H Z i T U D j U C 5 E N F 7 k q k4 v n x / 4 DpwmDmOj N g 0 7 J J E r O F L cO J 1 / Kq Z z A l t B h 3 2 Kt l h V 8 B O c d l f z d o x E q 0 7 M k x Rw l p u 7 Ly L o 5 q O k w I DAOA B o 4 1 B P D C CATgwCOY D V ROTBA l wADAs B g l g h k g B h v h CAOO E H x Y d T3 B l b l N T T C B H Z W 5 1 cm F O ZWOg 0 2 Vyd G l m a W N h d GUwHOY D V ROO B B Y E FC K d R Z g l s m4 / 1 i o 2 s 1 t D l r i y C E+ KM I H d B g N V H S M E g d Uwg d KA F M N G Z 7 / N o r S 6 W p J OJ Z 2 I h D n o 9 7 i X o Y G 2 p I Gz M I GwMO swCOY D VOOG EwJ F W D E RMA8GA I U E C B M I RX h h b X B s a W E x E z A R B g N V BA c T C k V 4 Y W l wb G V O b 2 4 x FTAT B g N V BAoT D E V 4 Y W l wb G U g S W 5 j L j E g M B 4 GA l U E C x M X 0 2 V y d G l m a W N h d G l v b i B B d X R o b 3 J p d H kxGTA X B g N V BAMT E G l h a Ww u Z X h h b X B s Z S 5 j b 2 0xJ TAj B g kq h k i G9wOB C O E W FmN l c n Rt Y X N O Z X J A Z X h h b X B s Z S 5 j b 2 2 CAOAwDOY J K o Z l h v c NAO E E BOADg Y EA A Z C H 5 A 2 3 W V d l d 0 9 N k D 2 3 B z 3 H F+My O f8 f U x l C a O b Lw o 5 7 2mj g B / 0 3 H 7 K9 6 9 b U / t e 2 B e LOj i fM o / v e x X PM e a j w z D n I Km/yJ 0 7 e N t 8 5 e e Kc i I 6 M Z J V h v u P v t p / Rc 5 v A r c a s H N q pmm7 o D A E F I Rc l H s f h sy A H w s TT r 1 8U Gn d f L 3 H e t kw= - - - - - E N D C E RT I F I CAT E - - - - s u bj e c t= / C= E X / ST= E x a mp l i a / L= E x a m p l e t o n / O= E x a mp l e I n c . / O U = L D A P s e r v i c e s / \ C N=ma i l . ex a m p l e . c o m / ema i l Ad d r e s s = l d a pma s t e r@ex a mp l e . c om i s s u e r= / C = E X / ST= E x a mp l i a / L= E x a m p l e t o n / O= E x a mp l e I n c . / O U=C e r t i f i c a t i o n A u t h o r i ty / C N=ma i l . e x a m p l e . c o m / ema i l Ad d r e s s=c e r t ma s t e r@e x a mp l e . c om A c c e p t a b l e c l i e n t c e r t i f i c a t e CA n a m e s / C= E X / ST= E x a mp l i a / L= E x a mp l e t o n / O= E x a mp l e I n c . / O U=C e r t i f i c a t i o n A u t h o r i ty / \ C N=ma i l . e x a m p l e . c o m / ema i l Ad d r e s s = c e rtm a s t e r@ex a mp l e . c o m S S L h a n d s h a k e h a s r e a d 2 4 0 2 by t e s a n d w r i t t e n 3 5 2 by t e s New . T LSv l / S S Lv3 . C i p h e r i s AES256 - SHA S e r v e r p u b l i c key i s 1 0 2 4 b i t S S L - Se s s i on : TLSvl P rotocol AES256 - SHA Ci pher
343
344
'4-fi'iM
Kapitola 1 9
Ses s i on - I D : 2 1 4 3 0 E 3 5 2 1 3 A7 9 7 1 7 6 B 2 8 B 1 6 B F 2 4 D 2 0 E C 9 0 1 9 9 0 2 B 5 B 0 9 F C E D DA0 3 3 3 6 8 2 F D 6 F 7 D Ses s i on - I D - ctx : M a s t e r -'Key : 4 5 6 3 6 2 1 7 F D 3 1 3 6 A 5 3 6 C E 6 2 6 1 8 D B C 1 C A9 2 E 6 E O B 1 E 7 7 3 F 7 5 1 2 0 6 3 2 F 7 6 1 C 2 8 9 9 4 3 B B \ 8 5 F 7 8 3 6 9 C 6 2 2A O D 7 8 D B 6 0 7 2 6 1 4 7 4 6 5 F Key - A r g : None Krb5 Pri nci pal : None S t a r t T i me : 1 0 8 9 7 3 3 8 7 0 Ti meout : 300 ( s ec ) V e r i fy r e t u r n c o d e : O ( o k )
QU I T DO N E Vrátí-li se návratový kód O (ok), certifikáty jsou ověřené . Nyní můžeme otestovat, zda můžeme používat LDAP klienta k dotazování serveru prostřednictvím TLS .
Test klienta OpenLDAP Správnou funkci klienta OpenLDAP ověříme tak, že zkusíme získat data pomocí příkazu 1 dapsea rch: ft l d a p s e a r c h - Z l - x - L L L " ( ma i l =bamm@e x a m p l e . c om ) " u s e r P a s swo r d
d n : o u = p e o p l e , d c= e x a mp l e , d c= c o m d n : o u = i t , o u = p e o p l e , d c=e x a m p l e , d c= c o m d n : u i d = b a m m b a mm , o u = i t , o u =p e o p l e , d c=ex a m p l e , d c= c o m u s e r P a s s w o r d : : Y m F t b V 9 z Z W Ny Z X Q=
Příkaz l d a p s e a r c h je velmi užitečný, neboť čte implicitní nastavení z l d a p . c o n f ; připo meňme si, že na něm závisí konfigurace Courier lMAP TIS/LDAP. Navíc, tímto dotazo váním imitujeme dotazy Courier lMAP . Volbou -ZZ sdělíme příkazu 1 d a p s e a r c h , aby používal TIS. Pokud tento příkaz nefunguje, důkladně si musíme prohlédnout soubor 1 d a p . c o n f a žur nální soubory.
Test Postfixu Postfix otestujeme pomocí příkazu postmap, abychom se dotázali na známého příjem ce. Zde je příklad z této kapitoly:
ft p o s t m a p
-
q " b a mm@ex a mp l e . com" l d a p : / e t c / p o s t f i x / l d a p / l o c a L r e c i p i e n t s . c f
b a mm b a mm Pokud příkaz nefunguje, podíváme se, zda funguje bez podpory TLS. Pokud ano, zno vu aktivujeme nastavení TLS a v postfixovém konfiguračním souboru nastavíme parametr d e b u g l e v e l (například / e t c / p o s t f i x / l d a p / l o c a l _r e c i p i e n t s . c f) nejméně na 1 , aby chom mohli použít informace ze žurnálního souboru .
Test Courier IMAP V části "Test klienta OpenLDAP" jsme otestovali pilíře konfigurace serveru Courier IMAP . Abychom se přesvědčili, že vše funguje, připojíme se k portu lMAP a přihlásíme se stej ně jako v části "Test serveru lMAP " . Ú spěšné přihlášení vypadá takto:
F i rem n í poštovn í server
# t e l n e t ma i l . exampl e . com 1 4 3 * O K [ C A P A B l l l T Y l MA P 4 r e v 1 U l D P l U S C H l l D R E N N AM E S PAC E \ T H R E A D=O R D E R E D S U B J E C T T H R E A D= R E F E R E N C E S S O RT a U O T A \ I O l E AC l AC l 2 =U N l O N S T A R T T l S ] C o u r i e r - l MA P r e a dy . C o py r i g h t 1 9 9 8 - 2 0 0 4 O o u b l e P r e c i s i o n . l n c . \ S e e C O P Y l N G f o r d i s t r i b u t i o n i n f o rma t i o n .
l o g i n b a mm@ex a mp l e . com b a mm_s e c r e t O K lOG l N O k . l og o u t * B Y E C o u r i e r - l MA P s e r v e r s h u t t i n g d ow n O K l O G O U T c om p l e t e d
Prosazení platné adresy odesilatele Když jsou uživatelé úspěšně připojeni k postfixovému serveru pomocí autentizace SMTP, mohou předávat zprávy prostřednictvím serveru s libovolnou adresou odesilatele. Pokud ovšem uživatelé nemají plnou důvěru , můžeme použít omezení r e j e c t_a u t h e n t i c a t e d_s e n d e r_l o g i n_m i s m a t c h , poprvé použité ve verzi Postfix 2 . 1 , které říká Postfixu, aby prosadil platné adresy odesilatele. Funguje to takto: 1.
Uživatel se spojí pomocí autentizace SMTP s uživatelským jménem.
2.
Když se uživatel pokusí poslat zprávu, Postfix vyextrahuje odesilatele obálky.
3.
Postfix vyhledá odesilatele obálky v mapách zkonfigurovaných pomocí s m t pd_s e n d e r_l o g i n_ma p s . V ideálním případě je to mapa založená na LDAP .
4.
Vrátí-li vyhledávání stejné jméno uživatele, které bylo použito při autentizaci SMTP, Postfix zprávu přijme. Jinak ji odmítne.
Vytvoření mapy LDAP V adresáři máme všechna data pro mapu s m t pd_s e n d e r _ 1 o g i n_ma p s , takže má smysl je znovu využít, a to nejen proto, že nepotřebujeme žádná další data, nýbrž také proto, že není třeba žádné další údržby. Mapu nastavíme tak, že v adresáři vytvoříme nový sou bor /etc/postfix/ldap s nastavením potřebným pro dotazy. Když specifikujeme atributy, které se ze serveru LDAP mají převzít jako uživatelská jmé na, můžeme jejich výběr omezit pouze na adresy použité v atributech m a i 1 nebo také povolit odesilatelům, aby používali aliasy (které jsou uloženy v atributu ma i 1 d r o p) . Řekněme, ž e chceme vytvořit konfiguraci, která povoluje oba postupy uvedené v sou boru dotazů jménem / e t c / p o s t f i x / 1 d a p / m a i l _f r o m_l o g i n . c f . Za předpokladu , že má me aktivován TIS, celý soubor bude vypadat takto:
versi on = 3 debug l evel = O s e r v e r_h o s t = l d a p : / / m a i l . e x a m p 1 e . c o m t 1 s_c a _c e r t_f i 1 e = / u s r / s h a r e / s s 1 / c e r t s / c a c e r t . p e m t 1 s_c e r t = / e t c / p o s t f i x / c e r t s / p o s t f i x_p u b 1 i c_ c e r t . p e m t 1 s_key = / e t c / p o s t f i x / c e r t s / p o s t f i x_p r i v a t e_key . p em t 1 s_ r a n d om_f i 1 e = / d e v / u r a n d o m s t a r t_t 1 s = y e s bi nd = yes bi nd dn u i d=po s t f i x , o u = a u t h , d c= e x a mp 1 e , d c= c o m b i n d_pw = Y a n g g t !
345
346
'a·fiid'
Kapitola 1 9
s e a r c h_ba s e = o u = p e o p l e , d c=ex a mp l e , d c = c o m q u e ry_f i l t e r = ( I ( m a i l =% s ) ( m a i l d r o p= % s ) ) r e s u l t_ � t t r i b u t e = ma i l Jedinými parametry, které by se měly lišit od ostatních souborů v / e t c / p o s t f i x / l d a p , jsou q u e ry_f i 1 t e r a r e s u l t_a t t r i b u t e . Máme-li mapu dotazů, nastavíme parametr s m t p d_s e n d e r _l o g i n_ maps v souboru ma · i n . c f takto:
s m t pd_s e n d e r_l og i n_m a p s = l d a p : / e t c / p o s t f i x / l d a p / m a i l _f r om_l o g i n . c f
Konfigurace omezení smtpd Nakonec omezíme odesilatele na jejich vlastní poštovní adresy tak, že k seznamu omeze ní v souboru ma i n . cf přidáme parametr r e j e c La u t h e n t i c a t e d_s e n d e r _1 o g i n_m i s m a t c h :
s m t p d_ r e c i p i e n t_ r e s t r i c t i o n s = p e r m i t_my n e t w o r k s r ej e c t_ a u t h e n t i c a t e d_ s en d e r_ 7 og i n_m i sma t c h
p e rm i t_s a s l _a u t h e n t i c a t e d r e j e c t_u n a u t h_d e s t i n a t i o n
POZNÁMKA Toto omeze n í se vzta h uje pouze na uživate le, kteří maj í a utentizaci, avša k nevzta h uje se na n i koho j i ného. Proto mohou uživate lé v d ůvěryhodné síti posílat zprávy komu ko li dle l i bosti. Navíc funguje příchozí pošta ze zbytku I nternetu .
Test omezení smtpd Abychom mohli otestovat novou konfiguraci, musíme zjistit, zda funguje mapa . Pomocí příkazu p o s tma p vyzkoušíme normální příjemce, viz příklad:
/I p o s tma p -q " b a mrn@ex a mp l e . com" l d a p : / e t c / p o s t f i x / l d a p / ma i l _f r om_l o g i n . c f b a mm b a mm Povolujeme-li jako adresy odesilatelů aliasy, příkazem p o s t m a p zadáme dotaz na alias:
/I postmap -q "postma s t e r@examp l e . com" l d a p : / e t c / p o s t f i x / l d a p / ma i Lf rom_l ogi n . c f b a mmbamm Když funguje, poslední věcí, kterou musíme otestovat, je skutečné sezení SMTP. Pro prv ní stupeň spojení připravíme autentizační řetězec zašifrovaný na 64bitové bázi:
ft p e r l - MM I M E : : B a s e 64 - e \ ' p r i n t e n c o d e_ba s e 64 ( " b a mm\@examp l e . c o m \ O b a mm\ @ex a mp l e . c o m \ O b a mm_s e c r e t " ) ; ' Y m F t b U B l e G F t c Gx l Lm N v b O B i Y W l t O G V 4 Y W l w b G U u Y 2 9 tAGJ h b W l f c 2 V j c m V O Nyní s e k postfixovému serveru připojíme z e vzdáleného počítače a provedeme auten tizaci pomocí řetězce:
/I t e l n e t ma i l . ex a m p l e . com 2 5 2 2 0 ma i l . e x a m p l e . c om E S M T P P o s t f i x E H LO c l i e n t . exampl e . c om
Ia-fi"G'
F i rem n í poštovní server
2 5 0 - ma i l . exampl e . com 250 - P I P E L l N I NG 250 - S I Z E 1 0 240000 2 5 0 - V R FY 2 5 0 - ETRN 2 5 0 - A U T H P LA I N LO G I N C RAM - M 0 5 O I G E S T - M 0 5 2 5 0 - A U T H = P LA I N L O G I N C RAM - M 0 5 O I G E S T - M 0 5 2 5 0 B B I TM I M E AUTH P LA I N Y m F t b U B l e G F t c G x l LmN v b Q B i Y W l t QGV4Y W l w b G U u Y 2 9tAGJ h b W l f c 2 V j cmVO 235 A u t h e n t i c a t i o n s u c c e s s f u l Dále zkusíme poslat zprávu jako j iný uživatel (připomeňme si, že jsme provedli autenti zaci jako B a mm B a mm):
MAI L FROM : < rubbl e@exampl e . com> 250 Ok RCPT TO : 553 < r u b b l e@exampl e . com> : Sende r a d d r e s s rej ected : not owned b y u s e r bamm@examp l e . com Ve fázi RCPT TO zjistí Postfix s m t pd_re c i p i e n t_ r e s t r i c t i o n s .
neshodu ,
neboť
zafungoval
parametr
Měli bychom s i také vyzkoušet odeslání zprávy jako skutečný uživatel. Pokud funguje i to, už nemáme co dělat. Skončili jsme, příjemnou zábavu!
347
KAPITOLA
20 ,
,
PROVOZOVANI POSTFIXU V UZAVRENEM PROSTORU v
,
Uzavřený prostor je jen další bariérou proti nežádoucímu vniknutí; má smysl pouze tehdy, když konfigurace celého počítače je bezpečná. - Wietse Venema Postfix, který běží v uzavřeném prostoru
(chroot), je oddělen od celé adresářové struk
tu ry operačního systému . Dúvodem je ochrana systému proti vetřelci, který dokáže vnik nout do Postfixu . Aby mohl Postfix vyvíjet činnost, musí mít v tomto uzavřeném prostoru k dispozici určité minimum souború , aplikací a ostatních prostředkú .
K nastavení uzavřeného prostoru nejsou nutné žádné externí programy. Distribuce ob sahuje pomocné skripty, jimiž nastavíme požadované prostředí. V této kapitole si popí šeme jak teorii uzavřeného prostoru , tak i příklad v protokolu SASL/TLS, kterým doložíme součinnost Postfixu s principem uzavřeného prostoru . Skripty pro realizaci uzavřeného prostoru , které jsou součástí distribuce Postfixu , nalez neme v adresáři e x a m p l e s / c h r o o t - s e t u p , který je součástí zdrojového stromu . Pokud bychom vytvářeli Postfix z binárních balíkú, těchto pár skriptú , jež zajistí naplnění obsa hu uzavřeného prostoru , bude nejspíše přibaleno k normálnímu souborovému systému mimo uzavřený prostor. Spolehlivý postup pro nastavení uzavřeného prostoru je takovýto:
1.
Vše vyzkoušíme mimo uzavřený prostor.
2.
Postfixové démony postupně převedeme do uzavřeného prostoru , jednoho po dru hém.
3 50
'a'h"A
Kapito la 20
Při tomto postupu můžeme snadno identifikovat démona , který zhavaruje, když se spus tí v uzavřeném prostoru . Tomu přizpůsobíme i obsah uzavřeného prostoru .
Co se děje v uzavřeném prostoru Představme si zloděje, který rozbije okno a vleze jím do domu . Okno ovšem vede do pokoje, který je součástí celkového zabezpečení domu , nejenže v něm tedy není n ic cen ného, ale navíc se tudy zloděj ani nikam nedostane. Musí to vzdát. Aby měl takový pokoj smysl, jeho tvůrce musí mít jistotu , že obsahuje pouze naprosto nezbytné věci. Uzavřený prostor v Unixu má přesně stejný význam jako bezpečnostní pokoj .
Základní principy nastavení uzavřeného prostoru Základní principy nastavení uzavřeného prostoru jsou následující:
Aplikace musí běžet s nejnižší možnou prioritou Č ím je uživatel mocnější, tím víc může poškodit systém. Konkrétně, uživatel r o o t a programy, které provozuje, mohou snadno poškodit uzavřený prostor. Proto by programy běžící v uzavřeném prostoru neměly mít oprávnění superuživatele, nýbrž co nejnižší oprávnění, která jsou nutná k tomu , aby splnily svoji úlohu .
Korektní snižování priority Aplikace, která nabízí službu na portu s nízkým číslem (například 25), mu ze vyža dovat spuštění s oprávněními superuživatele, aby měla přístup k tomuto portu . Nic méně až aplikace získá, co potřebuje, je nutno jí korektně snížit přístupová práva .
Uzavřený prostor musí být malý a prázdný V uzavřeném prostoru by mělo zůstat co nejméně souborů . Č ím je jich méně, tím menší je naděje, že vetřelec získá něco, co by mohl zneužít.
Vlastnictví souborů a právo zápisu by mělo náležet pouze uživateli r o o t Aplikace, které běží v uzavřeném prostoru , nesmí měnit obsahy souborů . Vlastnictví souborů a oprávnění k zápisu změníme pouze ve prospěch superuživatele ( r o o t ) .
Odkazy na konfigurační soubory pouze mimo uzavřený prostor Symbolické odkazy z uzavřeného prostoru na soubory mimo něj nebudou pro systé my v tomto prostoru funkční. Některé systémy sdílejí konfigurační soubory mezi dé mony uvnitř uzavřeného prostoru a utilitami pracujícími v uživatelském režimu . Je tedy nutné, aby tito démoni měli přístup ke konfiguračním souborům bez ohledu na to, zda běží vně nebo uvnitř uzavřeného prostoru. I když by bylo možné utility znovu vytvo řit a poskytnout jim speciální cestu (například / c h r o o t l n a med / e t c / n a me d . c o n f), je lep ší vytvořit odkazy zvenku do uzavřeného prostoru, viz následující příklad: # l n - s / c h r o o t / n a med / e t c / n amed . c o n f / e t c / n amed . c o n f Díky těmto odkazům může většina nástrojů normálně operovat, avšak při provádění změn v souborech jako / e t c / n a me d . c o n f musíme být velice opatrní, neboť zasahu jeme do systému běžícího uvnitř uzavřeného prostoru .
Provozová n í Postfixu v uzavřeném prostoru
Technická implementace Démoni sami přecházejí do uzavřeného prostoru a mění svá přístupová práva . Díky to mu mají přístup do souborů v adresáři l e t c / p o s t f i x (a mohou tam otevírat mapy) ješ tě před přechodem do uzavřeného prostoru . Systémové volání chrootO mění způsob, jakým proces - po vstupu do uzavřeného pro storu - vnímá souborový systém. Mechanismus je takovýto: 1.
Démon ma s t e r zavolá c h d i r ( q u e u e_d i r e c t o ry ) .
2.
Démon ma s t e r vyvolá ostatní postfixové démony, přičemž každému řekne, zda má či nemá změnit kořen souborového systému nebo snížit svá přístupová práva .
Až na velmi výjimečné okolnosti je únik z uzavřeného prostoru nemožný.
Vliv uzavřeného prostoru na Postfix Provozujeme-li Postfix v uzavřeném prostoru , ovlivňuje to jeho chápání souborového systému . Řekněme, že jsme změnili kořenový adresář na I v a r l s p o o l / p o s t f i x . I když každá jiná aplikace vidí adresář l v a rl s p o o 1 I p o s t f i x (adresář fronty) a vše ostatní v systému, postfixoví démoni od toho okamžiku , kdy přejdou do uzavřeného prostoru , považují adresář I v a r l s p o o l I p o s t f i x za adresář I a nikam jinam nemají přístup . Z to ho důvodu musíme některé soubory, které jsou mimo dosah démonů, zkopírovat do uzavřeného prostoru :
Binární soubory (démoni) Démony nemusíme kopírovat do uzavřeného prostoru . Udělá to démon master, kte rý nepracuje v uzavřeném prostoru .
Knihovny volané binárnínů soubory Programy si berou knihovní moduly před přechodem do uzavřeného prostoru , není je tedy třeba kopírovat.
Mapy Statické mapy si programy otevřou před přechodem do uzavřeného prostoru . Může me si ovšem pro mapy řízené databází přát vytvořit socket v uzavřeném prostoru (viz hod sockety v tomto výčtu).
Konfigurační soubory Démoni čtou konfigurační soubory před přechodem do uzavřeného prostoru . Není třeba je kopírovat.
Sockety V uzavřeném prostoru musí být démonům dostupné socketové soubory jako mysql nebo SASL. Je nutno si zapamatovat, že klientská knihovna MySQL může hledat soc ket například ve l v a r l r u n / my s q 1 s o c k e t , takže je třeba je umístit třeba do q u e u e_d i re c t o ry l v a r / r u n / my s q l . s o c k e t . .
351
352
'4-hdC'
Kapitol a 20
Soubory pro podporu knihoven Knihovna C musí vidět mimo jiné na soubory / e t c / r e s o l v . c o n f a / e t c / l o c a l t i me . Kopi� těchto souborů j e třeba nainstalovat d o / v a r / s p o o l / p o s t f i x .
Pomocné skripty pro uzavřený prostor Součástí Postfixu jsou pomocné skripty uložené v adresáři zdrojového stromu e x a m p l e s / c h r o o t - s e t u p . Tyto skripty pomáhají nastavit uzavřený prostor konkrétního ope račního systému. Provozujeme-li Postfix v uzavřeném prostoru, zkontrolujeme, zda jsou základní požado vané soubory, např. / v a r / s p o o l / p o s t f i x / e t c / r e s o l v . c o n f , aktualizované a zda jsou v uzavřeném prostoru . Pokud tyto soubory v uzavřeném prostoru a mimo něj nejsou syn chronizované, do žurnálu se zapíše varovné hlášení, kterému je nutno věnovat pozor nost a případné ne konzistence odstranit.
Démoni v uzavřeném prostoru Démon m a s t e r spouští všechny ostatní démony a současně určuje, zda poběží v uza vřeném prostoru. Řídí se při tom obsahem souboru / e t c / p o s t f i x / ma s t e r . c f .
Aktivace uzavřeného prostoru Identifikace, zda má démon běžet v uzavřeném prostoru , se provádí pomocí souboru ma s t e r . c f . Tento údaj nalezneme ve sloupci c h r o o t v souboru ma s t e r . c f . Ve zdrojo vých souborech Postfixu jsou všichni démoni nastaveni na n , některé distribuce si ovšem toto nastavení mění. V základní instalaci tedy žádný démon neběží v uzavřeném prosto ru . Má-li v něm běžet, musíme změnit volbu n na y . Má-li v uzavřeném prostoru běžet démon s m t p d , konfigurace může vypadat například takto:
# # s e r v i ce t y p e
========================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
pri vate unpri v (yes ) (yes )
ch root (yes )
w a k e u p m a x p r o c c omma n d + a r g s # ( neve r ) ( 1 00 )
# smtpd i net n y smtp n smtpd #smtps i net n # - o s m t pd_t l s_w r a p p e r m o d e=y e s - o s m t p d_s a s l _a u t h_en a b l e=y e s
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
pi ckup fi fo cl eanup un i x
n n
n n
60
1 O
pi ckup cl eanup
Všimněme si, že položka pro službu s m t p ve sloupci chroot byla změněna n a y . P o no vém zavedení Postfixu spustí démon master tuto službu v uzavřeném prostoru .
Omezení uzavřeného prostoru a delegace úloh Dokumentace v souboru master.cf říká, že takřka všichni démoni mohou běžet v uza vřeném prostoru . Výjimkou jsou démoni pi p e , v i r t u a 1 a 1 o c a 1 .
p i pe Démon pi p e volá externí programy, které jsou obvykle umístěny mimo adresář post fixových front, proto potřebuje soubory mimo tento adresář.
'",finc'
Provozová n í Postfixu v uzavřeném prostoru 1 oca 1
Démon 1 o c a 1 má na starosti lokální doručování a musí mít zajištěn přístup do do movského adresáře uživatele. Provozovat démona local v uzavřeném prostoru nemá smysl, znamenalo by to, že domovské adresáře jsou pod l v a r I s p o o 1 I p o s t f i x uvnitř uzavřeného prostoru, kde by k nim případný vetřelec snadno získal přístup .
vi rtua1 Démon v i r t u a 1 s e stará o lokální doručování podobně jako démon 1 o c a 1 . Důvody, proč by se démon v i r t u a l neměl provozovat v uzavřeném prostoru, platí i v tomto případě. Využíváme-li prostředí uzavřeného prostoru, ostatní démoni by mohli potřebovat démo na p r o xyma p , aby se dostali ke konfiguračním datům. Když například server SMTP běží cí v uzavřeném prostoru potřebuje mít přístup k souboru se systémovým heslem, aby odmítl zprávu s neexistující lokální adresou , bylo by nevhodné mít kopii tohoto soubo ru v uzavřeném prostoru . Tím by princip uzavřeného prostoru vzal za své. Aby byly mapy zajišťující bezpečnost mimo uzavřený prostor, můžeme pomocí následu jícího konfiguračního parametru delegovat vyhledávání na démona p r oxyma p (také mi mo uzavřený prostor):
l o c a l _ r e c i p i e n t_m a p s
=
p r o xy : u n i x : p a s s wd . by n a me $ a l i a s_m a p s
Zapamatujme si, že vzhledem k tomu , že p r o xyma p přechází přes hranici uzavřeného prostoru, nemůže pracovat s mapami obsahujícími citlivá data .
Knihovny, konfigurační soubory a ostatní soubory v uzavřeném prostoru Mnohé programy potřebují pro svoji činnost externí soubory. Jde o tyto soubory: •
Knihovny a další sdílené objekty
•
Konfigurační soubory
•
Jiné soubory, např. sockety nebo zařízení
Existuje několik způsobů , jak zjistíme, které soubory program potřebuje ke své činnos ti. Závislosti knihoven zjistíme ve většině systémů Unix pomocí příkazů 1 dd nebo c h a t r . V případě standardní instalace Postfixu by to ovšem neměl být problém, neboť všichni démoni se spouštějí a sestavují se s knihovnami ještě před přechodem do uza vřeného prostoru . Potřebné konfigurační programy určíme pomocí příkazů s t r a c e (Linux), t r u s s (Solaris) nebo k t r a c e (ostatní varianty Unixu). Zde je jedna z možností, jak můžeme použít pro gram s t r a c e : # strace - o ouputfi 1 e program Pak vyhledáme n a výstupu volání o p e n ( ) : # g r e p o p e n o u tp u t f i 7 e I g r e p E N O E N T o p e n ( " / e t c / l d . s o . p r e 1 0a d " . O_RDO N LY ) ( N o s u c h f i l e o r d i r e c t o ry )
- 1 ENOENT
3 53
3 54
'4-fi'l'j
Kapitola 20
o p e n C " / u s r / s h a r e / l o c a l e / C / l i b d s t . c a t " , O_RDO N L Y ) C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / L C_M E S SAG E S / l i bd s t . c a t " C N o su c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / l i b d s t . c a t " , O_RDO N L Y ) C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / LC_M E S SAG E S / l i bd s t . c a t " , C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / l i b i s c . c a t " , O_RDO N LY ) C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / LC_M E S S A G E S / l i b i s c . c a t " , C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / l i b i s c . c a t " , O_RDO N L Y ) C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / L C_M E S S AG E S / l i b i s c . c a t " , C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / l i bd n s . c a t " , O_R DO N L Y ) C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / L C_M E S S A G E S / l i b d n s . c a t " , C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / l i bd n s . c a t " , O_RDO N L Y ) C N o s u c h f i l e D r d i r e c t o ry ) o p e n C " / u s r / s h a r e / l o c a l e / C / LC_M E S S A G E S / l i b d n s . c a t " , C N o s u c h f i l e D r d i r e c t o ry )
-
-
-
-
-
-
- 1 ENOENT , O_ROO N L Y )
- 1 ENOENT
- 1 ENOENT O_RDO N L Y )
- 1 ENOENT
- 1 ENOENT O RDON LY )
- 1 ENOENT
- 1 ENOENT O R DO N L Y )
- 1 ENOENT
- 1 ENOENT O RDON LY )
- 1 ENOENT
- 1 E N O E NT O_RDO N L Y )
- 1 ENOENT
POZNÁMKA Některé programy otevíraj í různé verze konfi g u račních souborů, než na leznou tu sprá vnou. Alternativně můžeme s t r a c e připojit k běžícímu procesu, abychom zjistili, co zkouší pro vést. Chceme-li například vědět, co právě dělá démon m a s t e r , zkusíme zadat: # ps a uxwww l g r e p ma s t e r root 9004 0 . 0 0 . 3 3452 940 ? S 07 : 49 # s t r a c e - p 9004 Process 9004 a t t a c hed - i n ter rupt to q u i t sel ect C 7 6 , [ 1 0 I I 1 2 1 5 1 7 18 2 1 23 24 26 4 4 4 5 4 7 4 8 5 0 5 1 5 3 54 5 6 5 7 5 9 6 0 6 2 6 3 I I 12 15 17 18 21 23 24 26 27 29 30 32 33 5 1 53 54 56 5 7 59 60 6 2 63 6 5 6 6 68 69 II < u n f i n i s h ed . . . > Process 9004 detac hed
0 : 0 0 / u s r / l i b / p o s t f i x / ma s t e r 27 65 35 72
29 66 36 74
3 0 3 2 3 3 3 5 3 6 38 3 9 4 1 4 2 68 69 71 7 2 74 7 5 ] , [ ] , [ 1 0 3 8 3 9 4 1 4 2 4 4 45 47 4 8 50 7 5 ] , 1 22 , 790000 1
Omezení v uzavřeném prostoru Skripty, jejichž pomocí nastavíme v e zdrojové distribuci Postfixu uzavřený prostor (jsou v e x a m p l e s / c h r o o t - s c r i p t s), si rovněž mohou vyžádat přítomnost některých systémo vých souborů v uzavřeném prostoru (například soubory související s časovými pásmy, které potřebuje knihovna C). Zde je jejich přehled:
DNS Knihovny C potřebují některé soubory pro korektní implementaci rozlišování jmen, například v Linuxu je to / e t c / r e s o l v . c o n f , / e t c / n s s w i t c h . c o n f a / e t c / h o s t s . Mu sí být v uzavřeném prostoru a pomocné skripty je tam zkopírují.
Provozová n í Postfixu v uzavřeném prostoru
'4-fi'lC'
Nastavení času Zjistíme-li, že postfixoví démoni zapisují do žurnálu se špatnými časovými údaji, je třeba do uzavřeného prostoru zkopírovat informace o časovém pásmu ( l e t c / l o c a 1 t i me).
Sockety Postfix a s a s l a u t h d zkonfigurujeme pro práci v uzavřeném prostoru velmi snadno. Stačí je zkonfigurovat s různými cestami k socketu démona s a s l a u t h d . V uzavřeném prostoru Postfixu (obvykle l v a r I s p o o 1 I p o s t f i x ) nejdříve musíme vytvořit všechny požadované podadresáře : # # # # #
mkdi r mkdi r m kd i r c hmod chgrp
I v a r l s po o l / p o s t f i x / v a r Ivarl spool /postfi x/var/ run I v a r l s pool / postfi x / v a r / run / s a s l a uthd 7 7 0 I v a r l s p o o l / po s t f i x / v a r / r u n / s a s l a u t h d postfi x I v a r l spool /postfi x / v a r / r u n / s a s l a uthd
Potom přidáme d o souboru l u s r / l i b / s a s l / s m t p d . c o n f parametr s a s l a u t h d_p a t h , kte rý démonu s m t p d v uzavřeném prostoru říká, kde má hledat socket. Cestu vedoucí do uzavřeného prostoru odstraníme (zrušíme l v a rl s p o o 1 I p o s t f i x) a jako hodnotu zadáme cestu r u n_pa t h včetně jména socketu ( m u x ) :
s a s l a u t h d_pa t h : I v a r / r u n / s a s l a u t h d / m u x Nakonec spustíme s a s 1 a u t h d s volbou - m, která definuje, kde m á socket vytvořit. Zadá me celou cestu z pohledu mimo uzavřený prostor:
# l u s r l s b i n / s a s l a u t h d - m I v a r l s p o o l / p o s t f i x / v a r / r u n / s a s l a u t h d - a s h a d ow Obě aplikace budou pro komunikaci používat tentýž socket, i když Postfix běží v uza vřeném prostoru .
3 55
ČÁST IV v
,
LADENI POSTFIXU V této části knihy nabízíme rady, jak můžeme zvýšit výkonnost serveru . Začneme běž nými úpravami, například použitím paměťového DNS nebo jak zabránit otevřenému spojení, a dostaneme se až k pokročilým koncepcím, které souvisejí s vracením ne doručitelných zpráv a jednoúčelovým přenosem. Naučíme se používat černé listiny, aby chom omezili přísun zpráv, a za zmínku stojí i experimentální omezování rychlosti přenosu Postfixu ve verzi 2 . 1 .
Paralelní zpracování vzdálených klientů a omezení rychlosti zadávání požadavků v kapitole 2 1 se seznámíme s novou funkcí, kterou můžeme omezit rychlost klient
ských spojení. Jde o opatření směřující k ochraně Postfixu proti klientům SMTP , kte ří zahlcují démona smtp přemírou současných spojení.
Ladění výkonu Postfix je sice rychlý, avšak někdy jej můžeme naladit ještě na vyšší výkon. Inspiraci nalezneme v kapitole 2 2 .
KAPIT OLA 2 1
PARALELN í ZPRACOVÁN í VZDALENYCH KLI ENTU A O M EZEN í RYCH LOSTI ZADAVAN I POZADAVKU "
,
o
"
V
o
v Postfixu 2 . 1 a 2 . 2 je implementováno paralelní zpracování vzdálených klientů a ome zení rych losti . Omezení rychlosti je opatření, jež slouží k ochraně proti klientům SMTP , kteří zahlcují démona s m t p d přemírou současných spojení. V této kapitole si ukážeme některé případy, kdy je potřeba snížit rychlost, a konfigurace, j imiž toto opatření může me realizovat.
Základy omezování rych losti Dokonce i velmi dobře na laděný Postfix je schopen v určitém okamžiku zpracovávat pouze konečné množství poštovního provozu . Kapacita serveru závisí na takových pa rametrech , jako je přenosová rychlost disků, rychlost základní jednotky nebo rychlost an tivirových programů napojených na Postfix . Před verzí Postfixu 2 . 1 mohl klient využívat všechny procesy s m t p d na serveru , čímž blokoval jiné klienty, kteří se pokoušeli doručit poštu . Ha rdwarová omezení, klient "požírající" spojení a složité konfigu race jsou dostatečnými důvody k omezení počtu příchozích zpráv. Existují však i jiné situace , kdy omezení rych losti brání zpomalování nebo jinak zmenšuje škodlivé účinky, k nimž by mohlo doj ít.
Viry a červi Nové viry a červi , kteří se šíří po síti, se rozmnožují tak rychle, jak jim to dovolíme. Omezením rychlosti zpomalíme šíření infikovaného softwaru .
Poštovní bomby Poštovní bomby jsou velké souvislé průlomy zpráv, obvykle odeslané z jednoho systému . Často jde o zlý úmysl, avšak mohou vzniknout i v důsledku nehody. (Na příklad jsme viděli antivi rový program, který s každou zprávou posílal infikovaný soubor. Když se něco takového přihodí ve skrz naskrz infikovaném systému , poš tovní server může být zaplaven více než stovkou zpráv za mi nutu . )
360
'4-hiit'
Ka pitol a 2 1
Splašení klienti (runaway clients) výraz "splašený klient" je zobecnění zahrnující jak viry a červy, tak i poštovní bom by; crznačujeme jím takové klienty, kteří se vymkli jakékoli kontrole a posílají sou vislý proud zpráv do jiných systémů. Klient to ovšem nemusí dělat úmyslně - chyba může být v programu nebo v konfiguraci.
Spam z otevřených proxy serverů Otevřené proxy servery jsou mezi spamery velmi oblíbené a slouží jim jako zástěrka původu jejich zpráv. Omezíme-li rychlost odesílání zpráv z otevřeného proxy serve ru , Postfix odmítá příchozí zprávy z tohoto proxy serveru s dočasným chybovým kó dem. Vzhledem k tomu , že tento proxy server nemá svůj vlastní mechanismus front, nepokouší se doručovat zprávy opakovaně, čímž značně snížíme přísun spamů do systému . Abychom mohli uplatnit omezení rychlosti, musíme si vytvářet nějaké statistiky a podle nich nastavovat parametry, které ovlivňují počty sériových a paralelních spojení, jež mo hou klienti uskutečnit prostřednictvím démona s m t p d . Tímto tématem se budeme zabý vat v další části.
Vytvářeni statistik Než začneme omezovat klientská spojení, musíme vědět, kteří klienti se připojují a ko lik sériových a paralelních spojení zahájí v průběhu normální operace . Ke sledování kli entů slouží démon a n v i 1 . Vytváří statistiky a zaznamenává maximální počty spojení a rychlosti.
POZNÁMKA Zaznamenává n í statist i k klientských spojení je užitečné i z j i ných d ůvod ů než kvů l i ome zová n í rychlosti . M ůžeme tyto i nformace načítat i do žurná l n ích programů. jež slouží k a ktual izaci pravidel pro blokaci splašených klientů ve fi rewa l l ech. Omezová n í rych losti je v Postfixu poměrně nové opatře n í; při psa n í této k n i hy nebyly známy žádné pro g ramy s podobnou fun kci.
Spuštění démona anvil Podobně jako jiní démoni je i a n v i 1 řízen démonem ma s t e r . I když je aktivován impli citně, měli bychom zkontrolovat, zda není v souboru ma s t e r . c f označen konfigurační řádek démona a n v i 1 jako komentář:
# ======================================================================== # s e r v i c e t y p e p r i v a t e u n p r i v c h r o o t w a k e u p m a x p r o c c omma n d + a r g s # (yes ) (yes ) ( yes ) ( never ) ( 1 00 ) # ======================================================================== anvi l n un i x anvi 1 Démon anvil se spouští volitelně. Sebraná data zapisuje do žurnálního souboru v pevných intervalech, zápisy v žurnálu vypadají takto:
O e c 2 0 0 1 : 1 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 l : s t a t i s t i c s : m a x c o n n e c t i o n c o u n t 4 f o r ( 1 0 . 0 . 0 . 1 : s mt p : 2 1 6 . 1 2 9 . 1 6 5 . 1 9 0 ) a t D e c 2 0 0 1 : 1 8 : 3 5 D e c 2 0 0 1 : 2 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : m a x c o n n e c t i o n r a t e 9 / 60s for ( 1 0 . 0 . 0 . 1 : smtp : 62 . 243 . 7 2 . 1 9 ) a t D e c 20 0 1 : 22 : 1 1 Dec 2 0 0 1 : 29 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : max c o n n ec t i on c o u n t 2
Pa ra l e l n í zpracová n í vzd á l ených k l ientů a omezení. . . for ( 1 0 . 0 . 0 . 1 : smtp : 6 2 . 243 . 7 2 . 1 9 ) a t Dec 20 0 1 : 2 2 : 09 D e c 2 0 0 1 : 3 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 1 1 J : s t a t i s t i c s : m a x c o n n e c t i o n 6 0 s f o r ( 1 0 . 0 . 0 . 1 : s mt p : 1 4 6 . 8 2 . 1 3 8 . 6 ) a t D e c 2 0 0 1 : 3 7 : 0 4 Dec 2 0 0 1 : 49 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : max c o n n e c t i on 6 0 s f o r ( 1 0 . 0 . 0 . 1 : s mt p : 2 1 8 . 1 8 . 3 2 . 2 4 8 ) a t D e c 2 0 0 1 : 4 6 : 3 5 Dec 20 0 1 : 49 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : max c o n n e c t i on f o r ( 1 0 . 0 . 0 . 1 : s mt p : 2 1 8 . 1 8 . 3 2 . 2 4 8 ) a t D e c 2 0 0 1 : 4 6 : 3 5 D e c 2 0 0 1 : 5 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : m a x c o n n e c t i o n 6 0 s f o r ( 1 0 . 0 . 0 . 1 : s mt p : 1 4 6 . 8 2 . 1 3 8 . 6 ) a t D e c 2 0 0 1 : 5 0 : 5 8 D e c 2 0 0 1 : 5 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : m a x c o n n e c t i o n f o r ( 1 0 . 0 . 0 . 1 : s mt p : 1 7 1 . 6 7 . 1 6 . 1 1 7 ) a t D e c 2 0 0 1 : 5 5 : 3 3 D e c 2 0 0 2 : 0 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : m a x c o n n e c t i o n 6 0 s f o r ( 1 0 . 0 . 0 . 1 : s mt p : 2 1 6 . 1 3 6 . 2 0 4 . 1 1 9 ) a t D e c 2 0 0 2 : 0 3 : 3 8 D e c 2 0 0 2 : 1 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : m a x c o n n e c t i o n 6 0 s f o r ( 1 0 . 0 . 0 . 1 : s mt p : 6 3 . 1 6 1 . 4 2 . 5 1 ) a t D e c 2 0 0 2 : 0 9 : 2 9 Dec 20 0 2 : 1 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : max c o n n e c t i on f o r ( 1 0 . 0 . 0 . 1 : s mt p : 1 3 0 . 1 4 9 . 1 7 . 1 3 ) a t D e c 2 0 0 2 : 1 1 : 5 2
361
rate 31 rate 21 count 2 rate 31 count 2 rate 21 rate 21 count 2
Změna intervalu zapisování do žurnálu Implicitně zapisuje a n v i 1 statistická hlášení do žurnálu každých deset minut anebo při ukončení činnosti (když například opětovně zavádíme Postfix anebo když se démon sám ukončí na základě uplynutí doby stanovené v parametru m a x_ i d l e). Interval prodlouží me nebo zkrátíme pomocí parametru c l i e n t_c o n n e c t i on_s t a t u s_u pd a t e_t i me v sou boru m a i n . c f :
Změna vejde v platnost p o novém zavedení Postfixu .
POZNÁMKA I nterva l nastavený v tomto para m etru je sám o sobě diagnostickým nástrojem, který ne ovl ivňuje j i nou činnost démona a n v i 1 . Zkráce n í i nterva l u nezpůsobí, že by démon a n v i 1 sbíra l data do statistik častěj i; postfixové programy získávaj í data od tohoto démona na základě meziprocesové kom u n i kace a neberou je ze žurná l n ích souborů .
Omezení četnosti klientských spojení Implicitně Postfix nestanoví počet p o sobě jdoucích spojení, která klient může uskuteč nit. Pokud nic nezměníme, klient se může připojovat a odpojovat, kolikrát se mu zlíbí, i když tím nutí démona smtpd k plýtvání drahocennými prostředky jako vyhledávání DNS, navazování spojení TLS atd. Aby mohl Postfix nastavit limit četnosti spojení, musí spočítat všechna spojení v určitém časovém intervalu. Tento interval nazýváme časovou jednotkou rychlosti a definujeme ji pomocí parametru c l i e n Lc o n n e c t i o n _ r a t e_t i me_u n i t . Implicitní hodnota tohoto pa rametru je jedna minuta (60 vteřin).
Nyní můžeme pomocí parametru s m t pd_c l i e n t_c o n n e c t i o n_r a t e_l i mi t nastavit jedno mu klientovi limit počtu spojení v průběhu jedné časové jednotky. Následující nastavení
362
'a'fi'it'
Kapitola 2 1
a implicitní hodnota časové jednotky shora povolují klientovi maximálně třicet připojení za minutu :
Test limitu četnosti Jednoduše otestujeme limit četnosti tak, že nastavíme určitou hodnotu a po několika dnech si prohlédneme žurnální soubor. V důsledku případného nesprávného nastavení bychom o žádnou zprávu neměli přijít, neboť Postfix odmítne zprávy těch, kdo překro čí limit, s indikací dočasné chyby. Správně zkonfigurovaný klient se pokusí zprávy do ručit opakovaně; například Postfix se o to pokouší implicitně pět dní (viz parametr m a x i ma l _Q u e u e_l i f e t i me ) . Pokud bychom chtěli uskutečnit rychlý test, můžeme zkusit toto: 1.
Pomocí nějakého programu (například s m t p - s o u r c e ) vygenerujeme mnoho zpráv.
2.
Pošleme je z IP adresy, na niž se vztahuje omezení četnosti.
POZNÁMKA V průběhu tohoto testu také m uzeme s n ížit hodnotu parametru cl i e n t_c o n n e c t i on_s t a t u s_upd a t e_t i me na jednu m i n utu, a bychom dostáva l i statistické údaje častěj i . Abychom mohli test provést, musíme nastavit soubor ma i n . c f , j a k následuje, a potom znovu zavést konfiguraci serveru :
s m t pd_c l i e n t_e v e n t_l i m i t_e x c e p t i o n s = ., c l i e n t c o n n e c t i o n r a t e t i me u n i t = 6 0 s s m t pd_� l i e n t_c o n n � c t i o �_r a t �_l i m i t = l � c l i e n t_c o n n e c t i o n _s t a t u s_ u p d a t e_t i me = l m � o Nastavení tohoto parametru na prázdnou hodnotu říká, že všichni klienti jsou před mětem omezení četnosti; toto nastavení by mělo platit pouze pro testování. 49 Limit je nastaven na nízkou hodnotu pouze pro účely testování. Poštovní server, kte rý by povoloval pouze jedno spojení za minutu , by byl k ničemu . • Dle tohoto nastavení se generuje zápis statistiky do žurnálu každou minutu , takže ne musíme na každý zápis čekat deset minut. Opět pouze pro účely testování.
Nyní musíme vygenerovat dostatečné množství zpráv, abychom aktivovali omezovací me chanismus. Provedeme to příkazem s mt p - s o u r c e , který zadáme postfixovému serveru :
$ smt p - s ou rce -m 1 0 - f s e n d e r@examp l e . c om - t rec i p i ent@exampl e . com 1 2 7 . 0 . 0 . 1 : 2 5
POZNÁMKA Není- I i příkaz smtp-sou rce součástí naší d i stribuce, najdeme jej ve zd rojových sou borech Postfixu. Předchozím příkazem pošleme testovací zprávu z adresy s e n d e r@e x a m p l e . c om na adresu r e c i p i e n t@e x a m p l e . c o m přes server SMTP na 1 27.0.0. 1 (lokální počítač). Vzhledem k to mu, že jsme nastavili klientům limit na 60 vteřin, tímto příkazem jej určitě překročíme.
Pa ra l e l n í zpracová n í vzd á l e ných k l i entů a omezen í. . .
'a,;jiU'
Program s m t p - s o u r c e vypíše tuto chybu :
s m t p - s o u r c e : f a t a l : b a d s t a r t u p : 4 5 0 T o o m a n y c o n n e c t i o n s f r om 1 2 7 . 0 . 0 . 1 Navíc v žurnálu uvidíme tato hlášení:
J a n 9 0 9 : 04 : 1 6 ma i l p o s t f i x / smtpd [ 2 6 5 3 0 l : c o n n e c t f r om l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 l J a n 9 09 : 04 : 1 6 ma i l p o s t f i x / smtpd [ 2 6 5 3 0 J : 1 2AA5 1 5 C 0 6 F : c l i e n t=l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J J a n 9 0 9 : 04 : 1 6 ma i l p o s t f i x / s mtpd [ 2 6 5 3 0 J : d i s c o n n e c t f r o m l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J J a n 9 09 : 04 : 1 6 ma i l p o s t f i x / s mtpd [ 2 6 5 3 0 J : c o n n e c t f r o m l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J J a n 9 09 : 04 : 1 7 ma i l p o s t f i x / smtpd [ 2 6 5 30 J : wa r n i n g : Too f r e q u e n t c o n n e c t i o n s : 2 f r o m 1 2 7 . 0 . 0 . 1 f o r s e r v i ce l oc a l h o s t : smtp Jan 9 09 : 04 : 1 7 m a i l p o s t f i x / smtpd [ 2 6 5 3 0 J : d i s c o n n e c t f r om l oc a l h o s t [ 1 2 7 . 0 . 0 . 1 J Uvedeme si ještě jeden příklad, v němž máme parametr s m t pd_c 1 i e n t_c o n n e c t i o n _ r a t e_l i m i t nastavený na 30. Postfix odmítl všechny klienty, kteří překročili nejvyšší po volenou četnost s kódem chyby 450, zrušil spojení a vydal varování se jménem klienta, adresou a jménem démona:
Dec 2 0 0 2 : 3 9 : 0 3 ma i l p o s t f i x / smtpd [ 1 84 3 1 J : wa r n i n g : T o o f r e q u e n t c o n n e c t i o n s : 3 1 f r om 8 1 . 1 9 9 . 6 . 44 f o r s e r v i ce 1 0 . 0 . 0 . 1 : s m t p ., D e c 20 0 2 : 3 9 : 04 ma i l p o s t f i x / s m t pd [ 1 7 84 0 J : wa r n i n g : T o o f r e q u e n t c o n n e c t i o n s : 3 2 f r om 8 1 . 1 9 9 . 6 . 44 f o r s e r v i ce 1 0 . 0 . 0 . 1 : s m t p D e c 2 0 0 2 : 3 9 : 04 ma i l p o s t f i x / s m t pd [ 1 7 8 7 8 J : wa r n i n g : T o o f r e q u e n t c o n n e c t i o n s : 33 f r om 8 1 . 1 9 9 . 6 . 4 4 f o r s e r v i ce 1 0 . 0 . 0 . 1 : s m t p D e c 2 0 0 2 : 3 9 : 1 5 ma i l p o s t f i x / s mtpd [ 1 84 4 0 J : wa r n i n g : T o o f r e q u e n t c o n n e c t i o n s : 6 5 f r o m 8 1 . 1 9 9 . 6 . 44 f o r s e r v i ce 1 0 . 0 . 0 . 1 : sm t p D e c 2 0 0 2 : 3 9 : 1 5 ma i l p o s t f i x / s mtpd [ 1 8 4 3 2 J : wa r n i n g : T o o f r e q u e n t c o n n e c t i o n s : 66 f r om 8 1 . 1 9 9 . 6 . 44 f o r s e r v i c e 1 0 . 0 . 0 . 1 : s m t p Dec 2 0 0 2 : 3 9 : 1 6 ma i l p o s t f i x / a n v i l [ 8 9 9 1 J : s t a t i s t i c s : m a x c o n n e c t i on r a t e 7 2 / 6 0 s f o r ( 1 0 . 0 . 0 . 1 : s mt p : 8 1 . 1 9 9 . 6 . 44 ) a t D e c 2 0 0 2 : 3 9 : 1 5 � o Klient, který běžel na 8 1 . 1 99.6.44, překročil hranici 30 spojení za minutu , což mělo za následek zápis varovného hlášení Too frequent connections do žurnálního souboru .
8Tento klient (81 . 199.6.44) dosáhl frekvence 72 spojení za minutu, jak je zřejmé z hlá šení démona a n v i 1 .
Omezení paralelních spojení Implicitně j e počet paralelních spojení pro jednoho klienta omezen n a polovinu impli citního limitu počtu procesů . Následkem toho se může stát, že dva klienti zaměstnají všechny procesy smtpd, které Postfix může provozovat. Počet paralelních spojení na kli enta stanoví parametr s m t p d_c l i e n t_c o n n e c t i o n _c o u n t_l i mi t. Pomocí následujícího příkazu v souboru main.cf omezíme klienta na 25 paralelních spojení:
363
364
'4-b'Uf
Kapitola 2 1
L i m it procesů v s m t p d nebo para m etr d e f a u l t_p r o c e s s_l i m i t by měl být podstatně vyš ší než s lll t p d_c 1 i e n t_c o n n e c t i o n _c o u n t_l i m i t; j i n a k by m o h l jeden kl ient spotřebovat všechny procesy smtpd, které jsou k d ispozici.
Test limitu paralelních spojení Podobně jako tomu bylo v případě limitů četnosti, nejlepším způsobem otestování limi tu paralelních spojení je limit nastavit a prohlédnout si žurnál po několika dnech. Pokud ovšem chceme provést okamžitý test, vygenerujeme pomocí příkazu s m t p - s o u r c e z IP adresy, na niž se vztahuje limit, větší počet paralelních spojení. V průběhu testování bychom pravděpodobně měli snížit parametr c l i e n t_c o n n e c t i o n _s t a t u s_u p d a t e_t i me na jednu minutu . Parametry omezující četnost spojení v soubo ru ma s t e r . c f nastavíme následovně (a znovu zavedeme konfiguraci) :
s m t pd_c l i e n t_c o n n e c t i o n_l i m i t_e x c e p t i o n s = ., c l i e n t c o n n e c t i o n r a t e t i me u n i t = 6 0 s s m t pd_� l i e n t_c o n n ; c t i o ;_c o u ; t_l i m i t = 1 � c l i e n t_c o n n e c t i o n _s t a t u s_ u p d a t e_t i me lm � =
o Pro účely testování se omezení vztahuje na všechny klienty . • Velice nízká hodnota, pouze pro testování. Poštovní server, který by jednomu klien tovi povoloval pouze jedno spojení za minutu , by byl k ničemu . • Dle tohoto nastavení se generuje zápis statistiky do žurnálu každou minutu , takže ne musíme na každý zápis čekat deset minut. Opět pouze pro účely testování.
Příkazem s m t p - s o u r c e můžeme otevřít několik paralelních spojení. Zkusíme jej zadat na příklad takto:
$ smtp - s o u r c e - s 10 -m 10 - f s e n d e r@ex a m p l e . com - t r e c i p i e n t@ex a m p l e . c o m 127 . 0 . 0 . 1 : 25 Volbou - m l O pošleme deset testovacích zpráv, volbou - s 1 0 zadáme deset paralelních sezení SMTP . Limit jedno spojení na klienta zcela jistě překročíme a s mt p - s o u r c e vypí še následující chybové hlášení:
s m t p - s o u r c e : f a t a l : b a d s t a r t u p : 4 5 0 T o o m a ny c o n n e c t i o n s f r o m 1 2 7 . 0 . 0 . 1 V žurnálu nalezneme přibližně takovýto záznam:
Jan 2 Jan Jan 2 Jan Jan 3 Jan Jan 4
9 0 9 : 1 4 : 1 5 ma i l p o s t f i x / s mt p d [ 2 8 4 3 8 J : wa r n i n g : T o o ma ny c o n n e c t i o n s : f r om 1 2 7 . 0 . 0 . 1 f o r s e r v i c e l o c a l h o s t : s m t p 9 0 9 : 1 4 : 1 5 ma i l p o s t f i x / s m t p d [ 2 8 4 3 8 J : d i s c o n n e c t f r om 1 0 c a l h o s t [ 1 2 7 . 0 . 0 . 1 J 9 0 9 : 1 4 : 1 5 ma i l p o s t f i x / s m t p d [ 2 8 4 3 7 J : wa r n i n g : T o o m a ny c o n n e c t i o n s : f r om 1 2 7 . 0 . 0 . 1 f o r s e r v i c e l o c a l h o s t : s m t p 9 0 9 : 1 4 : 1 5 m a i l p o s t f i x / s m t p d [ 2 8 4 3 7 J : d i s c o n n e c t f r om 1 0 c a l h o s t [ 1 2 7 . 0 . 0 . 1 J 9 0 9 : 1 4 : 1 5 m a i l p o s t f i x / s m t p d [ 2 8 4 3 9 J : wa r n i n g : T o o m a ny c o n n e c t i o n s : f r om 1 2 7 . 0 . 0 . 1 f o r s e r v i c e l o c a l h o s t : s m t p 9 0 9 : 1 4 : 1 5 ma i l p o s t f i x / s m t p d [ 2 8 4 3 9 J : d i s c o n n e c t f r o m 1 0 c a l h o s t [ 1 2 7 . 0 . 0 . 1 J 9 0 9 : 1 4 : 1 5 ma i l p o s t f i x / s m t p d [ 2 8 4 4 0 J : wa r n i n g : T o o m a n y c o n n e c t i o n s : f r om 1 2 7 . 0 . 0 . 1 f o r s e r v i c e l o c a l h o s t : s m t p
Pa ra l e l n í zpracová n í vzd á l ených kl ientů a omezen í. . . Jan
';'h"i
9 0 9 : 1 4 : 1 5 ma i l p o s t f i x / s m t p d [ 2 8 4 4 0 J : d i s c o n n e c t f r o m l o c a l h o s t [ 1 2 7 . 0 . 0 . 1 J Následujícímu hlášení v žurnálním souboru odpovídá nastavení parametru s m t p d_c l i · e n t_c o n n e c t i on_c o u n t_l i m i t na hodnotu 2 5 . Podobně jako v případě limitu četnosti, Postfix pošle klientovi, který chtěl ustavit příliš mnoho spojení, stavový kód 450, odpojí se a vypíše varování s klientovým jménem a adresou :
Dec 26 Dec 27
3 0 9 : 1 2 : 5 3 ma i l p o s t f i x / s m t p d [ 1 9 88 3 J : wa r n i n g : T o o m a n y c o n n e c t i o n s : f r om 2 1 3 . 1 6 5 . 6 4 . 1 6 5 f o r s e r v i c e 1 0 . 0 . 0 . 1 : s m t p 4) 3 0 9 : 1 2 : 5 3 ma i l p o s t f i x / s m t p d [ 1 9 884 J : wa r n i n g : T o o ma ny c o n n e c t i o n s : f r om 2 1 3 . 1 6 5 . 6 4 . 1 6 5 f o r s e r v i c e 1 0 . 0 . 0 . 1 : s m t p
D e c 3 0 9 : 1 3 : 1 5 m a i l p o s t f i x / s m t p d [ 1 9 8 9 4 J : wa r n i n g : T o o m a n y c o n n e c t i o n s : 3 5 f r om 2 1 3 . 1 6 5 . 6 4 . 1 6 5 f o r s e r v i c e 1 0 . 0 . 0 . 1 : s m t p Dec 3 09 : 1 6 : 4 7 ma i l p o s t f i x / a n v i l [ 7 9 5 8 J : s t a t i s t i c s : max c o n n e c t i on c o u n t 3 7 f o r ( 1 0 . 0 . 0 . 1 : s mt p : 2 1 3 . 1 6 5 . 6 4 . 1 6 5 ) a t D e c 3 0 9 : 1 2 : 3 � o IP adresa 2 1 3 . 165.64 . 165 překročila limit 25 spojení, do žurnálu se zapíše varovné hlá šení Too many connections. 8 IP adresa 2 1 3 . 1 65.64 . 165 nastavila záznam s 37 spojeními směrovanými na s m t p d .
Vynětí klienta z limitu Parametrem s m t p d_c 1 i e n t_c o n n e c t i on_l i m i Lex c e p t i ons můžeme autorizovaný počí tač a síť vyjmout z klientského omezení popsaného v této kapitole. Zápis obsahuje vý raz typu síť/maska, jméno počítače nebo jméno domény. Implicitně Postfix poskytuje výjimku všem počítačům v síti dané parametrem myn e t wo r k s . Informace o restriktivnějším nastavení nalezneme v souborech s a m p l e - s m t p d . c f , smtpd ( 8 ) a a n v i 1 ( 8 ) . V následujícím příkladu povolíme počítačům v $ my n e t wo r k s , podsíti 1 0 . 4 5 . 2 0 7 . 0 / 2 4 a doméně e x a m p 1 e . c om neomezený počet a četnost připojení:
s m t pd_c l i e n t_c o n n e c t i o n_l i m i t_e x c e p t i o n s $ my n e t w o r k s , 1 0 . 4 5 . 207 . 0 / 24 , . e x a mp l e . c o m
365
KAPITOLA 22 v
,
,
LADENI VYKONU Postfix je velice rychlý systém, avšak podobně jako i jiné balíky jej lze naladit ještě na větší výkon. Existují ovšem situace, kdy nedosahuje takového výkonu, jaký bychom si představovali, ať už z hardwarových nebo softwarových důvodů nebo vinou jiných ne příznivých podmínek, například kvůli množství spamů nebo nedoručitelné pošty. V této kapitole si ukážeme, jak hledat nejčastější příčiny sníženého výkonu systému Post fix, a provedeme jejich analýzu .
Základní úkony Nejdříve s e seznámíme s několika jednoduchými triky, které ovšem nemusí být zcela sa mozřejmé. Na předložené náměty je nutno pohlížet jako na seznam možných řešení jed noduchých problémů , resp. jejich prevence. Nejdůležitější zásadou ovšem je, že mnoho problémů s výkonem systému je způsobeno špatným nastavením, a to například v kon figuračním souboru / e t c / r e s o 1 v . c o n f . Pořadí, v němž jsou následující témata uvedena, nemá žádný zvláštní význam a jsou všechna stejně důležitá .
Zrychlení vyhledávání DNS Postfix generuje značné množství dotazl! DNS, neboť protokol SMTP vyžaduje vyhledá vání záznamů typu MX i A. Navíc, mnohá omezení v Postfixu využívají hledání DNS kvů li ověřování jména klienta nebo kvůli prohledávání černých listin . Vyhledávání DNS je tedy kritickým místem serveru , a to zejména při velkém zatížení.
Test vyhledávání DNS Nejčastějším problémem s vyhledáváním DNS je příliš dlouhá doba odezvy. Detailní in formace o průběhu vyhledávání můžeme získat pomocí příkazu d i g :
$ d i g www . e x a mp l e . c om ; « » D i G 9 . 2 . 3 r c 4 « » www . e x a m p l e . c o m g l o b a l o p t i o n s : p r i n t cmd G o t a n s we r : - » H E A D E R « - o p c o d e : Q U E RY , s t a t u s : N O E R RO R , i d : 4 8 1 3 6 f l a g s : q r rd r a ; Q U E R Y : 1 , A N S W E R : 1 , A U T H O R I T Y : O , A D D I T I O N A L : O QUEST ION SECT I ON :
; www . e x a m p l e . c o m .
IN
A
; ; A N SW E R S E CT I ON :
www . e x a m p l e . c om . ; ;
1 7 2800 IN A Ouery t i me : 1 74 msec S E RV E R : 1 2 7 . 0 . 0 . 1 #5 3 ( 1 2 7 . 0 . 0 . 1 )
1 92 . 0 . 34 . 1 6 6
368
'4-h'!M
Ka p itol a 2 2
WHEN : Mon Oct 6 09 : 40 : 52 2003 MSG S l Z E rcvd : 49 V tomto 'případě trvalo hledání 1 74 milisekund. Nyní spustíme totéž vyhledávání ještě jednou :
$ d i g www . exampl e . com ; « » D i G 9 . 2 . 3 r c 4 « » www . e x a m p l e . c o m g l o b a l o p t i o n s : p r i n t cmd G o t a n s we r : - » H E A D E R « - o p c o d e : Q U E RY . s t a t u s : N O E R RO R . i d : 6 3 9 8 f l a g s : q r r d r a ; Q U E RY : 1 . A N S W E R : 1 . A U T H O R I T Y : O . A D D I T l O N A L : O Q U E ST l O N S E CT l ON : ; www . e x a m p l e . c om . IN A ; ; ANSW E R S E CT l ON : www . e x a m p l e . c o m . 1 7 2 7 6 5 IN A 1 9 2 . 0 . 34 . 1 6 6 • •
Ouery t i me : 1 8 ms e c
S E RV E R : 1 2 7 . 0 . 0 . 1#53 ( 1 2 7 . 0 . 0 . 1 ) WHEN : Mon Oct 6 09 : 4 1 : 2 7 2003 MSG S l Z E rcvd : 49 Toto hledání u ž trvalo pouze 1 8 milisekund, bylo tedy přibližně desetkrát rychlejší. Dů vodem, proč druhý dotaz proběhl tak rychle, je skutečnost, že tento počítač používá pa měťový DNS server. Trvá-li vyhledávání podstatně déle (nebo skončí-li dokonce vypršením časového limitu), máme problém se službou DNS. Může to mít několik příčin:
Nastavení r e s o l v . c o n f Běží-li Postfix v u zavřeném prostoru , mohli jsme sice změnit soubor l e t c / r e s o l v . c o n f , avšak možná jsme zapomněli jej pak zkopírovat do uzavřeného prostoru (obvykle I v a r I s p o o 1 I p o s t f i x l e t c I r e s o 1 v . c o n f ) . Jmenné servery uvedené v l e t c / r e s o l v . c o n f mohou být pomalé nebo službu vůbec ne poskytují. Je třeba si pomocí příkazu d i 9 ověřit, zda všechny servery uvedené v soubo ru l e t c / r e s o l v . c o n f odpovídají na dotazy DNS s rozumnou dobou odezvy.
Problémy se sítí Možná nefunguje připojení k Internetu tak, jak by mělo, nebo je přetížené. V tako vém případě je nutno uvažovat o rychlejším připojení anebo přiřadit dotazům na jmenné servery vyšší prioritu .
Nastavení firewallu Pakety služby nameserver přenášené z poštovního serveru a na něj může blokovat i firewall.
Chybně fungující paměťový jmenný server Provozujeme-li paměťový jmenný server lokálně, musíme se přesvědčit, zda správně funguje rozšíření paměti.
Ladění výkon u
'4-a'd'
Zvýšení výkonu služby D N S Pokud jsou soubor / e t c / r e s o 1 v . c o n f , síť i firewall v pořádku , a přesto potřebujeme zvý šit výkon DNS, měli bychom uvažovat o rozšíření serveru nebo sítě o paměťový server, například djbdns, dnscache nebo B1ND. Paměťový server podstatně zrychlí proces vy hledávání a současně sníží vytížení sítě, neboť při opakovaném hledání se nevytvářejí od chozí pakety.
Není server veden v seznamu otevřených předávání? Provozujeme-li otevřené předávání, můžeme s jistotou očekávat, ž e mnoho serverů bu de odmítat veškerou naši poštu . Navíc, spameři začnou takový systém brzy využívat, čímž zvýší jeho zátěž, neboť systém bude obsluhovat nejen vlastní uživatele, nýbrž i ty, kteří jej zneužívají. Takový systém poté, co se potvrdí otevřený přenos, zcela určitě skončí na černé listině. A dostat se z ní si vyžádá nadlidské úsilí, které může trvat dny i týdny. Je tedy zcela nut né zajistit, aby systém nevytvářel otevřené předávání nebo otevřené proxy. Svoji IP adresu zkusíme vyhledat v h t t p : / / o p e n r b l . o r g , a pokud tam jsme uvedeni, je nutno otevřené předávání okamžitě zrušit. Předávání povolíme uživatelům, pouze splňují-li ně kterou z těchto podmínek: •
Klient uživatele je uveden v parametru my n e two r k s .
•
Klient uživatele provedl úspěšnou autentizaci podle protokolu SMTP .
•
Klient uživatele provedl úspěšnou autentizaci na základě klientského certifikátu TLS .
Odmítání zpráv od neexistujících uživatelů Velmi dobrým opatřením j e odmítání zpráv pro neexistující příjemce. Pokud by Postfix takové zprávy přijímal, museli bychom na adresu odesilatele posílat oznámení o tom, že zpráva nebyla doručena. V případě spamu nebo viru tato adresa téměř určitě není správ ná. Oznámení pak během několika dní zcela zahltí příslušné fronty. Přijímání zpráv pro neexistující uživatele samo o sobě není tak velkým problémem jako spíše jejich ukládání do míst, která se mohou přeplnit, anebo, pokud provozujeme pře dávací systém (viz kapitola 13), konečné místo určení takové zprávy ji může vrátit ode silateli obálky (dle návratové cesty v hlavičce). Může se navíc ukázat, že toto vrácení je samo nedoručitelné, neboť doména uvedená jako doména odesilatele pravděpodobně nebude přijímat vůbec žádnou poštu . V každém případě může způsobit toto vracení zpráv ve frontách veliký zmatek anebo bude pošta odkládána do schránky specifikované parametrem 2 b o u n c e_ r e c i pi e n t (což může být účet správce pošty). Zjistíme-li něco takového, může nastat tento problém:
$ ma i l q - S i z e - - A r r i v a l T i me - - - - - - S e n d e r / Re c i p i e n t - - - - - - - Queue 1 0 1 0 6 5 8 M o n J a n 1 2 1 4 : 3 8 : 3 0 MA I L E R - D A E M O N 63BE9CF331 ( c o n n e c t t o ma i 1 3 . q u i c k s p r e s s . c om [ 6 3 . 89 . 1 1 3 . 1 9 8 J : C o n n e c t i on t i med o u t ) p l a t i n u m@q u i c k s p r e s s . c o m lC932CF30E 3 7 5 3 S a t J a n 1 0 1 6 : 1 6 : 3 8 MA I L E R - DA E M O N ( c o n n e c t t o mx . u n r e a l d e a l s . b i z [ 6 9 . 5 . 6 9 . 1 1 0 J : C o n n e c t i o n r e f u s e d ) E n t r e p r e n e u r C a r e e r s@u n r e a l d e a l s . b i z
369
370
'i-fiiiP
Ka pitola 22
5 5 0 5 S a t J a n 1 0 2 0 : 2 5 : 0 6 MA I L E R - DA E M O N 98EC3CF3F9 ( c o n n e c t t o f h w e b8 . i f o l l ow u p . c om [ 2 1 6 . 1 7 1 . 1 9 3 . 3 8 J : C o n n e c t i o n r e f u s e d ) r o o t@f h w e b 8 . i f o l l ow u p . c o m 50B14CF3 1 E 5 1 9 6 M o n J a n 1 2 1 1 : 3 5 : 1 1 MA I L E R - DA E M O N ( c o n n e c t t o ma i l . r e f i l l a d v i c e . n e t [ 2 1 8 . 1 5 . 1 9 2 . 1 6 6 J : C o n n e c t i o n t i med o u t ) c l i n t o n c o p e l a n d@r e f i l l a d v i c e . n e t F4009CF39D 5 4 5 2 S u n J a n I I 0 1 : 5 8 : 2 7 MA I L E R - DA E M O N ( c o n n e c t t o f h w e b 9 . i f o l l ow u p . c om [ 2 1 6 . 1 7 1 . 1 9 3 . 3 9 J : C o n n e c t i o n r e f u s e d ) r o o t@f h w e b 9 . i f o l l ow u p . c o m - - 3 0 K by t e s i n 5 Re q u e s t s . Zde vidíme pět zpráv, které byly vráceny původnímu odesilateli (odesilatelem je MAILER_DAEMON), avšak v každém případě je poštovní server příjemce nedostupný. Abychom zprávy pro neexistujícího příjemce odmítali, nastavíme parametry 1 o c a l _ r e c i p i e n t_ma p s a r e l a y- r e c i p i e n t_ma p s (druhý z nich pouze v případě, že provozujeme bránu, která pouze předává poštu interním poštovním serverům) na mapy obsahující platné příjemce. Vymkne-li se vracení skutečně z rukou , můžeme pro účely odmítání použít i černou lis tinu ve tvaru RHSBL (viz kapitola 8), abychom odmítali poštu ze serverů , které vůbec ne přijímají vracení pošty (neboť všechny zprávy, které se mají vrátit, zůstávají ve frontách několik dnO. Takovou černou listinu najdeme například na stránkách RFC-IgnoranLOrg ( h t t p : / / r f c - i g n o r a n t . o r g) a můžeme ji použít takto:
c h e c k_r h s b l _s e n d e r d s n . r f c - i g n o r a n t . o r g
Blokování zpráv ze sítí uvedených na černých listinách Existuje mnoho různých druhů blokovacích listin a černých listin DNS, které obsahují in dividuální IP adresy, celé oblasti IP, a dokonce i domény odesilatelů uvedené zde z nej různějších důvodů. Pro každý způsob nesprávného chování existuje alespoň jeden seznam. Nejužitečnějšími z těchto seznamů jsou otevřené přenosy a otevřené proxy, neboť ty mo hou být testovány objektivním způsobem automaticky. Zde jsou některé černé listiny: •
rel ays . ordb . org
•
l i s t . d s b l . o rg
•
cbl . a b u s ea t . org
•
dul . dnsbl . sorbs . net
POZNÁMKA M á l o věcí se mění rych l ej i než černé l isti ny. Dnešn í horká černá l istina m ůže být zítra m i n u l ostí. U černých listin je malá pravděpodobnost omylu, neboť pro zařazování adres do těchto listin existují jasná kritéria. Provozování otevřeného přenosu nebo otevřeného proxy je obecně vzato nesprávné, takže černé listiny vyvíjejí trvalý tlak na správce takových systé mů (kteří ovšem mohou být nekvalifikovaní nebo prostě nepořádnO .
ladění výkon u
'éfiue'
Odmítání zpráv z neznámých domén odesilatele Zprávy s adresou odesilatele vadné domény bychom pokud možno neměli přijímat. Na stane-li problém s doručením zprávy, hlášení chyby jde vždy zpět k odesilateli, a pokud ta obsahuje neexistující doménu, hlášení není komu poslat. Postfix se pokusí odeslat chybové hlášení, zjistí, že je nedoručitelné a pak (protože ode silatel obálky je prázdný, nelze ji vrátit) ho pošle na 2 b o u n c e_n o t i c e_r e c i p i e n t . Tomu lze předejít tak, že d o s m t pd_s e n d e r_r e s t r i c t i o n s nebo s m t pd_ r e c i p i e n L r e s t r i c t i o n s přidáme r e j e c t _u n k n own_s e n d e r_d oma i n , viz kapitola 8.
Snížení četnosti pokusů o opětovný přenos Máme-li velké množství pošty, které server nemůže doručit na několik prvních pokusů , měli bychom uvažovat o nouzovém předávání zpráv (pomocí parametru fa I I b a c k_ r e l a y) nebo o prodloužení odkládací doby ( ma x i m a l _b a c k o f Ct i me l , abychom snížili frekvenci, s níž se odložené zprávy vracejí do aktivních front. Bez nouzového předávání by Postfix strávil drahocenný čas pokusy o doručení zpráv na adresy, které jsou mimo provoz nebo nedosažitelné. Každý z těchto pokusů o doručení spotřebuje jeden proces s m t p , který musí čekat do uplynutí časového limitu . Š pinavou práci s opakovanými pokusy o přenos tak odvede nouzové předávání. To znamená, že poštovní server může pracovat s implicitními časovými prodlevami nebo dokonce s niž šími hodnotami těchto prodlev, čímž se urychlí doručování. Na druhé straně zvýšením hodnoty parametru ma x i ma l _b a c k o f Ct i me prodloužíme do bu, po niž server ignoruje určitá místa určení, v nichž se vyskytne problém s doručová ním. Proto může Postfix činit méně pokusů o kontaktování problematických serverů .
Vyhledávání úzkých míst V této části si popíšeme, jak v systému identifikovat úzká místa . Možná by bylo dobré se nejdříve na chvilku vrátit ke kapitole 5 , abychom si osvěžili funkce jednotlivých démo nů . Vzhledem k tomu , že všichni postfixoví démoni musí pracovat s frontami, bude vhodné si některé z nich připomenout. Budeme hovořit o těchto frontách : •
i n c omi ng
•
defer red
•
acti ve
•
ma i l d rop
Když zpráva dorazí d o systému, stane s e souborem v některé frontě a Postfix ji pak pře misťuje z jedné fronty do druhé. Jestliže se některá z front neúměrně prodlouží, mohou nastat zásadní problémy s výkonností. Victor Duchovni napsal šikovnou utilitu q s h a p e , jejímž prostřednictvím můžeme sledovat pohyb zpráv mezi těmito frontami. Soubory z fronty čte přímo, tedy bez pomoci příkazu ma i 1 q , takže ji může spouštět pouze uživa tel r o o t a p o s t f i x . Můžeme si ji stáhnout z adresy h t t p : / / s b s e r v . s t a h l . b a u . t u b s . d e / - h i l d e b / p o s t f i x / s c r i p t s . Poslední verze Postfixu už mají tuto utilitu ve zdrojových textech .
37 1
372
'4-h"M
Kapitol a 22
Pohled na obsah front vypisuje q s h a p e ve tvaru tabulky. Řádky obsahují počet zpráv pro určitou destinaci a jejich celkový součet. Ve sloupcích je zobrazeno "stáří" jednotlivých zpráv. K9YŽ se například prostřednictvím následující tabulky podíváme na frontu h o l d (parametr h o l d ) , vidíme deset horních řádků s (většinou padělanou) doménou odesila tele zachycených spamů : # q s h a pe - s h o l d
TOTA L h o tm a i l . d e a l b - 2 4 - 1 9 4 - 1 6 1 - 1 3 2 . ny e a p . r r . e o m freeenet . de x4u2 . desy . de e s i . e om da . ru freeu k . eom mx5 . o u t r a g e o u s e o u rt i e r s . eom onl i ne . de m o l g e n . mp g . d e e ha r i te . de
T 12 2 1 1 1 1
5 O O O O O O O O O O O O
10 O O O O O O O O O O O O
20 O O O O O O O O O O O O
40 O O O O O O O O O O O O
80 1 6 0 2 2 O O O 1 1 O O O O 1 O O O 1 O O O O O O O O
3 2 0 3 2 0+ O 6 2 O O O O O O 1 O O 1 O O O 1 O O O O 1 O O
Sloupec T obsahuje součet zpráv pro každou doménu. V dalších sloupcích jsou počty zpráv starších než určitý počet minut, ale mladších než zprávy ve sloupci napravo. Dvě zprávy předstírají svůj původ z domény h o t m a i 1 . d e , obě jsou starší než 320 minut. Utilita q s h a p e poskytuje implicitně statistiku příchozích i aktivních front, neboť všechny mají přímý vliv na celkový výkon. V příkazu můžeme zadat i jinou množinu front, viz následující příklad:
$ q s h a pe d e f e r r e d $ q s h a p e i n e om i n g a c t i v e d e f e r r ed Nyní, když umíme sledovat vytížení front, můžeme s n imi i něco provádět. V následují cí části si vysvětlíme, jak zprůchodnit úzká místa ve všech typech front. Seznámíme se i s vzorci, jejichž pomocí můžeme vypočítat, zda je systém schopen zpracovat určité množství pošty a jak a kdy použijeme nouzové předávání.
Úzká místa ve frontě incoming Jak už jsme se zmínili v předchozí části "Vyhledávání úzkých míst", postfixová služba c l e a n u p předává veškerou příchozí poštu do fronty i n e om i n g . Novým souborům je do té doby, než jsou kompletní, přiřazen režim 0600. Jakmile jsou připraveny k dalšímu zpracování, je jim přiřazen režim 0700. Za normálních okolností je fronta i n e om i ng té měř prázdná a obsahuje pouze soubory s režimem 0600, neboť správce front by měl být schopen ihned po zpracování službou c l e a n u p přenášet nové zprávy do fronty a c t i v e . Fronta incoming s e však může prodlužovat tehdy, když zprávy začnou přicházet rychle ji, než je správce front schopen je přemisťovat do fronty a c t i v e . V tomto stavu může správce front zpomalovat jedině služba t r i v i a l - r ew r i t e . Pokud potíže narůstají, prav děpodobně používáme pro zajišťování přenosu pomalé vyhledávací služby - například MySQL nebo LDAP, anebo se můžeme pokusit zrychlit servery, které poskytují vyhledá vací služby.
'4-MBt'
Ladění výko n u POZNÁMKA
Používá me- I i mapy I PC (i nterprocess com m u n ication) s velkou nebo proměnl ivou do bou odezvy, na příklad LDAP nebo SQL, Postfix potřebuje na příjem zprávy více času . Proto bude spouštět víc procesů s m t p d (a c l e a n u p) a v s m t p d dříve narazí na omeze n í počtu procesů. S těm ito pomalými h l e d á n í m i v ta bul kách pravděpodobně b u d o u doru čovací agenti ( l o c a l , p i pe, v i r t u a l , l m t p) hotovi v kratším čase, než kol i k potřebuje s m t p d na zpracová n í příchozí zprávy, takže Postfix bude spouštět méně doručovacích agentů, než bychom očekáva l i . Možným lékem v případě LDAP je nepovol it vytvořen í vazby na server LDAP. V konfi g u račn ích souborech dotazová n í LDAP nastavíme bi nd n o . Tím dosá hneme toho, že Postfix vytvoří vazbu na LDAP a nonymně, čímž sníží rež i i spojenou s a utentizací a ově řová n ím hesla . �
V e srovná n í s e souborovými mapami, např. h a s h, b t r e e, d b m nebo c d b, m a pa I PC spo třebuje pouze na vyh ledává n í u rčité i nformace více času a postfixoví démoni při čeká ní nic nedělaj í. Pokud by bylo vyh l edává n í rychlejší, byl by rychlejší i Postfix. Jak už jsme se z m ín i l i j i nde, tyto mapy maj í u rčité výhody, jež převažuj í nad nevýhoda mi. Jednou z nejdů ležitějších je, že Postfix nemusí u končit a znovu spouštět proces, a by mapu znovu otevřel, když se změní j ej í obsa h . Při laděn í si můžeme vyzkoušet použití data báze m ísto m a py. Tvoří-Ii úzké místo fronta i n c o m i n g , má přísun zpráv přednost před jejich odesíláním. Převahu příchozích zpráv nad odchozími můžeme zkusit řešit i tak, že si trochu pohra jeme s parametrem i n_ f l ow_d e l a y , a když správce front začne "odpadávat", snížíme rychlost vstupu . Není-Ii služba c l ea n up aktivována správcem front, po uplynutí určitého počtu sekund uvedeného v i n_ fl ow_d e 1 ay je pozastavena ještě před tím, než přidá do fronty nový soubor. Důvodem, proč to takhle funguje, je skutečnost, že počet procesů c l e a n u p je obvykle omezen možnostmi serveru SMTP provádět paralelní zpracování. Vstupní rychlost může převýšit výstupní rychlost (obě vyjádřené v počtu zpráv za sekundu) nejvýše o hodnotu rovnou počtu SMTP spojení lomenému hodnotou parametru i n_ f l ow_d e l a y . Průběžný počet příchozích spojení SMTP nalezneme pomocí příkazů ps a g r e p : # p s a uxww l g r e p smtpd I g r e p - v g r e p I 22
wc - - l i n e s
V tomto systému běží 22 procesů s m t p d . Příkaz spočte všechny procesy s m t p d , takže má me-Ii vícenásobné konfigurace s m t p d (například když používáme filtr obsahu, který vra cí zprávu zpět do fronty pomocí SMTP), musíme pak použít v příkazu g r e p přesnější vzorek, abychom nalezli počet démonů smtpd, kteří přijímají zprávy z vnější sítě: # ps a u xww l g r e p smtpd I g r e p - v g r e p I g r e p - v l o c a l h o s t I wc - - l i n e s 9 Vazba s implicitním omezením procesů na 1 00 a nastavením i n_ f l ow_d e 1 ay na jednu se kundu je dostatečně silná na to, aby omezila jednotlivé procesy na jednu zprávu za se kundu, avšak nestačí omezit přísun zpráv z více zdrojů v daném okamžiku . Směřují-Ii na server útoky z více stran, nejlepším řešením je zkrátit co nejvíce sezení SMTP ( s m t pd_e r r o r_s l e e p_t i me na nulu a nízkou hodnotu s m t pd_h a r d_e r r o r_l i m i t , čímž Postfix zruší spojení překračující tento limit). K tomuto opatření bychom však mě-
373
374
';.aid'
Ka pitol a 22
li přikročit pouze tehdy, když fronta i n c o m i ng roste i v případě, není-li fronta a c t i ve pl ná a služba t r i v i a l - r ew r i t e využívá rychlý vyhledávací mechanismus. Pokud budou problémy s přeplněnou frontou i n c o m i ng přetrvávat i přes všechna uve dená opatření a fronta a c t i ve přeplněná nebude, nejspíše bude něco v nepořádku s V/V subsystémem: Zpráva přijde a je zapsána na disk, avšak procesy s m t p d a q m g r vy užívají stejný prostředek (frontu uloženou na disku) a obě tyto operace závisí na rych losti V/V subsystému . V takovém případě je nutno podstatně rozšířit operační paměť serveru (abychom systé mu poskytli větší odkládací prostor) anebo přesunout adresář front na jedno z těchto míst: • •
Strip ing RAID systém Zálohované RAM disky (to ovšem pouze pro odvážné, neboť dojde-li k havárii systé mu, pošta je ztracená)
Úzká místa ve frontě maildrop Zprávy odeslané postfixovým příkazem s e n d ma i 1 , avšak ještě nepřenesené d o hlavních front Postfixu službou p i c k u p , zůstávají ve frontě ma i 1 d r o p - budou do této fronty za řazeny i v případě, když pošleme zprávu příkazem s e n d ma i 1 a Postfix není spuštěn. Jed novláknová služba pickup čte adresář fronty ma i 1 d r o p pravidelně, a když obdrží oznámení o příchodu nové zprávy od programu p o s t d r o p . Rychlost, jakou služba p i c k u p přenáší zprávy do primárních front, závisí zejména n a do bě odezvy disků , neboť před ukončením operace musí předat zprávu k uložení ve sta bilní paměti . Totéž platí i pro program p o s td r o p , který zapisuje zprávy do adresáře ma i l d rop. Vzhledem k tomu , ž e služba p i c k u p j e jednovláknová, může v daném okamžiku doručit pouze jednu zprávu při celkové rychlosti, která nemůže překročit dobu odezvy disku (a základní jednotky, pokud se používá) ve službě c l e a n u p , neboť každá zpráva zpra covávaná službou p i c k u p musí projít službou c l e a n u p . Vzpomeňme si, že cleanup pou žívá parametry h e a d e r _c h e c k s , b o dy-c h e c k s atd . , které velmi zatěžují základní jednotku . c l e a n u p pak zapíše zprávu do souboru tvořícího frontu , což opět závisí na V/V rychlos ti disku . Je-li fronta ma i 1 d r o p přeplněná, příčina pravděpodobně spočívá v jedné ze dvou následujících skutečností: • •
Enormní rychlost přenosu lokálních zpráv Enormní spotřeba kapacity základní jednotky službou cleanup způsobená zdlouhavými kontrolami těl zpráv
Nezapomeňme ovšem na to, že když je fronta a c t i v e plná, služba c l e a n u p se pokouší snížit rychlost přidávání zpráv do fronty tím, že každou zprávu v závislosti na paramet ru i n_ f l ow_d e 1 ay pozdrží. V takovém případě může být přeplnění fronty ma i 1 d r o p pří činou dalšího přeplňování vstupního proudu zpráv. Neměli bychom se pokoušet doručovat prostřednictvím služby p i c k u p pří1iš velké množ ství zpráv. Spravujeme-li velký prostor, měli bychom k vracení zpráv do front co nejmé ně používat s e n d m a i 1 a p o s t d r o p a dát přednost protokolu SMTP . Existuje řada programů, které jej využívají, mezi jinými například m i n i _s e n d m a i l ( h t t p : / / www . a c me . c om / s o f t w a r e / m i n i _s e n d m a i l ).
Lad ě n í výkon u
'4-fiNt'
Máme-li velký počet lokálně přenášených zpráv, můžeme mít předávací cyklus nebo program pro oznamování splašených zpráv. Příkazem p o s t s u p e r - r můžeme umístit vy brané zprávy do fronty ma i 1 d r o p k opakovanému zpracování. I když to je vhodné pro obnovení nastavení filtru starých zpráv e o n t e n t_f i 1 t e r , vracení velkého počtu zpráv do fronty příkazem p o s t s u p e r - r může způsobit chvilkové prodloužení fronty ma i l d rop.
Úzká místa ve frontě deferred Když Postfix nemůže z důvodu dočasné chyby doručit zprávu některému ze svých pří jemců , umístí ji do fronty d e f e r r e d s tím, že bude doručena později. Správce front prohlíží frontu d e f e r r e d v pravidelných intervalech stanovených parametrem q u e u e_r u n_d e 1 a y . Jak jsme uvedli v kapitole 5 , správce front vybírá zprávy z front i n e om i n g a d e f e r r e d střídavě, aby ve frontě a e t i v e nepřevažovaly odložené zprávy. Každé prohlížení fronty d e f e r r e d má za následek vrácení části této fronty do fronty a e t i v e k novému pokusu o zpracování, neboť do všech zpráv ve frontě d e f e r r e d se za píše, jak dlouho má být zpráva "zmrazená" . Postfix to dělá tak, že místo údaje o modifikaci souboru fronty přepíše časem budoucí modifikace. Soubory, u kterých ješ tě nenastal čas modifikace, se pak nevyberou . Doba zmrazení zprávy je rovna nejméně hodnotě parametru m i n i ma Lba e k o f Lt i me a nejvýše hodnotě parametru m a x i m a Lb a e k o f Lt i me . Postfix nastaví čas dalšího pokusu o zpracování na dvojnásobek stáří zprávy ve frontě a výsledek zaokrouhlí tak, aby ležel mezi uvedenými hodnotami. Mladší zprávy se tedy Postfix pokouší zpracovat častěji . Má-li velký obsluhovaný prostor dlouhou frontu odložených zpráv, můžeme zkusit upra vit parametry q u e u e_ r u n_d e l a y , m i n i m a l _b a e k o f f_t i m e nebo ma x i m a l _b a e k o f f_t i m e a zkrátit zpoždění po prvním selhání doručení a možná prodloužit zpoždění po opako vaném selhání. Tím snížíme počet opakovaného zpracování starých zpráv a současně i počet dříve odložených zpráv ve frontě a e t i v e .
Č astou příči nou příl išného prod lužová n í front od ložených zpráv bývá sel h á n í zj išťová n í platnosti příjemců v e fázi vstupu SMTP. Důvody, proč m usíme ověřovat platnost příjem ců zpráv, jsou uvedeny v části " Zprávy nezná mým příjemcům " v kapitole 8. Spadne-li na chvíli server s množstvím odložených zpráv, může se stát, že po obnovení jeho činnosti všechny zprávy ve frontě d e f e r r e d dosáhnou času , kdy mají být znovu zpracovány. To může vést k značnému zaneprázdnění fronty a e t i v e . Aby to nebylo tak jednoduché, bude-li většina zpráv znovu odložena, tento úkaz se bude opakovat při bližně každých m a x i m a l _b a e k o f Lt i m e sekund. Nejlépe tento problém vyřešíme, když v takové situaci Postfix nastaví tyto časy kromě standardních hodnot ještě na náhodné hodnoty, aby se snížila pravděpodobnost toho, že se celá fronta d e f e r r e d vrátí do nového zpracování současně .
Úzká místa ve frontě active Jak je popsáno v kapitole 5 , správce fronty je plánovač doručovacích agentů , který se -",pokouší zajistit rychlé a spolehlivé doručování zpráv na všechna místa určení pomocí
37 5
376
'a·fiiit'
Kapitola 22
všech prostředků, které jsou k tomu určeny. Přeplnění fronty a c t i ve se vyskytuje, když některé destinace přijímají zprávy pomaleji, než jaká je odpovídající vstupní rychlost. Je-li někťeré z míst určení po určitou dobu mimo provoz, správce front je označí za mrtvé a ihned odloží všechny zprávy určené pro tuto destinaci, aniž by se obtěžoval s jejich při řazováním doručovacím agentům. Proto tyto zprávy rychle opustí frontu a c t i ve a skončí ve frontě d e f e r r e d . Je-li místo určení pouze výrazně pomalejší nebo má-li z nějakého dů vodu enormně sníženou rychlost, fronta a c t i ve roste a zaplňuje se zprávami určenými do pomalejších destinací. Existují pouze dva způsoby, jak toto přeplňování snížit: •
Snížíme vstupní rychlost
•
Zvýšíme propustnost
Zvýšení propustnosti vyžaduje buď rozšíření paralelního zpracování (zvýšení počtu sou běžně spuštěných postfixových procesů s m t p) nebo snížení doby odezvy doručování (vylepšení sítě, změna typu mapy, odstranění příčiny pomalé služby DNS apod.). Para lelní zpracování můžeme rozšířit tím, že v souboru ma i n . c f zvýšíme hodnotu paramet ru d e f a u l t_p r o c e s s_' i m i t . Chceme-li urychlit doručování na základě vylepšování vlastností jednotlivých míst určení, musíme nalézt pomalý transport (například transport pro parametr c o n t e n t_f i ' t e r) nebo pomalou destinaci (např. určitou oblast volného doručovánO, které způsobují zaplňování fronty a c t i ve (velmi vhodný je k tomu program q s h a pe). Když odstraníme viníka, definujeme jméno jednoúčelového transportu a nasta víme parametr n a me_d e s t i n a t i o n _c o n c u r r e n cy_' i m i t . Další podrobnosti si probereme v části "Konfigurace alternativního transportu" v této kapitole. Zejména je třeba mít na paměti, že maximální počet procesů použitelný kteroukoli služ bou je omezen v souborech ma s t e r . c f a ma i n . c f .
POZNÁMKA Zvyšová n í počtu procesů a otevřených souborů musí zvládat především operační systém. Viz " R u nni n g hundreds of processes " (spouštěn í stovek procesů) v často klade ných otázkách (FAQ) na strá n kách Postfixu : h t t p : / / www . p o s t f i x . o r g / f a q . h t m l . Dobu odezvy někdy můžeme snížit, když zrychlíme DNS (viz část "Zvyšování výkonu DNS" v této kapitole) a také hledání v mapách, jak jsme se zmínili v kapitole 5 v části "Databáze (MySQL, PostgreSQL, LDAP)" . Pomoci může také snižování časových limitů u vytížených oblastí s množstvím MX . Nic z toho ovšem nepomůže, pokud přijímací systém není v pořádku (například když odesíláme do pomalých oblastO. Další příčinou přeplňování fronty active je zkusmé rozpouštění celé fronty d e f e r r e d . V této frontě jsou zprávy, které pravděpodobně nebude možné doručit, přinejmenším pomocí náhodných pokusů . Navíc je pravděpodobné, že porucha vedoucí k odložení zprávy bude trvat delší dobu , a Postfix musí při každém pokusu čekat na uplynutí ča sového limitu .
" " Rozpouštěn í fronty , o něž se insti n ktivně pokoušej í někteří správci v případě dlouhé fronty d e f e r r e d . bývá kontra prod u ktivn í a celý problém ještě zhoršuje. Frontu neroz pouštějte, dokud nelze d ůvodně předpokládat, že větš i n u zpráv ve frontě bude možné doručit na první pokus! Nejdříve m usíme provést ana lýzu, odstra n it příči n u a pak tepr ve m ůžeme rozpouštět frontu .
ladění výko n u A konečně, j e třeba s e pokud možno vyhýbat restartům Postfixu. Spustíme-Ii znovu správce front, v adresáři fronty a e t i ve mohou být zprávy, avšak skutečná fronta a e t i v e (v paměti) j e prázdná . Správce obnovuje frontu a e t i v e v paměti tak, že všechny zprávy vrátí o do fronty i n e om i ng a spolehne se na normální zpracování této fronty. Přesun všech zpráv tam a zpět, opakování transportních vyhledávání a vracení zpráv do pamě ti je zdlouhavá záležitost.
UPOZORNĚNí Když jsou servery v p l né činnosti, raděj i bychom si nemě l i h rát s konfig u račními sou bo ry Postfixu, neboť každá změna jej ich obsa hu vyžaduje opětovné spuštění Postfixu pří kazem p o s t f i x r e l o a d, přičemž současně se znovu spouští i správce front.
Asynchronní nerovnost pro přeplňování front vrácenými zprávami Je-Ii fronta d e f e r r e d plná nedoručitelných vrácených zpráv, nelze z toho vinit Postfix. Přeplňování je důsledkem vysoké průměrné doby odezvy způsobené velkým množstvím nedoručitelných zpráv, neboť démoni s m t p , kteří se pokoušejí zprávy odeslat, pouze če kají na uplynutí časových limitů . Victor Duchovni vytvořil ne rovnici zaplňování, kterou určíme, zda jde o tento problém. Ve frontě s velkým počtem vrácených zpráv, které zůstanou nedoručitelné, je počet od ložených zpráv přenesených do fronty a e t i ve omezen následujícím vzorcem:
s i z e of t he queue que u e r u n de l a v ma x i ma l _b a e k o f f_t i me Počet zpráv zpracovaných v každé frontě je nejvýše:
defa u l t proeess l i mi t queue run d e l ay s m t p_e o n n e e t_t i m e o u t M Je-Ii limit procesů vyčerpán, můžeme předpokládat, že počet vrácených zpráv ve frontě je mnohem větší než limit procesů. (To za předpokladu , že d e f a u l t_p r o e e s s_ l i m i t se vztahuje k démonům s m t p . Pokud jsme zvýšili položku ve sloupci maxproc v souboru ma s t e r . e f , v rovnici použijeme tuto hodnotu .) Dáme-Ii tyto rovnice dohromady, dostaneme výsledek:
s i ze of the queue x oueue run del ay m a x i m a l _b a e k o f f_t i me
�
queue run d e l ay x defa u l t proees s l i m i t s m t p_e o n n e e t_t i me o u t x M
Když teď obě strany vynásobíme číslem m a x i ma Lb a e k o f Ct i me / q u e u e_r u n_d e l a y , do staneme přeplňovací nerovnici:
P
x
B
�
O
x
T
x
M
Parametry mají tento význam:
P
Limit procesů s m t p , který získáme pomocí příkazu :
# p o s t e o n f d e f a u l t_p r o c e s s_l i m i t d e f � t_p r o e e s s_l i m i t 100 =
378
'a-h'it'
Kapitola 22
POZNÁMKA M usíme si ověřit hod notu m a x p r o c na řádku s m t p v souboru ma s t e r . c f, a bychom vědě ' l i, zda ex istuje expl icitní h ra n ice tra nsportních procesů .
B
Maximální doba odložení, kterou získáme pomocí příkazu :
# p o s t c o n f m a x i ma l _b a c koff_t i me m a x i m a l _b a c k o f f_t i me = 4 0 0 0 s
Q
Počet vrácených zpráv ve frontě (za předpokladu , že tyto zprávy směřují do růz ných destinací, jejichž minimální počet je dán podílem P / d e s t i n a t i o n_c o n c u r r e n cy-l i m i t).
T
Č asový limit spojení s m t p , který získáme příkazem:
# p o s t c o n f s mtp_c o n n e c t_t i me o u t s m t p_c o n n e c t_t i m e o u t = 3 0 s
M
Průměrný počet IP adres záznamů MX. Má-Ii doména více než jeden MX záznam, Postfix musí vyzkoušet všechny. Č ísla nemusíme extrahovat; pouze je odhadneme a k odhadu počtu MX (převažující místo určenO použijeme q s h a p e .
POZNÁMKA I m p l icitně m ůže každá desti nace použít nejvýše 20 doručovacích agentů (defa u ICde sti n ation_concu rrencyJ i m it 20), ta kže budeme přičítat desti nace tak d lou ho, až do sá h neme l i m itu procesů. V praxi pouze odhadneme rozsah M a možná jej omezíme nastave n ím smtp_mx_add ressJ i m it (horní l i m it počtu MX ad res, které bude Postfix zkoušet) . =
Pokud tato ne rovnice nevede k uspokojivým výsledkům, dostali jsme se do vážných pro blémů . Musíme se všemi prostředky pokusit o snížení hodnoty pravé strany a zvýšení hodnoty levé strany. Při snižování hodnoty pravé strany se musíme řídit těmito pravidly: • •
•
Nemůžeme snižovat Q vynecháváním vrácených zpráv. Nemůžeme snižovat T vytvořením jednoúčelového transportu smtp pro doménu příjemce vrácených zpráv a snižováním jeho časového limitu spojení SMTP . Nemůžeme snižovat M, protože neprovozujeme server příjemců a služby DNS.
Zde je několik návrhů , jak zvýšit hodnotu levé strany: •
•
Zvýšení P je jednoduché. Změníme implicitní limit procesů anebo (pomocí editoru) povolíme více procesů s m t p v souboru m a s t e r . c f .
B zvýšíme tak, že zvýšíme maximální odkládací čas.
Podívejme se na několik příkladů . Prvním je instalace Postfixu l .x na Solarisu s 2 000 vy řazenými zprávami ve frontě. V Postfixu l .x je parametr s m t p_c o n n e c t i o n_t i m e o u t nastaven na systémový časový li mit připojení TCP . Jeho implicitní hodnota na Solarisu je kolem 180 sekund, v Linuxu je mnohem delší. Je-Ii implicitní hodnota parametru d e f a u l t_p r o c e s s_ l i mi t rovna 50, do staneme tento výsledek:
P * B )= Q * T 5 0 * 4 0 0 0 )= 2 0 0 0 * 1 8 0 2 0 0 0 0 0 )= 3 6 0 0 0 0
14-fi'lt'
Ladění výko n u
Zde ne rovnice neplatí, neboť hodnota parametru ma x i ma l _b a c k o f Ct i me 4 000 sekund je příliš malá, zejména když vyřazené zprávy mají několik záznamů MX. Nyní uvažujme o situaci, kdy používáme Postfix 1 . 1 . 1 1 (nebo novějšO s 2 000 vyřazený mi zprávami ve frontě. V pozdějších verzích Postfixu (nejméně 1 . 1 . 1 1 -2002071 7) je časový limit 30 sekund pro všechny platformy a ve verzi 1 . 1 . 1 2-2002 1 2 1 2 se zvýšil implicitní limit procesů na 1 00. Z toho vyplývá, že:
P * B ) O * T 1 0 0 * 4 0 0 0 )= 2 0 0 0 * 3 0 4 0 0 0 0 0 )= 6 0 0 0 0 =
Tentokrát nerovnice platí. Navíc, vzhledem k tomu, ž e implicitní hodnota odkládání je 4 000 sekund, jsme dostatečně pod kritickou hranicí, dokonce i když obvyklý počet po čítačů MX v destinacích vyřazených zpráv je 4. Pozdější verze Postfixu dokážou zpraco vat mnohem delší fronty odložených zpráv. Kritická délka fronty s hodnotou parametru d e f a u l t_p r o c e s s_l i m i t rovnou 1 00 je při bližně:
1 0 0 * 4 0 0 0 / 30
1 3000
=
Může být kratší, pokud j e počet MX vyšší než 1 . S omezením procesů n a 500, časovým limitem 10 sekund a hodnotou parametru m a x i ma Lba c k o f Ct i me 4 hodiny je kritická délka rovna této obrovské hodnotě:
500 * 14400 / 1 0
=
7 20000
Toto absurdní omezení nicméně odpovídá 500 procesů, které zkoušejí vytvářet nové zprávy každých 10 sekund - jinými slovy, každou sekundu frontu opustí a je do ní vrá ceno 50 zpráv.
Nouzové předávání Prohýbá-li se primární fronta pod velkou zátěží, m á smysl uvažovat o nasazení druhého serveru (nebo dalšího procesu Postfix; od verze 2.2 existuje víceprocesová podpora). Pri mární frontu tedy můžeme naladit normálně; možná i s velmi krátkými časovými limity, a zprávy, které nejsou doručeny na první pokus, se mohou zkoušet doručovat z nouzové fronty nebo nouzovým předáváním se speciálním vyladěním popsaným v této kapitole. Parametry v souboru ma i n . cf hlavního postfixového serveru nastavíme takto:
s m t p_c o n n e c t_t i m e o u t 5s s m t p_mx_a d d r e s s_l i m i t 3 #f a l l b a c k_r e l a y [ 1 27 . 0 . 0 . 1 ] : 20025 # for mul t i pl e i n stances of Postfi x on the same mach i ne f a l l b a c k_ r e l a y fa l l ba c k . exampl e . com # for a n o t h e r i n s t a n c e on another host =
=
=
=
Poté n a servefí1' označeném v parametru f a I I b a c k_re 1 a y nastavíme vysokou kritickou délku fronty. Limit 720 000 nastavíme pomocí uvedených parametrů takto:
379
380
'a-h'!'
Kapitola 22
s m t p_c o n n e c t_t i m e o u t = l O s s m t p_mx_a d d r e s s_l i m i t 5 d e f a u l t_� r o c e s s_l i m i t = 5 0 0 b o u n c e_q u e u e_l i f e t i me = Z d ma x i ma l _b a c k o f f_t i me = 4 h
POZNÁMKA Hodnotu parametru s m t p_c o n n e c t_t i m e o u t m ůžeme i trochu zvýšit, avša k některé po čítače jsou ta kto pomalé.
Naladění vyšší průchodnosti Předává-li počítač velký objem pošty směřující dovnitř, můžeme pro předávání do vnitř ních domén vytvořit zvláštní transport. Pro účely této části nazvěme tento transport "re lay" . Ladění v Postfixu 2.x by vypadalo takto: 1.
Parametr r e l a y_d e s t i n a t i o n _c o n c u r r e n cy_l i m i t nastavíme na vysokou hodnotu (např. 50) .
2.
V souboru master.cf vytvoříme pro transport relay položku, která obsahuje c o n n e c t_t i m e o u t = $ re 1 a y_c o n n e c t_t i m e o u t (bez mezer u rovnítka).
3.
Parametr r e l a y_c o n n e c t_t i m e o u t v souboru ma i n . c f nastavíme na 5 nebo 1 .
-
o s m t p_
Vyhledáváme-li viry pomocí filtrování zpráv podle obsahu filtrem c o n t e n t_f i 1 t e r zalo ženým na protokolu SMTP, musíme zjistit, zda odesílající transport je zkonfigurován s o d i s a b l e_d n s_l o o k u p s =y e s . To také pomůže, když posíláme všechny zprávy do pev ného místa určení a nemusíme vyhledávat záznamy MX (například když používáme pro předávání zvláštní počítač) . -
Konfigurace alternativního transportu Posíláme-li rutinně velké objemy pošty d o oblastí s velkým počtem MX záznamů (na příklad HotmaiD, nemá smysl používat implicitní časové limity. Postfix pravděpodobně doručí poštu svázanou s těmito doménami rychleji, když nestráví příliš mnoho času s každým nefunkčním MX záznamem. V této části si ukážeme, jak na to. Nejprve si nadefinujeme nový transport s m t p , který v souboru m a s t e r _ c f nazveme d e a d b e a t s . K tomu účelu si zkopírujeme řádek s transportem s m t p , přejmenujeme ho na d e a d b e a t s a trochu jej upravíme - snížíme hodnotu s m t p_c o n n e c t_t i m e o u t :
deadbeats un i x smtp - o s m t p_c o n n e c t_t i m e o u t= $ d e a d b e a t s_c o n n e c t_t i m e o u t Implicitní časový limit j e 3 0 sekund, takže parametru d e a d b e a t s_c o n n e c t_t i m e o u t v sou boru ma i n . cf dáme hodnotu 5 sekund:
d e a d b e a t s_c o n n e c t_t i me o u t = 5 Nyní, stále uvnitř souboru ma i n . c f , řekneme Postfixu, aby používal tento speciální tran sport na posílání pošty do určitých destinací tak, že nastaví parametr t r a n s p o r t_ma p s :
ladění výko n u t r a n s p o r t_ma p s = h a s h : / e t c / p o s t f i x / t r a n s p o r t Mapu / e t c / p o s t f i x / t r a n s p o r t vytvoříme takto:
yahoo . com deadbeats : fl y a h o o . c o m h a s 3 M X h o s t . w i t h 9 A r e c o r d s i n t o t a l c omp u s e r v e . c om deadbeats : fl c o m p u s e r v e . c om h a s 3 M X h o s t s w i t h 4 A r e c o r d s e a c h deadbeats : a o l . c om fl a o l . c om h a s 4 MX h o s t s w i t h 1 8 A r e c o r d s i n t o t a l h o t ma i l . c om deadbeats : fl h o t m a i l . c om h a s 4 M X h o s t s w i t h 1 0 A r e c o r d s i n t o t a l deadbeats : h o tm a i 1 . d e fl h o t ma i l . d e h a s n o M X h o s t s . b u t 6 A r e c o r d s Zadáme příkaz postmap hash:/etc/postfix/transport a zavedeme novou konfiguraci.
381
v,
PRILOHY Poslední část Knihy o postfixu obsahuje přílohy. Měly by nám pomoci v úplných začát cích , dále s odstraňováním problémů a také by nám měly poskytnout reference, které je dobré mít při ruce v průběhu konfiguračního procesu:
Instalace Postfixu v příloze A nalezneme pokyny k instalaci Postfixu ze zdrojového kódu pro distribu
ce Linuxu Debian a Red Hat.
Odstraňování problémů Narazili jste při úpravách konfigurace na problém? V příloze B nabízíme rady, j a k ře šit nejčastější pochybení, a dáváme k dispozici několik obecných tipů , jak hledat pří činy problémú .
Odkazy na standardy CIDR a SMTP Ne každý je schopen se naučit podsítě v notaci CIDR nebo v kódech odpovědí SMTP . Shrneme si je v příloze C.
PŘfLOHA A
I NSTALACE POSTFIXU V této příloze si popíšeme, jak vytvoříme Postfix ze zdrojového kódu a taktéž z balíků určených pro operační systémy Debian Linux a Red Hat Linux .
Zdrojový kód Postfixu Odkazy na zdrojový kód Postfixu nalezneme na h t t p : / / www . p o s t f i x . o r g / d ow n l o a d . h t m l a na zrcadlech; kvůli rychlosti bychom jej měli stahovat pokud možno z co nejbližší ho. -
Před stažením zdrojového kódu bychom měli vědět, jaký je rozdíl mezi experimentálním a oficiálním vydáním. Oficiální vydání se kromě oprav chyb a záplat souvisejících s pře nositelností nemění. Na druhé straně experimentální verze obsahuje nové, ještě neotes tované funkce . Kód v neoficiálních verzích, který funguje (a přestal se měnit), se může stát součástí oficiální verze. Oficiální vydání Postfixu se označují jako postfix- a. b. c.tgz, kde a, b a c mají tento význam: a:
Hlavní číslo vydání (významnější změna struktury balíku)
b: Vedlejší číslo vydání (nové funkce) c:
Ú roveň záplaty (odstranění chyb)
Experimentální verze mají jména typu postfix-a. b-yyyymmdd.tgz, kde yyyymmdd je da tum vydání. Datum oficiálního i experimentálního vydání obsahuje konfigurační para metr m a i l _ r e l e a s e_d a t e . Aplikujeme-li na systém oficiální záplatu, změní se úroveň záplaty a vydání. Nová verze však má pouze jiné datum vydání, neboť jsou v něm odstraněny stejné chyby jako v záplatě.
Aplikace záplat Při aplikaci záplat je nutno dbát na jisté skutečnosti. Seznam postfixových záplat najde me na h t t p : / / www . p o s t f i x . o r g / a d d o n . h t m l . (Pokud nemáme s aplikací záplat zkuše nosti, asi bychom měli tuto činnost přenechat někomu jinému .) Záplaty mají vlastní dokumentaci. Vzhledem k tomu, že některé z nich mohou významně změnit vlastnosti a chování Postfixu, měli bychom si příslušné pokyny důkladně přečíst.
386
'4-fiUt'
Příloha A
Vytváření a instalace ze zdrojového kódu Jakmile pomocí t a r x f z p o s t f i x - a b c . t g z balík rozbalíme, pravděpodobně si proces vytvářeni upravíme pro vlastní potřebu tak , aby měl požadované vlastnosti . Adresář REAOME_FILES obsahuje dokumentaci pro podporu funkcí BerkeleyOB, PCRE, MySQL a SASL (SMTP-AUTH) . Každý ze souborů v tomto adresáři obsahuje pokyny, jak nastavit vnější proměnné, jimiž se ovlivní vytváření Postfixu . .
.
Pokud se chceme přidržet funkcionality popsané v této knize, jež není implicitní, poky ny k vytvoření Postfixu s určitými vlastnostmi nalezneme vždy na začátku příslušné ka pitoly. Úplný seznam voleb nalezneme v souboru INSTALL, který je součástí dodávaného balíku . Proces vytváření je vždy stejný: 1.
Nastavíme vnější proměnnou AUXLlBS s volbami pro sestavování.
2.
Nastavíme vnější proměnnou CCARGS s volbami pro překladač a preprocesor.
3.
Postfix vytvoříme pomocí příkazu ma ke ma k e f i l e s .
Například podporu BerkeleyOB n a stařičkém HP-UX 1 0 .20 vytvoříme pomocí následují cího příkazu, kde cesta ke knihovně je / u s e r s 2 / 1 o c a 1 / B e r k e 1 e y D B - 4 . 0 . 1 4 / 1 i b a k hla vičkovým souborům je / u s e r s 2 / 1 o c a l / B e r k e l e y D B - 4 . 0 . 1 4 / i n c l u d e .
$ A U X L I B S- ' - L / u s e r s 2 / 1 o c a l / B e r ke l ey D B - 4 . 0 . 1 4 / 1 i b - l d b ' \ CCARGS= ' - DHAS_DB - I / u s e r s 2 / 1 o c a l / B e r ke l ey D B - 4 . 0 . 1 4 / i n c l u d e ' ma ke ma k e f i l e s Chceme-Ii místo toho použít COB, aplikujeme záplatu , nainstalujeme knihovny COB a zadáme příkaz:
$ A U X L I B S= ' - L / u s r / l o c a l / l i b - l c d b ' \ C C A RG S= ' - DHAS_C D B - I / u s r / l o c a l / i n c l u d e ' ma ke ma k e f i l e s Pak zadáme příkaz make jako normální uživatel :
$ ma ke Po přeložení celého balíku se musíme rozhodnout, zda instalujeme Postfix poprvé nebo instalujeme jen aktualizaci . Při první instalaci zadáme jako uživatel r o o t příkaz :
ft ma ke i n s t a l l Příkaz se několikrát zeptá na instalační cesty. Když však aktualizujeme existující instala ci, následující příkazy zadáme jako uživatel r o o t : fl p o s t f i x s t o p fl ma ke u p g r a d e fl p o s t f i x s t a r t
Při aktualizaci instalátor vyextrahuje cesty stávající postfixové instalace z e souboru ma i n . c f a znovu použije tyto cesty a konfigurační soubory.
Spouštění a ukončování Postfixu Postfix je možno řídit programem p o s t f i x . Je možné mu zadávat tyto parametry:
'a-fi'lC'
I nsta l ace Postfixu
s ta rt Spuštění poštovního systému Postfix. Taktéž se tím spustí kontrola konfigurace, viz dále. stop
Provede řádné ukončení poštovního systému . Běžící procesy s e ukončí ihned, jak to bude možné.
e h e e k Ověření platnosti postfixové konfigurace . V případě chybného adresáře, vlastnic
tví souboru nebo přístupových práv vydá tento příkaz případná varování a vy tvoří chybějící adresáře.
Instalace Postfixu v operačním systému Linuxu Debian Instalace Postfixu v linuxové distribuci Oebian pomocí příkazu a p t - g e t je velmi jedno duchá. I když se verze Postfixu časem mohou měnit, postup při instalaci a integraci Post fixu do tohoto operačního systému se určitě nějaký čas nezmění.
Instalace Postfixu Když jsme v systému Oebian provedli prvotní instalaci Postfixu, můžeme si jej nyní vy brat jako balík, pokud ovšem ručně zadáme implicitní volbu poštovního systému , jinak zůstane po zavedení systému implicitním agentem (MTA) e x i m. Jestli je Postfix nainsta lován v systému, zjistíme pomocí příkazu d p k g , který vypíše verzi systému Postfix, je-Ii nainstalovaný, viz:
$ d p k g - 1 ' p o s t f i x* ' D e s i r e d �U n k n own / l n s t a l l / Remo v e / P u r g e / H o l d I S t a t u s�Not/ l n s t a l l ed / C o n f i g - f i l e s / Un p a e ked / Fa i l ed - e o n f i g / H a l f - i n s t a l l ed I 1 E r r ? � ( n o n e l / H o l d / Re i n s t - r e q u i r e d / X�bo t h - p r o b l e m s ( S t a t u s . E r r : u p p e r e a s e�b a d l I I I Name Vers i on Dese r i pt i on +++ - �������������������� - �������������������� ========================================================
postfi x I I t ransport agent un postf i x - dev un pos tfi x - doe ii postfi x - l dap ii p o s t f i x - my s q l postfi x - pe re ii postf i x - snap un un postfi x - sna p - dev un postfi x - snap- doe postfi x - snap - l dap un un p o s t f i x - s n a p - my s q l Wí p o s t f i x - s n a p - p e r e un postfi x - snap - t l s un postfi x - t l s
1 . 1 . 11 . 0-3
A h i g h - p e r f o rm a n e e m a i 1
1 . 1 . 11.0-3 1 . 1 . 11 . 0-3 1 . 1 . 11 . 0-3
( n o d e s e r i pt i on a v a i l a b l e l ( no dese ri pti on a v a i l a bl e l LDAP map s upport for Postf i x MY S Q L m a p s u p p o r t f o r P o s t f i x PCRE map support for Postfi x ( n o d e s e r i pt i on a v a i l a b l e l ( n o dese r i pt i on a va i l a b l e l ( n o d e s e r i pt i on a v a i l a b l e l ( n o d e s e r i pt i on a v a i l a b l e l ( no d e s e r i pt i on a v a i l a b l e l ( no d e s e r i pti on a v a i l a b l e l ( no d e s e r i pt i on a v a i l a b l e l ( no dese ri pti on a va i l a bl e l
Jak vidíme, je nainstalovaný Postfix 1 . 1 . 1 1 .0-3 včetně podpor map l d a p , my s q l a p e r e . V instalaci naopak není balík p o s t f i x - t l s (který podporuje TLS a SASL) ani žádná z po někud experimentálnějších verzí ( p o s t f i x - s n a p l .
387
Příloha A
388
Pokud bychom chtěli přece jen vyzkoušet experimentální verzi, zadáme příkaz: # apt - get i n s t a l l postfi x - s n a p Re a d i n g � a c k a g e L i s t s . . . D o n e B u i l d i n g D e p e n d e n cy T r e e . . . D o n e T h e f o l l ow i n g p a c k a g e s w i l l b e R E M O V E D : p o s t f i x p o s t f i x · l d a p p o s t f i x · my s q l p o s t f i x · p c r e T h e f o l l ow i n g N E W p a c k a g e s w i l l be i n s t a l l e d : postfi x · snap O p a c k a g e s u p g r a d e d . 1 n e w l y i n s t a l l e d . 4 t o r e mo v e a n d O n o t u p g r a d e d . N e e d t o g e t 5 6 7 k B o f a r c h i v e s . A f t e r u n p a c k i n g 4 7 . 1 k B w i l l be f r e e d . Do you wa n t to cont i n u e ? [ Y i n ] Než správa balíku Debian nainstaluje balík p o s t f i X · s n a p , odstraní všechny konfliktní balíky, tj . např. ex i m a S e n d m a i 1 .
Spouštění a ukončování Postfixu V politice Debian platí, že systémoví démoni obsahují spouštěcí a ukončovací skripty a jsou v adresáři /etc!init.d. Postfix můžeme ručně odstartovat pomocí příkazu l e t c i i n i t . d / p o s t f i x s t a r t a ukončit příkazem l e t c / i n i t . d / p o s t f i x s t o p .
Aktualizace Opravy chyb a změny v systému Debian se rovněž provádějí pomocí příkazu ap t . 9 e t . Zde j e příklad takové aktualizace : # a pt - g e t u p d a t e H i t h t t p : / / ma r i l l a t . f r e e . f r u n s t a b l e / m a i n P a c k a g e s H i t h t t p : / / ma r i l l a t . f r e e . f r u n s t a b l e / ma i n R e l e a s e H i t h t t p : / / s m a r d e n . o r g woody / u n o f f i c i a l P a c k a g e s 1 9 n h t t p : / / s ma r d e n . o r g w o o dy / u n o f f i c i a l R e l e a s e H i t h t t p : / / s ma r d e n . o r g woody / p a p e P a c k a g e s
Rea d i n g P a c k a g e L i s t s . . . D o n e B u i l d i n g D e p e n d e n cy T r e e . . . D o n e # a pt - get upgrade Read i ng Pac kage Li sts . . . Done B u i l d i n g D e p e n d e n cy T r e e . . . D o n e O p a c k a g e s u p g r a d ed . O newl y i n s t a l l ed . O t o remo v e a n d O
not upgraded .
Změny se v aktualizacích pokud možno neprovádějí, pokud to není zcela nezbytné, te dy jde-Ii například o změny v souboru ma s t e r . c f nebo v adresářích front.
Vytvoření Postfixu ze zdrojového balíku Debian Chceme-Ii vytvářet Postfix z e zdrojového kódu systému Debian, musíme si tento balík nejdříve stáhnout: # a p t - get sou rce postfi x Re a d i n g P a c k a g e L i s t s . . . D o n e B u i l d i n g D e p e n d e n cy T r e e . . . D o n e Need to get 2382 kB of source a rc h i ves . Get : l h t t p : / / h tt p . u s . de b i a n . o r g u n s t a b l e / ma i n p o s t f i x 2 . 1 . 3 · 1 ( d s c ) [ 832 B J Get : 2 h t t p : / / htt p . u s . d e b i a n . o r g u n s ta b l e / ma i n p o s t f i x 2 . 1 . 3 · 1 ( t a r ) [ 1 9 7 2 k B ]
I nsta l ace Postfixu
389
G e t : 3 h t t p : / / h t t p . u s . d e b i a n . o r g u n s t a b l e / ma i n p o s t f i x 2 . 1 . 3 - 1 ( d i f f ) [ 4 0 9 k B ] Fetched 1 9 7 7 kB in 9 s ( 2 1 6 k B/ s ) dpkg - s ou rce : ext r a ct i n g postf i x i n p o s t fi x - 2 . 1 . 3 Máme-Ii balík v systému a chceme-Ii v něm něco změnit, můžeme v adresáři d e b i a n v souboru d e b i a n / r u l e s či v kterémkoli jiném souboru udělat příslušné změny:
# cd p o s t f i x - 2 . 1 . 3 # d p kg - b u i l d p a c k a g e Zkusili jsme udělat změny, avšak vypsala s e chybová hlášení: dpkg - bu i l dpackage : source package i s postf i x dpkg - bu i l dpackage : sou rce vers i on i s 2 . 1 . 3 - 1 d p k g - b u i l d p a c k a g e : s o u r c e m a i n t a i n e r i s L a M o n t J o n e s < l a m o n t@d e b i a n . o r g > d p kg - bu i l d p a c k a g e : h o s t a rc h i t e c t u r e i s i 386 d p k g - c h e c k b u i l d d e p s : U n m e t b u i l d d e p e n d e n c i e s : l i bd b4 . 2 - d e v l i b g d bm - d e v l i b l d a p 2 - d e v ( >� 2 . 1 ) l i bmy s q l c l i e n t l 0 - d e v l i b s a s 1 2 - d e v p o s t g r e s q l - d e v d p kg - bu i l d p a c k a g e : B u i l d depende n c i e s / c o n f l i c t s u n s a t i s f i ed ; a b o rt i n g . dpkg - bu i l dpackage : ( Us e - d f l a g t o ove r r i de . ) Chybějí totiž některé balíky nutné pro vytvoření právě tohoto zdrojového balíku . Nain stalujeme je takto:
# a p t - g e t i n s t a l l l i bd b4 . 2 - d e v l i b g d bm - d e v l i b l d a p 2 - d e v l i bmy s q l c l i e n t l O - d e v l i bs a s 1 2 - dev postgresq l - dev Učiníme druhý pokus. Vytváření bude vypadat takto:
# d p kg - b u i l d p a c k a g e d p kg - bu i l dpackage : source package i s d p kg - bu i l d p a c k a g e : s o u r c e v e rs i on i s d p kg - bu i l d p a c k a g e : s o u rce ma i n t a i n e r dpkg - bu i l dpackage : host a rc h i tecture debi a n / rul es c l ean test -f debi a n / ru l es d h_c l e a n b u i l d
postf i x 2.1.3-1 i s L a M o n t J o n e s < l a m o n t@d e b i a n . o r g > i s i 386
d p kg - d e b : b u i l d i n g p a c k a g e ' p o s t f i x - d o c ' i n ' . . / p o s t f i x - d o c_2 . 1 . 3 - 1 _a l l . d e b ' . dpkg - genchanges dpkg - g e n c h a n ge s : i n c l ud i ng f u l l s o u rce code i n u p l o a d d p kg - bu i l d pa c ka g e : f u l l u p l o a d ( o r i g i n a l s o u rce i s i n c l uded ) Nyní je vše v pořádku, můžeme se však o tom pro jistotu přesvědčit:
II c d . . # l s - 1 * . deb - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t - rw - r - - r - - 1 r o o t
s rc s rc s rc s rc s rc s rc s rc s rc
97592 Jul 662758 Jul 33644 J u l 29646 J u l 29430 Jul 29920 Jul 1 40 1 1 0 J u l 763570 Jul
5 1 3 : I I p o s t f i x - d e v_2 . 1 . 3 - La l l . d e b 5 1 3 : 1 1 p o s t f i x - d o c_2 . 1 . 3 - 1_ a l l . d e b 5 1 3 : I I p o s t f i x - l d a p_2 . 1 . 3 - 1_ i 3 8 6 . d e b 5 1 3 : 1 1 p o s t f i x - my s q l _2 . 1 . 3 - 1_ i 3 8 6 . d e b 5 1 3 : 1 1 p o s t f i x - p c r e _2 . 1 . 3 - 1_ i 3 8 6 . d e b 5 1 3 : I I p o s t f i x - p g s q l _2 . 1 . 3 - 1 _ i 3 8 6 . d e b 5 1 3 : I I p o s t f i x - t l s_2 . 1 . 3 - 1_ i 3 8 6 . d e b 5 1 3 : 1 1 p o s t f i x_2 . 1 . 3 - 1 _ i 3 8 6 . d e b
39 0
'a-fiNt'
Příloha A
Zdá se, že výpis obsahuje vše potřebné, můžeme tedy spustit instalaci :
Instalace Postfixu v operačním systému Red Hat Linux V systému Red Hat Linux můžeme nainstalovat Postfix pomocí systému RPM (Red Haf package Manager). Počínaje verzí Red Hat Linux 7.3 můžeme dokonce nainstalovat Post fix společně se systémem Sendmail a mezi oběma systémy se přepínat. I když se verze Postfixu v průběhu času mění, podobně jako u systému Debian je veli ce nepravděpodobné, že by se v dohledné době změnil také instalační proces.
Jak získáme Postfix pro systém Red Hat Linux Instalační balík systému Red Hat implicitně neobsahuje Postfix, avšak v průběhu instala ce jej můžeme doplnit. Nejprve zjistíme, zda Postfix je či není v balíku : # rpm - q p o s t f i x postfi x - 2 . 1 . 1 · 3 . fcl Správce vypsal číslo nainstalované verze . Pokud operační systém Postfix neobsahuje, správce vypíše přibližně takovéto hlášení: # rpm - q p o s t f i x p a c k a g e p o s t f i x i s not i n s t a l l ed
POZNÁMKA Správce vypíše pouze ty progra my, které sá m n a i nsta lova l - n i ko l i a p l i kace přeložené a insta lova né ze zd rojového kód u .
Vytvoření Postfixu na CD Nejvhodnějším způsobem, j a k začlenit Postfix do systému , je zkopírovat jej z CD systé mu Red Hat na pevný disk a nainstalovat jej pomocí RPM . CD vložíme do mechaniky a připojíme jej k systému pomocí příkazu : # m o u n t I d e y / c d rom / mn t / c d rom/ Zkopírujeme jej na pevný disk : # rpm - i v h / mn t / c d rom/ Red H a t / R PM S / p o s t f i x - X X - xx . rpm
Stažení Postfixu ze stránek Red Hat Postfix také můžeme stáhnout z FTP firmy Red Hat nebo z některého zrcadla. Seznam zrcadel nalezneme na h t t p : / / www . r e d h a t . c o m / d ow n l o a d / m i r r o r . h t m l . Po stažení sdě líme správci, aby nainstaloval příslušné soubory: # rpm - i v h ftp : / / U S E R : PASSWO RD@H OST : P O RT / p a t h / t o / p o s t f i x - X X - xx . rpm
I nsta lace Postfixu
'a-MMt'
Balíky Postfixu na stránkách Red Hat se ovšem neaktualizují stejným tempem, jak po stupuje jeho vývoj . Chceme-li mít trvale nejaktuálnější verzi Postfixu, aniž bychom jej museli neustále překládat ze zdrojového kódu , doporučujeme sledovat RPM udržovaný Simonem J. Mudem.
Stahování RPM Postfixu udržovaného Simonem J. Muddem Simonovy verze RPM jsou obvykle aktuálnější než verze, jež jsou součástí distribuce Red Hat. Můžeme si stáhnout přímo binární soubory na různých platformách včetně Linuxu pro systém Alpha , Sparc nebo IBM S390 (mainframe) nebo si můžeme stáhnout SRPM (RPM Source Package). Na stejných stránkách nalezneme i podporu vytváření binárních balíků s příslušnými volbami . Zrcadla Simonova RPM a SRPM najdeme na h t t p : / / p o s t f i x . w l O . o r g / e n / m i r r o r s / .
Stahování Postfixu z rpmfind.net A konečně, RPM pro různé distribuce nalezneme také na rpmfind.net. Prohlížeči zadáme adresu h t t p : / / www . r p m f i n d . n e t . najdeme postfix a můžeme si stáhnout příslušný RPM.
Vytváření RPM ze SRPM Z důvodů bezpečnosti bychom měli vytvářet RPM ze SRPM jako uživatel r o o t . Pokud bychom vytvářeli RPM jako normální uživatel, tento postup vyžaduje jistou přípravu . Zej ména je nutno vytvořit určité adresářové struktury, jejichž implicitní hodnota je / u s r / s r c / redhat.
Nastavení adresářové struktury a vnější proměnné Pokud vytváříme RPM jako normální uživatel, nemůžeme používat implicitní adresáře, do nichž může zapisovat pouze uživatel r o o t . Příslušné adresářové struktury musíme vy tvořit v domovském adresáři, a to pomocí následujícího skriptu. Rovněž musíme nasta vit vnější proměnné systému RPM :
ff ! / b i n / s h ff r p m u s e r B u i l d u s e r r p m b u i l d e n v i r o n m e n t ff A u t h o r : T u omo S o i n i < h t t p : / / t i s . f o o b a r . f i > ff ff c r e a t e d i r e c t o r i e s f o r i i n S O U RC E S S P E C S B U I L D S R P M S R P M S / i 3 8 6 R P M S / i 4 8 6 R P M S / i 5 8 6 R P M S / i 6 8 6 \ RPMS/ a t h l on RPMS / n o a r c h do m k d i r - p $ H OM E / r p m / $ i done unset i ff s e t e n v i r o n me n t v a r i a b l e s "-., e c h o " Lt o p d i r $ H OM E / r p m " » $ H O M E / . r pmma c r o s ff E O F Řekněme, že jsme s i pro vytváření RPM zřídili uživatelské jméno r p m u s e r . P o provedení příkazu r p m_p r e p a r e . s h by v domovském adresáři uživatele měly být tyto adresáře a podadresáře :
39 1
Příloha
392
A
$ t ree rpm
1 1 1 1 1 1 1 1 1 1
- - BU I LD - - RPMS
athl on i 386 i 486 i 586 i 686 noarch - S D U RC E S - - SPECS S RPMS r p m_p r e p a r e . s h 1 2 d i rectori es , 1 fi l e -
Skript rovněž nastaví správné hodnoty proměnných v souboru . r pmma c r o s . Jako uživa tel , který vytváří RPM , musíme při každém přihlášení i odhlášení nastavit příslušné vněj ší proměnné. Můžeme tak učinit pomocí příkazu e c h o n %_topd i r $ H O M E / rpmn »
$ H O M E / . r pmma c r o s .
POZNÁMKA Další podrobnosti o vytvá řen í RPM nalezneme na ad rese h t t p : / / r pm . o r g .
Vytváření a instalace RPM Při vytváření binárních souborů ze zdrojových nelze použít žádné volby. Postup je ta kový, že pomocí příkazu r p m - i v h p o s t f i x - X X - x x . s r c . r p m nainstalujeme zdrojový ba lík do nového adresáře rpm a podíváme se do skriptu, který vytváří soubory spec:
$ l e s s r pm / S O U RC E S / ma ke - p o s t f i x . s p e c # # # # # # # # # # # # # # # #
T h e f o l l ow i n g e x t e r n a l v a r i a b l e s i f s e t t o 1 a f f e c t t h e b e h a v i o u r
# # # # #
T o r e b u i l d t h e s p e c f i l e , s e t t h e a p p r o p r i a t e e n v i r o n me n t v a r i a b l e s a n d d o t h e f o l l ow i n g :
P O S T F I CM Y SQ L P O S T F I X_MY S Q L R E DHAT P O S T F I X_MY S Q L_PAT H S
POST F I X_LDAP P O S T F I X_P C R E P O S T F I X_P G S Q L P O S T F I CS A S L P O S T F I X_T L S P O S T F I X_ I P V 6 P O S T F I X_V DA
i n c l u d e s u p p o r t f o r MyS Q L ' s My S Q L p a c k a g e s i n c l u d e s u p p o r t f o r Re d H a t ' s my s q l p a c k a g e s i n c l u d e s u p p o r t f o r l o c a l l y i n s t a l l e d my s q l b i n a ry , prov i d i ng the col on sepera ted i nc l ude and 1 i b r a ry p a t h s ( / u s r / i n c l u d e / my s q l : / u s r / l i b / my s q l l i n c l u d e s u p p o r t f o r w r i t i n g f u l l s e l e c t s t a t e me n t s i n my s q l m a p s i ncl ude s upport for open l d a p packages i ncl ude s upport for pere maps i nc l ude s upport for PostGres d a t a ba s e i n c l ude s u p p o r t f o r SAS L ( 1 , 2 o r O t o d i s a b l e l i nc l ude s upport f o r T L S i nc l ude s upport f o r I Pv 6 i n c l u d e s u p p o r t f o r V i r t u a l D e l i v e ry A g e n t
cd ' r pm - - e v a l ' % I _s o u r c e d i r } " e x p o r t P O S T F I X_MY S Q L= 1 # f o r e x a mp l e
'4'fi'0:'
I nsta lace Postfixu U sh ma k e - p o s t f i x . s p e c U c d ' r pm - - e v a l ' % I _s p e c d i r l " U rpmb u i l d - b a p o s t f i x . s pe c
Při nastavování vnějších proměnných a vytváření souboru spec se musíme řídit instruk cemi ve skriptu . Jakmile máme soubor spec vytvořený, zadáme příkaz:
$ r pmb u i l d - b a rpm/ S P E C S / p o s t f i x . s p e c P o dokončení přejdeme d o režimu uživatele root a Postfix nainstalujeme: # rpm - i v h / p a t h / t o / p o s t f i x - X X - xx . rpm Nyní stačí říci serveru Red Hat, aby jako MTA používal Postfix.
Přepnutí do Postfixu Implicitním přenosovým agentem (MTA) na serverech Red Hat je Sendmail, přičemž vo litelně se můžeme přepnout do Postfixu .
POZNÁMKA Počínaj e verzí 7.3 obsa h uje distri buce systému Red Hat debia nový port nazva ný a l t e r n a t i v e s . Tímto příkazem m ůžeme do jednoho systém u současně n a i nsta lovat progra my se stej ným i nebo podobným i fu n kce m i . Přejdeme d o režimu root, zadáme příkaz a l t e r n a t i v e s - - c o n f i g m t a a poté uvedeme jako implicitního přenosového agenta Postfix: # a l t e r n a t i v e s - - c o n f i g mta T h e r e a r e Z p r o g r a m s w h i c h p r o v i d e ' mt a ' . Sel ect i on C o mm a n d
*+ 1 / u s r / s b i n / s endma i l . s e n d ma i l Z / u s r / s b i n / s endma i l . po s t f i x E n t e r to keep t h e defa u l t [ * ] , o r type s e l ec t i on n umbe r : Z Jakmile se Postfix stane implicitním MTA, bude se automaticky spouštět při zavádění systému . Příkazem c h k c o n f i g můžeme zjistit úrovně běhu : # ch kconfi g - - l i s t postfi x postfi x O : off l : off
Z : on 3 : on
4 : on
5 : on 6 : off
Odstranění programu Sendmail Pokud jsme nainstalovali Postfix, není důvod k tomu , aby s e v systému poflakoval i Sendmail. Odstraníme jej příkazem: # rpm - e s e n d ma i l
Spouštění a ukončování Postfixu v systému Red Hat Linux Součástí RPM v systému Red Hat Linux jsou i startovací a ukončovací skripty uložené v adresáři l e t c i i n i t . d. Postfix spustíme příkazem / e t c / i n i t . d / p o s t f i x s ta rt a ukon číme příkazem / e t c / i n i t . d / p o s t fi x s t o p .
393
PŘfLOHA
B v
"
ODSTRAN OVANI ZAVAD V POSTFIXU ,
V této příloze naleznete tipy směřující do některých problémových oblastí jako záznamy do žurnálu , konfigurace, zvláštnosti při používání sítě a také obecné systémové záleži tosti . Podobně jako je tomu i v jiných případech, narazíme-li v Postfixu na problém, musíme mít alespoň představu o tom, v které oblasti se nachází, abychom jej mohli od stranit. To platí zejména o Postfixu , který se skládá z několika samostatných subsystémů .
Problémy se spouštěním a se žurnálem Postfix nejčastěji "odmítá" zpracovávat poštu proto, že neběží. Postfix musí být spuštěn dokonce i tehdy, když chceme poslat poštu pomocí příkazu s e n d m a i 1 . Nejsnáze spustí me Postfix pomocí příkazu p o s t f i x s t a r t : ffo p o s t f i x s t a r t
p o s t f i x / p o s t f i x - s c r i p t : s t a r t i n g t h e P o s t f i x ma i l s y s t em
Vypíše-li se tato zpráva , znamená to, že Postfix skutečně neběžel a spustili jsme jej tepr ve tímto příkazem. Když ovšem běžel, vypíše se: ffo p o s t f i x s t a r t
p o s t f i x / p o s t f i x - s c r i p t : f a t a l : t h e P o s t f i x ma i l s y s t e m i s a l r e a dy r u n n i n g
Při zadávání tohoto příkazu bychom měli v žurnál ním souboru mít přibližně takováto hlášení:
Jul Jul
5 2 2 : 4 9 : 2 9 ma i l p o s t f i x / p o s t f i x - s c r i p t : s t a r t i n g t h e P o s t f i x ma i l sy s t e m 5 2 2 : 4 9 : 2 9 ma i l p o s t f i x / m a s t e r [ 1 4 8 3 5 J : d a emon s t a r t e d - - v e r s i on 2 . 1 . 3
Pokud tato hlášení v žurnálu nenajdeme, je třeba ihned zkontrolovat konfiguraci s y s 1 D g . J e nutno se přesvědčit, že zapisuje do mail. *; kompletnost zápisú do žurnálních soubo rů je podmínkou úspěchu při odstraňování závad. Doporučujeme nasměrovat všechny položky související s poštou (dle konfigurace Postfixu) do jednoho žurnálního souboru . Některé instalace (například v systému Debian GNU/Linux) zapisují hlášení do několika souborů , které se pak velmi obtížně prohlížejí. Měli bychom se přesvědčit, zda je v sou boru / e t c / s y s l o g . c o n f takováto (nebo obdobná) položka :
396
'B-h'iC'
Příloha B
# ( - L o g a 1 1 t h e m a i l me s s a g e s t o o n e p 1 a c e . J ma i 1 . * / v a r / 1 og /ma i 1 1 og -
Řekněme, že hlášení na příkazovém řádku i v žurnál ním souboru už fungují, avšak stá le nevíme, jestli Postfix běží. Můžeme si při tom někdy připadat i poněkud paranoicky, neboť je klidně možné, že v případě nějakého vážného problému Postfix zhavaruje vždy ihned po spuštění. Zda skutečně běží postfixoví démoni, se můžeme přesvědčit pomocí příkazů ps a g r e p . Pokud ano, příkaz by se měl provést přibližně takto: #
ps aux l grep postf1 x
root po s t f i x pos t f i x
5035 5036 5037
0.0 0.0 0.0
0.4 0.3 0.3
2476 2404 2440
S S S
1 1 00 ? 936 ? 964 ?
0 : 00 / u s r / 1 i b / p o s t f i x / ma s t e r 0 : 00 p i c k u p - 1 - t f i fo - u - c 0 : 00 qmg r · 1 - n qmg r - t f i fo - u - c
09 : 29 09 : 29 09 : 29
V tomto výpisu vidíme, ž e démon m a s t e r běží jako r o o t , zatímco správce fronty ( q mg r J a služba p i c k u p běží jako uživatel Postfixu , takže systém je v činnosti a běží. Existuje několik příčin, proč může Postfix zhavarovat už při spuštění. Nejčastější z nich je, že některý z démonů nemůže nalézt sdílenou knihovnu. Abychom si tento problém trochu přiblížili, nejdříve si najdeme, které adresáře Postfix používá:
# p o s t c o n f I g re p d i r e c t o ry c omma n d_d i r e c t o ry /usr/sbi n c o n f i g_d i r e c t o ry /etc/postfi x =
=
da emon_d i re c t o ry - / us r / 7 i b / p o s t f i x
m a i 1 _s p o o 1 _d i r e c t o ry / v a r / ma i 1 m a n p a g e_d i r e c t o ry / u s r / 1 0ca 1 /man p r o c e s s_i d_d i r e c t o ry pi d p r o g r a m_d i r e c t o ry /usr/sbi n q u e u e_d i r e c t o ry / v a r / spoo 1 /postfi x r e a d m e_d i r e c t o ry no r eq u i r e_ h o m e_d i r e c t o ry no s a m p 1 e_d i r e c t o ry /etc/postf i x t 1 s _r a n d om_e x c h a n g e_n a me $ { c o n f i g_d i r e c t o ry l / p r n g_e x c h =
=
=
=
=
=
=
=
=
Hledáme cestu k d a e m o n_d i r e c t o ry . Až ji nalezneme, přejdeme do tohoto adresáře a po díváme se na obsah:
# cd / u s r / 1 i b / postfi x ff 1 s - 1 t o t a 1 384 - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rw x r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root - rwx r - x r - x 1 root
root root root root root root root root root root root root root
1 6 5 88 2 2 684 4248 1 0344 20508 31956 2 2 388 33084 7 248 1 0496 27424 12160 7456
Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep
12 12 12 12 12 12 12 12 12 12 12 12 12
1 8 : 50 18 : 50 18 : 50 1 8 : 50 18 : 50 18 : 50 1 8 : 50 18 : 50 18 : 50 1 8 : 50 18 : 50 18 : 50 18 : 50
bounce c1 eanup error f1 ush 1 mt p 1 0c a 1 ma s t e r nqmg r p i c kup pi pe qmg r qmqpd s h owq
�
•4-UiiC'
Odstra ňová n í závad v Postfixu
- rw x r - x r - x - rwx r - x r - x - rwx r - x r - x - rwx r - x r - x - rwx r - x r - x
root root root root root
root root root root root
25000 447 1 2 5612 1 0284 1 0400
Sep Sep Sep Sep Sep
12 12 12 12 12
1 8 : 50 1 8 : 50 18 : 50 1 8 : 50 1 8 : 50
smtp smtpd s pawn t r i v i a l - r ew r i t e vi rtua l
V tomto adresáři by měli být démoni ze sloupce s příkazy v souboru le t c / p o s t f i x / m a s t e r . c f . Příkazem 1 d d můžeme zjistit závislosti jednotlivých programů na sdílené kni hovně (tak funguje příkaz 1 dd v Linuxu, v Solarisu i v jiných variantách Unixu, zatímco v jiných systémech může jít o jiný příkaz): # l d d ' p o s t c o n f - h d a emon_d i r e c t o ry ' / s mtpd l i b p o s t f i x - ma s t e r . s o . 1 ) / u s r / l i b / l i b p o s t f i x - m a s t e r . s o . 1 ( O x 4 0 0 1 d O O O ) l i bpo s t f i x - g l oba l . so . 1 ) / u s r / l i b/ l i bpostfi x - g l o b a l . s o . 1 ( Ox40023000 ) l i bpostfi x - dn s . s o . 1 ) / u s r / l i b/ l i bpostf i x - dn s . so . 1 ( Ox4003cOOO ) l i bpo s t f i x - ut i l . s o . 1 ) / u s r / l i b / l i bp o s t f i x - ut i l . s o . 1 ( Ox40040000 ) l i bd b 3 . s o . 3 ) / u s r / l i b / l i bd b 3 . s o . 3 ( O x 4 0 0 5 d O O O ) l i bn s l . s o . 1 ) / l i b / l i bn s l . s o . 1 ( Ox40 1 0 5000 ) l i b r e s o l v . s o . 2 ) / l i b / l i b r e s o l v . s o . 2 ( Ox40 1 1 9000 ) l i b g d bm . s o . 1 ) / u s r / l i b / l i b g d bm . s o . 1 ( O x 4 0 1 2 a O OO ) l i bc . s o . 6 ) / l i b/ l i bc . s o . 6 ( Ox401 30000 ) l i bd l . s o . 2 ) / l i b / l i bd l . s o . 2 ( Ox4024bOOO ) / l i b/ l d - l i n ux . s o . 2 ) / l i b/ l d - l i nux . s o . 2 ( Ox40000000 ) =
=
=
=
=
=
=
=
=
=
=
Z předchozího výpisu se zdá, že s démonem s m t p d je vše v pořádku, neboť ke všem zá vislostem na knihovně existuje příslušný soubor. Horší by bylo, kdybychom obdrželi na příklad takovýto výpis: # l d d ' p o s t c o n f - h d a emon_d i r e c t o ry ' / s mtpd l i b p o s t f i x - ma s t e r . s o . 1 ) / u s r / l i b / l i b p o s t f i x - ma s t e r . s o . 1 ( O x 4 0 0 1 d O O O ) l i bpos t f i x - g l oba l . s o . 1 ) / u s r / l i b / l i bpostfi x - g l oba l . s o . 1 ( Ox40023000 ) l i bpostf i x - dn s . s o . 1 ) / u s r / l i b/ l i bpostfi x - dn s . s o . 1 ( Ox4003cOOO ) l i b p o s t f i x - ut i l . s o . 1 ) / u s r / l i b / l i bp o s t f i x - ut i l . s o . 1 ( Ox40040000 ) =
=
=
=
7 i bdb3 . s o . 3 -) n o t fo und
l i bn s l . s o . 1 ) / l i b/ l i bn s l . s o . 1 ( Ox4005dOOO ) l i b r e s o l v . s o . 2 ) / l i b / l i b r e s o l v . s o . 2 ( Ox400 7 1 000 ) l i b g d bm . s o . 1 ) / u s r / l i b / l i b g d bm . s o . 1 ( O x 4 0 0 8 2 0 0 0 ) l i bc . s o . 6 ) / l i b / l i bc . s o . 6 ( Ox40088000 ) l i bd l . s o . 2 ) / l i b / l i bd l . s o . 2 ( Ox40 1 a 3000 ) / l i b / l d - l i n ux . s o . 2 ) / l i b / l d - l i n ux . s o . 2 ( Ox40000000 ) =
=
=
=
=
=
V tomto případě chybí 1 i b d b 3 . s o . 3 . Program, který nemůže najít všechny své sdílené knihovny, nepoběží. Pokud provozujeme Linux a nainstalovali jsme si Postfix určený pro jinou distribuci (nebo pouze pro jinou verzi správné distribuce), můžeme se s takovým problémem setkat až v době běhu programu . V takovém případě je nutno učinit určité rozhodnutí.
Nejlepším řešením je najít balík s Postfixem, který náleží k příslušné distribuci, anebo přeložit zdrojový kód (viz příloha A). Nicméně, pokud chceme pokračovat se systémy, které máme nainstalované, můžeme najít knihovnu 1 i b d b 3 . s o . 3 takto: # f i n d / - n a me l i bd b3 . s o . 3 / u s r / l i b / l i bd b3 . s o . 3
397
Příloha
398
B
Provedení příkazu asi bude trvat velice dlouho (neboť se bude prohledávat celý systém), avšak budeme-li mít to štěstí a knihovnu najdeme, můžeme přidat cestu k ní do soubo ru / e t c /.l d . s o . c o n f a spustit příkaz l d c o n f i g . Pochopitelně mohou vzniknout konflik ty mezi knihovnami a symboly. Směšování knihoven s sebou prakticky vždy přináší podobné problémy. Může se dokonce stát, že příkazem find si nepomůžeme, neboť knihovna nemusí být re zidentní v našem systému. Jde-li o tento případ, možná, že dokážeme najít balík, který tu to knihovnu obsahuje. Pokud ovšem máme obavy, že by celá procedura byla složitá a výsledek nejistý, musíme učinit důležité rozhodnutí. Existuje-li totiž balík s Postfixem, kte rý zcela určitě funguje, bylo by lepší vyměnit operační systém nebo distribuci Postfixu .
Připojování k Postfixu Pokud Postfix úspěšně spustíme, avšak nechová se podle očekávání, musíme se podí vat, jestli server skutečně přijímá spojení na portu 25. Abychom to zjistili, připojíme se k portu SMTP . Úspěšné připojení vypadá takto: # tel net l oc a l host 25 2 2 0 ma i l . e x a m p l e . c o m E S M T P P o s t f i x
QUIT 2 2 1 Bye Můžeme se připojit k rozhraní zpětné smyčky, což ovšem neznamená, že se k němu mů že připojit celý Internet. Řekněme, že náš počítač je na 1 0 . 1 . 2 . 233. Zkusíme se znovu při pojit, tentokrát na IP adresu: # t e l n e t 1 0 . 1 . 2 . 2 33 2 5 2 2 0 ma i l . exampl e . com E SMTP P o s t f i x
QU I T 2 2 1 Bye Pokud to nefunguje, musíme se nejprve podívat do souboru m a i n . c f , jestli byl nastaven parametr ineUnterfaces s vyloučením příslušné IP adresy. Implicitně se sledují všechna rozhraní.
Ověření sítě Pokud se zdá, že konfigurace je v pořádku a Postfix byl restartován , avšak nedaří se na vázat spojení, prověříme firewall nebo konfiguraci filtrování IP. Je možné, že systém blo kuje daný port implicitně. Možná se budeme muset podívat na více míst, neboť filtrování IP může provádět firewallový skript operačního systému (například něco, co volá i p t a b l e s nebo i pf) anebo může probíhat mimo počítač ve firewallu nebo ve směrovačích. Musíme vyzkoušet úplně všechno. Pokud až sem vypadá konfigurace dobře, musíme hledat mimo síť. Příchozí poštu na portu 25 může blokovat i poskytovatel připojení (anebo také odchozí poš'nJ na port 25 na jiném počítači). Zjistíme-li, že poskytovatel odmítá příchozí poštu a odmítá otevřít port 25, jedinou možností je změna poskytovatele .
'4-hdC'
Odstra ňová n í závad v Postfixu Následujícím příkazem zjistíme, jestli nás může kontaktovat někdo zvenčí: # t e l n e t r e l ay - t e s t . ma i l - a b u s e . o r g
P o uskutečnění tohoto spojení můžeme otestovat on-line předávání počítače, který spo jení uskutečnil. Pokud poskytovatel (anebo vlastní firewall) neblokují příchozí spojení do schránky na portu 25, měli bychom se podívat na několik hlášení v žurnálním souboru . Nemůžeme-li se připojit k předchozímu počítači, problém může být v rozpoznávání jmen . Otestujeme je tímto příkazem: # h o s t r e l a y - t e s t . ma i l - a b u s e . o r g r e l a y - t e s t . ma i l - a b u s e . o r g i s a n a l i a s f o r e y g n u s . ma i l - a b u s e . o r g . ey g n u s . m a i l - a b u s e . o r g h a s a d d r e s s 1 6 8 . 6 1 . 4 . 1 3 Měli bychom vidět IP adresu , podobně jako v předchozím výpisu . Jestliže ji nevidíme, nefunguje rozpoznávání jmen počítačů a chyba může být v některém ze souborů l e t e / r e s o l v . e o n f nebo l e t e / n s s w i t e h . e o n f (případně v obou). Anebo, což je ještě horší, počítač není schopen se připojit k Internetu . Můžeme zkusit něco "pinknout" (ping). Úspěšný test by měl vypadat přibližně takto (ukončíme jej pomocí CTRL-C): # p i n g 1 34 . 1 6 9 . 9 . 1 0 7 P I N G 1 3 4 . 1 6 9 . 9 . 1 0 7 ( 1 3 4 . 1 6 9 . 9 . 1 0 7 ) : 5 6 d a t a by t e s 6 4 by t e s f r om 1 3 4 . 1 6 9 . 9 . 1 0 7 : i e mp_s eq�O t t l � 5 4 t i me� 1 2 . 1 m s 64 by t e s f r om 1 34 . 1 6 9 . 9 . 1 0 7 : i e mp_s e q � l t t l � 5 4 t i me� 1 2 . 1 m s 6 4 by t e s f r om 1 3 4 . 1 6 9 . 9 . 1 0 7 : i e mp_s e q� 2 t t l � 5 4 t i me� 1 2 . 1 m s - - - 1 34 . 1 69 . 9 . 1 0 7 p i n g s t a t i s t i e s - - 3 paekets t r a n smi tted . 3 p a e kets reeei ved . 0% pa e ket 1 05 5 round - t r i p mi n / a v g /max � 1 2 . 1 / 1 2 . 1 / 1 2 . 1 ms
Ověření procesu sledování Pokud Postfix běží a prověřili jsme i síť, avšak nefunguje testovací připojení, musíme se pomocí příkazu n e t s t a t přesvědčit, zda Postfix skutečně sleduje port 25: # n e t s t a t - t - a I g r e p L I ST E N O * : pri nter tep O O l o e a l h o s t : d o ma i n tep O O O * : ssh tep O * : smtp O tep
*.* *.* *.* *.*
L I ST E N L I ST E N L I ST E N L I ST E N
Z předchozího výstupu vidíme, že existují servery, které sledují porty tiskárny, domény, SSH a SMTP (číselné ekvivalenty jmen jsou na 1 e t e l s e r v i e e s ) . Vidíme, že někdo sle duje port 25, avšak je to Postfix nebo někdo j iný? To nám řekne příkaz 1 s o f . Zadáme následující příkaz, a obsahuje-li výstup s e n d m a i 1 , který sleduje port 25, je stále ještě aktivní: # l sof - i tep : 25 C O M MA N D PID USER sendma i l 2 5 9 7 6 root ( L I STEN )
FD 4u
TY P E D E V I C E S l Z E N O D E N A M E I Pv4 228618 T C P ma i l . exampl e . eom : smtp
399
400
'4-fi'd'
Příloha
B
Tento proces zrušíme a upravíme startovací soubory systému, aby se při spuštění systé mu situace neopakovala (je-li to možné, Sendmail odstraníme ze systému úplně, neboť, jak jsme pi řekli, chceme provozovat jen Postfix).
POZNÁMKA 1 s o f je ve l m i s i l ný nástroj, jehož prostřed n i ctvím zj istíme, které všechny soubory jsou otevřené (a procesy, které tyto soubory používaj í), avša k závisí to i na jádru systém u . M usíme zkontro lovat, j est l i máme a ktu á l n í 1 s o f přísl ušný k použitému j á d r u . Sta rší ver ze progra m u 1 s o f nejsou schopny zj istit i nternetová spoj e n í. Jsme- I i na pochybách, správnou fu n kci progra m u 1 s o f ověříme pomocí příkazu 1 s o f - i . Používáme-li Postfix, z výstupu programu lsof by mělo být zřejmé, že Postfix sleduje port 25 prostřednictvím démona ma s t e r : # 1 s of - i t c p : 2 5 COMMANO P I O USER ma s t e r 26079 root
FO IIu
TY P E I Pv4 228828
OEV ICE S l Z E TCP * : smtp
N O O E NAM E ( L I ST E N )
Správný konfigurační soubor Soubor ma i n . c f j e velmi dlouhý a obtížně s e čte . Některá volba s e v něm může vysky tovat dvakrát anebo někde mezi komentáři může být skrytý překlep . Kterou konfiguraci Postfix skutečně používá, můžeme zjistit pomocí příkazu p o s t c o n f , nesrovnalost může vyjít najevo už jenom z počtu řádků konfiguračního souboru : # cd / e t c / p o s t f i x # wc - 1 ma i n . c f # p o s t c o n f - n I wc - 1 výstup příkazu p o s t c o n f - n obsahuje nastavení všech parametrů , a to i těch, jež mají shodnou hodnotu s hodnotou implicitní. Příkazem p o s t c o n f bychom si měli ověřit kaž dou změnu v souboru ma i n . c f . Programově můžeme nastavovat parametry v souboru ma i n . c f n a hodnotu v a 7 u e příka zem p o s t c o n f - e p a r a me t e � v a 7 u e. Pomocí tohoto malého triku můžeme měnit konfi guraci Postfixu skripty nebo úlohami cron. Kdo se chce zabývat konfiguracemi Postfixu podrobněji, nalezne inspiraci v manuálo vých stránkách postconf(5).
Ohlašování problémů s Postfixem Pokud s Postfixem úplně začínáme, bude obtížné posoudit, které informace by patřilo ohlásit na p o s t f i x - u s e r s @p o s t f i x . o r g . Program p o s t f i n g e r (napsal jej Simon ) . Mudd) dokáže vybrat většinu relevantních informací. Abychom viděl � co se děje, pošleme vý stup příkazu postfinger společně s případnými dotazy sami sobě: # p o s t f i n g e r I / u s r / s b i n / s e n d ma i 1 y o u r a dd r e s s@yo u r . doma í n Nutným předpokladem ovšem j e funkčnost odchozí pošty. Když jinak nefunguje vůbec nic, je možné poslat výstup do jiného systému .
Odstra ňová n í závad v Postfixu
'4'fi'iC'
Vztahuje-li se problém k SMTP-AUTH a tedy k SASL, použijeme Patrikův skript s a s 1 f i n g e r ! s a s 1 f i n g e r je bashová utilita , která může pomoci s hledáním chyby v nastave ní SMTP AUTH . Shírá v systému různé informace o systému Cyrus SASL a o Postfixu a posílá je na s t d o u t . Abychom zjistili, co se děje, pošleme výstup ze s a s l f i n g e r s pří padnými dotazy sami sobě: # s a s 1 f i n g e r - s I l u s r / s b i n / s e ndma i l y o u r a dd r e s s@yo u r . doma i n
POZNÁMKA Až do verze 2 . 1 byl s a s 1 f i n g e r součástí zd rojové postfixové d istri buce. Lze jej získat na ft p : 1/ f t p . w 1 O . o r g / s o u rce s / pos t fi nge r . Nyní už n e n í součástí distri buce a lze jej zís kat také na ad rese h t t p : / / p o s t f i x . s t a t e - of - mi n d . d e / p a t r i c k . k o e t t e r / s a s 1 f i n g e r .
Zvýšení množství informací v žurnálním souboru Jsou-li problémy, kterých s e nemůžeme zbavit, omezeny j e n na určitou část Postfixu , mů žeme zvětšit množství informací, které se budou prostřednictvím démonů zapisovat do žurnálního souboru . Ke konfigurační položce příslušného démona v souboru /etc/post fix/master.cf přidáme - v , jako v následujícím příkladu (démon s m t pd):
# ======================================================================== # s e r v i c e t y p e p r i v a t e u n p r i v c h r o o t wa k e u p m a x p r o c c omma n d + a r g s ( yes ) # (yes ) ( never ) ( 50 ) (yes ) # smtp i n et n smtpd - v Změna platí od opětovného zavedení Postfixu . Démon by nyní měl být velmi upovída ný, pokud funguje . Pokud informací ještě ani tak není dost, můžeme do položky přidat další - v a dostaneme ještě rozsáhlejší výstup. Až s laděním skončíme, je nutno vrátit vol by do původního stavu, neboť přemíra informací zapisovaná do žurnálního souboru sni žuje celkovou výkonnost systému .
Zápis do žurnálu dle klienta Máme-li vytížený poštovní server a zvýšením úrovně zápisu všem klientům bychom se jen zahrabali do hromady výstupů, můžeme pomocí parametru d e b u g_p e e r _1 i st p a r a m e t e r vybrat pro zápis do žurnálu pouze určité klienty. Následující příklad ukazuje, jak pro zápis do žurnálu vybereme pouze klienty 1 0 . O . O . 1 a 1 0 . O . O . 4 .
d e b u g_p e e r_1 i s t = 1 0 . 0 . 0 . 1 , 1 0 . 0 . 0 . 4 Jako hodnotu tohoto parametru můžeme zadat jeden nebo více počítačů , domén, adres a sítí. Aby změna ihned vstoupila v platnost, musíme zadat příkaz postfix reload.
Žurnál a qmgr Obvyklým problémem bývá, ž e chybí žurnální zápis procesu q m g r . Správce front b y měl produkovat takovéto položky v zápisu :
40 1
Příloha
402
8
A u g 5 1 7 : 0 5 : 2 6 h o s t n a m e p o s t f i x / q mg r [ 3 0 8 J : A 4 4 F 8 2 8 C 7 1 : f r om�< b a mm@e x a m p l e . c om > . s i z e� 1 5 3 1 3 6 . n r c p t � l ( q u e u e a� t i v e ) Pokud takové položky chybějí. může to mít dvě příčiny:
Problémy s knihovnou Hbc Je narušená implementace knihovny 1 i bc (klient syslog nerozpozná restart serveru syslog) . V takovém případě je nutno aktualizovat knihovnu 1 i b c . qmgr
běží v uzavřeném prostoru
Proces q m g r běží v uzavřeném prostoru (viz ma s te r . c n. avšak v tomto prostoru ne ní socket pro syslog. V manuálových stránkách syslog(8) se dočteme. jak se vytvoří socket a jak se umístí do uzavřeného prostoru .
Další chyby v konfiguraci Existují tři chyby, které s e neustále opakují:
Problémy s otevíráOÚll souborů Máme-li potíže s otevíráním souborů , o nichž si myslíme, že existují, musíme se po dívat, jestli jsou uvedeny jako mapy (například začínají-li předponou hash :). Jde-li o tento případ, aplikujeme na nešifrovaný soubor příkaz postmap, čímž vytvoříme in dexovanou verzi souboru . Také bychom měli ověřit správné vlastnictví a přístupová práva k souboru . Musíme mít právo procházet daný adresář a také všechny adresáře, které k němu vedou .
Problémy s přístupovýnů právy Máme-li problémy s přístupovými právy, měli bychom pomocí příkazu po s t - i n s t a I I zjistit, zda je Postfix nastavuje automaticky: # / e t c / p o s t f i x / p o s t - i n s t a l l s e t - p e rm i s s i o n s u p g r a d e - c o n f i g u r a t i o n Tímto příkazem lze nejen zjišťovat nastavení přístupových práv, nýbrž je možné j e i měnit. Z toho důvodu bychom s i nejdříve měli pořídit záložní kopii stávající konfi gurace .
Komentáře Řádek, jehož první znak různý od mezery je dvojitý křížek (#), je komentář. Jiná syn taxe komentářů je v Postfixu nepřípustná. Vypíše-li příkaz p o s t c o n f nějaký neobvy klý parametr, může to být důsledek chybného umístění znaku # v konfiguračním souboru .
Nesnáze s uzavřeným prostorem Při provozování uzavřeného prostoru občas dochází k poněkud podivným úkazům. Ž ád ná instalace Postfixu neběží v uzavřeném prostoru implicitně. Wietse se takto moudře rozhodl z toho důvodu , že v režimu uzavřeného prostoru existuje mnoho problematic-
Odstra ňová n í závad v Postfixu
'a-fiijt'
kých míst. Správci některých jiných balíků se bohužel ve věcech bezpečnosti systémů nechovají takto rozumně. Postfixoví démoni si otevírají mapy ještě před vstupem do uzavřeného prostoru . Musí v něm ovšem být i systémové soubory potřebné pro hledání DNS, vyhledávání jiných počítačů, síťových služeb, časových pásem a jiných knihovních modulů z toho důvodu , že jsou přilinkovány k Postfixu . Správce balíku musí dodávat i skripty, kterými se ne zbytné soubory kopírují z původních umístění do uzavřeného prostoru . Obvykle k tomu potřebujeme soubory / e t c / r e s o l v . c o n f a / e t c / n s s w i t c h . c o n f . Skripty pro nastavení uzavřeného prostoru pod různými operačními systémy jsou ve zdrojové distribuci Post fixu obvykle uloženy v podadresáři e x a m p l e s / c h r o o t - s e t u p . Matthias Andree napsal skript LlNUX2, jímž se potřebná nastavení provedou přímo v Linuxu . Teoreticky by měl správce balíku dodávat mechanismus, kterým by se v určitém operačním systému nebo distribuci uzavřený prostor vybudoval . Pokud ovšem s uzavřeným prostorem teprve za čínáte, není vyloučeno, že budete poněkud zmateni. Místo úprav uzavřeného prostoru , o jehož existenci jste dosud neslyšeli, byste nyní měli postfixové démony z uzavřeného prostoru odstraňovat tak dlouho, dokud nebude Postfix plně funkční. Musíme se podí vat na všechny položky v souboru / e t c / p o s t f i x / m a s t e r . c f :
/I ======================================================================== /I s e r v i c e t y p e p r i v a t e u n p r i v c h r o o t wa k e u p m a x p r o c c omma n d + a r g s (yes ) (yes ) ( yes ) ( neve r ) ( 50 ) /I /I n i net smtp smtpd Pomlčka v e sloupci označeném chroot říká, ž e smtpd běží v uzavřeném prostoru . Na stavíme ji na n a znovu zavedeme Postfix. Navíc, vzpomeňme si, že nikoli všichni post fixoví démoni mohou běžet v uzavřeném prostoru . Většina může, ale když se pokusíme v uzavřeném prostoru provozovat démony p i p e , 1 o c a 1 nebo v i r t u a 1 , pravděpodobně se setkáme s neobvyklými problémy. Další informace o uzavřeném prostoru jsou uve deny v kapitole 20.
Problémy se systémem souborů Většina moderních systémů Unix nabízí žurnalizaci souborového systému, čímž ovšem stěží zabráníme občasným haváriím souborového systému, zejména dojde-li k nim vinou hardwaru nebo jde-li o rychlokvašený, nedostatečně odladěný systém. Dějí-li se v systé mu podivné věci, například mění-li se adresáře v soubory, měli bychom uvažovat o oka mžitém znovuzavedení systému a celkové vynucené kontrole všech disků pomocí f s c k těmito příkazy:
/I t o u c h / f o r c e f s c k fl s y n c
ft r e b o o t Poklesne sice doba bezporuchového provozu ( up t j me ) a uživatelé s i budou stěžovat, avšak bez f s c k nejsme schopni souborový systém opravit. Autoři této knihy už takto úspěšně otrávili mnoho uživatelů systémů Red Hat a Debian.
403
404
'4-fidil•
Příloha
B
Džungle v knihovnách Postfix in�enzívně využívá sdílené knihovny, například BerkeleyDB. Konkrétně tato kni hovna způsobuje celou řadu problémů , neboť existuje nepřeberné množství různých je jích verzí s různými datovými formáty na disku . Všechny komponenty poštovní služby, např. Postfix, POP-before-SMTP, dracd, postgrey a ostatní nástroje, jež pracují s mapami typu h a s h : nebo b t r e e : a mění je, používají kompatibilní knihovny BerkeleyDB. Je to ještě horší: diskové formáty dat v různých verzích knihovny BerkeleyDB jsou nekompa tibilní, což znamená, že aplikace nepřečte mapu vytvořenou jinou aplikací, která použí vá jinou verzi knihovny BerkeleyDB . Jaké používá Postfix knihovny, zjistíme pomocí příkazu 1 dd, který je popsán v části "Po tíže se spouštěním Postfixu a prohlížením žurnálu" : # l d d ' p o s t c o n f - h d a emon_d i r e c t o ry ' / s mtpd l i bp c re . s o . O ) / u s r / l oca l / l i b / l i bp c re . s o . O ( Ox4001 dOOO ) �
l i bdb - 3 . 1 . s o -) / l i b / l i bdb - 3 . 1 . s o ( Ox4 0028000)
l i bn s l . s o . 1 ) / l i b/ l i bn s l . s o . 1 ( Ox400a 1000 ) l i b r e s o l v . s o . 2 ) / l i b / l i b r e s o l v . s o . 2 ( Ox400b80 0 0 ) l i bc . s o . 6 ) / l i b / l i bc . s o . 6 ( Ox400ca OOO ) / l i b/ l d - l i n ux . s o . 2 ) / l i b/ l d - l i n ux . s o . 2 ( Ox40000000 ) �
�
=
�
V předchozím výpisu je smtpd sestaven s knihovnou BerkeleyDB-3 . l .x, takže všechny ostatní programy, které potřebují sdílené mapy typu h a s h : a b t r e e : , musí používat stej nou verzi knihovny BerkeleyDB (anebo přinejmenším verzi, která má stejný diskový for mát).
Nekonzistentnost démonů Nepovede-li s e aktualizace Postfixu anebo proběhne-li nestandardním způsobem (na příklad instalace ze zdrojového kódu pomocí RPM, aniž by se nejdříve odstranila stará verze), mohou se dít divné věci. Mohou se totiž směšovat démoni z různých verzí Post fixu. Verze Postfixu, k nimž démoni patří, nalezneme pomocí příkazu strings aplikovaného na všechny binární soubory démonů, viz: # s t r i n g s / u s r / l i bexec / p o s t f i x / smtpd I g r e p 2 0 0 3 2 . 0 . 1 3 - 20030706 20030706 # s t r i n g s / u s r / l i bexe c / p o s t f i x / c l e a n u p I g r e p 2 0 0 3 2 . 0 . 1 3 ' 20030706 20030706 V tomto případě s e verze ( k jejichž označení jsou použita data vzniku) shodují. V tom to příkazu jsme použili letopočet 2003 , který je v jiném konkrétním případě nutno změ nit.
Paralelní bludiště Jeden obvyklý problém, způsobený směšováním démonů z nekompatibilních verzí Post fixu , souvisí s démonem t l s m g r . Podezřele se zvyšuje zátěž systému a plynule přibýva-
Odstra ňová n í závad v Postfixu jí ID procesy, avšak nic nefunguje, poštovní provoz se nezvyšuje a neprodlužují se ani fronty. Příčinou může být taková aktualizace Postfixu, po níž zůstal v systému původní démon t l s m g r a původní soubor ma s te r . c f , kterým se tento démon spouští. Problém je v tom, že nový Postflx spustí starého démona tl s m g r , jehož stav se ihned po spuštění nastaví na O, neboť nemůže spolupracovat s Postflxem. Postflxu to ovšem není div né, neboť stav O je normální. Vzápětí spustí Postflx další proces t l s mg r a vše se opakuje. Pokud se ukáže, že jde o tento případ, musíme nejdříve v souboru ma s t e r . cf "zakomen tovat" řádek s t l smg r a poté POStfIX znovu zavést, čímž se obnoví jeho normální funkce. Poté se můžeme věnovat kompatibilním verzím t l smg r a nové aktualizaci systému.
Testování zátěže Chceme-Ii zjistit, kolik pošty je schopna naše instalace zpracovat, musíme provést zátě žové testy. Potřebujeme k tomu nějaký rychlý generátor pošty. V Postfixu k tomuto úče lu existují dva testovací programy jménem s m t p - s o u r c e a s m t p - s ; n k. Zde je popis jejich práce: smtp - s ou rce
Tento program s e připojí k počítači n a portu TCP (implicitně 25) a pošle jednu ne bo více zpráv, a to buď sekvenčně nebo paralelně . Program komunikuje jak pomo cí protokolu SMTP (implicitně), tak i LMTP a je určen k měření výkonu serveru . smtp - s i n k
Tento program sleduje počítač dle jména (nebo adresy) a port. Dostává zprávy ze sí tě a zahazuje je. Jeho pomocí můžeme změřit výkon jak klienta, tak i sítě. S testováním zátěže instalace Postfixu začneme programem s m t p - s o u r c e . V následujícím příkladu pošle tento program z 20 paralelních sezení postfixovému serveru, který běží na portu lokálního počítače 25, celkem 1 00 zpráv, každou o velikosti 5 KB . Zajímá nás, kolik se na to spotřebuje času , takže zadáme příkaz:
$ t i me . / smtp - s o u r c e - s 2 0 ., - 1 5 1 2 0 � -m 1 0 0 C) - c � \ - f s e n d e r@ex a m p l e . com � - t r e c i p i e n t@ex a m p l e _ c om � l o c a l h o s t : 2 5 � 1 00
rea l user sys
Om4 . 2 9 4 s OmO . 0 6 0 s OmO . 0 3 0 s
o 2 0 paralelních sezení 49 Velikost zprávy 5 KB 8 Celkem 1 00 zpráv e Zobrazit čítač e Odesilatel obálky o Příjemce obálky • Cílový server SMTP
405
406
';'h"C'
Příloha
B
V tomto příkladu si předání zpráv vyžádalo 4,294 sekundy. Také by nás mohlo zajímat, jak dlouho trvá doručení. To najdeme v žurnálním souboru , kde bychom také měli zkon trolovat, žt: byly přijaty všechny poslední zprávy pro adresu r e c i p i e n t@e x a mp l e . c o m . Nyní budeme věnovat pozornost programu s m t p - s i n k , abychom zjistili, kolik hromadně odeslaných zpráv zpracuje server za vteřinu. Postfix musí zpracovat všechny odchozí zprávy, i když je server na druhé straně zahazuje (hromadné odesílání zpráv není vhod ný prostředek pro testování hrubého výkonu, pokud není přímo napojené na s mt p - s i n k ) . V následujícím příkladu nastavíme sledování SMTP na port 25 počítače:
$ _ / s mt p - s i n k - c l o c a l h o s t : 2 5 1 0 0 0 Nyní můžeme spustit klientské testy. Pokud by nás zajímala režie sítě a maximální teoretická průchodnost poštovního serve ru, můžeme uskutečnit řízený experiment, při němž mezi sebou budou komunikovat oba programy s m t p - s o u r c e a s m t p - s i n k . Otevřeme dvě okna a v prvním z nich spustíme prázdný server: # . / smt p - s i n k - c l o c a l h o s t : 2 5 1 0 0 0 100 N a tento server pak začneme programem s m t p - s o u r c e spuštěným v jiném okně vysílat zprávy:
$ t i me . / sm t p - s o u r c e - s 20 - 1 5 1 2 0 - m 1 0 0 - c \ - f s e n d e r@ex a mp l e . c o m - t r e c i p i e n t@ex a m p l e . c om l o c a l h o s t : 2 5 100 OmO . 2 3 9 s rea l user OmO . O O O s sys OmO . 0 4 0 s N a výstupu vidíme, ž e přijímání zprávy programem s m t p - s i n k j e mnohem rychlejší než Postfix. Přijetí zprávy trvalo jen 0,239 vteřiny, což je 18x rychlejší než její vyslání. Neby lo by fajn, kdybychom takovým tempem mohli zahazovat všechny příchozí zprávy?
Diskové operace Při takovém zátěžovém testování může dojít i k vysokému průměrnému zatížení počítače, který se zdánlivě testování neúčastní. Za předpokladu, že neprovádíme filtrování podle ob sahu, POStfIX je závislý na rychlosti vstupů a výstupů, takže plně využije jejich rychlost. Pokud příkaz t o p indikuje vysoké zatížení, řekněme kolem 10,7, avšak žádný z procesů nepoužívá základní jednotku , zátěž je pravděpodobně způsobena jádrem, které využívá základní jednotku ke vstupně/výstupním operacím a blokuje tím ostatní procesy. Navíc, Příčinou , proč jádro provádí tolik VN operací, je skutečnost, že o VN operace žádá mnohem více procesů (a čekají na ně). Jádro Linuxu 2.6 podporuje v příkazu t o p stav čekání na VN operace. Jestli tomu tak je i v případě jádra ve verzi 2.4.x (které nemá prostředek na zobrazení stavu čekání na VN), můžeme zjistit, když k jádru přidáme určitý modul . Napsal jej Oliver Wellnitz a mů žeme si ho stáhnout z f t p : / / f t p . i b r . c s . t u - b s . d e / o s / l i n u x / p e o p l e / w e l l n i t z / p r o g r a mm i n g . Tento modul počítá zátěž jinak a poskytuje viditelné rozhraní k souborovému systému / p r o c , viz:
Odstra ňová n í závad v Postfixu
'4-fiiU'
# cat / p r o c / l o a d a v g - i o rq 0 . 30 0 . 23 0 . 1 4 i o 0 . 08 0 . 3 1 0 . 2 7 V tomto příkladu je rq počet procesů ve stavové proměnné TAS K_R U N N I N G , zatímco i o je počet procesů v T A S K_U N I N T E R R U P T l B L E (čekajících na VN operaci). Jejich součet je to, co se obvykle nazývá zátěží. Máme-li tyto problémy, potřebujeme rychlejší disky, nebo dokonce řešení typu SSD (so lid state disk základem je RAM disk s baterií záloh), případně zrcadlený, resp. striped, RAJD pro adresáře front. Další informace nalezneme v části " Ú zká místa ve frontě inco ming" v kapitole 22. -
Jiným možným řešením, které může a nemusí pomoci, je odstranit synchronní aktuali zaci adresářů front. Pokud používáme souborový systém e x t 2 nebo e x t 3 , můžeme zku sit příkaz:
# chattr - R
-
5 / v a r / s pool / postfi x/
Ve skutečnosti jde o implicitní nastavení posledních verzí Postfixu .
Příliš mnoho spojení Při nastavování poštovního serveru se může stát, že se pokoušíme řešit několik problé mů současně. Při budování stabilního systému bychom měli řešit postupně jednu věc po druhé. To platí zvlášť v případě, používáme-li LDAP nebo SQL. Můžeme vyzkoušet ta kovýto postup: 1.
Vytvoříme systém bez map LDAP (tj . použijeme mapy h a s h , b t r e e nebo d bm).
2.
K vyextrahování všech nezbytných dat ze serveru LDAP použijeme příslušné příkazy l d a p s e a r c h . Pro přeformátování dat na vstupu postfixových map použijeme některý z jazyků pro psaní skriptů , například Per! nebo Python.
3.
Když Postfix pracuje korektně bez LDAP, budeme mapy postupně nahrazovat odpo vídajícími mapami LDAP a každou z nich otestujeme jako uživatel p o s t f i x , viz:
$ postmap - q
-
l d a p : ma p n a me < key f i l e
k ey f i 1 e obsahuje seznam adres (klíčů), na něž se budeme dotazovat. Obsahuje-li mapa citlivá data, změníme konfigurační parametr tak, aby Postfix používal mapu LDAP. 4.
Snížíme počet otevřených vyhledávacích tabulek tak, že všechny postfixové procesy, které používají démona p r oxy m a p , budou sdílet jedinou otevřenou tabulku , jak je uvedeno v části "Postfixoví démoni" v kapitole 5 .
407
ODKAZ NA STANDARDY CIDR A SMTP V první části této přílohy si popíšeme notaci CIDR
(Classless lnter Domain Routing), kte rou může Postfix používat v mapách typu c i d r : a v parametru my n e t wo r k s . V druhé čás ti jsou uvedeny možné kódy odpovědí serveru SMTP podle RFC 282 1 .
Podsítě
V
notaci CIDR
V notaci CIDR se P adresa zapisuje jako A.B.C .Dl n, kde
n nazýváme prefix IP anebo pre fix sítě . Identifikuje se jím počet platných bitů , které identifikují síť. Například 192.9.205.22 /18 znamená, že prvních 18 bitů určuje síť a zbývajících 14 bitů počítač . Ob vyklé prefixy jsou 8, 1 6 , 24 a 32. I kdybychom se mohli pochlubit tím, že se kolem počítačů motáme od svých 1 0 let a by li jsme jedni z prvních uživatelů napojených na síť (v době, kdy slovo ARPANET ještě něco znamenalo), i tak je nám zatěžko si zapamatovat masky podsítí v notaci CIDR. V ta bulce C- 1 je seznam masek podsítí a jejich ekvivalenty: Ta b u l ka (1 : Podsítě v notaci C I D R Prefix CIDR
Maska sftě
B i nárnf hodnota
II
1 28.0.0.0
1 0000000000000000000000000000000
13
224.0.0.0
1 1 1 00000000000000000000000000000
15
248.0.0.0
12 14
1 92.0.0.0
240.0.0.0
1 1 000000000000000000000000000000
1 1 1 1 0000000000000000000000000000 1 1 1 1 1 000000000000000000000000000
Počet sftf 1 28 domén třídy A
64 domén třídy A 32 domén třídy A
1 6 domén třídy A
8 domén třídy A
16
252.0.0.0
1 1 1 1 1 1 00000000000000000000000000
4 domény třídy A
18
255 .0.0.0
1 1 1 1 1 1 1 1 000000000000000000000000
1 doména třídy A
Il O
2 5 5 . 1 92.0.0
1 1 1 1 1 1 1 1 1 1 0000000000000000000000
n
19
254.0.0.0
2 5 5 . 1 28.0.0
1 1 1 1 1 1 1 0000000000000000000000000
1 1 1 1 1 1 1 1 1 00000000000000000000000
2 domény třídy A
1 28 domén třídy B
64 domén třídy B
41 0
•"'li'U'
Příloha C 1 1 1 1 1 1 1 1 1 1 1 000000000000000000000
32 domén třídy B
255.248.0.0
1 1 1 1 1 1 1 1 1 1 1 1 1 0000000000000000000
8 domén třídy B
255.254.0.0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 00000000000000000
255.224.0.0
/1 1
/1 3
255.252.0.0
/1 4
/1 5
/1 6
255.255.0.0
/18
255.255 . 1 92.0
/1 9
/2 1
255.255.248.0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 00000000000
255.255.254.0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 000000000
/24
255.255.255.0
/26
255.255.255. 1 92
/28
255.255.255.240
/3 1
1 6 domén třídy C
8 domén třídy C
4 domény třídy C
2 domény třídy C
1 doména třfdy C
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0000000
1 28 počítaču
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 000000
64 počítaču
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 00000
32 počítaču
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 000
8 počítaču
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0000
1 6 počítaču
255.255.255.252
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 00
4 počítače
255.255.255.255
11111111111111111111111111111111
1 počítač
255.255.255.254
/32
32 domén třídy C
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 00000000
255.255.255.248
/30
1 28 domén třídy C
64 domén třídy C
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0000000000
255.255.255.224
/29
2 domény třídy B
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 000000000000
255.255.255. 1 28
/27
1 doména třídy B
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0000000000000
255.255.252.0
/25
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0000000000000000
255.255.224.0
/22 /23
4 domény třídy 8
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 00000000000000
255.255.240.0
/20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 000000000000000000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 000000000000000
255.255 . 1 28.0
/1 7
1 6 domén třídy B
1 1 1 1 1 1 1 1 1 1 1 1 00000000000000000000
255.240.0.0
/1 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10
2 počítače
Kódy odpovědí serveru Následující kódy odpovědí nám pomohou pochopit obsahy zpráv v žurnálních soubo rech, případně nastavit kódy odlišné od implicitního nastavení v Postfixu . Kódy jsou pře vzaty z normy RFC 282 1 , část 4 . 2 . 4 . 2 . 1 T e o r i e a vý z n a m k ó d ů Každá ze tří
zda j e odpověď správná . d o s t a n e n e o č e k á v a ný kód . znal ostí
rozhodnout .
něco zopa kova t . vý z n a m c h y by kazu ) .
odpověd í
č í s l i c odpověd i
má
n ě j a ký vý z n a m .
c hy b n á n e b o n e ú p l n á .
je s c hopen pod l e p r v n í
j a k á a k c e má
n á s l edov at
n ě c o omez i t a p od . ) .
Kl i ent .
které mohou n á s l edovat .
Třetí
č í s l i ce oznacuJ e . kdo
č í s l i ce bez d a l š í c h
( po k račovat v č i nnosti . k t e rý c h c e z n á t p ř i b l i ž ný
( n a p ř . · c hy b a p o š t o v n í h o s y s tému .
se bude ří d i t d ruhou č í s l i c í .
f o rma c e .
První
K l i ent SMTP nebo ten .
synta kt i c ká
čí s l i ce a
c hy b a
v pří
v š e c hny d a l š í
in
j s o u vy h r a z e n y j e m n ě j š í m u r o z l i š o v á n í
i n f o r ma c í . První 1yz
č í s l i ce kódu odpověd i P ředběžná
m ů ž e n a bý v a t p ě t i
kl adná odpověď.
P ř í k a z by l
při j at .
a kce j e poz a s t a vena a čeká na potvrzení to odpověd i .
Kl i ent SMTP mus í
hodnot : a v š a R-, p o ž a d o v a n á
i n fo rma c e o b s a ž e n é v t é
zadat dal š í
z d a má a k ce p o k r a č o v a t nebo s e má u k o n č i t .
pří kaz .
k t e rým s d ě l í .
14-fiNG'
Od kaz na sta ndardy C I D R a S MTP POZNÁMKA
Nerozšířený protokol SMTP neobsah uje žádný příkaz, který by při pouštěl tento typ od povědi, ta kže nemá a n i pokračovací (resp. ukončovací) příkazy. 2yz
Odpověď o k l a d n ém u k o n č e n í .
P o ž a d ov a n á a kce se ú s pě š n ě u konč i l a .
M ů ž e bý t z a d á n n o v ý p o ž a d a v e k . Doč a s n á
3yz
kl adná odpověď.
je poz a s t a vena a zadat dal š í
čeká
P ř í k a z by l
se na dal š í
pří kaz obsahuj í cí
použ í v á v pos l o u pn o s t i
při jat .
pří kazů
dovaná a kce se nep rovede . a a kc i
( tj .
P ř í kaz
Ode s i l a t e l
l ze těžko defi novat .
neboť s
i nterpretací
souhl a s i t dvě
( p ř i j í ma C í
a odes í l ac í
a by p r o v e d l
zda odpověď p a t ř í že odpověd i
p ř í j emce n e z mě n í
( tj .
dal ší
Každá odpověď
pokus .
a v š a k SMTP kl i
Od h a d .
k t e rý m s e r o z
d o k a teg o r i e 4yz n e b o 5yz
j s o u 4yz .
( v i z dál e ) .
když j e možné j e ú s pě š n ě zopa kov a t .
tva r pří kazu nebo vl a stnosti
odes i l a t e l e č i
p ř í k a z s e o p a k u j e v i d e n t i c k é p o d o b ě a p ř í j em c e
i mp l eme n t a c i ) .
Trva l e záporná odpověď o dokončen í . dovaná a kce s e neprovede .
P ř í k a z nebyl
K l i e n t S M T P by n e m ě l
s t e j ný p o ž a d a v e k ( v e s t e j n ém p o ř a d í ) . strani t i
" n eods t r a n i tel n é "
n a s mě r o v a t k l i e n t a SMT P . znovu i ni ci a l i zova l
c h y by .
při j a t a poža
opa kovat přesně
N ě kdy v š a k j e mo ž n é od
Je- l i
u ž i v a t e l em o s o b a .
může
a by p ř í mý m z á s a h e m v n ě k t e r é m m í s t ě
pos l oupnost pří kazů
vu překl epu nebo uži vatel .
mu s í
agent SMTP ) .
může mí t j i nou č a s ovou hodnotu .
a n i ž by s e z m ě n i l
změn i 1
( šl o-l i
stav účtu l .
napří kl ad o opra
]
4 . 2 . 3 Kódy odpověd í
214
vráti t na
Poj em " do č a s n á "
ř í ká .
211
by se měl
( pokud exi s t uj e ) .
hodne .
.
při j a t a poža
pří kazů
ent j e povzbuzen .
.
nebyl
N i cméně chybová podmí n k a j e doč a s n á
j e mo ž n é p o ž a d o v a t z n o v u .
v této ka tego r i i
[
Tato odpověď s e
v p ř í k a z e D A TA ) .
z a č á t e k p o s l oupn o s t i různá sezen í
5yz
K l i e n t SMT P mu s í
t u t o i n fo rma c i .
Doč a s n á z á po r n á odpověď o u končen í .
4yz
a v š a k požadovaná a kce
i n fo rma c i .
v č í sel ném pořadí
S t a v s y s t é m u n e b o o d p o v ě ď s y s t ému n a n á p o v ě d u Nápověda
( i n f o rma c e o p ř í j em c i
da rdn í ho př í kazu :
n e b o o vý z n a m u u r č i t é h o n e s t a n
t a t o o d p o v ě ď m á s my s 1
pouze p r o o s o b u j a ko
uži vatel e ) 220
< d omé n a > S l u ž b a u k o n č e n a
221
< d omé n a > S l u ž b a
u z a v í rá p ř e n o s ový k a n á l
250
Požadovaná poš tovní
č i n n o s t by l a ř á d n ě u k o n č e n a
251
Nel o ká l n í
p ř e p o š l e s e n a < f o rw a r d - p a t h >
252
N e l z e o v ě ř i t u ž i v a t e l e pomo c í
uži vatel :
( V i z část 3 . 4 )
[ann . :
i n R F C 282 1 ]
a p rovede se pokus o doručen í
V RFY .
avšak zpráva bude při j ata
41 1
Příloha C
412 ( Vi z část 3 . 5 . 3 )
[ann . :
i n R F C 282 1 J
354
Z a č á t e k v s t u p u z p r á vy ,
421
< do m é n a > S l u ž b a n e d o s t u p n á ,
u končení
( M ů ž e t o bý t o d p o v ě ď n a mu s í 450
.
uza v ření
přenosového kaná l u
l i b o v o l ný p ř í k a z ,
pokud s l užba v í ,
že se
u kon č i t )
Požadovanou a kc i
nel ze p rovés t :
nedostupná
schránka
( tj .
s c h rá n ka
obsazená ) 451
Požadovaná a kce přerušena :
452
Požadovanou a kc i
500
Sy n t a k t i c k á c h y b a ,
l okál ní
nel ze provést :
chyba p ř i
zpracování
s y s tém má m á l o p a mě t i
p ř í k a z s e n e rozpoz n a l
( n a p ř í k l a d p ř í l i š d l o u hý
řáde k ) 501
Sy n t a k t i c k á c h y b a v p a r a m e t r e c h n e b o v a r g u m e n t e c h
502
Pří kaz nen í
503
Chybná pos l oupnost pří kazů
504
P a r a me t r p ř í k a z u n e n í
550
Požadovanou a kci ( tj .
i mp l emen t o v á n
s c h r á n ka
( vi z část 4 . 2 . 4 )
[ann . :
i n RFC 282 1 J
i mp l emen t o v á n
nel ze p rovés t :
se nenaš l a ,
nedostupná
schránka
j e n e p ř í s t upná n e b o p ř í k a z odmí t n u t
z d ů v o d u p o l i t i ky ) 551
Uži vatel
není
l okál ní ,
( V i z část 3 . 4 )
[ann . :
pros í m ,
z k u s t e < f o rwa rd - pa t h >
i n R F C 282 1 J
552
P o ž a d o v a n á a k c e by l a p ř e r u š e n a :
přek ročena p ř i děl ená paměť
553
Požadovanou a kc i
n e p o v o l e n é j m é n o s c h r á n ky
554
Přenos
( tj .
s y n t a k t i c k á c h y b a v e j m é n u s c h r á n ky )
jení ,
C o py r i g h t
nel ze p rovés t :
se neprovedl " Zde nen í
(C)
The
( An e b o ,
v p ř í padě odpověd i
na zahájení
s po
s l u žb a S M T P " )
I n t e r n e t S o c i ety
( 2001 )
T e n t o d o k u m e n t a j e h o p ř e k l a d m ů ž e b ý t k o p í r o v á n a p o s ky t n u t j i n ý m osobám ,
s t e j n ě j a k o m o h o u být p ř i p r a v o v á ny ,
k o p í r o v á ny ,
a d i s t r i b u o v á n y p r á c e od
něho odvozené ,
vy s v ě t l u j í
s j e h o i mp l emen t a c í ,
i
n e b o pomá h a j í
p o č á s tech ,
bez j a kéhokol i
ome z e n í ,
které j ej
k u m e n t s a mo t ný v š a k n e s m í c o py r i g h t a n i k r omě p ř í p a d u ,
odkaz na
tak
ž e budou obs a h o
a cel ý tento odsta vec .
být n i j a k u p r a v o v á n ,
nesmí
Do
být o d s t r a n ě n
I n t e r n e t S o c i ety a j i n é i n t e r n e t o v é o r g a n i z a c e ,
ž e by j e h o p o u ž i t í
s t a n d a r d ů n e b o b y by l kovém p ř í p a d ě mu s í fi nované v
nebo j i na k
a t o j a ko cel e k ,
z a předpokl adu ,
v a t c o py r i g h t u v e d e n ý v p ř e d c h o z í m o d s t a v c i
p u b l i k o v á ny
komen t u j í
by l o n u t n é p r o v ý v o j i n t tt[n e t o v ý c h p ř e k l á d á n d o j i n é h o j a z y k a n e ž a n g l i �� h o . V t a
být p ř i
upl atňován í
I nternet Standa rds .
c o py r i g h t u p o u ž i ty p o s t u py d e
,
o
SLOVN I K POJ M U v abecedním řazení podle českých ekvivalentů
A ADSI, rozhraní aktivního adresáře (Active Directory Service lnteiface) API , jehož prostřednictvím lze ve skriptech a v programech v C/C++ snadno manipulovat s objek ty v aktivním adresáři .
aktivní adresář (Active Directory) Služba týkající se adresáře Microsoftu . Je to cent ralizovaný systém distribuce dat vzhledem k uživatelům, sítím a nastavení bezpečnosti. Lze si ji představit jako LDAP s Kerberem, avšak s přidanou hodnotou nekonformnosti se standardem.
B booleovský, -á (Boolean) Proměnná obsahující pravdivostní hodnotu true nebo false.
c CA,
certit1kační autorita (certificate authority) Ú řad, který vydává a spravuje digi
tální podpisy
certit1kát (certificate) Soubor s informacemi prokazujícími idetitu osoby nebo počíta če.
D DCF-77 Zakódovaný časový signál vysílaný na dlouhovlnném kmitočtu 77,5 kHz. Ofici álním zdrojem tohoto signálu je Spolkový fyzikálně technický ústav ( h t t p : / / www . p t b . d e ) v Německu, kde slouží k oznamování přesného času . Používat jej může kdokoli.
démon (daemon) Proces, který běží a provádí svoji činnost na pozadí. distribuce (distribution) Množina programů obsahující jádro, operační systém, nej různější software a někdy i licencované programy, resp. nástroje. Tento výraz se nejčas těji používá v souvislosti s Linuxem.
DMZ, demilitarizované pásmo (demilitarized zone) Neutrální pásmo mezi soukro mou a veřejnou sítí, jejímž prostřednictvím je řízen přístup uživatelů z veřejné sítě k da tům v soukromé síti. Viz také firewall.
DNS, jmenná služba (domain name service) Obecná, distribuovaná a replikovaná služba na Internetu , která slouží k převodu jmen počítačů na internetové adresy.
doména (domain) Skupina počítačů , jejichž jména mají stejnou příponu neboli jméno domény. Viz také doména nejvyšší úrovně a DNS Cdomain name service).
41 4
'4-h"A
Slovník poj m ů
doména nejvyšší úrovně (top-level domain) Poslední a nejdůležitější složka úplného jména domény na Internetu . Nachází se za poslední tečkou ; například doménou nejvyš ší úrovně p očítače m a i l . e x a m p 1 e . c o m je c o m (používá se pro komerční subjekty) . DUL, seznam vytáčených spojení (dial-up user list) Černá listina (ve tvaru RBL) ob sahující známé IP adresy vytáčených spojení.
dynamická IP adresa (dynamic IP address) IP adresa přiřazená síťovému rozhraní počítače při napojování na síť.
dynamické sestavování (dynamic linking) Systém pro vytváření spustitelných pro gramů , kterým se k programu přidávají knihovní moduly potřebné pro jeho činnost v okamžiku spuštění. Viz také knihovna.
E ESMTP, rozšířený poštovní protokol (Extended Simple Mail Protocol) Množina rozšíření původního protokolu SMTP, jehož prostřednictvím se lze dotázat poštovního serveru na jeho funkcionalitu .
externí aplikace (external application) Aplikace vně Postfixu , jako např. antivirový program nebo skript.
F f"lrewall Server (brána), který kontroluje příchozí a odchozí spojení mezi soukromou a veřejnou sítí. Může taky tvořit bránu mezi vnější sítí a demilitarizovaným pásmem. Viz také demilitarizované pásmo. FQDN, úplné jméno domény (fuUy qualified domain name) Úplné jméno systému, které se skládá z lokálního jména a jména domény, k níž náleží (včetně nejvyšší úrov ně). Jméno počítače může být například ma i 1 a jeho FQDN je ma i l . � a m p l e . c om . FQDN je jednoznačná adresa počítače v rámci celého Internetu . Tato jména se zpracovávají v DNS a proces zpracování se nazývá vyhledáváníjmen.
H hexadecimální tvar (hexadecimal) Hexadecimální (šestnáctková) číselná soustava , v níž se pro vyjádření čísel používají znaky 0-9 a A-F, resp. a-fo hlavičkový soubor (include file) Hlavičkové soubory obsahují definice funkcí, kon stant a maker, které se používají při překládání programů . Mají podobný význam jako knihovny ( viz knihovna).
CH chroot (chroot) Systémové volání c h r o o t ( ) , kterým se zadává nový kořenový adresář procesu .
chybná pravdivostní hodnota (false positive) Nesprávné vyhodnocení testu , kdy se chybně ohlásí podmínka jako pravdivá .
S l ovník poj m ů
lANA, centrální internetový číselník (Internet Assigned Number Authority) Cent rální registr čísel používaných v internetových protokolech, jako např. porty, protokoly, čísla společností (v souvislosti s elektronickými podpisy), volby, kódy a typy. IMAP, protokol pro zpracování elektronické pošty (Internet Message Access Pro toco/) Pomocí tohoto protokolu klient komunikuje s poštovním serverem, když například svoje poštovní schránky (mailboxes) nemá na lokálním počítači, nýbrž na serveru. Pomocí IMAP lze vytvářet, mazat a přejmenovávat schránky; dotazovat se na příchozí poštu ; mazat zprávy; vyhledávat a vybírat atributy zpráv; vybírat texty a jejich části. V protokolu IMAP se neurčuje způsob posílání zpráv, k tomu slouží přenosové proto koly jako SMTP .
integrovaná aplikace (groupware) Vysoce integrovaná aplikace, která se skládá z ně kolika programů poskytujících různé služby jako elektronickou poštu, časové plánování, databázi adres a zpravodajství. IPC,
meziprocesová komunikace (interprocess communication) Aplikační progra mové rozhraní (API) a příslušná podpora, jejímž prostřednictvím procesy komunikují me zi sebou .
J jádro (kernel) Základ operačního systému . Veškerý přístup k počítačovému hardwaru je možný pouze prostřednictvím jádra systému .
K knihovna (library) Množina předkompilovaného strojového kódu , který lze sestavit k programům v průběhu jejich překládání. Knihovny slouží jako pomocný kód pro jiné programy. Viz také hlavičkový soubor.
kódování base64 (base64 encoding) Schéma pro kódování dat, kterým se provádí konverze binárních dat do tištitelných znaků ASCII . Je součástí MIME a kódují se jím elektronická pošta posílaná po Internetu . komentář (comment) Komentář v konfiguračním nebo zdrojovém kódu . Komentáře se vkládají do kódu kvůli jeho lepší srozumitelnosti.
kopie (carbon copy) Hlavička emailu (značí se ce:) se seznamem adres, kterým se má poslat daný e-mail a které vidí všichni příjemci .
L IDAP, jednoduchý protokol pro přístup do adresářů (Lightweight Directory Access Protoco/) Protokol pro služby pro zpřístupnění adresářů v on-line režimu. Defi nice relativně jednoduchého protokolu pro aktualizaci a vyhledávání adresářů pod TCP/IP.
LHS, levá strana (1eft-hand side) Levou stranou se v mapě o dvou sloupcích rozumí levý sloupec. V Postfixu se položky na levé straně nazývají klíče. !MTP, lokální poštovní protokol (Local Mail Transfer Protoco/) Protokol odvoze ný od SMTP , viz SMTP.
41 5
41 6
'4-fi'lt'
S l ovník poj m ů
M makro (macro) Krátká instrukce, která se rozvine do množiny delších instrukcí. .
malware (malicious software) Program nebo soubor, který má poškodit systém. mapa (map) Mapa v Postfixu je tabulka o dvou sloupcích, kde na každém řádku je klíč a hodnota. Někdy se klíč nazývá levá strana a hodnota pravá strana . Viz rovněž levá stra na (LHS) a pravá strana (RHS).
mbox (mbox format) Tvar souboru , do kterého se ukládá elektronická pošta . Všech ny zprávy jsou zřetězeny do jednoho souboru , oddělovači jsou řádek From na začátku zprávy a prázdný řádek na konci zprávy. MIME, rozšířený tvar elektronické pošty (MuUipurpose Internet Mail Extensi ons) Internetový standard pro formát elektronické pošty.
MTA, přenosový agent (message transport agent) Program, který přijímá p říchoZí poštu nebo ji doručuje uživateli . Může také doručovat zprávy vzdáleným (nelo ka lním) uživatelům na jejich místo určení. Viz také protokol pro zpracování elektronické pošty (IMAP), poštovní protokol (POP) a jednoduchý poštovní protokol (SMTP) .
MUA, uživatelský agent (mail user agent) Program, jehož pomocí se vytvářejí a čtou e-mailové zprávy. MUA je rozhraním mezi uživatelem a přenosovým agentem (mail tran sfer agent, MTA). Tomuto agentovi se předává odchozí zpráva, zatímco příchozí zpráva se přebírá od doručovacího agenta (mail delivery agent, MDA). mumble (mumb1e) Slovo (česky zamumlám), které se používá k označení množiny parametrů , jež se liší pouze v jediné části. Například pomocí s m t pd_m u m b 1 e_ r e s t r i ct i D n s označíme všechna omezení s m t p d , například s m t p d_c l i e n L r e s t r i c t i o n s , s m t p d_s e n d e r _ r e s t r i c t i o n s , s m t pd_r e c i p i e n t_ r e s t r i c t i o n s , s m t pd_d a t a_ r e s t r i c t i D n s atd.
N NAT, překlad síťových adres (network address translation) Někdy se používá vý raz maškaráda sítě nebo maškaráda IP adresy. Jde o techniku používanou v síťovém pro středí, kdy se privátní síť na veřejnou síť napojí pouze v jediném bodu a při průchodu směrovačem nebo firewallem se přepisují IP adresy paketů .
neviditelná kopie (blind carbon copy) Hlavička e-mail u (značí se bcc:) se seznamem adres, kterým se má poslat daný email a které příjemce neuvidí. NTP,
časový protokol (Network Time Protocol) Internetový protokol pro synchro nizaci hodin počítačů podle referenčního času . NTP je standardní internetový protokol, který vyvinul profesor David 1. Mills z Delawarské univerzity.
o otevřené předávání (open relay) SMTP selVer, jehož prostřednictvím se předávají zprávy mezi třetími stranami . Tento způsob zpracování zpráv se používá tehdy, když ani odesílatel, ani příjemce nejsou v lokální síti.
otevřený proxy (open proxy) Š patně zkonfigurovaný proxy selVer, který zpracovává požadavky třetích stran. Může se využívat (zneužívat) k zasílání zpráv selVerům.
S l ovník poj m ů
'4-a"i
p PGP (Pretty Good Prlvacy) Program, který slouží k šifrování a autentizaci . POP, poštovní protokol (Post Office Protocol) Protokol, kterým se ze serveru vy zvedává elektronická pošta . Viz také protokol pro zpracování elektronické pošty (IMAP) a jednoduchý poštovní protokol (SMTP).
port (port) (Síťový) port je rozhraní, které slouží ke komunikaci s počítačovým pro gramem po síti. Porty se číslují a tato čísla se v aplikacích (např. TCP nebo UDP) připo jují k odesílaným datům; podle těchto čísel příjemce rozpoznává, který program tato data odeslal. prázdné nústo (whitespace) Prázdné místo se říká takovým znakům, které zabírají ně jaký prostor, avšak nejsou viditelné . protokol SSL (Secure Socket Layer, SSL) Viz protokol TLS (Transport Layer Security, TLS).
protokol TI5 (Transport Layer Securlty, dříve SSL) Protokol pro šifrování mezi kli entem a serverem na transportní úrovni . Nezaměňovat se šifrovacími technikami jako S/MIME nebo PGP, jimiž se šifruje obsah, nikoli vlastní komunikace. protokol UUCP (Unix-to-Unix Copy Protocol) Unixová utilita a současně protokol , kterým se posílají soubory mezi dvěma systémy Unix po sériové lince. Touto linkou mů že být buď kabel přímo spojující sériové porty počítačů nebo telefonní linka s modemy na obou stranách . Existuje i software pro přenos pomocí UUCP na Ethernetu, i když pro tento případ exi stují lepší možnosti: scp pro přenos souborů, SMTP pro elektronickou poštu a NNTP pro zpravodajský servis.
proxy (proxy) Server, který transparentním způsobem zastupuje jiný server. příloha (attachment) Soubor, který je součástí e-mailové zprávy.
Q QMQP, rychlý poštovní protokol (Quick Mail Queuing Protocol) Pomocí QMQP se vytváří centralizovaná fronta zpráv v clusteru (skupině) počítačů . Přenosový agent bě ží na jediném centrálním serveru , zatímco ostatní počítače nemají svoji vlastní frontu zpráv; každou novou zprávu postupují prostřednictvím QMQP tomuto centrálnímu ser veru . QMQP vytvořil D. J. Bernstein, taktéž autor qmailu .
R RAID, redundantní pole nezávislých disků (redundant array of independent disks) Metoda ukládání dat na několik disků, které se operačnímu systému jeví jako je diný disk. Systém RAID zajišťuje vyváženost VN operací, čímž se zvyšuje výkon při uklá dání dat.
regulární výraz (reguklr expression) Regulární výraz (používají se také zkratky re gexp, regex a regxp) je pokročilý systém analýzy formálních jazyků , který využívá po znatky z teorie nedeterministických konečných automatů .
41 7
41 8
'4-fi'it'
S l ovn ík poj m ů
RFe,
žádost o komentář (Requestfor Comments) Formální dokument z IETF (Inter net Engineering Task Force). RFC mají buď informativní charakter nebo se mají stát in
ternetoVÝI1J.i standardy, jež se využívají k zajištění součinnosti sítí nebo aplikací. I když lze změnit některé RFC, obvykle je vytvářeno nové RFC, jímž se nahradí RFC původní.
RHS, pravá strana (right-hand side) Druhý sloupec v mapě o dvou sloupcích . V post fixové položce je na tomto místě hodnota .
root Viz superuživatel. rozeznávání jmen (name resolution) Proces, při kterém se převádí jména počítačů na IP adresy.
s S/MIME, bezpečný rozšířený tvar elektronické pošty (Secure Multipurpose In ternet Mail Extensions) Internetový standard pro bezpečný způsob posílání elektro nické pošty. Obsahuje popis způsobu posílání šifrovacích informací a digitálního certifikátu jako součásti těla zprávy. SASL, jednoduchý autentizační a bezpečnostní protokol (Simple Authentication and Security Layer) Autentizační systém definovaný v RFC 2222 ( f t p : / / f t p . r f e - e d i t o r . o r g / i n - n o t e s / r f e 2 2 2 2 . t x t l pro aplikace používající spojení založená kupříkladu na protokolech IMAP, LDAP nebo SMTP. Zajišťují se jím autentizační služby v těchto aplikacích a slouží k vyhledávání uživatelských dat v záložních kopiích. Sendmail (Sendmail) jeden z nejstarších a nejrozšířenějších přenosových agentů (MTA) na Internetu .
slovníkový útok (dictionary attack) Získání adresy příjemce procházením seznamu určitých možností, nejčastěji slovníku. směrovač (router) Síťové zařízení, jímž se určuje, do kterého dalšího bodu v síti se pošle paket na cestě do místa určení.
SMTP, jednoduchý přenosový protokol (Simple Mail Transfer Protocol) Protokol definovaný v STO 10, RFC 82 1 , který se používá k přenosu elektronické pošty mezi po čítači. Viz h t t p : / / www . f a q s . o r g / r f e s / s td / s td - i n d e x . h t m l .
socket unixové domény (Unix domain socket) Sockety unixových domén (správný postfixový název je Local IPC Socket - socket pro lokální meziprocesovou komunikaci) primárně fungují jako prostředek pro meziprocesovou komunikaci, proto se nazývají IPC sockety. Tato spojení se uskutečňují v rámci lokálních počítačů; ve skutečnosti to nejsou spojení přenášená po fyzické síti . SQL, strukturovaný dotazovací jazyk (Structured Query Language) Programovací jazyk pro práci s databází.
superuživatel (superuser) Známý též pod označením root. Superuživatel v unixových systémech má veškerá přístupová práva ve všech režimech (jednouživatelském i víceu živatelském).
T tarpit (tarpit) Systémová služba (obvykle na serverech), jejíž pomocí se co ne)VlCe zpožďuje příchozí spojení. Pomocí této služby se brání zneužívání sítě, neboť např. zpra-
S l ovn ík poj m ů
'a'fi"t'
cování spamu nebo útoku na slovník trvá mnohem déle . Název je analogií k tar pit (as faltová jáma), v níž jako by pomalu tonulo lapené zvíře. Někdy se také múžeme setkat s německým názvem teergrube.
telnet (telnet) Síťový protokol na Internetu a také název programu, jímž se ustavuje se zení na vzdáleném počítači .
u UCE, nevyžádaná komerční nabídka (unsolieited eommereial email) Přesnější vý raz pro spam. Komerční zprávy zasílané na vlastní žádost příjemce nejsou tímto přípa dem.
Unix (Unix) Operační systém, který vznikl v Bellových laboratořích v roce 1 969. útok prostředníka (man-in-tbe-middle attaek) Útok osoby, která je mezi dvěma ko munikujícími stranami . Útočník čte a modifikuje zprávy posílané mezi dvěma stranami, aniž by o tom strany věděly.
z záplata (pateb) (Dočasný) přídavek k programu . Používá se k odstranění chyby v pro gramu nebo k rozšíření jeho funkcionality. zásobník typu FIFO (first-in, flrst-out) Systém zpracování požadavkú nebo dat. Na zývá se také fronta; nejdříve se zpracovává první příchozí. Jinými slovy, nejdříve se zpra covává nejstarší požadavek.
záznam CNAME (CNAME reeord) Záznam CNAME v DNS, kterému se také říká ka nonické jméno. Je to jméno, do něhož se rozvine alias. V závislosti na stromu DNS (pří mý nebo in-adr.arpa) se múže CNAME odkazovat na záznam typu A nebo na záznam PTR. Viz také záznam typu A a záznam PTR.
záznam pro výměnu zpráv (mail exebange reeord, MX reeord) DNS záznam ur čující, který server přijímá poštu pro uvedený počítač. záznam PfR (PTR reeord) Záznam (v DNS), jehož prostřednictvím se mapuje IP ad resa na počítač. záznam typu A (A reeord) Záznam v DNS, kterým se mapuje jméno počítače na IP adresu
41 9
REJSTAIK A abuse, 100 active, 58 additional_conditions, 204 adresa - e-mailová , 42 - mapování, 42 - neúplná, 99 - ověřování, 1 1 0 - platná, 345 - prázdná , 100 - prosazení, 345 - přepisování, 135 - selektivní ověřování, 1 1 2 adresář - aktivní, 175 - import, 308 - konfigurační, 3 1 1 - LDAP , 300 - ochrana dat, 337 - omezení čtení, 337 - rozšíření, 330 - stavový, 226 - základní, 194, 196 agent - doručovací, 192 - přenosový, 23 akce, WARN, 125 aktivace - na straně serveru, 242 - SMTP AUTH , 242, 251 alias, 302 - definice, 304 - vytváření, 42 allow_percenchack, 84 alterMIME, 144-145 amavisd-new, 149-1 50 - konfigurace Postfixu, 1 57 - na jiném počítači, 1 58 - optimalizace , 1 55
- testování, 1 5 1 - v režimu ladění, 1 5 2 ANONYMOUS, 2 1 6 anvil, 57, 360 aplikace, externí, 1 40 atribut - definice, 3 1 3 - přidání, 305 - výběr, 301 autentičnost, prokázání, 258 autentizace - jednoduchá, 2 1 4 - n a straně serveru , 219, 241 - plánování, 2 1 9 - pro serveIY, 332 - se serverem lMAP, 227 - SMTP, 50, 1 67, 2 1 1 , 219, 239 - SMTP na straně klienta, 249 - test, 233 - uživatele, 246 - z LDAP, 228 - z lokálních účtů , 227 - z PAM, 227 AUTH, 250 autorita, certifikační, 260, 288-289 auxprop, 2 18, 228, 244
B base64, 78 bezpečnost, 174, 192 - transportní vrstvy, 1 68, 257, 269 - zvýšení, 172 body_checks, 1 1 9 body_checks_size_limit, 1 19 bomba , poštovní, 359 bounce, 53 brána - pokročilé nastavení, 172 - poštovní, 1 67, 1 69 - vytáčená, 46
422
'4-hd':'
Rejstřík
c Ce, 77 certifikát, 259 - distribuce, 262 - do jediného souboru , 292 - lMAP, 327 - instalace, 262 - instalace v Linuxu , 263 - instalace v Mac OS X, 264 - instalace ve Windows, 262 - klientský, 287-288, 290, 297 - na straně klienta, 296 - na straně serveru , 286 - nastavení cesty, 274 - oficiální, 260 - ověření, 292 - pro soukromé účely, 260 - serverový, 265-266, 292 - úložiště, 274 - v POStflXU , 267 - vytvoření, 260-261 - vyžadování, 290 - X509, 340 - zřetězení, 292 cesta - k postfixovému certifikátu, 296 - ke klíči, 296 - návratová, 1 59-1 60 - zpáteční, 1 39 CIDR, 60 - podsíť, 409 c1ass, 44 c1eanup, 56 c1iencconnection_rate_time_unit, 361 contenCfilter, 1 33-135 - definice, 1 46 - konfigurace, 1 38 Content-type, 77 corrupt, 59 Courier lMAP - instalace, 326 - konfigurace, 326 - test, 344 Courier mai!drop, 3 1 6 - filtry, 324 - instalace, 3 1 8 - konfigurace, 3 1 7 - kvóty, 324 CPAN, 1 5 1 •
CRAM-MD5, 2 1 7 cron, 38 Cyrus SASL, 2 1 1 - instalace, 22 1-222 - konfigurace, 22 1 , 306
č čas - nastavení, 355 - systémový, 29 červ, 359 číslo, náhodné, 276, 293
D data, adresářová, 337 databáze, 6 1 - konfigurace, 201 Date, 76 dbname, 204 defaulCrblJeply, 85 defer, 53, 83 deferred, 58 defer_transport, 48 definice, přenosu, 1 38 démon, 53 - anvi!, 57, 360 - autentizační, 326 - bounce, 53 - c1eanup, 56 - defer, 53 - error, 53 - flush, 53 - lmtp, 56 - local, 55 - master, 53 - nekonzistentnost, 404 - pickup, 56 - pipe, 56 - pro předávání zpráv, 1 36 - proxymap, 55 - qmgr, 55 - qmqpd, 57 - sendmai!, 57 - showq, 53 - smtp, 56 - smtpd, 56, 142 - spawn, 55 - trivial-rewrite, 53 - v uzavřeném prostoru, 352
'B·fiiit'
Rejstřík - virtual, 56, 192 - vztahy, 54 dialog, SMTP, 246 D1GEST-MD5 , 2 1 7 disable_dns_lookups, 47 disable_mime_inpucprocessing, 1 19 disable_vrfy_command, 84 D1SCARD, 1 2 1 , 1 28 DNS, 27, 3 1-32, 354 - černá listina, 1 06 - zrychlení vyhledávání, 367 - zvýšení výkonu, 369 DNSBL, 84 doména, 25 - neexistující, 97 - neznámá, 371 - předávací, 1 70 - příjemce, 208 - příjemců, 205 - připojování, 38 - řízená databází, 1 99 - samostatná, 35, 45 - úplné jméno, 94 - víceznačně zadávaná, 1 04 - virtuální, 1 96 - virtuální aliasová , 1 87 - virtuální schránková, 191 , 199, 207 doporučení, pozdržení, 1 27 doručování - omezené, 45 - paralelní, 317 - převod, 3 1 6 doručovatel , 69 dotaz - konstrukce, 205 - na aliasy, 207, 209-2 1 0 - na G I D , 208, 2 1 0 - na příjemce, 206, 2 1 0 - n a schránky příjemců , 209 - na UID, 208, 2 1 0 DUNNO , 88 důvěra, 259 důvěrnost, 258
E ELHO, 72 error, 53 ETRN, 84 Exchange Server, 1 74
- konfigurace, 183 EXTERNAL, 2 1 7
F FILTER, 1 2 1 , 1 28 filtr, 70 - amavisd-new, 1 60 - aplikace, 1 20 - bezpečná implementace, 124 - externí, 68, 133, 143 - následný, 142 - obsahu, 1 17 - testování, 1 47 - testování v běžném provozu , 1 2 5 - vestavěný, 6 7 , 1 1 7, 1 23 - zpráv, 320 filtrování - hlaviček, 84, 1 26 - hlaviček typu MIME, 1 29 - hlaviček v přiložených zprávách, 1 30 - jednotlivých částí zpráv, 1 18 - obsahu zprávy, 1 34 - těla, 84 - těla zprávy, 1 30 - zpráv, 1 28 firewall, nastavení, 368 flush, 53 FQDN (Fully Qualified Domain Name), 27 From, 76 fronta, 57, 1 3 5 - active, 375 - deferred, 375 - incoming, 372 - maildrop, 374 - postfixová, 165 - přeplňování, 377 funkcionalita, základní, 293
G generátor, náhodných čísel , 276, 293 GSSAPI, 2 1 7
H HELO, 72 heslo, ověřování, 220, 224 hlášení - konfigurace, 223 - úrovně, 223
423
424
'4-diiC' hlavička, 69, 76 - doporučená, 76 - filtrování, ,84, 1 26 - odstraňování, 1 27 - povinná, 76 - typu MIME, 1 29 - volitelná, 77 - zpráv, 277 hledání, v mapách, 62 hold, 58, 1 2 1 , 1 27 HOLD, 58, 1 2 1 , 1 27 host, 44 hostmaster, 1 00 hostname, 28 hosts, 204
CH check_sendecaccess, 1 09
IGNORE, 1 20 imap, 23, 2 1 9 lMAP, 23, 2 1 9 - certifikát, 327 - server, 328 incoming, 57 integrita, 258
J jméno - počítače, 84 - uživatelské, 42 - vyhledávání, 3 1 jmenovka, smtpd, 36
K kapacita , výpočet, 1 5 5 kerberos, 219 KERBEROS_V4, 2 1 7 klíč - autentizační, 1 77 - soukromý, 1 78 - typu PuTIY, 178 - typu SSH, 178 - veřejný, 177 klient, 72, 260 - adresa, 84 - bezpečný, 1 76
Rejstřík - jméno, 84 - konfigurace, 338 - korektní chování, 93 - ladění výkonu , 295 - lmtp, 255 - nalezení, 2 1 9 - nestandardní, 243 - odmítání, 106 - postfixový, 293 - poštovní, 243 - špatný, 88 - vynětí z limitu, 365 - vzdálený, 357, 359 - zabezpečení, 296 - zpomalení, 88 knihovna, 353, 404 kódování - MIME, 78 - struktura , 79 komentář, 402 komunikace, řízení, 70 konektivita, 28 - ESMTP, 1 54 - LMTP, 1 54 - ověření, 1 54 konfigurace - hlášení, 223 - hlavní, 1 25 - chyby, 402 - klientská, 291 - minimální, 35 - návratové cesty, 1 59 - oblasti SASL, 244 - ochrana, 204 - pokročilá, 1 67, 330 - pokročilé, 195 - Postfixu, 36, 1 46 - saslauthd, 225 - základní, 306 kontrola - návratové cesty, 160 - odeslání, 297 - ruční, 109 - testovacího vzorku viru , 162 kvóta, 322
L LDA, 3 1 7 ldap, 6 1 , 2 1 9
'a·fiUC'
Rejstřík LDAP , 6 1 , 2 1 9 - aktivace dotazů , 341 - autentizační démon, 326 - definice výsledků atributů , 3 1 3 - dotaz na aliasy, 3 1 4 - klient, 3 4 1 - konfigurace, 309 - konfigurace klienta, 309 - konfigurace klientů , 338 - konfigurace serveru, 307, 3 1 2 - přidání dotazu , 3 1 2 - příjemce, 3 1 4 - struktura adresáře, 300 - šifrování dotazů, 339 - vyhledávání, 3 1 1 - vytvoření mapy, 345 - zablokování vazeb, 3 1 2 - zapnutí podpory, 34 1 Idapdb - autentizace, 336 - konfigurace, 334 - záplata, 333 - zásuvný modul , 335 Idapmodify, 325 libc, 402 listina, černá, 84--8 5, 1 06, 370 Imtp, 56, 1 36, 255 local, 55, 353 local_recipiencmaps, 353 locaUransport, 3 1 6 LOGIN, 2 1 7
M Maildir, 3 1 9 mail drop, 3 8 , 58 mapa, 52, 59, 3 5 1 - adres příjemců , 1 88 - automatické vytváření, 1 83 - bezpečnostní politiky, 294 - dotazovací, 3 1 5 - dotazů , 3 1 4 - generování pomocí skriptů , 1 98 - hledání, 62 - indexovaná, 60 - LDAP, 345 - lineární, 60 - odesilatelů, 1 8 1 - omezení, 1 9 5 - příjemců , 194 , 197
- typy, 59 - uživatelů, 1 80 mapování - e-mailových adres, 42 - implicitní, 1 9 1 - pokročilé, 1 90 - více domén, 1 9 1 master, 5 3 master.cf, 1 58 mechanismus - autentizační, 250, 255 - omezení, 81, 335 - ověřovací, 216, 219, 224, 242 - spouštěcí, 8 1 Message-Id, 76 message/rfc822, 79 metoda, autentizační, 21 8 MIME - kódování, 78 - verze, 78 mime_header_checks, 1 29 MIME-Version, 77 místo - úzké, 371 - vzdálené, 254 MMC (Microsoft Management Console), 175 modul - pomocný zásuvný, 228 - zásuvný, 229, 335 MTA (Message Transport Agent), 23 MUA (Message User Agent), 23 multipart/alternative, 79 multipart/mixed, 79 mutual_auth, 243 mydestination, 37 mydomain, nastavení, 37 myhostname, nastavení, 36 myorigin, 38 MySQL, 6 1 - konfigurace, 23 1 - test, 207
N nabídka, komerční nevyžádaná, 85 nabízení - selektivní, 248 - SMTP AUTH, 248 nastavení - generické, 44
425
426
'4-fiihl' - individuální, 44 - pokročilá, 248 - povolení,,43 - základní, 1 70 NAT, nastavení, 185 nerovnost, asynchronní, 377 nested_headecchecks, 1 1 9 noactive, 243 noanonymous, 242 nodictionary, 243 noplaintext, 243 NTLM, 2 1 7 NTP (Network Time Protocol), 29
o obálka, 69-70, 73 - odesílatel, 73 - příjemce, 73 objekt, uživatelský, 303 oblast, SASL, 244 obsah - filtr, 1 17 - odmítnutí, 1 4 1 - typ, 78-79 - vracení, 1 40 odesilatel, 302 - vytvoření, 304 odesílatel - adresa, 84 - obálky, 73 - omezení, 96 - ověřování, 1 1 0 - prázdná adresa, 1 00 - zkušební zprávy, 1 1 1 odeslání - z příkazového řádku , 41 - ze sezení telnet, 41 odmítání - klientů z černé listiny, 1 06 - odesílatelů, 1 07 odmítnutí - obsahu, 1 4 1 - zprávy, 1 26 odstraňování, hlaviček, 1 27 ochrana - adresářových dat, 337 - konfigurace, 204 OK, 87 okruh, odesilatelů, 249
Rejstřík omezení, 67 - autentizačních mechanismů , 252 - bezprostřední zefektivnění, 93 - implicitní, 93 - jména systému, 94 - nastavitelna, 84 - odesílatele, 96 - odchozího spojení, 185 - okruhu odesilatelů, 249 - pořadí zpracování, 1 0 1 , 1 1 3 - použití, 9 1 - přepínatelná, 83 - při přenosu zpráv, 8 1 - příjemce, 97 - RFC, 1 0 1 - rozsah, 85 - simulace účinků , 92 - testování, 9 1 - třídy, 9 0 , 1 1 4 - typy, 83 - v uzavřeném prostoru, 354 - všeobecná, 83 - vyhodnocení, 86--87 , 89 - vytváření, 86, 91 opatření - antispamová, 102 - bezpečnostní, 281 OpenLDAP, 308, 335, 339 - autorizační politika, 334 - klient, 344 - konfigurace, 307 - test, 342 , 344 openssl, 262 OpenSSL - instalace, 271 - vytvoření, 271 operace - databázová, 6 1 - disková, 406 oprávnění, předávací, 47, 49 OTP, 2 1 7 ověření - autentizačního mechanismu, 250 - autentizačních údajů , 253 - podpory MySQL, 200 - POP-before-SMTP, 50 - uchování výsledků, 1 1 1 - úspěšné autentizace, 254 - žurnálního souboru , 253
Rejstřík ověřování - adresy odesílatele, 1 1 0 - odesílatele, 1 1 0 - selektivní, 1 1 2
p padělek, 102 PAM CPluggable Authentication Modules), 2 1 9 , 227 paměť, nastavení, 1 97 parametr, myorigin, 38 passwd/shadow, 2 1 9 password, 203 PCRE, 60, 1 24 perl, moduly, 1 5 1 permit, 83, 88 PERMIT, 83, 88 permicrrucbackup_networks, 85 permicmynetworks, 102 pickup, 56 pipe, 56, 1 36, 352 PLAIN, 2 1 7 počítač - interní poštovní, 1 70 - jméno, 27 - konektivita, 27 - místo určení, 301 - příprava, 25, 27 podpis, serverového certifikátu , 266 podpora - MySQL, 200 - PCRE, 1 24 - SMTP AUTH, 239-240 podsíť, v notaci CIDR, 409 politika, bezpečnostní, 294 položka - ladění, 63 - lineární, 63 - s regulárními výrazy, 1 90 - sběrná, 1 90 POP3, 23 port, TCP, 28 pořadí, zpracování omezení, 1 1 3 poskytovatel, připojení, 48 postalias, 63 postcat, 63 postdrop, 64 postfix, 23, 63
'a'fiBC' Postfix - aktualizace, 388 - anatomie, 5 1 - démoni, 53 - instalace, 385 , 387 - konfigurace, 36, 1 46, 1 57, 309, 3 1 5 - ladění, 357 - na CD, 390 - podpora TIS, 271 - spouštění, 386 - spuštění, 39 postfix start, 39 Postfix - test, 2 1 0, 344 - ukončování, 386 - uzavřený prostor, 349-351 - zdrojový kód, 385 PostgreSQL, 61 - konfigurace, 232 postkick, 64 postlock, 64 postlog, 65 postmap, 63 postmaster, 1 00 postqueue, 65 postsuper, 65--66 pošta - přemapování, 38 - příjem, 37, 46, 1 88 používání, závazné, 290 povolení - k předávání, 245 - k předávání e-mailů, 43 - nastavení, 43 pozastavení, předávání, zpráv, 48 pozdržení, doporučení, 1 27 požadavek, zadávání, 359 práva - předávací, 1 70 - předávání, 44 - přístupová, 1 97, 402 prevence, proti padělkům, 102 priorita, 350 problém - ohlašování, 400 - se spouštěním, 395 - se žurnálem, 395 procedura - autentizační, 2 1 8, 220, 227, 327
42 7
428
'",fi'it' - autentizační podporovaná, 225 proces - paralel '} í, 142, 165 - sledování, 399 procesor, kódovací, 78 procmail, 38 program - bezpečnost, 1 5 5 - client, 235 - optimalizace, 1 5 5 - server, 234-235 prohlášení, programové, 1 07 proměnná, vnější, 391 prostor - aktivace, 352 - uzavřený, 1 68, 349-350, 402 prostředí, příprava, 25, 27 protokol - ESMTP , 1 40 - RFC, 1 00 proxy-filter, 1 40 proxymap, 55 průchodnost, vyšší, 380 předávání, 296 - na základě certifikační autority, 288-289 - na základě klientských certifikátů , 288 - nouzové, 379 - otevřené, 369 přenos - definice, 1 38, 1 47, 158 - ESMTP, 1 59 - konfigurace, 1 38 - LMTP, 1 59 - lokální, 3 1 6 - na základě certifikátů , 286 - opětovný, 371 - vytvoření, 1 58 - zpráv, 8 1 přepisování, adres, 135 přesměrování, zpráv, 1 28 přidání, testovací zprávy, 247 příjem - nastavení, 37 - pošty, 46 příjemce, 302 - adresa, 84 - export, 175 - neexistující, 189
Rejstřík - neznámý, 98 - obálky, 73 - omezení, 97 - předávání, 1 7 1 - s neúplnou adresou , 99 - vytvoření, 304 příkaz, 72 příloha, 70, 78
Q QID, 206 qmgr, 55, 401 QMQP (Quick Mail Queuring Protocol), 57 qmqpd, 57 query_filter, 3 1 3 queue_directory, 57 quoted-printable, 78
R random, 276 rbl_reply_maps, 85 Received, 77 REDlRECT, 1 2 1 , 1 28 regexp, 60 reject, 83, 88, 1 20 REJECT, 83, 88, 1 20 rejeccmulti_recipiencbounce, 1 05 rejeccunauth_pipelining, 83 relayJlientcerts, 289 relay_domains, 85 Reply-To, 77 Return-Path, 77 režim, zpřísnění, 290, 297 RFC, 1 00-10 1 RHSBL, 85 ROKSO (Register of Known Spam Operations), 103 rozhraní, autentizační, 2 1 5 rozsah , omezení, 85 rozšiřitelnost, 192 rychlost, omezení, 357, 359
Ř řádek, příkazový, 62
S SASL - konfigurace, 230
Rejstřík - konfigurace vazeb, 335 - kontrola autentizace, 308 - oblasti, 244 - ověření mechanismů , 283 - přímé spojení, 335 - test, 284 saslauthd, 2 1 8 , 227, 244 - konfigurace, 225 - příprava prostředí, 226 - spuštění, 234 sasldb2, 219, 229 - vytvoření databáze, 229 saslpasswd2, 229 seleccfield, 204 sendmail, 40, 57 Sendmail, odstranění, 393 server, 260 - aktivace, 241 - bezpečnostní opatření, 281 - firemní, 299 - identifikace, 295 - inteligentní, 1 84 - jmenný, 1 03 - kódy odpovědí, 4 1 0 - konfigurace, 24 1 - ladění výkonu , 279 - pokročilá nastavení, 248 - postifxový, 1 84 - poštovní, 25, 32, 35, 45, 167, 1 87, 299 - poštovní firemní, 1 68 - předávací, 48 - přidání atributů , 305 - přidání autentizace, 332 - připojení, 45 - test omezení, 339 - vzdálený, 253 - základní konfigurace, 273 sever, základní koncepce, 299 seznam, 303, 3 1 5 - autorizovaných klíčů , 177 - příjemců , 176, 1 78 - vytvoření, 305 showq, 53 schránka - virtuální, 208 - vytvoření, 3 1 9 simulace, klient/server, 278 síť - falešná, 1 03
429 - místo určení, 301 - ověření, 398 skript - filtrovací, 145 - pomocný, 352 skupina, nastavení, 1 93 slapd, 340 - pro TLS, 340 služba, pro ověřování hesel, 218, 220 směrovač, 52 smtp, 23, 25, 56, 1 36, 267 SMTP, 23, 25, 56, 1 36, 267 - autentizace, 239, 249 SMTP AUTH, 21 6 , 224, 236 - na straně serveru, 245 - pouze s TLS, 281 - zabezpečení klienta, 296 SMTP, komunikace, 70, 278 smtpd, 56, 1 36 - konfigurace omezení, 346 - modifikace na proxy, 1 64 - nastavení, 36 - test omezení, 346 smtpd_cliencconnection_counUimit, 363 smtpd_cliencconnection_limiCexceptions, 365 smtpd_cliencrestrictions, 82 smtpd_data_done_timeout, 1 34 smtpd_data_restrictions, 82 smtpd_helo_required, 83, 94 smtpd_helo_restrictions, 82 smtpd_proxy:filter, 1 34 smtpd_proxy_filter, 1 33-134, 1 40, 142 smtpd_recipiencrestrictions, 82, 105, 287 smtpd_sasl_security_options, 243 smtpd_sendeclogin_maps, 85, 249 smtpd_senderJestrictions, 82 smtpd_tls_CAfile, 289 smtp_enforce_tls, 298 smtp-sink, 405 smtp-source, 405 smtp_tls_auth_only, 281 smtp_tls_CAfile, 292 smtp_tls_enforce_peername, 298 smtp_tls_loglevel, 293 socket, 35 1 , 355 soubor - binární, 40, 3 51 - konfigurační, 234, 3 50 , 3 53 , 400
43 0
'4-hMt' - master.cf, 1 58 - normální, 60 - otevírání, 402 - pro po dporu knihoven, 352 - vlastnictví, 350 - vlastník, 193, 196 - žurnální, 254, 277, 293, 297, 401 spam, 360 spamer, 1 03 spawn, 55 spojení, 45, 407 - klientské, 361 - odchozí, 185 - omezení, 363 - omezení četnosti, 361 - paralelní, 363-364 - přímé, 335 - vytáčené, 25, 45 správce, pošty, 67, 69 spuštění - doručení zpráv, 49 - Postfixu, 39 sql, 219, 230 SRP , 2 1 8 stabilita, 174 STARTILS, 278 statistika, vytváření, 360 striccrfc821_envelopes, 84 struktura - adresářová, 391 - kódování, 79 Subject, 77 subnet, 44 swap_bangpath, 84 syslog, 29 systém - jméno, 27 - předávací, 49 - příprava, 3 1 7 - souborů , 403
T table, 204 tabulka - domén, 201 - pro virtuální aliasy, 202 - vyhledávací, 63 tělo, 70, 77 - filtrování, 84
Rejstřík - zprávy, 1 30 test - autentizace, 233 - dialogu SMTP, 246 - doručení, 39 - SMTP AUTH, 245, 253 - žurnálu, 245 text/plain, 79 TLS (Transport Layer Security), 257-258 - aktivace, 274, 29 1 , 294 - identifikace serverů, 295 - konfigurace, 339, 34 1 - množství výpisů , 276 - na straně klienta, 291 - na straně serveru , 273 - ověření podpory, 269 - selektivní použití, 294 - test, 277, 342 tlsmgr, 280, 404 tmpfs, výpočet kapacity, 1 5 5 To, 77 transport, alternativní, 380 trivial-rewrite, 53 třída, omezení, 90 typ, obsahu , 78
u účet - lokální, 227 - vytvoření, 177 - zvláštní, 1 00 údaj , autentizační, 25 1-252 UDP (User Datagram Protocol), 29 UID, 206 úloha, delegace, 352 urandom, 276 úroveň, zápisu, 293 user, 203 utilita, 62 uživatel - autentizace, 246 - lokální, 3 1 2 - MySQL, 203 - nastavení, 1 93 - neexistující, 369 - přidávání, 202 - s vazbou , 338 - vzdálený, 147, 253
'4-hid'
Rejstřík v větev - návrh, 303 - specifikace, 3 1 2 vir, 1 6 2 , 359 - vyhledávání, 1 49, 1 63 virtual, 56, 192, 353 virtual_alias_domains, 187 virtual_aliases, 202 vlastník, souboru , 193, 196 vracení, obsahu, 1 40 vrstva - bezpečnostní, 2 1 4 - šifrovaná, 282, 284 - transportní, 1 67, 257, 269 vyhledávání, 45 - DNS, 367 - jmen, 3 1 - zrušení, 47 výhrada - ověření, 1 49 - připojení, 143 - vytvoření, 1 46 výjimka, v doménách na černé listině ' 109 výkon, 1 74 - ladění, 295, 357, 367 výpis, podrobnější, 254 výraz, regulární, 1 2 5 výsledek - ověření, 1 1 1 - vícehodnotový, 1 07 vzorek, testovací, 1 2 5
w WARN, 1 20 warn_iLreject, 83 webmaster, 1 00 where_field, 204
x X-Headers, 77
z záplata - aplikace, 385 - ldapdb, 333 zásobník - konfigurace, 280
- na klíče, 280 - údržba , 280 zátěž, testování, 405 závada, odstraňování, 395 zavádění, postup, 67 záznam - typu A, 32-33 - typu CNAME, 34 - typu MX , 32, 34 - typu PTR, 32-33 - zfalšovaný, 1 03 zdroj , externí, 62 značka, časová, 29 znak, neplatný, 95 zpomalení, špatných klientů , 88 zpracování - obsahu zprávy, 74 - paralelní, 357, 359 zpráva - blokování, 370 - filtr, 320 - filtrování, 1 28, 1 34 - hlavička, 277 - neznámému příjemci, 98 - obsah, 67, 74 - odeslání, 40-4 1 , 1 47 - odchozí, 38 - odmítání, 369, 371 - odmítnutí, 1 26 - přenos, 69, 8 1 - přesměrování, 1 28 - přidávání informací, 277 - testovací, 1 6 1 , 247, 253 - vrácená, 377 - vracení, 105 - vracení do fronty, 64 - zaslání, 1 89 - zpracování, 67 - zrušení, 1 28 zrušení, zprávy, 1 28
ž žurnál - čtení, 1 48 - qmgr, 401 - test, 245 - změna intervalu zapisování, 361
43 1
Další knihy z nabídky nakladatelství Computer Press 304 stran
K1240
+
288 stran
K1 196
CD
Chris Herborth:
Kyle Rankin:
Linux Knoppix
Unix a Linux
na maximum
Názorný průvodce
299 Kč
299 Kč
Knoppix je nejrozšířenější živou di
Moderně z p racova n á
stribucí, kterou lze spouštět přímo
dluh
všem
kniha
už ivate l ů m
splácí
u n ixových
z CD. Vynikající sChopnost detekce hardwaru, bohatá vý
systém ů nebo těm, kteří by některou z jeho odrůd rádi
bava nástrojů a utilit a snadné ovládání výrazně mění ob
vyzkoušeli a nechtějí ho ovládat jen prostřednictvím pří
vyklou tvář Linuxu. Kniha, jejíž součástí je i CD s tímto
kazové řádky a konfiguračních souborů. Nemusíte se
systémem, vás ve stovce nápadů, návodů a triků naučí jak
vzdát názorných grafických utilit, s jejichž pomocí mnohé
si distribuci upravit podle svého, využít jejích neobvyklých
úkony při administraci výrazně zjednOdušíte a zvládnete
možností a získat tak užitečný Linux na cesty pro řešení
je tak i na svém domácím počítači.
problémů s hardwarem a snadnou diagnostiku sítí.
K1 197
1 64 stran
K1239
Jan Polzer:
Daniel J. Barrett:
GNU Emacs a Vim
Linux l'(.'n ' �
> ==:::=.:=
1 52 stran
kapesní přehled
Kapesní přehled 1 69 Kč
99 Kč
==
Programy Vim a GNU Emacs d ispo-
Popisuje nejdůležitější součásti každodenní práce s Linuxem stručně,
přesně a přehledně - tak, abyste požadované i nformace
n ují množstvím funkcí, příkazů a klá vesových
zkratek,
že
ani
u ž i vatelé,
kteří
s těmito
populárnímí editory běžně pracují, obvykle znají jen zlo
mohli rychle najít a ihned uplatnit při své práci. Zkušeněj
mek jejich skutečných možností. K n ížka kapesního formá
š í m uživatelům poslouží jako pohotová referenční příruč
tu v praktické kroužkové vazbě
ka, samostatnějším začátečníkům jako rychlý průvodce
dostatečně komentovaný přehled ovládání a široké škály
poznáváním možností tohoto systému.
příkazů obou těchto editorů.
K1344
80 stran
+
CD
900 stran
+
Mark G. Sobe l l :
Linux Fedora Core 5
Mistrovství v RedHat
1 97 Kč
a Fedora Linux 990 Kč
stribuce vzešlá z e z n á m é h o a prově řeného Red Hat Linux. Tato kniha vás provede instalací a základy používání nejaktuálnější ver
ze, tedy Fedora Core 5 . Díky přiloženému instalačnímu DVD vám kniha poskytne vše, co potřebujete k úspěšné mu a bezproblémovému zprovoznění a používání systé mu. Kniha není pouhou i nstalační příručkou, ale zabývá se i konfigurací systému a jeho používáním a poradí také se zvládnutím konzole, utilit a grafických prostředí.
ale
DVD
O n dřej Zloský:
Fedora Core je populární l i nuxová d i
tll
K1 1 99
přináší stručný,
Fedora Core a Red Hat E nterprise li nux jsou náročné serverové distribu ce a jejich administrátoři si zaslouží takto podrobnou a pokročilou publikaci - tím spíše z pera vyhlášeného linu xového autora. Srozumitelně a s patřičnou konkrétností probírá všechny potřebné oblasti implementace, adminis trace a zabezpečení linuxového serveru, a teprve s n í začátečník porozumí své práci a svému systému a profe sionál najde nejlepší řešení.
Všechny tyto a mnohé dalši zajimavé publikace si můžete objednat u zásilkové služby našeho vydavatelstvi. nebo je žádejte u vašeho knihkupce.
Zasilkova služba pno CR: Computer Press
Brno. námésti 28. dubna 48, 635 00 Brno-Bystrc. tel.: 546 122 1 1 1 . e-mail: [email protected]
Computer Press Praha. Pod Vinici 2 3 . 143 00 Praha. tel.: 2 2 5 273 930. e-mail: [email protected]
7�ril""t"\\I� C'h f�h'!ll
nr",
Computer Press Ostrava, Fráni Srámka 5 . 709 00 Ostrava. tel.: 596 634 734. e-mail: [email protected] c::p. rnrnnl lt.or PrQ�(;; Rr�tic:: I �,,� H�tt�lnv;;! 1? R�1 0 3 Bratislava , Slovenska reoublika, tel. +421 ( 2 ) 4445 2048,
Provozujeme poštovní server v Linuxu
o autorech: Ralf Hildebrandt a Patrick Koetter jsou aktivní a známé osobnosti v post fixových kruzích. H i l debrandt je tech n i c kým manažerem v německé spo
Postfix
lečn osti T-Systems, Koetter je proj e k tantem informačních systémů ve své vlastní společnosti působící v oblasti kom u n ikací. Oba přednášejí na před ních odborných konferencích a pravi d e l n ě přispívají do mnoha i n terneto vých d i s k u s n ích s k u p i n .
E lektronická
pošta j e fen o m é n e m současnosti: bez spole h l ivého a bezpečného
e-mailového serveru se d n es neobejde prakticky žádná fi rma. Nejpoužívanějším poštovním serverem v u n ixovém prostředí j e stále S e n d m a i l , bývá však čím d á l
Zařazen í publikace:
častěji kritizován p r o své nedostatky v obl asti bezpečnosti. Postfix je n ový, ele gantní, vol n ě šiřitelný agent určený k přenosu e-m a i l ových zpráv. Znalost jeho i n stalace, konfigurace a používá n í znamená schopnost během krátké doby zajis tit flexibilní, bezpečnou a spolehlivou e-m a i l ovou funkčnost.
Kn i h a , jejíž ori g i n á l n í vyd á n í je roku
2005,
mnohými čtenáři označováno jako Nejlepší titul
přívětivým způsobem provád í celou problematikou i n stalace a konfi
gurace Postfixu, srozumitelně vysvětluje řešení běžných i nezvyklých situací, nezdržuje dlouhými pasážemi a na proti tomu stručně, jasně, avšak precizně uka
Com puter Press, a . s .
zuje m n o h o postupů, které a d m i n istrátor postfixového serveru potřebuje při své
n á m . 2 8 . d u b n a 48
každode n n í práci. K n i h a vás kromě j i n é h o naučí, jak:
6 3 5 00 Brno
•
n a i nstalovat a n a konfi g u rovat Postfix,
•
n a stavit a provozovat fire m n í e-mailový server,
•
vytvořit poštovní server pro něko l i k domén,
•
konfigurovat Cyrus SASL, OpenDAP nebo Courier I MAP,
•
poradit si s autentizací SMTP,
•
porozumět bezpečnosti transportní vrstvy,
Obj e d návejte na: http:// k n i hy.cpress.cz d i [email protected] Bezplatná l i nka
800 555 5 1 3
•
dbát na bezpečnost a c h rá n i t firmu před útoky realizovanými e-mailem,
•
zpracovávat zprávy v závislosti na jejich obsahu,
•
l a d it výkon Postfixu,
•
řešit problémy s každo d e n n ím provozem Postfixu.
Kn i h a
•
obsahuje mnoho praktických příkladů se sroz u m itelnými vysvětl eními
N O STAReK PRESS
I S B N 80-2 5 1 - 1 0 2 0-6
a při jejím čtení b u dete mít jistotu, že dostáváte pomoc přímo z rukou odborníků n a Postfix. Je i ve světovém měřítku považová na za zákla d n í příručku, která by
Prodej n í kód: K 1 2 9 8
neměla chybět v knihovničce žád ného a d m i n istrátora myslícího to s elektronic
Doporučená cena
kou poštou vážně. Otevřete-Ii knihu jako 'začátečník a dočtete-Ii j i až do konce,
490 l