Ubuntu sendmail: configuration — sendmail: how to configure sendmail on ubuntu?
Sendmail — это средство маршрутизации электронной почты общего назначения, используемое для передачи электронной почты через Интернет.
Он включает SMTP (Simple Mail Transfer Protocol) для пересылки почты и доставки электронной почты.
Большинство системных администраторов предпочитают использовать сервер Sendmail в качестве MTA.
Вы также можете использовать сервер Sendmail для отправки электронной почты через внешние SMTP-серверы, такие как Gmail, Amazon SES, MailChimp и т. д.
1. Удалите Постфикс
Postfix — это служба SMTP по умолчанию, предварительно установленная в операционных системах Ubuntu.
И если вы готовы использовать сервер Sendmail в вашей системе, прежде всего, удалите существующую установку postfix в Ubuntu.
sudo systemctl stop postfix sudo apt remove postfix && apt purge postfix
2. Установите Sendmail
Если вы не установили Sendmail, используя следующую команду, чтобы установить Sendmail с другими необходимыми пакетами, используя менеджер пакетов yum.
sudo apt install sendmail
Sendmail хранит все свои файлы конфигурации в каталоге /etc/mail.
Ниже вы найдете подробную информацию о файлах конфигурации Sendmail.
- access — разрешить / запретить другим системам использовать Sendmail для исходящих писем.
- domaintable — используется для сопоставления доменного имени для Sendmail.
- local-host-names — используется для определения псевдонимов для хоста.
- mailertable — Определяет инструкции, которые переопределяют маршрутизацию для определенных доменов.
- virtusertable — определяет специфичную для домена форму псевдонимов, позволяющую разместить несколько виртуальных доменов на одном компьютере.
2.1 Закомментируйте строку ниже в /etc/mail/sendmail.mc, чтобы разрешить получение электронной почты из любой точки мира.
Чтобы закомментировать строку в sendmail.mc, просто поставьте dnl в начале строки.
dnl DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl dnl DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl
2.2 Добавьте эту строку также в sendmail.mc над опцией «MAILER»
FEATURE(`relay_hosts_only')dnl
2.3 Добавьте полное имя хоста вашего ПК в этот файл.
hostname >> /etc/mail/relay-domains
4. Перекомпилируйте конфигурацию Sendmail
m4 — макропроцессор для компиляции файлов конфигурации Sendmail. m4 основывается на потоке, то есть не разбирается в строках.
sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Перезапустите сервис Sendmail
sudo /etc/init.d/sendmail restart
4. Настройка доменной маршрутизации электронной почты
Как вы прочитали выше, этот виртуальный файл используется для создания псевдонимов, позволяя размещать несколько виртуальных доменов на одном компьютере.
1. Все электронные письма, адресованные домену @example.com, доставляются по адресу [email protected]
@example.com [email protected]
2. Все электронные письма, адресованные [email protected], будут перенаправлены на локального пользователя jack
[email protected] jack
3. Все электронные письма, адресованные @mydomain.com, будут пересылаться на домен @otherdomain.com с соответствующими именами пользователей.
@mydomain.com %[email protected]
4. Все письма, адресованные @otherdomain.com, будут отклонены моим почтовым сервером с подтверждением отправителя с сообщением
@otherdomain.com error:nouser User unknown
После внесения всех изменений в virtusertable выполните следующую команду, чтобы создать обновленный файл virtusertable.db, содержащий новую конфигурацию.
sudo makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
Теперь перезапустите сервис Sendmail
sudo /etc/init.d/sendmail restart
Поделитесь статьей:
Настройка sendmail на localhost под Ubuntu 13.04
Руководство по установке и настройке одного из старейших MTA
(Mail Transfer Agent), программа для отправки электронной почты — sendmail
, который доступен для установки на любой операционной системе. Во многих ОСях sendmail
установлен по умолчанию и менять этот стандартный MTA на другой особой необходимости нет. При этом, тот же PHP по дефолту настроен на работу именно с этим MTA. Если настройка sendmail затягивается — ставьте postfix
(Настройка postfix на localhost под Ubuntu 13.04), не стоит терять много времени.
Подготовка
Проверьте установлен ли у вас sendmail
, а не exim4
или другой MTA:
ls -la `which sendmail`
# lrwxrwxrwx 1 root root 26 2011-01-17 19:58 /usr/sbin/sendmail -> /etc/alternatives/sendmail
Установка
sudo apt-get install sendmail sasl2-bin
Настройка /etc/hosts
127.0.0.1 localhost localhost.localdomain e5530
Примечание
Необходимо указать ваш основной хост (имя компьютера, у меня это e5530
) и localhost.localdomain
иначе вы получите ошибку: My unqualified host name (myhostname) unknown; sleeping for retry» и «unable to qualify my own domain name (e5530) – using short name, sendmail
долго стартует и медленно отправляет почту. Возможно хост localhost.localdomain
можно пропустить, не уверен.
После этого нужно указать имена локальных хостов, от которых sendmail
будет принимать запросы на отправку email сообщений, в файле /etc/mail/local-host-names
:
localhost
e5530
Авторизация на relay сервере gmail
Правим файл /etc/mail/auth/client-info
:
AuthInfo:smtp.gmail.com "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"
AuthInfo:smtp.gmail.com:465 "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"
Примечание
Вместо порта 465 можете попытаться стучать на 587 (если есть проблемы с авторизацией):
AuthInfo:smtp.gmail.com:587 "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"
Проверьте права на доступ к файлам авторизации (600) и установите нужные, если отличаются:
chmod 600 /etc/mail/auth/*
Конфиг sendmail.mc
Файл конфига /etc/mail/sendmail.mc
. Сравните ваш конфиг. Должно быть как-то так.. Порядок инструкций важен!
dnl #
include(`/etc/mail/m4/dialup.m4')dnl
include(`/etc/mail/m4/provider.m4')dnl
include(`/etc/mail/tls/starttls.m4')dnl
include(`/etc/mail/sasl/sasl.m4')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
dnl #
dnl # Default Mailer setup
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
# dnl define(`confDOMAIN_NAME', `e5530')dnl
Применяем конфиг sendmail
cd /etc/mail
sudo su # просто sudo не сработает!
m4 sendmail.mc > sendmail.cf
makemap -r hash authinfo.db < auth/client-info
make
/etc/init.d/sendmail restart # Перезагрузка конфига
Проблемы и решения
Если все настроено правильно но сообщения попадают в «отложенную очередь» и не релеятся на другой SMTP
:
- Проверьте ваш IP’шник в блек-листах. Проверить бан IP можно тут smart-ip.net, мой IP попал в базу spamhaus’а.
- Проверьте не блокирует ли провайдер исходящие пакеты на 25 порт.
Проблемы с Интертелекомом!
У меня так и не получилось настроить релей сообщений на GMail через sendmail
на Интертелекомовском подключении — sendmail
упорно стучался на 25 порт, который закрыт провайдером. Пришлось настраивать postfix
.
Настройка PHP (если необходимо)
Укажите параметры запуска sendmail в конфиге /etc/php5/apache2/php.ini
(/etc/php5/cli/php.ini
):
## Настройка sendmail для PHP :
sendmail_path = /usr/sbin/sendmail -t
;sendmail_path = "/usr/sbin/sendmail -t -f [email protected] -i"
Проверим настройки
echo "Текст сообщения" | mail -s "Subjet" [email protected]
sendmail -t [email protected] -f [email protected] -v -i < ~/mail-body.txt
Для проверки postfix попробуйте отправить несколько сообщений из консоли. Как это делать я расписал в этой статье: «Отправка Email сообщений из консоли».
Управление sendmail
Посмотреть всю очередь сообщений:
sudo mailq
Посмотреть очередь сообщений по определенному адресу:
sudo mailq | grep '[email protected]' | wc -l
Очистить всю очередь сообщений sendmail
:
sudo rm -r /var/spool/mqueue-client/*
Очистить очередь сообщений sendmail
по адресату:
cd /var/spool/mqueue
ls | xargs -ti sh -c "grep '[email protected]' '{}' > /dev/null && rm -f '{}'"
#sendmail, #LAMP, #MTA
P.S. Если вы хотите изучить консоль Linux на достаточно хорошем уровне — рекомендую к прочтению свежую книгу Дениса Колисниченко «Командная строка Linux и автоматизация рутинных задач».
Установка и настройка sendmail
главная
— Статьи — Почта — Sendmail
Теги: sendmail Почтовый сервер
Настраиваем sendmail (8.12.6/7/8) для виртуального почтового хостинга.
Установка sendmail
Сначала устанавливаем итз портов sendmail c поддержкой cyrus sasl (система аутентификации).
cd /usr/ports/mail/sendmail-sasl make install
После установки sendmail мы должны изменить файл /etc/make.conf. Добавляем в него строчку
SENDMAIL_CF_DIR= /usr/local/share/sendmail/cf
Если до этого стоял более старый sendmail, устанавливаем файл submit.cf
make submit.cf
Для запуска sendmail будем использовать следующий сценарий (переименуем его в удобоваримый формат):
mv /usr/local/etc/rc.d/sendmail.sh.sample /usr/local/etc/rc.d/030.sendmail.sh
Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды
make mailer.conf
либо вручную, изменив файл mailer.conf:
sendmail /usr/local/sbin/sendmail send-mail /usr/local/sbin/sendmail mailq /usr/local/sbin/sendmail newaliases /usr/local/sbin/sendmail hoststat /usr/local/sbin/sendmail purgestat /usr/local/sbin/sendmail
На этом установка sendmail окончена. Осталоь столько запустить его командой
/usr/local/etc/rc.d/030.sendmail.sh start sendmail sm-msp-queue
Сообщения sendmail sm-msp-queue говорят о том, что все прошло нормально.
Настройка sendmail
Будем считать, что мы настраиваем два виртуальных почтовых домена: perldoc.ru и perlfaq.ru. Для настройки sendmail c поддержкой виртуального постового хостинга нам потребуется создать (или изменить) следующие файлы:
- freebsd.mc
- aliases
- access
- local-host-names
- virtusertable
aliases
Этот файл описывает пользовательские псевдонимы, используемые sendmail. Файл расположен в каталоге /etc/mail и представляет собой список вида
имя addr_1, addr_2, addr_3...
Более подробно структура файла aliases описана в aliases (5). В этот файл мы добавляем строку
root: [email protected]
Вся локальная почта, адресованная пользователю root, теперь будет приходить на адрес [email protected].
access
В этом файле мы указываем, для каких IP адресов sendmail должен принимать и пересылать почту. Поскольку для эих целей мы будем использовать аутентификацию cyrus sasl, мы разрешим только отсылку с локального хоста
localhost.localdomain RELAY localhost RELAY
local-host-names
В этом файле мы храним названия доменов, для которых наш сервер должен обрабатывать почту. Поскольку мы хотим использовать наш сервер для двух виртуальных почтовых доменов perldoc.ru и perlfaq.ru, пропишем их в файл:
perldoc.ru perlfaq.ru
virtusertable
В файле virtusertable мы указываем sendmail, куда направлять почту, пришедшую на адреса в доменах perldoc.ru и perlfaq.ru.
[email protected] stellar-perldoc.ru [email protected] admin-perldoc.ru @perldoc.ru error:nouser No such user here [email protected] stellar-perlfaq.ru @perlfaq.ru error:nouser No such user here
Вся почта, пришедшая на адрес [email protected] будет направляться в почтовый ящик пользователя stellar-perldoc.ru, а почта, пришедшая на [email protected], соответственно будет отсылаться пользователю admin-perldoc.ru. Тоже самое будет и для домена perlfaq.ru. Если на наш домен будет прислана почта с несуществующем пользователем, сработает строчка
@perldoc.ru error:nouser No such user here
и sendmail откажется принимать такое сообщение.
freebsd.mc
Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами. Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.mc), он используется вместо файла freebsd.mc
Вот примерный вид конфигурационного файла:
1 divert(0) 2 VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 2002/05/22 16:39:14 gshapiro Exp $') 3 OSTYPE(freebsd4) 4 DOMAIN(generic) 5 6 FEATURE(access_db, `hash -o -T /etc/mail/access') 7 FEATURE(blacklist_recipients) 8 FEATURE(local_lmtp) 9 dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable') 10 FEATURE(virtusertable, `hash -o /etc/mail/virtusertable') 11 12 dnl Uncomment to allow relaying based on your MX records. 13 dnl NOTE: This can allow sites to use your server as a backup MX without 14 dnl your permission. 15 dnl FEATURE(relay_based_on_MX) 16 17 dnl DNS based black hole lists 18 dnl -------------------------------- 19 dnl DNS based black hole lists come and go on a regular basis 20 dnl so this file will not serve as a database of the available servers. 21 dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/ 22 23 dnl Uncomment to activate Realtime Blackhole List 24 dnl information available at http://www.mail-abuse.com/ 25 dnl NOTE: This is a subscription service as of July 31, 2001 26 FEATURE(dnsbl) 27 dnl Alternatively, you can provide your own server and rejection message: 28 FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}') 29 30 dnl Dialup users should uncomment and define this appropriately 31 dnl define(`SMART_HOST', `your.isp.mail.server') 32 33 dnl Uncomment the first line to change the location of the default 34 dnl /etc/mail/local-host-names and comment out the second line. 35 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw') 36 define(`confCW_FILE', `-o /etc/mail/local-host-names') 37 38 dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4 39 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet') 40 dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6') 41 42 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl 43 define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl 44 define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl 45 FEATURE(`no_default_msa')dnl turn off default entry for MSA 46 DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl 47 48 define(`confMAX_RCPTS_PER_MESSAGE', `10') 49 define(`confMAX_MESSAGE_SIZE', `1048576') 50 51 define(`confBIND_OPTS', `WorkAroundBrokenAAAA') 52 define(`confMAX_MIME_HEADER_LENGTH', `256/128') 53 define(`confNO_RCPT_ACTION', `add-to-undisclosed') 54 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') 55 MAILER(local) 56 MAILER(smtp)
В строке 6 мы задаем файл с пользовательскими псевдонимами; в десятой строке — имя файла трансляции виртуальных пользователей в настоящих, а в 36-й строке — названия доменов, для которых наш сервер должен обрабатывать почту.
Также ограничим максимальный размер письма одним мегабайтом (строка 49) и запретим рассылать письмо одновременно более, чем 10 получателям (строка 48). Если есть необходимость отправки всей почты на промежуточный SMTP сервер (например, на SMTP сервер провайдера), следует раскомментировать строку 31 и вместо «your.isp.mail.server» указать IP адрес или имя SMTP сервера провайдера.
Запуск и тестирование
Теперь, когда почти все сделано, нам надо пересобрать заново файл конфигурации sendmail и обновить базы данных. Делается это следующим набором команд:
cd /etc/mail rm *.db rm freebsd.cf make all make install
Результатом будет нечто вроде этого:
/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 genius.mc > genius.cf /usr/sbin/makemap hash virtusertable.db < virtusertable chmod 0640 virtusertable.db /usr/sbin/makemap hash access.db < access chmod 0640 access.db /usr/sbin/sendmail -bi /etc/mail/aliases: 26 aliases, longest 18 bytes, 276 bytes total chmod 0640 /etc/mail/aliases.db install -m 444 freebsd.cf /etc/mail/sendmail.cf install -m 444 freebsd.submit.cf /etc/mail/submit.cf
Теперь перезапускаем sendmail
/usr/local/etc/rc.d/030.sendmail.sh stop /usr/local/etc/rc.d/030.sendmail.sh start
и тестируем:
telnet localhost 25
Trying ::1… Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’. 220 localhost.my.domain ESMTP Sendmail 8.12.6/8.12.6; Mon, 30 Dec 2002 13:31:56 +0300 (MSK) EHLO localhost 250-localhost.my.domain Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-DELIVERBY 250 HELP QUIT 221 2.0.0 localhost.my.domain closing connection
Наличие строчки «250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN» говорит нам о том, что sendmail может аутентифицировать пользователя. Добавляем пользователя:
saslpasswd2 admin-perldoc.ru Password: Again (for verification):
Вводим пароль пользователя и проверяем:
sasldblistusers2 admin-perldoc.ru@genius: userPassword
Собственно говоря, на этом настройка sendmail закончена. Теперь настраиваем The Bat! для того, чтобы можно было отправлять почту с аутентификацией:
Заходим в Ящик -> Свойства почтового ящика -> Транспорт -> Аутентификация
Выделяем чекбокс «Аутентификация SMTP (RFC-2554)».
Переключаем кнопку «Использовать параметры, указанные ниже.»
Вводим имя пользователя и пароль, которые создали при помощи saslpasswd2.
Пользователь: admin-perldoc.ru@genius.
Пароль: *********
(!) Обратите внимание на то, что имя пользователя указано вместе с именем машины.
Выделяем чекбокс «Требовать безопасную (MD5) аутентификацию».
В том случае, если используется MS Outlook или другой почтовый клиент, в котором нет безопасной аутентификации (DIGEST-MD5, CRAM-MD5), необходимо использовать аутентификацию по методам PLAIN или LOGIN. При этом в качестве имени пользователя надо использовать имя пользователя БЕЗ добавленного имени машины. В нашем случае имя пользователя будет выглядеть так: admin-perldoc.ru.
После отправки письма в лог-файле /var/log/maillog должны быть примерно такие записи:
Dec 30 13:54:41 genius sm-mta[77570]: AUTH=server, relay=xxx.yyy.zzz.kkk [xxx.yyy.zzz.kkk], authid=admin-perldoc.ru@genius, mech=CRAM-MD5, bits=0
Поддерживается http://stellar.df.ru
Авторизуйтесь для добавления комментариев!
Настройка sendmail для отправки почты через gmail.com / Хабр
Долго искал внятное объяснение как заставить локальный sendmail, установленный на компьютере во внутренней сети, отправлять почту во внешний мир. В качестве relay был выбран smtp.gmail.com.
Перекопал и испробовал кучу описаний в сети как это должно делаться. Результат оказался пшиком.
Предлагаю скомпилированный из разных источников и собственных ошибок результат действий который увенчался успехом. Возможно кому-нибудь сэкономит время.
Система: CentOS 6.3 (2.6.32-279.el6.x86_64).
Установка нужных пакетов:
uym install sendmail sendmail-cf openssl cyrus-sasl cyrus-sasl-plain nano
Создание SSL сертификатов:
mkdir /etc/mail/certs
chmod 700 /etc/mail/certs
cd /etc/mail/certs
openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem
openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem
openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem
ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem
chmod 600 /etc/mail/certs/*
Создание файла с данными для аутентификации:
nano /etc/mail/auth/authinfo
AuthInfo:smtp.gmail.com "U:root" "I:[email protected]" "P:PASSWORD"
AuthInfo: "U:root" "I:[email protected]" "P:PASSWORD"
Конвертируем:
makemap hash -r /etc/mail/auth/authinfo < /etc/mail/auth/authinfo
Добавляем в sendmail.mc нужную конфигурацию (важно: сделать это до первого FEATURE):
dnl # Smrp relay
define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')
define(`confCACERT_PATH', `CERT_DIR')
define(`confCACERT', `CERT_DIR/CAcert.pem')
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')
dnl #
dnl # gmail auth
define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/auth/authinfo.db')dnl
Компилируем конфигурацию, перезапускаем sendmail и проверяем отправку почты:
make -C /etc/mail
service sendmail restart
sendmail -f [email protected] -v [email protected]
Test
.
Проверяем результат:
mailq
tail maillog
Почтовый сервер на собственном сайте через sendmail / Хабр
Не так давно передо мной встала задача предоставить зарегистрированным в моих каталогах, промышленной, автомобильной и риэлторской тематики, организация личный почтовый ящик с именем моего домена. Вместо того, чтобы выдавать пользователям каталога непосредственные контактные данные, было определено, что более продуктивно будет выдавать им контактные данные с названием моего домена. Что должно увеличить посещаемость, как среди пользователей, так и среди самих организаций.
Пользователи получают возможность писать сообщения фирмам со своего личного ящика, сохранив их в адресной книги, или любым другим удобным для них способом. А организации будут вынуждены им с него отвечать, что в результате должно увеличить посещаемость и соответственно монетизировать мой проект.
К сожалению, как только я начал обращаться с данным вопросом на крупнейших форумах рунета, то получил не совсем тот ответ, который я ожидал. При этом, лучшие из предложений сводились к тому, чтобы снести прекрасно работающий sendmail и установить на него Postfix и Dovecot, которые тянули и другие зависимости. А установочный пакет выглядел бы примерно так: exim4, exim4-base, exim4-config, exim4-daemon-heavy, dovecot-common, dovecot-imapd, dovecot-pop3d, php5-imap. В худшем оговаривали баснословные суммы, аж в 2000$, или советовали пройти мимо и не позориться.
К сожалению, позориться долго не пришлось. Так как однозначной инструкции, которая бы удовлетворяла мои нужды, и другие возможные подобные решения в сети не нашлись, я решил, что данное руководство будет как нельзя кстати.
Поставленная мною задача решалась с помощью старого доброго sendmail и небольших настройках в его конфигурациях.
В первую очередь необходимо прописать настройки в dns-зоне:
Для MX:
@ IN MX 10 mx.site.ru.
И для AAAA:
@ IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334
И для A:
mx.site.ru. IN A <IP>
Указанный в ДНС MX адрес также надо будет прописать в /etc/hosts, добавив:
<IP> mail.site.ru
Теперь перейдем непосредтственно к конфиругации sendmail.
Начнем с файла /etc/mail/sendmail.mc. Для начала откроем двери для всех желающих, так как по умолчанию smtp-порт открыт только на раздачу. Проблему вирусов, спама и дос-атак обсудим позже. Делается это так:
DAEMON_OPTIONS(`Port=smtp,Addr=<ip>, Name=MTA-ext')dnl
Затем сразу после записи:
FEATURE(`use_cw_file')dnl
Добавим таблицы виртуальных пользователей и доменов:
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnl
Теперь создадим файл, куда будем класть почту:
touch "/home/site.ru/public_html/mail"
И назначим ему права владельца а группу sendmail агента:
chown user:mail /home/site.ru/public_html/mail
Путь и название файла условное и рекомендуется создавать файл вне зоны доступа для случайных пользователей.
В файле /etc/aliases пропишем имя виртуального пользователя, которому и будут приходить сообщения.
user: /home/site.ru/public_html/mail
В этом случае вся почта будет скапливаться в файле /home/site.ru/public_html/mail
Большой файл разобрать сложно, да и неудобно обращаться к нему отдельно от самого sendmail. Поэтому наиболее удобный вариант направить сразу на php скрипт, который будет его обрабатывать на лету.
user: "|php5-cgi -c /path/to/php.ini /site.ru/public_html/mail.php"
Чтобы письма всех возможных пользователей отправлялись в файл /site.ru/public_html/mail.php
Запишем в файл /etc/mail/virtusertable инструкцию:
@site.ru user
Данная инструкция сообщает, что всех возможных пользователей сайта site.ru мы определяем как пользователя user, для которого ранее мы уже определили место для хранение почты. В дальнейшем нам лишь останется разобрать, кому и чья почта принадлежит и отдать уже фактическому владельцу на нашем сайте.
Завершающим этапом останется лишь прописать список имен хостов, принимаемых программой sendmail в файле
/etc/mail/local-host-names.
Добавив к существующим:
mx.site.ru
site.ru
(В конце пробел обязателен)
Активируем изменения командой sendmailconfig.
Защита от DDoS-атак
Для защиты от дос-атак я приведу несколько настроек, которые будут полезны. Их необходимо прописать в файле /etc/mail/sendmail.mc:
# максимальное число соединений в секунду. Если частота превышена, дополнительные соединения будут поставлены в очередь (не отброшены).
Define(confCONNECTION_RATE_THROTTLE',43')dnl
#максимальное число дочерних процессов sendmail. Если это число будет превышено, дополнительные соединения будут поставлены в очередь (не отброшены).
Define(confMAX_DAEMON_CHILDREN',40')dnl
#если на диске осталось указанное количество блоков, сервер больше не будет принимать сообщения. По умолчанию - 100.
Define(4configSIN_FREE_BLOCKS',100')dnl
#максимальный размер заголовка входящего сообщения, в байтах.
Define(confMAX HEADERS LENGTH', 4024')dnl
#максимальный размер тела входящего сообщения. Значение по умолчанию равно 4 Мб (4 194 302 байта). Не нужно устанавливать слишком маленькое значение, так как оно может быть легко превышено вложениями (attachments).
Define(confMAX_MESSAGE_SIZE',4194304')dnl
После чего еще раз активируем изменения командой sendmailconfig.
Антиспам и антивирус
В качестве антивирусной программы будем использовать Dr.Web. Он же поможет нам справиться и со спамом. Я не стал использовать дополнительные спам-фильтры, так как сам после долгих страданий от того, что в сервисе gmail.com нужные мне письма постоянно попадали в спам. Принял решение перейти на yandex. Поэтому чистку спамом считаю делом индивидуальным, а использование каких-либо спам-листов и фильтров довольно сомнительным удовольствием.
Установим ключ:
wget -O - http://officeshield.drweb.com/drweb/drweb.key | apt-key add
Подключим репозиторий:
nano /etc/apt/sources.list
deb http://officeshield.drweb.com/drweb/debian stable non-free
Обновляем репозиторий:
aptitude update
Устанавливаем Dr.Web:
aptitude install drweb-sendmail-av-as
Основной файл настройки антиспама /etc/drweb/plugin_vaderetro.conf. В нем нас особо интересуют черные и белые списки:
WhiteList = /home/site.ru/public_html/mail/WhiteList
BlackList = /home/site.ru/public_html/mail/BlackList
Их также можно вынести в разделы нашего сайта, либо в любое другое доступное для редактирования место, не забывая о соответствующих ограничениях и безопасности.
На этом все. В следующей публикации мы разберем сохраненную форму и создадим для нее таблицу в базе данных, привязав ее к пользователю сайта или каталога.
Используемые материалы
www.pettingers.org/code/sendmail-local.html
www.sendmail.com/sm/open_source/docs/m4/features.html
it-e.ru/blogs/administrirovanie/nastrojka-mta-sendmail
www.freebsd.org/doc/ru/books/handbook/sendmail.html
progressive0.livejournal.com/15919.html
adatum.ru/ustanovka-sendmail-dovecot-drweb-na-ubuntu.html
Отправка почты через консоль с авторизацией в linux
Для того, чтобы быть в курсе всего, что происходит на сервере, помимо мониторинга, полезно следить за стандартными письмами, которые шлют различные сервисы. Я расскажу, как настроить на сервере отправку писем через стандартный postfix с авторизацией на стороннем smtp сервере. Так же эта настройка будет полезна для отправки почты через консоль linux с авторизацией по smtp.
Если у вас есть желание освоить Linux с нуля, не имея базовых знаний, рекомендую познакомиться с онлайн-курсом Administrator Linux.Basic в OTUS. Курс для новичков, для тех, кто хочет войти в профессию администратора Linux. Подробности по .
По-умолчанию, в минимальной установке дистрибутива CentOS 7 уже идет в комплекте почтовый сервер postfix. Его я и буду использовать. Стандартные настройки сервера не дают нормальных возможностей для отправки почты. Сделаем некоторые дополнительные действия.
Для начала, чтобы иметь возможность оперативно проверять отправку почты через консоль, установим программу mailx. Без нее при попытке отправить письмо в консоли, будете получать ошибку:
# mail bash: mail: command not found
Для того, чтобы это исправить, устанавливаем mailx.
# yum install mailx
После этого можно отправлять со своего сервера сообщения во внешний мир, например вот так.
# df -h | mail -s "Disk usage" [email protected]
На почту улетит вывод команды df.
Но при стандартных настройках ваше письмо либо попадет в спам, либо вообще не будет принято сервером получателя, потому что на вашем сервере нет корректных настроек для отправки почты (dns записи, spf, dkim и т.д.). Чтобы почта нормально отправлялась, надо воспользоваться каким-то внешним почтовым сервером. Настроим postfix на отправку локальных писем через внешний сервер с авторизацией по smtp.
Я взял дефолтный конфиг postfix, очистил его от комментариев и пробелов, добавил в конец свои настройки.
# cat /etc/postfix/main.cf
## DEFAULT CONFIG BEGIN ###################### queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = localhost inet_protocols = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES ## DEFAULT CONFIG END ###################### # Имя сервера, которое выводит команда hostname myhostname = centos7-test.xs.local # Здесь по логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель # фигурировало полное имя сервера, так удобнее разбирать служебные сообщения mydomain = centos7-test.xs.local mydestination = $myhostname myorigin = $mydomain # Адрес сервера, через который будем отправлять почту relayhost = mailsrv.mymail.ru:25 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level = may
Создаем файл с информацией об имени пользователя и пароле для авторизации.
# mcedit /etc/postfix/sasl_passwd
mailsrv.mymail.ru:25 [email protected]:password
Создаем db файл.
# postmap /etc/postfix/sasl_passwd
Теперь можно перезапустить postfix и проверить работу.
# systemctl restart postfix
Отправляем тестовое письмо через консоль. Проверяем почтовый лог.
# tail -n 10 /var/log/maillog
Если у вас там будет похожая ошибка:
postfix/smtp[5420]: warning: SASL authentication failure: No worthy mechs found postfix/smtp[5420]: 24762774C6: to=<[email protected]>, relay=mailsrv.mymail.ru[10.10.30.3]:25, delay=450, delays=450/0.03/0.02/0, dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server mailsrv.mymail.ru[10.10.30.3]: no mechanism available)
То необходимо установить еще несколько пакетов:
# yum install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain
После этого перезапускайте postfix и проверяйте отправку в консоли. Если все в порядке, то к стандартному алиасу для root в /etc/aliases, добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.
Было:
#root: marc
Стало
root: root,[email protected]
Обновляем базу сертификатов:
# newaliases
На этом все. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через внешний нормальный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры). Теперь удобно использовать локальную отправку в скриптах, не задавая дополнительные параметры. Все уже настроено, можно использовать простую локальную доставку.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
ssmtp настройка отправки почты с Ubuntu/Debian/Linux
Устанавливаем ssmtp
Отправляем почту из консоли
Отрпавка текстового сообщения из файла message.txt
Отправим почтовое сообщение через PHP
Отправка письма при отсутвии пинга
Проблемы
Устанавливваем ssmtp
apt-get install ssmtp
Полный список параметров
man -m 5 ssmtp.conf
Делаем бекап файла конфигуации
mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.default
Копируем болванку файла конфигурации ssmtp.conf, столкнулся еще с тем что после последней строки
AuthPass=password, необходим перевод строки, иначе аутентификация не пройдет.
wget -P /etc/ssmtp http://itautsors.ru/ssmtp.conf
Редактируем файл конфигурации
nano /etc/ssmtp/ssmtp.conf
Содержимое файла ssmtp.conf
# cat ssmtp.conf
# /etc/ssmtp.conf — конфигурационный файл для sSMTP sendmail.
#
# Пользователь, который получает всю почту для userids < 1000
# Сделайте пустым для отключения перезаписи. Или укажите пользователя.
# А также вы можете указать нужный е-майл на который будет
# приходить почта для root.
root=postmaster
# Место, где идет почта. Настоящее имя машины не требуются
# MX записи. Обычно mailhosts является именем mail.domain.com
# Например если вы находитесь в domain.com ваш mailhub с таким же именем.
# Пример для SMTP портом 2525
# mailhub=mail.your.domain:2525
# Пример для SMTP портом 25 (Standard/RFC)
# mailhub=mail.your.domain
# Пример для SSL шифрованного соединения
# mailhub=mail.your.domain:465
#Адрес и порт доверенного smtp сервера, с которого будет осуществляться отправка ваших почтовых сообщений
#Для гугла
mailhub=smtp.gmail.com:587
#Для яндекса
#mailhub = smtp.yandex.ru:465
#От кого якобы должна приходить почта?
#если используете pdd.yandex.ru можно указать свой домен mydomain.ru
rewriteDomain=
# Полное имя машины
#если закомментировано, ssmtp определяет параметр самостоятельно
hostname=_HOSTNAME_
# Установите это чтобы никогда не переписывать «From:» (если не указано) и
# использовать этот адрес в «from line» оболочки.
# Если YES Поле From: будет выставляться самим smtp переписывая значение вводимое скриптами
# Если NO, скрипты смогут записывать свое значение в поле From:
#Должно присутсвовать обязательно, иначе не пройдет авторизация Gmail.
#FromLineOverride=YES
# Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер.
#Должно присутсвовать обязательно, иначе не пройдет авторизация Gmail:
#UseSTARTTLS=YES
# Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте.
#UseTLSCert=YES
# Используйте этот сертификат RSA.
#TLSCert=/usr/local/etc/ssmtp/ssmtp.pem
# Получить расширенное (* действительно * расширенную) отладочную информацию в логах
# Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот
# параметр в начало файла конфигурации и раскомментируйте
#Debug=YES
#Параметры существующего аккаунта почты
# Указываем имя пользователя на smtp-сервере (от какого пользователя шлем почту).
# Указываем пароль от smtp-аккаунта:
AuthPass=password
#End Of File
Далее правим файл revaliases
nano /etc/ssmtp/revaliases
Содержимое файла revaliases
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# where [:port] is an optional port number that defaults to 25.
# В данном конфиге явно указывается, почта от какого пользователя и с какого ящика может уходить.
# Данная настройка позволяет защитить сервер от возможности слать через него спам с пользовательских учеток.
# для яндекса
# для гугла
В *NIX-мире для передачи почты первым был написан сервер sendmail. Этот сервер долгое время был стандартом де-факто. Постепенно была сформирована концепция MTA — то есть, концепция Mail Transfer Agent. MTA — это элемент системы передачи почты, который занимается только процессом передачи почтовых сообщений.
Однако исторически в системе Linux принято, что программа для передачи почтовых сообщений должна быть именно sendmail. Поэтому, когда устанавливается любая из MTA-программ, она создает файлы линков /usr/sbin/sendmail и /usr/lib/sendmail, которые указывают на нужную программу.
Посмотрим куда у нас ведет mail
whereis mail
Проверяем файл симилинк,
$ cd /usr/sbin && ls -l | grep sendmail
Должны увидеть
lrwxrwxrwx 1 root root 5 2011-04-07 03:09 sendmail -> ssmtp
Если же нет то виртуальный пакет mail-transfer-agent не ссылается на пакет ssmtp, и это необходимо исправить. Удалив пакеты на которые ссылается mail-transfer-agent, к примеру posfix.
Примеры работы ssmtp
Конфигурация
— sendmail: как настроить sendmail на ubuntu?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
16 примеров команд для отправки электронной почты из командной строки Linux
Независимо от того, являетесь ли вы разработчиком, непрерывно работающим с командной строкой Linux, или администратором сервера, которому нужны журналы или другие данные, извлеченные из администрируемых систем, и знающие, как отправлять электронную почту с помощью команды линия очень полезна.
В этом посте вы найдете примеры того, как отправлять электронную почту с терминала. Мы рассмотрим пользовательские конфигурации и коснемся того, как настроить SMTP-подключения к учетным записям электронной почты или поставщикам услуг электронной почты.Я покажу вам, как установить необходимые пакеты почтовой программы консоли, и предоставлю базовую информацию для параметров командной строки на основе руководств по пакету.
Настройка пакетов почтовой программы командной строки
Все пакеты почтовой программы в этом руководстве доступны через расширенный диспетчер пакетов Debian, поэтому шаги установки в приведенном ниже примере можно использовать для всех представленных пакетов.
Обратите внимание, что эти части программного обеспечения могут быть установлены другими менеджерами пакетов по умолчанию, такими как yum
или dnf
, в зависимости от вашего дистрибутива Linux.
В большинстве случаев либо sendmail
, либо postfix
доступны в каждом дистрибутиве Linux из коробки, или, по крайней мере, об этом говорится в аналогичных сообщениях в блогах. Либо мне не повезло, либо другие ошибались, но мне пришлось установить один вручную. Однако один из них вам определенно понадобится для доставки электронной почты.
Настройка Sendmail с пакетом SSMTP
Я продолжу с sendmail
и пакета SSMTP. SSMTP содержит пакет sendmail
под капотом, как вы увидите, и он облегчает настройку, что в противном случае довольно сложно для sendmail
.
Шаг 1. Проверьте, установлен ли пакет почтовой программы командной строки
Введите имя пакета почтовой программы точно так же, как вы бы запустили команду, чтобы проверить, доступна ли она:
Если пакет установлен, команда запускается, и приглашение меняется — при попытке выполнить команду — и вы увидите мигающий курсор, за которым следует сообщение
Имена получателей должны быть указаны
в случаеsendmail
. Вывод: пакет установлен.Если пакет НЕ установлен, вы получите предупреждающее сообщение и предложение, как его установить:
$ sendmail
Программу sendmail можно найти в следующих пакетах:
* exim4-демон-тяжелый
* exim4-демон-свет
* постфикс
* цитадель-мта
* курьер-мта
* дма
* esmtp-run
* masqmail
* мсмтп-мта
* nullmailer
* opensmtpd
* qmail-run
* sendmail-bin
* ssmtp
Попробуйте: sudo apt install
В этом примере я попробовал, работает ли команда sendmail
.После добавления пакета SSMTP эта команда и команда ssmtp
будут работать и изменять командную строку в терминале. Посмотрим на это!
Шаг 2. Установка пакета почтовой программы командной строки Sendmail
Как следует из вывода терминала, нам нужно запустить команду установки Advanced Package Manager — обычно с правами root — для установки необходимого пакета. Как упоминалось ранее, конфигурации для sendmail
намного проще, если абстрагироваться от сложности конфигурации.Это можно сделать с помощью SSMTP:
sudo apt установить ssmtp
Шаг 3. Проверьте установку
После завершения установки вы можете проверить, может ли sendmail
пересылать сообщения. Введите в терминал приведенный ниже код:
echo "Тема: привет" | sendmail [email protected]
Он должен отправить электронное письмо, если все работает правильно. Здесь строка «hello»,
, переданная по конвейеру команде sendmail
, будет темой отправленного сообщения, в то время как определенный адрес электронной почты, естественно, является получателем электронной почты.
Вы запускаете команду … и, ой: sendmail: Не удается открыть mailhub: 25
. Причина в том, что мы вообще не предоставляли настройки mailhub. Для пересылки сообщений вам потребуется настроенный SMTP-сервер. Вот где SSMTP работает действительно хорошо: вам просто нужно один раз отредактировать его файл конфигурации, и все готово.
Шаг 4. Настройка SSMTP
Давайте разместим файл конфигурации по адресу /etc/ssmtp/ssmtp.conf
. Здесь вы должны ввести код ниже, чтобы настроить SMTP-реле:
UseSTARTTLS = YES
root = <ваш-адрес-электронной почты>
mailhub = smtp.gmail.com:587
AuthUser = <имя-пользователя-вашей-учетной записи>
AuthPass = <пароль вашей учетной записи>
Это означает, что вы настроили внешнюю службу, которая будет пересылать
ваших электронных писем. Например, когда вы вводите учетные данные для Gmail, вы увидите сообщения, отправленные с терминала, в каталоге «Отправленные» вашего почтового ящика. Конфигурации схожи и с другими сервисами.
Это была базовая конфигурация для sendmail
и шаги установки для любого часто используемого пакета почтовой программы командной строки.Далее мы перейдем к установке и опробуем различные другие пакеты.
Отправка электронной почты с помощью команды SSMTP
Это симпатичный маленький инструмент, который мы только что настроили для доставки почты. Как следует из страницы man
, это минималистичный эмулятор sendmail
. Таким образом, SSMTP позволяет пользователям передавать электронные письма через SMTP-сервер из командной строки Linux. Он предоставляет средства для подключения к mailhub с соответствующим файлом конфигурации. Если ваш файл конфигурации был настроен правильно, все ваши заботы об отправке электронной почты из командной строки могут исчезнуть.
Базовая реализация команды SSTMP:
Если вы просто используете SSMTP, команда должна выглядеть следующим образом:
ssmtp [email protected]
После команды ssmtp
вы должны указать адрес получателя, а затем вы можете включить файл, который будет отображаться в теле письма. Здесь вы можете определить заголовки для сообщения, перечислить других получателей и установить тип содержимого. Таким образом вы можете отправлять электронные письма в формате HTML.SSMTP интерпретирует ваше сообщение и правильно использует предоставленные значения. Вот пример HTML-кода, который вы можете отправить:
Копия: [email protected]
Тема: Это электронное письмо в формате HTML
От: [email protected]
Content-Type: текст / html; charset = "utf8"
html>
Вы можете добавить сюда любой действующий HTML-код электронной почты.