Postfix : provozujeme poštovní server v Linuxu 8025110206, 9788025110201 [PDF]


155 35 16MB

Czech Pages 434

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
0001_OBR0001......Page 1
0002_OBR0002......Page 2
0003_OBR0003......Page 3
0004_OBR0004......Page 4
0005_OBR0005......Page 5
0006_OBR0006......Page 6
0007_OBR0007......Page 7
0008_OBR0008......Page 8
0009_OBR0009......Page 9
0010_OBR0010......Page 10
0011_OBR0011......Page 11
0012_OBR0012......Page 12
0013_OBR0013......Page 13
0014_OBR0014......Page 14
0015_OBR0015......Page 15
0016_OBR0016......Page 16
0017_OBR0017......Page 17
0018_OBR0018......Page 18
0019_OBR0019......Page 19
0020_OBR0020......Page 20
0021_OBR0021......Page 21
0022_OBR0022......Page 22
0023_OBR0023......Page 23
0024_OBR0024......Page 24
0025_OBR0025......Page 25
0026_OBR0026......Page 26
0027_OBR0027......Page 27
0028_OBR0028......Page 28
0029_OBR0029......Page 29
0030_OBR0030......Page 30
0031_OBR0031......Page 31
0032_OBR0032......Page 32
0033_OBR0033......Page 33
0034_OBR0034......Page 34
0035_OBR0035......Page 35
0036_OBR0036......Page 36
0037_OBR0037......Page 37
0038_OBR0038......Page 38
0039_OBR0039......Page 39
0040_OBR0040......Page 40
0041_OBR0041......Page 41
0042_OBR0042......Page 42
0043_OBR0043......Page 43
0044_OBR0044......Page 44
0045_OBR0045......Page 45
0046_OBR0046......Page 46
0047_OBR0047......Page 47
0048_OBR0048......Page 48
0049_OBR0049......Page 49
0050_OBR0050......Page 50
0051_OBR0051......Page 51
0052_OBR0052......Page 52
0053_OBR0053......Page 53
0054_OBR0054......Page 54
0055_OBR0055......Page 55
0056_OBR0056......Page 56
0057_OBR0057......Page 57
0058_OBR0058......Page 58
0059_OBR0059......Page 59
0060_OBR0060......Page 60
0061_OBR0061......Page 61
0062_OBR0062......Page 62
0063_OBR0063......Page 63
0064_OBR0064......Page 64
0065_OBR0065......Page 65
0066_OBR0066......Page 66
0067_OBR0067......Page 67
0068_OBR0068......Page 68
0069_OBR0069......Page 69
0070_OBR0070......Page 70
0071_OBR0071......Page 71
0072_OBR0072......Page 72
0073_OBR0073......Page 73
0074_OBR0074......Page 74
0075_OBR0075......Page 75
0076_OBR0076......Page 76
0077_OBR0077......Page 77
0078_OBR0078......Page 78
0079_OBR0079......Page 79
0080_OBR0080......Page 80
0081_OBR0081......Page 81
0082_OBR0082......Page 82
0083_OBR0083......Page 83
0084_OBR0084......Page 84
0085_OBR0085......Page 85
0086_OBR0086......Page 86
0087_OBR0087......Page 87
0088_OBR0088......Page 88
0089_OBR0089......Page 89
0090_OBR0090......Page 90
0091_OBR0091......Page 91
0092_OBR0092......Page 92
0093_OBR0093......Page 93
0094_OBR0094......Page 94
0095_OBR0095......Page 95
0096_OBR0096......Page 96
0097_OBR0097......Page 97
0098_OBR0098......Page 98
0099_OBR0099......Page 99
0100_OBR0100......Page 100
0101_OBR0101......Page 101
0102_OBR0102......Page 102
0103_OBR0103......Page 103
0104_OBR0104......Page 104
0105_OBR0105......Page 105
0106_OBR0106......Page 106
0107_OBR0107......Page 107
0108_OBR0108......Page 108
0109_OBR0109......Page 109
0110_OBR0110......Page 110
0111_OBR0111......Page 111
0112_OBR0112......Page 112
0113_OBR0113......Page 113
0114_OBR0114......Page 114
0115_OBR0115......Page 115
0116_OBR0116......Page 116
0117_OBR0117......Page 117
0118_OBR0118......Page 118
0119_OBR0119......Page 119
0120_OBR0120......Page 120
0121_OBR0121......Page 121
0122_OBR0122......Page 122
0123_OBR0123......Page 123
0124_OBR0124......Page 124
0125_OBR0125......Page 125
0126_OBR0126......Page 126
0127_OBR0127......Page 127
0128_OBR0128......Page 128
0129_OBR0129......Page 129
0130_OBR0130......Page 130
0131_OBR0131......Page 131
0132_OBR0132......Page 132
0133_OBR0133......Page 133
0134_OBR0134......Page 134
0135_OBR0135......Page 135
0136_OBR0136......Page 136
0137_OBR0137......Page 137
0138_OBR0138......Page 138
0139_OBR0139......Page 139
0140_OBR0140......Page 140
0141_OBR0141......Page 141
0142_OBR0142......Page 142
0143_OBR0143......Page 143
0144_OBR0144......Page 144
0145_OBR0145......Page 145
0146_OBR0146......Page 146
0147_OBR0147......Page 147
0148_OBR0148......Page 148
0149_OBR0149......Page 149
0150_OBR0150......Page 150
0151_OBR0151......Page 151
0152_OBR0152......Page 152
0153_OBR0153......Page 153
0154_OBR0154......Page 154
0155_OBR0155......Page 155
0156_OBR0156......Page 156
0157_OBR0157......Page 157
0158_OBR0158......Page 158
0159_OBR0159......Page 159
0160_OBR0160......Page 160
0161_OBR0161......Page 161
0162_OBR0162......Page 162
0163_OBR0163......Page 163
0164_OBR0164......Page 164
0165_OBR0165......Page 165
0166_OBR0166......Page 166
0167_OBR0167......Page 167
0168_OBR0168......Page 168
0169_OBR0169......Page 169
0170_OBR0170......Page 170
0171_OBR0171......Page 171
0172_OBR0172......Page 172
0173_OBR0173......Page 173
0174_OBR0174......Page 174
0175_OBR0175......Page 175
0176_OBR0176......Page 176
0177_OBR0177......Page 177
0178_OBR0178......Page 178
0179_OBR0179......Page 179
0180_OBR0180......Page 180
0181_OBR0181......Page 181
0182_OBR0182......Page 182
0183_OBR0183......Page 183
0184_OBR0184......Page 184
0185_OBR0185......Page 185
0186_OBR0186......Page 186
0187_OBR0187......Page 187
0188_OBR0188......Page 188
0189_OBR0189......Page 189
0190_OBR0190......Page 190
0191_OBR0191......Page 191
0192_OBR0192......Page 192
0193_OBR0193......Page 193
0194_OBR0194......Page 194
0195_OBR0195......Page 195
0196_OBR0196......Page 196
0197_OBR0197......Page 197
0198_OBR0198......Page 198
0199_OBR0199......Page 199
0200_OBR0200......Page 200
0201_OBR0201......Page 201
0202_OBR0202......Page 202
0203_OBR0203......Page 203
0204_OBR0204......Page 204
0205_OBR0205......Page 205
0206_OBR0206......Page 206
0207_OBR0207......Page 207
0208_OBR0208......Page 208
0209_OBR0209......Page 209
0210_OBR0210......Page 210
0211_OBR0211......Page 211
0212_OBR0212......Page 212
0213_OBR0213......Page 213
0214_OBR0214......Page 214
0215_OBR0215......Page 215
0216_OBR0216......Page 216
0217_OBR0217......Page 217
0218_OBR0218......Page 218
0219_OBR0219......Page 219
0220_OBR0220......Page 220
0221_OBR0221......Page 221
0222_OBR0222......Page 222
0223_OBR0223......Page 223
0224_OBR0224......Page 224
0225_OBR0225......Page 225
0226_OBR0226......Page 226
0227_OBR0227......Page 227
0228_OBR0228......Page 228
0229_OBR0229......Page 229
0230_OBR0230......Page 230
0231_OBR0231......Page 231
0232_OBR0232......Page 232
0233_OBR0233......Page 233
0234_OBR0234......Page 234
0235_OBR0235......Page 235
0236_OBR0236......Page 236
0237_OBR0237......Page 237
0238_OBR0238......Page 238
0239_OBR0239......Page 239
0240_OBR0240......Page 240
0241_OBR0241......Page 241
0242_OBR0242......Page 242
0243_OBR0243......Page 243
0244_OBR0244......Page 244
0245_OBR0245......Page 245
0246_OBR0246......Page 246
0247_OBR0247......Page 247
0248_OBR0248......Page 248
0249_OBR0249......Page 249
0250_OBR0250......Page 250
0251_OBR0251......Page 251
0252_OBR0252......Page 252
0253_OBR0253......Page 253
0254_OBR0254......Page 254
0255_OBR0255......Page 255
0256_OBR0256......Page 256
0257_OBR0257......Page 257
0258_OBR0258......Page 258
0259_OBR0259......Page 259
0260_OBR0260......Page 260
0261_OBR0261......Page 261
0262_OBR0262......Page 262
0263_OBR0263......Page 263
0264_OBR0264......Page 264
0265_OBR0265......Page 265
0266_OBR0266......Page 266
0267_OBR0267......Page 267
0268_OBR0268......Page 268
0269_OBR0269......Page 269
0270_OBR0270......Page 270
0271_OBR0271......Page 271
0272_OBR0272......Page 272
0273_OBR0273......Page 273
0274_OBR0274......Page 274
0275_OBR0275......Page 275
0276_OBR0276......Page 276
0277_OBR0277......Page 277
0278_OBR0278......Page 278
0279_OBR0279......Page 279
0280_OBR0280......Page 280
0281_OBR0281......Page 281
0282_OBR0282......Page 282
0283_OBR0283......Page 283
0284_OBR0284......Page 284
0285_OBR0285......Page 285
0286_OBR0286......Page 286
0287_OBR0287......Page 287
0288_OBR0288......Page 288
0289_OBR0289......Page 289
0290_OBR0290......Page 290
0291_OBR0291......Page 291
0292_OBR0292......Page 292
0293_OBR0293......Page 293
0294_OBR0294......Page 294
0295_OBR0295......Page 295
0296_OBR0296......Page 296
0297_OBR0297......Page 297
0298_OBR0298......Page 298
0299_OBR0299......Page 299
0300_OBR0300......Page 300
0301_OBR0301......Page 301
0302_OBR0302......Page 302
0303_OBR0303......Page 303
0304_OBR0304......Page 304
0305_OBR0305......Page 305
0306_OBR0306......Page 306
0307_OBR0307......Page 307
0308_OBR0308......Page 308
0309_OBR0309......Page 309
0310_OBR0310......Page 310
0311_OBR0311......Page 311
0312_OBR0312......Page 312
0313_OBR0313......Page 313
0314_OBR0314......Page 314
0315_OBR0315......Page 315
0316_OBR0316......Page 316
0317_OBR0317......Page 317
0318_OBR0318......Page 318
0319_OBR0319......Page 319
0320_OBR0320......Page 320
0321_OBR0321......Page 321
0322_OBR0322......Page 322
0323_OBR0323......Page 323
0324_OBR0324......Page 324
0325_OBR0325......Page 325
0326_OBR0326......Page 326
0327_OBR0327......Page 327
0328_OBR0328......Page 328
0329_OBR0329......Page 329
0330_OBR0330......Page 330
0331_OBR0331......Page 331
0332_OBR0332......Page 332
0333_OBR0333......Page 333
0334_OBR0334......Page 334
0335_OBR0335......Page 335
0336_OBR0336......Page 336
0337_OBR0337......Page 337
0338_OBR0338......Page 338
0339_OBR0339......Page 339
0340_OBR0340......Page 340
0341_OBR0341......Page 341
0342_OBR0342......Page 342
0343_OBR0343......Page 343
0344_OBR0344......Page 344
0345_OBR0345......Page 345
0346_OBR0346......Page 346
0347_OBR0347......Page 347
0348_OBR0348......Page 348
0349_OBR0349......Page 349
0350_OBR0350......Page 350
0351_OBR0351......Page 351
0352_OBR0352......Page 352
0353_OBR0353......Page 353
0354_OBR0354......Page 354
0355_OBR0355......Page 355
0356_OBR0356......Page 356
0357_OBR0357......Page 357
0358_OBR0358......Page 358
0359_OBR0359......Page 359
0360_OBR0360......Page 360
0361_OBR0361......Page 361
0362_OBR0362......Page 362
0363_OBR0363......Page 363
0364_OBR0364......Page 364
0365_OBR0365......Page 365
0366_OBR0366......Page 366
0367_OBR0367......Page 367
0368_OBR0368......Page 368
0369_OBR0369......Page 369
0370_OBR0370......Page 370
0371_OBR0371......Page 371
0372_OBR0372......Page 372
0373_OBR0373......Page 373
0374_OBR0374......Page 374
0375_OBR0375......Page 375
0376_OBR0376......Page 376
0377_OBR0377......Page 377
0378_OBR0378......Page 378
0379_OBR0379......Page 379
0380_OBR0380......Page 380
0381_OBR0381......Page 381
0382_OBR0382......Page 382
0383_OBR0383......Page 383
0384_OBR0384......Page 384
0385_OBR0385......Page 385
0386_OBR0386......Page 386
0387_OBR0387......Page 387
0388_OBR0388......Page 388
0389_OBR0389......Page 389
0390_OBR0390......Page 390
0391_OBR0391......Page 391
0392_OBR0392......Page 392
0393_OBR0393......Page 393
0394_OBR0394......Page 394
0395_OBR0395......Page 395
0396_OBR0396......Page 396
0397_OBR0397......Page 397
0398_OBR0398......Page 398
0399_OBR0399......Page 399
0400_OBR0400......Page 400
0401_OBR0401......Page 401
0402_OBR0402......Page 402
0403_OBR0403......Page 403
0404_OBR0404......Page 404
0405_OBR0405......Page 405
0406_OBR0406......Page 406
0407_OBR0407......Page 407
0408_OBR0408......Page 408
0409_OBR0409......Page 409
0410_OBR0410......Page 410
0411_OBR0411......Page 411
0412_OBR0412......Page 412
0413_OBR0413......Page 413
0414_OBR0414......Page 414
0415_OBR0415......Page 415
0416_OBR0416......Page 416
0417_OBR0417......Page 417
0418_OBR0418......Page 418
0419_OBR0419......Page 419
0420_OBR0420......Page 420
0421_OBR0421......Page 421
0422_OBR0422......Page 422
0423_OBR0423......Page 423
0424_OBR0424......Page 424
0425_OBR0425......Page 425
0426_OBR0426......Page 426
0427_OBR0427......Page 427
0428_OBR0428......Page 428
0429_OBR0429......Page 429
0430_OBR0430......Page 430
0431_OBR0431......Page 431
0432_OBR0432......Page 432
0433_OBR0433......Page 433
0434_OBR0434......Page 434
Papiere empfehlen

Postfix : provozujeme poštovní server v Linuxu
 8025110206, 9788025110201 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

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



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