Hlavní navigace

Sendmail: autentizace, smarthost a blacklist

1. 12. 2008
Doba čtení: 5 minut

Sdílet

Rozšíříme si sendmailové řešení o smart host, blacklisty a smtp autentizaci. U autentizace se bude jednat o ověřování klientů i o nastavení sendmailu jako smtp klienta s autentizací. To se nám může hodit, pokud jsme například zákazník O2 a využíváme jejich servery. Jedná se o rozšíření řešení z minulých dílu.

Smarthost

Proč jej použít? V případě rozesílání zprávy na velké množství adres, můžeme takhle ulevit svému poštovnímu serveru a lince do internetu. Za normálního stavu by se sendmail snažil odeslat zprávu na všechny adresy sám, takže email by od vás odcházel třeba 500krát. Pokud ale nastavíme smarthost (patrně to bude smtp server vašeho poskytovatele), zpráva bude odeslána jednou na smarthost a ten zařídí její další rozesílání. Toto mělo velký význam v době vytáčených linek. Nevýhodou může být další server v cestě, a tím prodloužení celého postupu. Před necelým rokem byly například dlouhodobě přetížené servery jednoho velkého poskytovatele a odesílat takto poštu bylo utrpení. Smarthost nastavíme snadno, stačí v našem mc souboru upravit řádek:

dnl define(`SMART_HOST', `your.isp.mail.server')

na

define(`SMART_HOST', `esmtp:smtp.poskytovatel.cz')dnl

Co vlastně znamená to slovíčko dnl, jsem ještě nepopisoval. Je to vysvětleno ve starším článku.

Po úpravě nezapomeňte restartovat sendmail:

cd /etc/mail
make install
make restart

Blacklisty

Využití některého z blacklist serverů nám může také ulevit. Tyto servery udržují databáze open relay serverů nebo IP adres, ze kterých se rozesílá spam. Vy můžete při příchodu emailu proti těmto databázím odesílatele zkontrolovat a při nálezu serveru na blacklistu zprávu rovnou odmítnout a nezatěžovat se dále s jejím zpracováním. V mc souboru je proto již připravené M4 makro. Lehce ho upravíme třeba pro použití spamcop.net:

FEATURE(`enhdnsbl', `bl.spamcop.net')dnl

Po restartu můžete v maillogu vidět podobný výsledek:

Nov 23 13:55:55 mail sm-mta[54812]: ruleset=check_relay, arg1=[200.195.166.27], arg2=127.0.0.2, relay=27.166.195.200.static.copel.net
[200.195.166.27] (may be forged), reject=550 5.7.1 Rejected: 200.195.166.27 listed at bl.spamcop.net

Můžeme odesílacímu serveru i podrobněji sdělit, proč od něj poštu nechceme, stačí malá úprava v mc souboru:

FEATURE(`enhdnsbl', `bl.spamcop.net', `"Spam blocked see: http://spamcop.net/bl.shtml?"$&{client_addr}', `t')dnl

Výsledek bude teď takový:

Nov 23 00:02:49 mail sm-mta[45392]: ruleset=check_relay, arg1=81.203.250.107.dyn.user.ono.com, arg2=127.0.0.2, relay=81.203.250.107.dyn.user.ono.com [81.203.2
50.107], reject=553 5.3.0 Spam blocked see: http://spamcop.net/bl.shtml?81.203.250.107

SMTP autentizace – sendmail jako smtp klient

Vysvětlili jsme si smarthost. Může se ale objevit komplikace – server poskytovatele může chtít nějakou autentizaci. Tak to funguje třeba u serveru smtp.iol.cz. Řešení není nijak složité, v /etc/mail si založte soubor authinfo:

AuthInfo:smtp.iol.cz "I:uzivatel" "P:heslo"

Potom z něj vytvořte databázi:

makemap hash authinfo < authinfo

V našem konfiguračním souboru nastavte smarthost a přidejte authinfo:

define(`SMART_HOST', `smtp.iol.cz')
FEATURE(`authinfo')

Po restartu sendmailu už bude sendmail posílat autentizační údaje.

SMTP autorizace uživatelů

Uživatelé často žádají dostupnost své pošty kdykoli a kdekoli. Typický obchodník jezdí s notebookem a poštu má v Outlooku. Nastavíme mu poštovní účet a může stahovat poštu. V tom problém není, ale narazit můžeme u odesílání. Třeba při roamingu v zahrančí a používání různých připojení. Těžko budme takového obchodníka učit si nastavovat správný smtp server. Proto mu dovolíme odesílat přes náš firemní server. Samozřejmě se musí nějak ověřit a po ověření mu dovolíme poštu odeslat. Pro začátek si předvedeme nejzákladnější autentizaci. Heslo se posílá zakódovaně, ale stále je odposlechnutelné a patrně i rozluštitelné. V dalších pokračováních si přidáme ještě TLS.

Pro ověřování uživatelů si nainstalujeme autentikační server Cyrus-SASL2.

cd /usr/ports/security/cyrus-sasl2
make install

V menu zaškrtněte AUTHDAEMON, LOGIN, PLAIN, CRAM a DIGEST. Nechceme použít PLAIN  – heslo by se posílalo v nešifrované podobě a byl by možný jeho odposlech. Upravte soubor /usr/local/lib/sasl2/Sendmail.conf  na:

pwcheck_method: saslauthd

Zajistíme automatické spouštění démona při startu serveru, do /etc/rc.conf přidáme:

saslauthd_enable="YES"

Démona si pro teď ručně spustíme:

/usr/local/etc/rc.d/saslauthd start

Jestli cyrus pracuje správně, můžeme ověřit programem  testsaslauthd

root@mail cyrus-sasl2 # testsaslauthd -u uzivatel -p dobreheslo
0: OK "Success."
root@mail cyrus-sasl2 # testsaslauthd -u uzivatel -p spatneheslo
0: NO "authentication failed"

Následně zkompilujeme sendmail s podporou autentifikace. Teoreticky můžeme použít i verzi z ports tree. Je tam připraven například sendmail+tls+sas­l2+ldap. K tomu se dostaneme příště. Dnes tedy kompilace sendmailu, který je přímo v systému. V souboru /etc/make.conf si odkomentujeme následující řádky. Pozor, odstraňte všechny mezery, řádek musí začínat písmenem:

SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Pokud make.conf nemáte, vytvořte jej a řádky do něj zapište. Další možností je zkopírovat a upravit vzorový make.conf z /usr/share/examples/etc/make.conf.

Vlastní kompilaci provedeme takto:

# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install

Do mc souboru přidáme:

TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl

A po restartu sendmailu máme hotovo. Ještě malé ověření. Stav bez autentifikace:

root@mail # telnet localhost 25
ehlo localhost
250-mail.firma.cz Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP

A pokus o odeslání:

Nov 25 22:55:06 mail sm-mta[84268]: mAPLt55w084268: ruleset=check_rcpt, arg1=<pm@nekde.cz>, relay=xxx-yyy-54ghz.customer.jinde.cz [199.199.199.199], reject=550 5.7.1 <pm@nekde.cz>... Relaying denied. Proper authentication required.

A po nastaveni autentifikace:

CS24_early

root@mail # telnet localhost 25
ehlo localhost
250-mail.firma.cz Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN
250-DELIVERBY
250 HELP

A odeslání:

Nov 25 22:53:11 mail sm-mta[84239]: AUTH=server, relay=xxx-yyy-54ghz.customer.jinde.cz [199.199.199.199], authid=pm, mech=LOGIN, bits=0

Teď už jen stačí nastavit správně klienta. V outlook expressu v nastavení účtu na záložce servery stačí dole zaškrtnout "Server požaduje ověření" a v nastavení musí být zvoleno "Používat stejné nastavení jako pro server příchozí pošty".

Byl pro vás článek přínosný?

Autor článku

Petr Macek studoval aplikovanou informatiku na Jihočeské univerzitě, pracuje jako síťový specialista ve firmě Kostax, s. r. o. Baví ho především FreeBSD, sítě a monitoring Cacti.