English
SMTP authentikace v Qmailu
Proč používat SMTP autentikaci
Téměř všechny SMTP servery v Internetu dnes blokují relay - je to obrana
před zneužitím serveru pro rozesílání spamů. Pokud se někdo připojuje k
Internetu střídavě přes různé IP providery (poskytující "Internet
zadarmo") a potřebuje SMTP server pro odesílání pošty, má dvě možnosti:
- buď si musí při každém připojení nastavit SMTP server providera, přes
kterého je právě připojen
- nebo používat jeden SMTP server a SMTP autentikaci (výrazně pohodlnější)
Administrátorovy problémy se SMTP auth
Na první pohled se zdá, že SMTP autentikace je výhodná jak pro uživatele,
tak pro administrátora. Nicméně po implementaci SMTP autentikace pro
Qmail (z www.nimh.org) jsem narazil na pár
problémů:
- Poštovní klient Netscape se pokusí autentikovat vždy, když zjistí,
že SMTP server autentikaci podporuje (EHLO) a vyžaduje po uživateli
heslo. Login použije stejné, jaké má nastavené pro POP. Klienti MS
Outlook a Outlook Expres se tak nechovají - pokud nemají autentikaci
nastavenou, nepoužívají ji, login a heslo lze nastavit libovolně.
Problémy s uživateli poštovních klientů Netscape po zavedení autentikace:
- obtěžuje naše uživatele zadáváním hesla i v případě, kdy
SMTP autentikace není nutná (uživatelé ve stejné LAN jako je
server nebo obecně v doméně, ze které je povolený relay).
- protože login pro POP a SMTP musí být stejné, zavedení autentikace znemožní odesílat mail uživatelům, kteří používají
jiný POP (vzdálený) a jiný SMTP server (místní - náš)
- SMTP servery Netscape umí používat autentikaci při odesílání
mailu. Zdá se, že podobně jako klienti se Netscape server pokusí autentikaci použít vždy, když zjistí (EHLO), že i druhá strana (náš
server) autentikaci podporuje. Protože použije nesmyslné login a heslo,
je SMTP spojení přerušeno. Stejný problém může nastat i s jinými
servery, které už SMTP autentikaci při odesílání podporují a jsou špatně
nakonfigurované (unixové verze používají jako login "root").
Problémy se servery Netscape (a jinými, které podporují SMTP autentikaci):
- při pokusu o odeslání mailu se vždy pokusí o SMTP autentikaci.
Protože proběhne neúspěšně, spojení se přeruší. Protože k
tomu ale dojde až po navázání SMTP spojení, nepokusí se odesílající
strana poslat mail přes náš MX server, nechá dopis ve frontě a po
určité době ho vrátí jako nedoručitelný.
- správci těchto serverů nemohou svůj server nastavit jinak nebo se
o problému nedoví, pošta od nich proto nedojde
Řešení problémů
Použil jsem proto SMTP autentikaci pro Qmail z www.nimh.org
(http://www.nimh.org/dl/qmail-smtpd.c)
a mírně ji upravil:
- Při komunikaci s počítači z domén, ze kterých je povolen relay,
server podporu SMTP autentikace skrývá (EHLO) - to řeší problém s
Netscape klienty na počítačích v LAN, které by jinak zbytečně obtěžovaly
uživatele dotazy o heslo.
- Pokud SMTP autentikace selže, není spojení odmítnuto, ale pokračuje
dál, jen se nepovolí se relay - řeší problém příchozí pošty od
Netscape serverů.
- Záznam o autentikaci se zapíše do syslogu
Upravený qmail-smtpd.c
qmail-smtpd.c pro Qmail 1.03
Instalace
- přeložit a nainstalovat Qmail 1.03
- nahradit soubor qmail-smtpd.c upravenou
verzí, znovu přeložit a nainstalovat (make setup check)
- nainstalovat a otestovat checkpassword.
- upravit spouštění qmail-smtpd. Spouštíte-li ho z
- inetd: použijte
"smtp stream tcp nowait qmaild /usr/sbin/tcpd /var/qmail/bin/tcp-env
/var/qmail/bin/qmail-smtpd /bin/checkpassword /bin/true"
- Xinetd:
###############################
#/etc/xinetd.d/qmail-smtp
###############################
service smtp
{
socket_type = stream
wait = no
user = qmaild
server = /var/qmail/bin/tcp-env
server_args = -R /var/qmail/bin/qmail-smtpd sever.com /bin/checkpassword /bin/true
nice = 10
}
(díky cameron (at) omigos (dot) ca)
test:
- Z počítače, který nemá na vašem serveru povolený relay,
zkuste
- telnet server 25
- EHLO
- v odpovědi by mělo být 250 AUTH=LOGIN
- Z počítače, který nemá na vašem serveru povolený relay,
zkuste poslat mail z klienta, který má nastavenou SMTP autentikaci (netscape použije vždy, v ms outlooku nutno nastavit)
- v syslogu se může objevit
- Jun 22 08:43:42 servername qsmtpd: auth ok for login: login
- OK
- Jun 21 16:38:24 servername qsmtpd: auth fail for login:
login - chybné heslo
- žádný záznam - klient nepoužil autentikaci
Známé problémy
- upravené qmail-smtpd.c kvůli bezpečnosti testuje, zda je login jen z
pismen a číslic, neznámé znaky přepíše "X". Používáte-li
v loginech jiné znaky (typicky máte-li naistalovaný vpopmail), je
nutné upravit nebo zakomentovat tuto část kódu:
/* vhor */
for(i=0;i<strlen(smtpauthlogin);i++) {
if (! isalnum(smtpauthlogin[i]) ) {
smtpauthlogin[i] = 'X';
}
}
(děkuji Jonash Pasche jonas (at) domke (dot) de za
upozornění)
- pokud autentikace nefunguje, zkotrolujte přístupová práva programů
pro testování hesla:
- /bin/checkpassword musí patřit root.nofiles, spouštění jen
pro vlastníka a skupinu a mít nastavený SUID bit (práva 4110)
- vchkpw musí patřit vpopmail.vchkpw a mít
nastavený SUID a GUID bit
díky Joan Valduvieco joan (at) laigu (dot) net
za upozornění
Odkazy:
Vladimír Horák
Poslední změny na stránce: 8.6. 2004