Linux sendmail не работает

Обновлено: 01.07.2024

Начиная с версии 8.11, sendmail поддерживает защиту ESMTP соединения с помощью расширения STARTTLS ( RFC 2487 ). Для настройки TLS прежде всего нужно создать SSL сертификат и секретный DSA-ключ для шифрования:

Если у вас уже есть ключ шифрования, то для создания сертификата следует подать команду:

Параметр -days позволяет указать количество дней, в течение которых сертификат будет действительным. Чтобы проверить созданный сертификат, можно воспользоваться следующей командой:

Если вы не планируете использовать TLS для авторизации (не путать с SMTP авторизацией) или используете сертификат, подписанный самим собой, следует создать symlink:

В противном случае следует поместить сертификат авторизации в файл /etc/mail/certs/CAcert.pem . Не забудьте установить права, запрещающие чтение/запись файлов сертификатов и ключей простым пользователям:

Теперь следует настроить sendmail. В .mc файле конфигурации нужно добавить следующие строки:

После добавления вышеуказанных строк в файл конфигурации следует пересобрать его с помощью m4 (см. файл /usr/share/sendmail/README ) и рестартовать уже запущенный sendmail:

Для проверки настроек TLS можно воспользоваться командой telnet:

Для того чтобы научить sendmail работать по SSL (без использования STARTTLS), нужно создать и добавить в .mc файл сертификат и ключ для шифрования, как описано выше, а также добавить следующие строки: Не забудьте перезапустить sendmail: Для проверки можно воспользоваться командой openssl:

Настройка SMTP авторизации

Для настройки авторизации следует пересобрать sendmail с поддержкой SASL. Для этого следует установить пакет cyrus-sasl2 или порт security/cyrus-sasl2 . Для включения поддержки SASL нам потребуется перекомпилировать sendmail следующим образом: Также можно воспользоваться набором site.tar.gz и пересобрать sendmail, установив настройку SENDMAIL_SASL=Yes в mk.conf.

Далее следует создать файл конфигурации SASL для sendmail ( /usr/local/lib/sasl2/Sendmail.conf ):

Добавляем в /etc/rc.local строки для запуска saslauthd:

Теперь остается только включить поддержку авторизации в .mc файле конфигурации sendmail:

Не забудьте перезапустить sendmail:

Для проверки настройки авторизации можно воспользоваться командой telnet:

При правильной настройке в ответе сервера на команду "EHLO" должна присутствовать строка "250-AUTH". В случае если в файле конфигурации запрещено использование PLAIN авторизации по незащищенному соединению, вместо команды telnet следует использовать команду openssl:

Смотрите также /usr/share/sendmail/README , Настройка TLS и SSL.

Настройка sendmail как SMTP клиента с авторизацией

В случае, когда sendmail выступает в роли клиента, демон saslauthd не требуется. В файл конфигурации необходимо внести следующие изменения:

Указываем SMTP-сервер, имя и пароль пользователя, а также метод аутентификации в отдельном файле /etc/mail/authinfo :

Создаем хэшированную базу данных /etc/mail/authinfo.db :

Как заставить sendmail использовать /etc/hosts

По умолчанию sendmail использует в первую очередь DNS. Чтобы заставить его сначала смотреть /etc/hosts , нужно создать файл /etc/mail/service.switch и прописать в нем следующую строку:

После этого достаточно перезапустить sendmail:

Хранение писем в Maildir

По умолчанию sendmail использует mail.local в качестве локального агента доставки почты. При этом почта доставляется в формате стандартного BSD mailbox. Чтобы доставлять почту в Maildir, нам потребуется установить альтернативный агент доставки mail.buhal , который можно скачать отсюда.

Сначала нужно собрать и установить mail.buhal:

Далее следует указать mail.buhal в файле конфигурации sendmail в качестве локального агента доставки:

Теперь достаточно перекомпилировать файл конфигурации и перезапустить sendmail.

В портах OpenBSD, в категории mail , есть программы procmail и maildrop , которые также поддерживают формат Maildir и дополнительные расширения данного формата.

Использование procmail в качестве LDA

После установки procmail из портов или пакетов, необходимо создать глобальный конфигурационный файл. Пример конфигурации:

Я не администратор, поэтому относитесь к этой заметке с осторожностью.
Рассматривается такя ситуация: надо заставить sendmail сервера отправлять почту, но ничего в ответ не принимать. Строго для оповещений с сайтов. У меня вдс-ка с предустановленным exim4 на который, насколько я понимаю, "ссылается" sendmail. Т.е. фактически работает exim4.

Сначала настраиваем хост (my-host-name это имя нашего хоста с которого все будет ездить) В файле должны быть строки вида Далее меняем имя хоста в файле Файл должен выглядеть вот так (полностью, т.е. только имя хоста и все) Теперь перегружаем службу которая грубо говоря обновляет имя хоста глобально REM ещё такой вариант есть, для Debian 9 (stretch) Теперь выполняем команды Если все правильно сделано, то они обе должны вернуть значение my-host-name (т.е. имя вашего хоста)

  • internet site..
  • вводим название вашего хоста (my-host-name)
  • ip для smtp устанавливаем только 127.0.0.1 т.к. нам не нужны внешние подключения по smtp
  • другие допустимые назначения оставляем по умолчанию
  • домены для разрешенного релея - оставляем пустым
  • машины для релея - оставляем пустым
  • кол-во днс запросов на ваше усмотрение, я не ограничивал
  • метод доставки я оставил тот же который был, т.е. /var/mail
  • разделять не разделять файлы конфигурации - на ваше усмотрение, аргументы там описаны, я разделять не стал

Дальше надо убедиться что на нашем сервере недоступен smtp, для этого нам надо сходить с локальной машины постучаться в 25 порт сервера и получить отлуп. Делается это например так: Если все так, то все тип-топ. Порт закрыт.

Ещё маленькая фишка. Бывает так что по каким-то причинам, сервис рулящий веб-приложением надо перезапускать регулярно. В моем случае это node.js и делаю я это по крону раз в N времени. Так вот если перезапустить процесс кроном, то sendmail перестает работать, потому как приложение не знает где он, в path пути до него просто нет и соот-но он просто не находится. Точно так же можно передавать любые другие настройки переменных окружения. Как это делать смотрим ниже.

Сначала посмотрим где sendmail Ок, видим путь. Если вдруг не видим то идем смотреть тоже самое но под sudo. Теперь идем в кронтаб и добавляем переменные окружения там. Откроется редактирование заданий для текущего пользователя. То есть все задания будут выполнены с правами текущего пользователя и сервис запустится с правами этого пользователя, если он запускается конечно согласно вашему плану :)

Ну вот примерно так. Прошу не воспринимать эту заметку как полное руководство к действию, вполне возможно что для вашего случая все будет значительно отличаться. Но возможно это как-то поможет или хотя бы наведет на мысли в нужном направлении :) Успехов!

Пользовался вот этим источником. Рекомендую на него взглянуть, надеюсь он ещё дышит.

будет "заставлять принимать соединение с любого хоста". Я сделал это:

Тем не менее, похоже, я все еще не могу принимать входящие электронные письма из Интернета. Так прокомментировал это как предложено Moonpoint:

Удалив этот dnl чтобы вернуться к тому, что я получил раньше, теперь я могу по крайней мере подключиться:

что мне делать, если я хочу принимать входящие электронные письма из Интернета?

Обновление: я уже настроил sendmail в качестве почтового сервера для своей локальной сети и подумал, что настроил sendmail для приема электронной почты для соответствующего доменного имени, которое я использую для электронной почты на сервере, но вот что я получил:

Однако, используя внешнюю учетную запись электронной почты для отправки электронной почты в мою систему, я получил:

Хорошо, я рад, что спамеры не могут использовать мой сервер Sendmail для ретрансляции электронной почты, но я также не получаю письма.

Итак, как я могу избежать проблемы с открытым почтовым ретранслятором, в то же время позволяя соединениям со всех узлов локальной сети отправлять почту и получать письма от кого-либо еще?

Обновление 2: пытаясь самостоятельно устранить проблему, я продолжил ее, чтобы протестировать полный протокол SMTP с использованием telnet . Странно то, что я не получил ошибку "Relaying denied" при использовании telnet :

Так что теперь все работает нормально сейчас. Большое спасибо Moonpoint .

PS. Еще немного о том, почему я хочу это сделать - все, что я хочу сделать, - это разрешить моему серверу sendmail принимать почту из Интернета для моего личного использования. Я пытался выполнить эти 5 простых шагов несколько раз,

Но, в конце концов, они никогда не работали, и я даже не знаю, что пошло не так. Поэтому я думаю, что самый простой способ - вместо этого включить мой сервер sendmail.

1 ответ 1

Вы настроили sendmail на прием электронной почты для соответствующего доменного имени, которое вы используете для электронной почты на сервере? Например, если ваше доменное имя - example.com, а действительный адрес электронной почты в системе должен быть xpt@example.com, если вы запускаете команду sendmail -bv xpt@example.com из корневой учетной записи в системе, указывает ли это что электронная почта является доставляемой и ссылается на "почтовую локальную" и локальную учетную запись? Например, вы видите что-то похожее на следующее?

Если у вас есть sendmail, настроенный на прием электронной почты для соответствующего имени домена, он будет ссылаться на "mailer local" и локальную учетную запись.

Обновление 2: Вы ссылались на то, что Sendmail принимает подключения только из статьи localhost (127.0.0.1 IP) , но, возможно, вы не внесли изменения, необходимые для строки ниже в /etc/mail/sendmail.mc :

Вы должны закомментировать эту строку, поставив "dnl" в начале. Это должно выглядеть следующим образом:

Я не добавляю строку, предложенную в статье, вместо исходной строки, я просто закомментирую ее, а затем перекомпилирую файл sendmail.cf из файла sendmail.mc с помощью следующей команды, чтобы sendmail принимал отправленные электронные письма. почтовыми клиентами за пределами сервера, на котором работает sendmail.

У вас есть внешняя учетная запись электронной почты, которую вы можете использовать для отправки электронной почты на адрес в вашей системе, например Hotmail, Gmail или другую учетную запись электронной почты? Если это так, что вы видите в отскоченном электронном письме сейчас, если отправляете на действительный адрес электронной почты в вашей системе? Какая ошибка указана в отклоненном письме?

Даже если вы правильно настроили sendmail, вам могут потребоваться другие вопросы, чтобы иметь возможность получать электронную почту из Интернета. Вы заявили, что правила брандмауэра настроены правильно. Вам могут потребоваться соответствующие правила брандмауэра как в системе, в которой работает sendmail, так и в любом внешнем маршрутизаторе / брандмауэре в локальной сети (LAN), в которой находится ваш сервер sendmail. Чтобы внешние почтовые серверы могли обмениваться данными с вашим почтовым сервером, если маршрутизатор / брандмауэр в вашей локальной сети использует трансляцию сетевых адресов (NAT), вам необходимо настроить это устройство для переадресации подключений к порту 25, протоколу простой передачи почты (SMTP). порт, используемый для доставки электронной почты с одного почтового сервера на другой, с брандмауэра / маршрутизатора на сервер sendmail.

Если у вас есть необходимые правила брандмауэра и все необходимые параметры переадресации портов, то внешняя система должна иметь возможность успешно подключиться к порту 25 на вашем сервере sendmail. Вы можете проверить, возможно ли это, что поможет сузить источник проблемы, используя одну из многочисленных служб проверки портов, предоставляемых бесплатно несколькими веб-сайтами. Например, вы можете использовать тестер переадресации портов. Если вы не запускаете тест со своего сервера, вам может потребоваться указать IP-адрес, который будут видны внешним системам при попытке установить связь с вашим сервером, который будет отличаться от IP-адреса, который вы ему присвоили, если есть межсетевой экран или маршрутизатор в сети, в которой находится ваш сервер, используя NAT, который отделяет ваш сервер от Интернета. Чтобы найти адрес, который увидят внешние системы, вы можете использовать любой из ряда бесплатных сервисов, которые покажут вам видимый снаружи IP-адрес устройства, если вы посетите веб-сайт организации, предоставляющей эту услугу. Например, вы можете использовать веб-браузер для посещения whatismyip.com с вашего сервера sendmail. Затем на сайте Port Forwarding Tester вы будете использовать этот IP-адрес для "Удаленного адреса" и 25 для номера порта. Когда вы нажимаете "Проверить", вы должны увидеть "Порт 25 открыт", за которым следуют предоставленные вами IP-адреса, если у вас правильно настроены необходимые правила брандмауэра и все необходимые переадресации портов.

Программа Sendmail известна как достаточно старый почтовый агент. Она появилась ещё в 1983 году, но активно используется и по сей день. Среди ключевых особенностей — поддержка многими платформами, которые существуют сегодня, а также бесплатность. Приложение поставляется вместе с открытым исходным кодом. Это значит, что каждый желающий может добавить в него свою функциональность, или же изменить по желанию. В операционной системе Ubuntu, Sendmail, настройка которой выполняется благодаря командной строке Linux, прижилась благодаря хорошей поддержке и богатым возможностям.

Как настраивается Сендмейл

Установка программы

Устанавливать Сендмейл нужно на базе локального сервера или web-сервера. Во втором случае почтовый агент будет более функционален. Чтобы получить все компоненты веб-сервера, вам потребуется стек компонентов LAMP. Его можно найти в репозитории.

ВАЖНО. Перед установкой нового ПО не забудьте обновить списки пакетов в локальном репозитории с помощью команды

Инсталляция Сендмейл начинается с помощью команды «sudo apt install sendmail», которая выполнит загрузку пакетов почтового агента.

Дальше нужно провести настройку файлов Host и самой программы Sendmail. Сделать это можно с помощью:

После этого требуется перезапустить службы самой программы, а также web-сервера Apache:

«sudo /etc/init.d/sendmail restart»
«sudo /etc/init.d/apache2 restart»

Если необходимо, можно установить утилиты для работы с почтой:

Работа почтовой утилиты

Проверяем тестирование работоспособности всей системы:

где «ваша_почта» — это актуальный почтовый адрес.

И, наконец, проверим log-файл. Это файл почтового сервиса, где будут отображаться ошибки установки:

Итак, вы узнали больше о программе для Ubuntu под названием Sendmail, настройка которой оказалась не такой уж сложной. Если у вас есть вопросы по другим аспектам работы с программами для Linux — ищите ответы на них на страницах нашего сайта!

Читайте также: