chráněný RELAY (potřetí :-( ) - a naposledy :)

Miroslav BENES miroslav.benes na zdas.cz
Středa Srpen 24 12:52:58 CEST 2005


Děkuij za pomoc, už to chodí.

> Dobrý den!
>
> Jelikož v této oblasti jsem jen nedouk (kdysi jsem něco dělal, nějak to
> fungovalo, ale již dlouho jsem na nic se sendmailem opravdu nesáhl), tak
> napíši jen to, co je zřejmé, abych znalejším ušetřil práci a mohli se
> případně věnovat rovnou podstatě problému.  :-)

To co jste napsal bylo (apoň pro mě) naprosto zásadní :)


> Znamená to, že přes tento server jde pouze pošta od cestujících
> zaměstnanců, ne pošta z Internetu směřující do Internetu?

Ano, bude to jednoúčelový stroj (resp. na tomto stroji bude sendmail jen 
pro tento účel)

> Pokud by tudy
> tekla i normální pošta, pak byste doručování bez hesla zakazovat nechtěl,
> protože byste tím znemožnil doručování pošty (na postu SMTP, tj. 25).

To je jasné, ale není to náš případ.
Tento poštovní server bude fungovat jen jako "mezistanice" a bude dělat 
RELAY pro veškerou poštu - _vše_ co přijme (od autorizovaných uživatelů) 
bude přeposílat na náš hlavní poštovní uzel. Zde se pošta zpracuje úplně 
stejně jako buy byla od vnitřního uživatele.
Výhodou tohoto řešení je že takto nastavený server bude v 
"demilitarizované zóně" (DMZ), takže bude vhodnými pravidly ma firewallu 
dostupný jak z vnitřní sítě tak i z internetu - cestujicí uživatel si 
tak může připojit notebook ve vnitřní síti nebo "venku" přes providera, 
ale nastavení poštovního serveru pro odchozí poštu nemusí měnit.

> Pokud platí domněnka, že jde o specializovaný server pouze pro cestující
> zaměstnance, je implicitně zapnuto přijímání pošty pro místní uživatele
> odkudkoliv i bez autorizace a pokud to chcete jinak, vynuťte si ověření
> totožnosti vhodným příznakem 

Možná se ptám blbě, ale jak se pozná, co je "pro místní uživayele" - jen 
podle shody domény serveru a cílové e-mailové adresy ?

> u tuším DEMON_OPTIONS (snad je to M=a -- dle
> http://www.sendmail.org/~ca/email/auth.html). Doplňte si ho, vygenerujte
> nové sendmail.cf a restartujte sendmail. Ten příznak, který myslím, by,
> pokud si to dobře pamatuji, měl vynutit ověření totožnosti vždy.

Ano, to je přesně ta vola, kterou jsem potřeboval !!

> Druhou
> možností by bylo požadovat via TLS vrstvu klientský certifikát podepsaný
> Vaším firemním a požadovat ověření klientského certifikátu (verify).

Což je ale o stupínek komplikovanější a v našem případě IMHO zbytečné.



> You can require the use of SMTP AUTH for relaying by simply turning off
> other means of relaying for incoming mail, e.g., the access map or class
> R. That is, if you have my.domain in /etc/mail/relay-domains or
>
>   my.domain    RELAY
> in the access map, then remove the entry from class R
> (/etc/mail/relay-domains) and use
>
>   To:my.domain    RELAY
> in the access map.

Nepoužívám relay-domains, takže toto je v mém případě zbytečné.


> Requiring SMTP AUTH for all mails is in general a bad idea, because then
> you cannot receive mails from other users (since the cannot
> authenticate). So you must do this only on a server that is solely
> intended for your own users to send mail, not for a publically advertised
> (via MX records) server.

Tento bod je splněn - jde o vyhrazený server, přes který nejde běžný provoz.


> Nakonec jsem napsal více, než jsem se původně domníval, že napíši, a
> možná to  tím vyřršíte. Pokud ao, pošlete sem, prosím, fungující řešeni
> (po anonymizaci).

/etc/mail/sendmail.mc:
-----------------------

divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl
OSTYPE(`linux')dnl
define(`SMART_HOST',`centralnipostovniserver.domena.cz')
define(`confDEF_USER_ID',``8:12'')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A p y ')dnl
define(`confTO_IDENT', `0')dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
DAEMON_OPTIONS(`Port=smtp, Addr=0.0.0.0, Name=MTA, M=a')dnl
FEATURE(`accept_unresolvable_domains')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
define(`confCACERT_PATH', `/etc/mail/certs')dnl
define(`confCACERT', `/etc/mail/certs/cacert.pem')dnl
define(`confSERVER_CERT', `/etc/mail/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/mail/certs/sendmail.pem')dnl
define(`confCLIENT_CERT', `/etc/mail/certs/sendmail.pem')dnl
define(`confCLIENT_KEY', `/etc/mail/certs/sendmail.pem')dnl
DAEMON_OPTIONS(`Family=inet, Port=465, Name=MTA-SSL, M=s')dnl
define(`confDEF_CHAR_SET', `iso-8859-1')dnl
define(`confMAX_MESSAGE_SIZE', `15000000')dnl Denial of Service Attacks
define(`confMAX_DAEMON_CHILDREN', `30')dnl Denial of Service Attacks
define(`confCONNECTION_RATE_THROTTLE', `2')dnl Denial of Service Attacks
define(`confMAXRCPTSPERMESSAGE', `50')dnl Denial of service Attacks
define(`confSINGLE_LINE_FROM_HEADER', `True')dnl
define(`confSMTP_LOGIN_MSG', `$j')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`confTO_INITIAL', `6m')dnl
define(`confTO_CONNECT', `20s')dnl
define(`confTO_HELO', `5m')dnl
define(`confTO_HOSTSTATUS', `2m')dnl
define(`confTO_DATAINIT', `6m')dnl
define(`confTO_DATABLOCK', `35m')dnl
define(`confTO_DATAFINAL', `35m')dnl
define(`confDIAL_DELAY', `20s')dnl
define(`confNO_RCPT_ACTION', `add-apparently-to')dnl
define(`confALIAS_WAIT', `0')dnl
define(`confMAX_HOP', `35')dnl
define(`confQUEUE_LA', `5')dnl
define(`confREFUSE_LA', `12')dnl
define(`confSEPARATE_PROC', `False')dnl
define(`confCON_EXPENSIVE', `true')dnl
define(`confWORK_RECIPIENT_FACTOR', `1000')dnl
define(`confWORK_TIME_FACTOR', `3000')dnl
define(`confQUEUE_SORT_ORDER', `Time')dnl
define(`confPRIVACY_FLAGS', 
`authwarnings,goaway,restrictmailq,restrictqrun,needmailhelo')dnl
FEATURE(`delay_checks')dnl
FEATURE(`generics_entire_domain')dnl
FEATURE(`local_procmail')dnl
FEATURE(`masquerade_envelope')dnl
FEATURE(`nouucp',`reject')dnl
FEATURE(`redirect')dnl
FEATURE(`relay_entire_domain')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`virtuser_entire_domain')dnl
FEATURE(dnsbl,`blackholes.mail-abuse.org',` Mail from $&{client_addr} 
rejected; see http://mail-abuse.org/cgi-bin/lookup?$& {client_addr}')dnl
FEATURE(dnsbl,`dialups.mail-abuse.org',` Mail from dial-up rejected; see 
http://mail-abuse.org/dul/enduser.htm')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
FEATURE(access_db)dnl
FEATURE(lookupdotdomain)dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`no_default_msa')dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

Oproti "vzorovému" konfiguráku jsou tu především tyto změny :

define(`confAUTH_OPTIONS', `A p y ')dnl
 - nemá povolit anonymní přihlašování

DAEMON_OPTIONS(`Port=smtp, Addr=0.0.0.0, Name=MTA, M=a')dnl
 - povolen přístupo odevšad + vynucená autentizace

define(`confCACERT_PATH', `/etc/mail/certs')dnl
define(`confCACERT', `/etc/mail/certs/cacert.pem')dnl
define(`confSERVER_CERT', `/etc/mail/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/mail/certs/sendmail.pem')dnl
define(`confCLIENT_CERT', `/etc/mail/certs/sendmail.pem')dnl
 - volby týkající se certifikátů (viz dříve zmiňovaný odkaz)



/etc/mail/access je toto :
--------------------------
localhost.localdomain           RELAY
localhost                       RELAY
127.0.0.1                       RELAY
Srv_Features:        acl
TLS_Clt:        ENCR:128

Povolit RELAY z localhost-u je údajně nutné, volba Srv_Features "acl" 
nemá nic společného s "access control list" jak by se mohlo na první 
pohled zdát, ale jsou to 3 nezávislé volby :
a - offer AUTH
c - require security layer for plaintext AUTH
l - require AUTH

Právě poslední volba (require AUTH) mě spletla a myslel jsem si, že 
tímto se nastaví vynecá autorizae pro _všechny_ klienty. Ale není to 
pravda - viz výše.


Volba TLC_Clt si vynucuje minimální délku šifrovacího klíče použitého 
pro komunikaci.


Podle jiného příspěvku (autor : Michal Dobes) je :

# a pokud se už bude měit sendmail.mc, tak místo toho Srv_Features: acl
# se tam dá dát:
# define(`confAUTH_OPTIONS', `A p')

Asi má pravdu, protože i po vypuštění "Srv_Features: acl" z aceess se to 
zdá se chová stejně - tedy dobře.

Tolik stručný popis konfigurace. Ještě info :
systému: FC3
kernel: 2.6.9-1.667smp
balíčky: cyrus-sasl-2.1.19-3, openssl-0.9.7a-42.1, sendmail-8.13.1-2


> Díky!
>
> V. S.


Já moc děkuji za pomoc !

M.B.


P.S. Ještě doplním jednu "botu" - při generování certifikátů je dotaz i 
na "Common Name (eg, your name or your server's hostname)". Zde je nutné 
uvést jméno pod jakým je poštovní server uvedený v DNS ! Pokud toto 
nebude splněno, nic zvláštního se nestane, ale takto vygenerované 
certifikáty odmítne Thunderbird přijmout "trvale" (a umístit na 
úložiště). Sice je přijme, ale jen "pro sezení", tj. do končení aplikace.
Je to drobné překouknutí, ale stálo mě to dost nervů.




Další informace o konferenci Sendmail