Exim4. SMTP-авторизация. Механизм запрета отправки писем на внешние SMTP без авторизации.

Чтобы почтовый сервер не стал проходным двором для спамеров, то как правило запрещают отправлять письма на сторонние серверы через него. Но не для всех, а для тех, кто не прошел авторизацию. Для неавторизованных передаётся сообзение relay not permitted. Рассмотрим механизм авторизации и сообщения, которыми в ходе отправки письма обмениваются почтовый клиент и SMTP-сервер.

Механизм отправки через SMTP с авторизацией

Для SMTP-авторизации получим особым образом сформированное base64-преобразование из имени пользователя и пароля

printf "<username>\0<username>\0<пароль>"|base64

Получается вот такая прелесть

YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=

Само собой эта base64 испорчена мной для упбликации, чтобы исключить возможность раскодировки

Берём telnet и полностью имитируем работу почтового клиента по отправке письма (C-клиент, S-сервер, #-мои комментарии)

С: $ telnet *.*.ru 25                                                         # Подключаемся к SMTP по 25-му порту
С: Trying *.*.*.*...
С: Connected to *.*.ru.
С: Escape character is '^]'.
S: 220 *.ru ESMTP Exim 4.69 Wed, 09 Jun 2010 15:47:08 +0400                       # Есть подключение, слушаю вас
С: EHLO ADMIN                                                                                   # Здравствуй, сервер, я-ADMIN, расскажи, что у тебя есть
S: 250-*.ru Hello ADMIN [*.*.*.*]
S: 250-SIZE 52428800                                                                            # Есть ограничение по размеру
S: 250-PIPELINING
S: 250-AUTH PLAIN                                                                               # Есть авторизация по методу PLAIN
S: 250-STARTTLS 
S: 250 HELP
С: AUTH PLAIN YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=  # Ок. Авторизуй меня методол PLAIN, вот реквизиты в base64
S: 235 Authentication succeeded                                                                 # Реквизиты верные. Ты авторизован
С: MAIL FROM:<adm@*.*.ru>                                                        # Прими емэйл отправителя
S: 250 OK                                                                                       # Есть!
С: RCPT TO:<sys-adm@bk.ru>                                                                      # Прими емэйл получателя
S: 250 Accepted                                                                                 # Принял
С: DATA                                                                                         # Начинаю писать письмо
S: 354 Enter message, ending with "." on a line by itself                                       # Пиши. Не забудь точку в последней строчке
С: test
С: .
S: 250 OK id=1OMJoP-0001YJ-Gz                                                                   # Ok. Будет доставлено, если чего id письма 1OMJoP-0001YJ-Gz

Механизм отправки через SMTP без авторизации

С: $ telnet *.*.ru 25                                                         # Подключаемся к SMTP по 25-му порту
С: Trying *.*.*.*...
С: Connected to *.*.ru.
С: Escape character is '^]'.
S: 220 *.ru ESMTP Exim 4.69 Wed, 09 Jun 2010 15:47:08 +0400                       # Есть подключение, слушаю вас
С: EHLO ADMIN                                                                                   # Здравствуй, сервер, я-ADMIN, расскажи, что у тебя есть
S: 250-*.ru Hello ADMIN [*.*.*.*]
S: 250-SIZE 52428800                                                                            # Есть ограничение по размеру
S: 250-PIPELINING
S: 250-AUTH PLAIN                                                                               # Есть авторизация по методу PLAIN
S: 250-STARTTLS 
S: 250 HELP
С: MAIL FROM:<adm@*.*.ru>                                                        # Прими емэйл отправителя
S: 250 OK                                                                                       # Есть!
С: RCPT TO:<sys-adm@bk.ru>                                                                      # Прими емэйл получателя
S: 550 relay not permitted                                                                      # Извините, тут не проходной двор. Представьтесь и запарольтесь

Отличие от механизма отправки с авторизацией вот в этой строчке

С: AUTH PLAIN YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=  # Ок. Авторизуй меня методол PLAIN, вот реквизиты в base64

Что делать честному пользователю почты, а не спамеру

Настраивать почтового клиента, чтобы он авторизовался на SMTP-сервере. В данном случае не забыть явно указать метод авторизации PLAIN, ибо различные клиенты могут по умолчанию использовать различные методы авторизации


Добавить комментарий