https://wiki.habital.lv/index.php?title=Sendmail%2BSASL%2BTLS/SSL&feed=atom&action=history
Sendmail+SASL+TLS/SSL - Revision history
2024-03-28T18:14:22Z
Revision history for this page on the wiki
MediaWiki 1.39.6
https://wiki.habital.lv/index.php?title=Sendmail%2BSASL%2BTLS/SSL&diff=163&oldid=prev
Admin at 05:48, 2 February 2023
2023-02-02T05:48:10Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 07:48, 2 February 2023</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l129">Line 129:</td>
<td colspan="2" class="diff-lineno">Line 129:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>В файле "/etc/mail/authinfo" записать строчку для аутентикации:</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>В файле "/etc/mail/authinfo" записать строчку для аутентикации:</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> AuthInfo: "U:userlogin@domain.com" "P:saslpasswd", т.е. логин и пароль должны совпадать с sasl-аутентикацией на сервере.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> AuthInfo: "U:userlogin@domain.com" "P:saslpasswd", т.е. логин и пароль должны совпадать с sasl-аутентикацией на сервере.</div></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Или <del style="font-weight: bold; text-decoration: none;">в качестве </del>пароля в чистом виде можно вписать ''BASE64''-кодированный пароль:</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Или <ins style="font-weight: bold; text-decoration: none;">вместо </ins>пароля в чистом виде <ins style="font-weight: bold; text-decoration: none;">(PLAIN) </ins>можно вписать ''BASE64''-кодированный пароль:</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> AuthInfo: "U:userlogin@domain.com" "P=BASE64-hash-password"</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> AuthInfo: "U:userlogin@domain.com" "P=BASE64-hash-password"</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== TLS/SSL ===</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== TLS/SSL ===</div></td></tr>
</table>
Admin
https://wiki.habital.lv/index.php?title=Sendmail%2BSASL%2BTLS/SSL&diff=162&oldid=prev
Admin at 19:25, 1 February 2023
2023-02-01T19:25:56Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:25, 1 February 2023</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l129">Line 129:</td>
<td colspan="2" class="diff-lineno">Line 129:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>В файле "/etc/mail/authinfo" записать строчку для аутентикации:</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>В файле "/etc/mail/authinfo" записать строчку для аутентикации:</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> AuthInfo: "U:userlogin@domain.com" "P:saslpasswd", т.е. логин и пароль должны совпадать с sasl-аутентикацией на сервере.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> AuthInfo: "U:userlogin@domain.com" "P:saslpasswd", т.е. логин и пароль должны совпадать с sasl-аутентикацией на сервере.</div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">Или в качестве пароля в чистом виде можно вписать ''BASE64''-кодированный пароль:</ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> AuthInfo: "U:userlogin@domain.com" "P=BASE64-hash-password"</ins></div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== TLS/SSL ===</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== TLS/SSL ===</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Сервер ====</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Сервер ====</div></td></tr>
</table>
Admin
https://wiki.habital.lv/index.php?title=Sendmail%2BSASL%2BTLS/SSL&diff=6&oldid=prev
Eugene: Created page with "== Ограничение пересылки почты (RELAY) == По умолчанию ''sendmail'' позволяет отправлять почту только тем..."
2013-08-20T10:02:20Z
<p>Created page with "== Ограничение пересылки почты (RELAY) == По умолчанию ''sendmail'' позволяет отправлять почту только тем..."</p>
<p><b>New page</b></p><div>== Ограничение пересылки почты (RELAY) ==<br />
По умолчанию ''sendmail'' позволяет отправлять почту только тем пользователям, которые работают непосредственно на машине, на которой запущен ''sendmail''. То есть, если письмо для отправки прийдет с другой машины в сети, ''sendmail'' его не перешлет.<br />
<br />
В сети Интернет существуют ''dnsbl'' сервера, на которых хранится информация о спаммерах и о почтовых серверах с открытой пересылкой почты (open relay). Многие почтовые сервера пользуются информацией, хранящейся в ''dnsbl'' для ограничения приема почты. Если открыть пересылку на своем сервере (open relay), то многие сервера перестанут принимать почту от этого сервера. Именно по этому, по умолчанию в ''sendmail'' запрещена пересылка почты.<br />
<br />
Для разрешения пересылки существует много разных способов. Один из них — это воспользоваться базой доступа ''access.db''.<br />
<br />
=== База доступа access ===<br />
Предположим, что необходимо разрешить пересылку почты из внутренней сети 192.168.0.0/24. В файл "''/etc/mail/access''" следует добавить строку:<br />
<div style="display:table; width:auto;"><pre><br />
192.168.0.0 RELAY<br />
</pre></div><br />
Этот рабочий способ. Но...<br />
* Пользователи смогут отправлять почту только из внутренней сети. Если есть мобильные пользователи, которым необходимо получить доступ к серверу из любой точки Интернет, для которого невозможнр заранее знать IP адрес машины или сети, откуда будет подключение.<br />
<br />
=== Аутентификация пользователя ===<br />
Наиболее предпочтительным способом разрешения пересылки почты является аутентификация пользователя.<br />
<br />
Для разрешения пересылки аутентифицированным пользователям необходимо определить какие механизмы аутентификации считать доверенным. Для этого надо добавить в файл ''sendmail.mc'' следующие строки:<br />
<div style="display:table; width:auto;"><pre><br />
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl<br />
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl<br />
define(`confAUTH_OPTIONS', `A p y')dnl<br />
</pre></div><br />
Здесь '''"TRUST_AUTH_MECH"''' определяет доверенные способы аутентификации.<br />
Оператор '''"define"''' определяет значение переменной '''"confAUTH_OPTIONS"'''.<br />
Леременная '''"confAUTH_MECHANISMS"''' определяет какие механизмы аутентификации будут обрабатываться ''sendmail''. <br />
<br />
Параметры:<br />
* А — включает механизм аутентификации;<br />
* p — начинает «доверять» PLAIN аутентификации только после того как соединение будет зашифровано при помощи TLS;<br />
* y — запрещает анонимные логины.<br />
<br />
Для нормальной работы почтовых клиентов ''Windows'' необходимо определить два механизма аутентификации: ''login'' и ''plain''. Но так как они небезопасны, то они работают только в TLS/SSL-режиме.<br />
<br />
В большинстве дистрибутивов кроме самого почтового сервера, слушающего запросы на 25 порту, запускается дополнительный процесс ''sendmail'' — MSA (Агент подачи почты). Он предназначен для предварительной проверки и изменений в заголовках письма. По умолчанию он слушает запросы на 587 порту и, естественно, никакой аутентификации не поддерживает. Поэтому мы сначала запретим значения параметров по умолчанию:<br />
<div style="display:table; width:auto;"><pre><br />
FEATURE(`no_default_msa')dnl<br />
</pre></div><br />
Затем, при помощи макроса '''"DAEMON_OPTIONS"''', определяем используемые сервером порты и некоторые дополнительные параметры.<br />
<div style="display:table; width:auto;"><pre><br />
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl<br />
DAEMON_OPTIONS(`Port=smtps, Name=MSA-SSL, M=E')dnl<br />
</pre></div><br />
Основной процесс ''sendmail'' (MTA — Mail Transfer Agent) будет слушать запросы на 25 порту (smtp). А агент подачи почты на 465 порту (smtps). Кроме того, параметр M=E говорит, что не будет использоваться команда ETRN, протокола SMTP.<br />
<br />
==== Проверка аутентикации на сервере ====<br />
Проверку настроек TLS можно выполнить с помощью команды telnet:<br />
# telnet localhost smtp<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
220 mail.domail.org ESMTP Sendmail 8.13.1/8.13.1; Wed, 17 Nov 2004 13:42:08 +0200 (EET)<br />
EHLO localhost<br />
250-mail.domain.org Hello root@localhost.domain.org [127.0.0.1], pleased to meet you<br />
250-ENHANCEDSTATUSCODES<br />
250-PIPELINING<br />
250-8BITMIME<br />
250-SIZE<br />
250-DSN<br />
250-ETRN<br />
250-AUTH PLAIN<br />
250-STARTTLS<br />
250-DELIVERBY<br />
250 HELP<br />
QUIT<br />
<br />
Должа появиться строчка "250-AUTH" с возможными видами аутентикации.<br />
В случае, если предусматривается TLS-соединение, то проверку надо произвести восользовавшись командой "openssl":<br />
# openssl s_client -connect localhost:smtps<br />
...<br />
SSL handshake has read 7592 bytes and written 331 bytes<br />
---<br />
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA<br />
Server public key is 4096 bit<br />
Secure Renegotiation IS supported<br />
Compression: NONE<br />
Expansion: NONE<br />
SSL-Session:<br />
Protocol : TLSv1<br />
Cipher : DHE-RSA-AES256-SHA<br />
Session-ID: 9DDA35E50ED7DBD42A65630A31631AC77ADA4C32CF7BE70440DC4E6DA9FD94BD<br />
Session-ID-ctx: <br />
Master-Key: F4507C23186CBE7802B6A85D21DBCC7D6AC6DD4B64D0865145906C27F047F87120F19935619F72A35FE236B32682A2FA<br />
Key-Arg : None<br />
Start Time: 1356006457<br />
Timeout : 300 (sec)<br />
Verify return code: 19 (self signed certificate in certificate chain)<br />
---<br />
220 mail.domain.org ESMTP Sendmail 8.14.4/8.14.4; Thu, 20 Dec 2012 14:27:37 +0200<br />
EHLO localhost<br />
250-mail.domain.org Hello localhost [127.0.0.1], pleased to meet you<br />
250-ENHANCEDSTATUSCODES<br />
250-PIPELINING<br />
250-8BITMIME<br />
250-SIZE<br />
250-DSN<br />
250-AUTH LOGIN PLAIN<br />
250-DELIVERBY<br />
250 HELP<br />
QUIT<br />
<br />
=== SASL ===<br />
Sendmail сам не производит аутентификацию пользователей, для этого он пользуется SASL механизмом. В системе должна быть установлена библиотека, реализующая этот механизм. В подавляющем большинстве дистрибутивов используется пакет ''Cyrus-sasl'', с которым поставляются необходимые библиотеки. При сборке пакета должны были быть включены следующие опции:<br />
<div style="display:table; width:auto;"><pre><br />
--enable-plain \<br />
--disable-krb4 \<br />
</pre></div><br />
Далее надо создать файл "''/etc/sasl2/Sendmail.conf''":<br />
<div style="display:table; width:auto;"><pre><br />
pwcheck_method: saslauthd<br />
mech_list: plain login<br />
</pre></div><br />
Создаём линк:<br />
<div style="display:table; width:auto;"><pre><br />
ln -sf /etc/sasl2/Sendmail.conf /usr/lib/sasl2/Sendmail.conf<br />
</pre></div><br />
Информация о пользователях заносится в sasl-базу данных:<br />
<div style="display:table; width:auto;"><pre><br />
# saslpasswd2 -a sendmail -u domain.dom userlogin<br />
</pre></div><br />
То есть для программы ''sendmail'' создаётся пользователь ''userlogin'' с почтовым доменом ''domain.dom''.<br />
<br />
При помощи программы ''sasldblistusers2'' можно посмотреть содержимое ''sasl''-базы данных.<br />
<br />
'''Примечание''': в клиентских прораммах в качестве логина надо указывать "''userlogin@domain.dom''".<br />
<br />
=== sendmail-client ===<br />
В файле "/etc/mail/authinfo" записать строчку для аутентикации:<br />
AuthInfo: "U:userlogin@domain.com" "P:saslpasswd", т.е. логин и пароль должны совпадать с sasl-аутентикацией на сервере.<br />
=== TLS/SSL ===<br />
==== Сервер ====<br />
Включение TLS. Для этого достаточно добавить четыре параметра в файл ''sendmail.mc'' и создать все необходимые ключи и сертификаты:<br />
<div style="display:table; width:auto;"><pre><br />
define(`CERT_DIR', `/etc/mail/certs')dnl<br />
define(`confCACERT_PATH', `CERT_DIR')<br />
define(`confCACERT', `CERT_DIR/CA.cert.pem')<br />
define(`confSERVER_CERT', `CERT_DIR/smtp.cert.pem')<br />
define(`confSERVER_KEY', `CERT_DIR/smtp.key.pem')<br />
define(`confCRL', `CERT_DIR/revocation.list')<br />
</pre></div><br />
В каталог "/etc/mail/certs" добавляем CA-сертификат[ы] CA.cert.pem, серверный сертификат smtp.cert.pem и ключ (открытый) к серверному сертификату smtp.key.pem. Обратите внимание на права к файлу smtp.key.pem - '''0600'''.<br />
Необходимо проверить возможность использования сертификата на стороне сервера ("SSL server") или на стороне клиента ("SSL client"):<br />
<div style="display:table; width:auto;"><pre><br />
# openssl x509 -purpose -in /etc/mail/cert/smtp.cert.pem<br />
Certificate purposes:<br />
SSL client : Yes <--- на стороне клиента<br />
SSL client CA : No<br />
SSL server : Yes <--- на стороне сервера<br />
SSL server CA : No<br />
Netscape SSL server : Yes<br />
Netscape SSL server CA : No<br />
S/MIME signing : Yes<br />
S/MIME signing CA : No<br />
S/MIME encryption : Yes<br />
S/MIME encryption CA : No<br />
CRL signing : Yes<br />
CRL signing CA : No<br />
Any Purpose : Yes<br />
Any Purpose CA : Yes<br />
OCSP helper : Yes<br />
OCSP helper CA : No<br />
</pre></div><br />
Далее, необходимо добавить в файл "/etc/mail/access" описание сертификатов:<br />
напр.:<br />
<div style="display:table; width:auto;"><pre><br />
CERTIssuer:/C=AU/O=Company+20Ltd./OU=Certificate+20Issuer RELAY<br />
</pre></div><br />
или<br />
<div style="display:table; width:auto;"><pre><br />
CERTIssuer:/C=AU/O=Cert+20Company+20Ltd/OU=Certificate+20Issuer SUBJECT<br />
CERTSubject:/C=AU/O=My+20Company+20Ltd/CN=host.domain.com RELAY<br />
</pre></div><br />
После всего этого пересылка почты будет разрешена для пользователей, подтвердивших аутентификацию.<br />
<br />
==== Клиент ====<br />
Включение TLS. Для этого в файл ''sendmail.mc'' надо добавить четыре параметра и добавить необходимые ключи и сертификаты:<br />
<div style="display:table; width:auto;"><pre><br />
define(`CERT_DIR', `/etc/mail/certs')dnl<br />
define(`confCACERT_PATH', `CERT_DIR')<br />
define(`confCACERT', `CERT_DIR/CA.cert.pem')<br />
define(`confCLIENT_CERT', `CERT_DIR/smtp.cert.pem')<br />
define(`confCLIENT_KEY', `CERT_DIR/smtp.key.pem')<br />
</pre></div></div>
Eugene