Используя Ubuntu как сервер SMTP для Gmail

Может любой указывать на меня на руководство для использования Постфикса (или подобный) для отправки электронного письма как сервера SMTP для Gmail. Я имел серьезный поиск и подошел пустой врученный.

У меня есть несколько доменов, и вся электронная почта завершается в Gmail, но Google изменил их политику некоторое время назад, чтобы прекратить позволять пользователям послать электронное письмо от нескольких доменов - теперь они настаивают, чтобы у Вас был свой собственный сервер SMTP. У меня есть VPS Ubuntu, который я использую для веб-хостинга, есть ли какая-либо причина, я не мог использовать его в качестве сервера SMTP для Gmail?

3
задан 5 September 2017 в 17:27

1 ответ

Примечание: Этот ответ записан для 16,04 серверов, но может быть адаптирован к 14,04 при необходимости (замена systemctl ... команды с надлежащим service команды.)

Это - очень сложная задача настроить. Существует тонна отдельных важных частей к этому, но существует четыре основных компонента к установке здесь, которая также 'безопасна':

  1. ISP используемой системы (жилой дюйм/с обычно "плохи" для этого; Вы собираетесь хотеть что-то в центре обработки данных или с VPS или с облачным экземпляром EC2 AWS или чем-то подобным),

    В основном не используйте свою собственную сеть для этого. Настройте свой сервер SMTP где-то в другом месте, как Amazon EC2.

    Однако я настоятельно рекомендую получить отдельный VPS от где-нибудь, где можно установить rDNS для IP-адреса для соответствия вперед DNS, необходимо будет установить. Мы затронем DNS позже.

  2. Сама система (заблокированный вниз SSH, брандмауэр, и т.д.)

    Мы должны в значительной степени настроить систему для запрещения соединений на порте 25 и без SSL. Мы также должны просто заблокировать вниз систему. Мы сделаем этот шаг в последний раз, после того, как мы удостоверимся, что остальное работает.

  3. Постфиксный MTA

    Это обеспечивает SMTP. Нам в конечном счете не нужен он для поставки почты куда угодно, таким образом, нам не нужно это как запись MX в DNS сайта, но нам действительно нужны некоторые настроенные вещи; нам нужна запись для имени хоста, и нам нужна обратная запись DNS на соответствие (следовательно предложение фактического VPS вместо экземпляра EC2).

  4. Ядро голубятни

    Обычно мы полагаем, что DoveCot поставщик POP3 или сервисов IMAP, но dovecot-core самостоятельно может использоваться для обеспечения бэкенда SASL, который работает без многих проблем и взаимодействует с пользователями системы. Это - все, для чего мы используем Голубятню, но мы должны будем скорректировать некоторые конфигурации.

Я не затрону точку № 1, потому что я не могу управлять этим. Я могу однако дать Вам указания на то, как настроить вещи. Мы собираемся сделать это в другом порядке от вышеупомянутого списка, но мы все еще получим это все сделанное.


Ядро голубятни

dovecot-core будет используемым для бэкенда SASL. Существует несколько вещей позже, мы должны будем работать с для 'безопасной' отправки почты, но мы можем начать настраивать бэкенд Голубятни.

Во-первых, установка dovecot-core:

sudo apt-get install dovecot-core

Затем, мы должны сделать некоторые модификации к /etc/dovecot/conf.d/10-auth.conf.

Давайте отключим аутентификацию простого текста и потребуем SSL для учетных данных. В конечном счете не имеет значения от постфикса-> голубятня, но это - хороший шаг, чтобы сделать.

НАЙДИТЕ: #disable_plaintext_auth = yes

ЗАМЕНА: disable_plaintext_auth = yes

Затем, мы должны включить механизм автора 'входа в систему'.

НАЙДИТЕ: auth_mechanisms = plain

ЗАМЕНА: auth_mechanisms = plain login

Затем мы должны отредактировать /etc/dovecot/conf.d/10-master.conf файл.

НАЙДИТЕ:

 # Postfix smtp-auth
 #unix_listener /var/spool/postfix/private/auth {
 #  mode = 0666
 #}

ИЗМЕНИТЕ, ЧТОБЫ БЫТЬ:

 # Postfix smtp-auth
 unix_listener /var/spool/postfix/private/auth {
   mode = 0660
   user = postfix
   group = postfix
 }

Это включает Постфиксный бэкенд аутентификации SASL в Голубятне.

Наконец, для Голубятни, мы должны отредактировать /etc/dovecot/conf.d/auth-system.conf.ext:

НАЙДИТЕ:

passdb {
  driver = pam
  # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
  # [cache_key=<key>] [<service name>]
  #args = dovecot
}

ИЗМЕНИТЕ, ЧТОБЫ БЫТЬ:

passdb {
  args = %s
  driver = pam
  # [session=yes] [setcred=yes] [failure_show_msg=yes]
  # [max_requests=> <n>]
  # [cache_key=<key>] [<service name>]
  #args = dovecot
}

После того как это сделано, мы можем перезапустить процесс Голубятни:

sudo systemctl restart dovecot

Постфикс

Теперь, для фактического материала SMTP. Это не настолько трудно настроить как Голубятня heh.

Во-первых, установите Постфикс и ssl-cert пакет, который создаст основной самоподписанный сертификат, которого является как раз для работы с защищенным от SSL автором SASL для клиентов SMTP:

sudo apt-get install postfix ssl-cert

При запросе Постфиксные типы сайта, просто избранный "сайт".

После того как это сделано, мы должны сделать некоторые модификации в Постфиксные файлы.

Найдите эту строку:

smtp      inet  n       -       y       -       -       smtpd

Добавьте ниже тех строк, так, чтобы строка была похожа на это с двумя дополнительными строками ниже его:

smtp      inet  n       -       y       -       -       smtpd
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

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

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=yes
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,check_policy_service unix:private/policy-spf,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_reject_unlisted_recipient=yes
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

С этим теперь настроенным, мы должны теперь изменить базовые настройки путем редактирования /etc/postfix/main.cf.

Во-первых, переместиться /etc/postfix/main.cf кому: /etc/postfix/main.cf.dist:

sudo mv /etc/postfix/main.cf /etc/postfix/main.cf.dist

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

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_use_tls=yes
smtpd_tls_security_level=may
smtpd_tls_auth_only=no
smtp_tls_note_starttls_offer=yes
# Use an actual certificate.
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# Use an actual key.
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_tls_session_cache_database=btree:${data_directory}/smtpd_scache
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom
#tls_medium_cipherlist = AES128+EECDH:AES128+EDH

smtpd_client_connection_rate_limit = 50
anvil_rate_time_unit = 120s

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policy-spf

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
myhostname = mail.somedomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname somedomain mail.somedomain localhost.somedomain localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

milter_protocol = 2
milter_default_action = accept

queue_directory = /var/spool/postfix

Обратите внимание, что хорошая часть параметров конфигурации здесь используется, прежде всего, для полноценной установки SMTP/IMAP с бэкендом Голубятни. Можно все еще использовать эту конфигурацию, поскольку это вытягивают от фактического почтового сервера (с запутываемым lol некоторых данных) как основа для установки этого для использования просто части SMTP этого для вещей. Так в конечном счете не волнуйтесь ни о чем больше.

Обратите внимание, что я рекомендую получить сертификат SSL только для почтового сервера, или если Вы имеете подстановочный сертификат для одного из Вашего использования доменов это и устанавливаете mailname на домен в том сертификате. Таким образом, Вы не используете, самоподписал сертификаты SSL для шифрования SSL/TLS на соединении. Просто мои два цента, можно все еще использовать самоподписанный для большинства вещей, если все, что Вы делаете, утверждает, что электронная почта от клиента SMTP как Google Отправляет Почту Как функцию.

После того как Вы сделаны здесь, мы должны остановиться, затем запускают Постфиксный процесс:

sudo systemctl stop postfix
sudo systemctl start postfix

Мы должны теперь быть хорошими для движения с Постфиксом и Голубятней SASL.


Нам нужен пользователь автору со все же.

Мы не создали пользователя, и у Вас есть только несколько опций. В нашем случае мы собираемся создать преданного пользователя с этой целью аутентификации SMTP.

Мы собираемся создать пользователя со следующим:

sudo useradd --create-home --user-group --shell /usr/sbin/nologin authsmtpuser

Мы затем должны установить пароль. Можно сделать это со следующей командой и ввести пароль соответственно. (Символы не обнаружатся, ни будут заполнители, когда это запросит, к сожалению),

sudo passwd authsmtpuser

Если Вы не делаете этого и имеете другое имя пользователя на поле (НЕ корень), Вы хотите автору с, используете это в сценарии ниже.


Теперь мы можем протестировать вещи.

Давайте протестируем это. Это - очень простой сценарий Python 3, который можно использовать, чтобы 'протестировать' это, все работает, поскольку мы ожидаем это к. Удостоверьтесь, что обновили DESTINATION_ADDRESS, SOURCE_ADDRESS, SMTP_USERNAME, SMTP_PASSWORD, и SMTP_SERVER_ADDR здесь, чтобы удостовериться, что этот сценарий будет правильно работать. Сохраните это как test_smtp_server_tls.py где-нибудь, и помните, где мы сохранили это. (Можно создать его в /tmp/ если Вы хотите так, это не сохраняется на Вашем компьютере после перезагрузки),

#!/usr/bin/env python3

import email.utils as emailutils
import smtplib
from email.mime.text import MIMEText

DESTINATION_ADDRESS = 'your-address@gmail.com'
SOURCE_ADDRESS = 'smtp-test@yourdomain.com'

SMTP_USERNAME = 'authsmtpuser'
SMTP_PASSWORD = 'your password'
SMTP_SERVER_ADDR = 'ip.add.re.ss'
SMTP_SERVER_PORT = 587  # Don't change this.

# Construct a test message.
msg = MIMEText("This is a test message from your custom SMTP server!")
msg['To'] = DESTINATION_ADDRESS
msg['From'] = SOURCE_ADDRESS
msg['Date'] = emailutils.formatdate(localtime=True)
msg['Message-ID'] = emailutils.make_msgid()
msg['Subject'] = "SMTP Server Mail Testing"

try:
    print ("Establishing SMTP connection with SSL...")
    conn = smtplib.SMTP_SSL(SMTP_SERVER_ADDR, SMTP_SERVER_PORT)
    print ("Established connection.")
except Exception as e:
    print ("Could not establish SMTP connection.  Error was:\n%s" % str(e))
    exit(1)

try:
    print ("Attempting to authenticate...")
    (_, response) = conn.login(SMTP_USERNAME, SMTP_PASSWORD)
    if 'Authentication successful' in response.decode('utf-8'):
        print ("Authenticated with SMTP server successfully.")
    else:
        print ("Could not authenticate with server, response was: %s" % response.decode('utf-8'))
        exit(2)
except Exception as e:
    print ("Could not authenticate with SMTP.  Error was:\n%s" % str(e))

try:
    print ("Sending test message to [%s] from [%s] with subject [%s]..." % (DESTINATION_ADDRESS, SOURCE_ADDRESS, msg['Subject']))
    conn.sendmail(SOURCE_ADDRESS, DESTINATION_ADDRESS, msg.as_string())
    print ("Message queued for sending, please check your destination email inbox and junk folders for the message.")
except Exception as e:
    print ("Could not send email.  Error was:\n%s" % str(e))
    exit(3)

exit(0)

Выполните этот сценарий с python3 /tmp/test_smtp_server_tls.py (принятие Вас сохранило его в /tmp/; измените путь при сохранении его в другом месте.

Проверьте целевой ящик входящих сообщений адреса электронной почты и такой. Если все работали, Вы получите электронное письмо вскоре от Вашего сервера и пользовательского домена. Это может перейти к Вашему почтовому ящику спама, таким образом проверьте там, если Вы не получаете сообщение первоначально.


Система - время к блокировке!

Это предполагает, что все вышеупомянутые шаги работали, конечно.

Время для установки брандмауэра для запрещения несанкционированного доступа. Обратите внимание, что я ненавижу ufw, это не достаточно сложно для моих потребностей, таким образом, я записал этот ответ с iptables - можно сделать sudo ufw disable выключить UFW и прямое использование iptables управление. Я также только предполагаю, что у Вас есть IPv4 в системе.

Если Вы уже имеете в распоряжении правила брандмауэра, то просто добавляют правило принять новые соединения на порте 587.

Если Вам не включили брандмауэр, выполнитесь, эти команды (добавьте дополнительный iptables -A INPUT -p tcp --dport 123 -m conntrack --ctstate NEW -j ACCEPT строки, заменяя 123 с фактическим номером порта любых других сервисов на Вашу систему необходимо принять соединения с, такие как tcp/443 и tcp/80 для HTTPS и HTTP соответственно, прежде чем Вы сделаете -j DROP строка):

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m comment --comment "Allow SSH access remotely." -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 587 -m conntrack --ctstate NEW -m comment --comment "Allow TLS-protected SMTP connections, for sending mail." -j ACCEPT
sudo iptables -A INPUT -j DROP

После того как это все настраивается, выполните эту команду: sudo apt-get install iptables-persistent. Когда это просит сохранять текущие наборы правила, поражать "Да" для каждого.

Удостоверьтесь Ваш сценарий тестирования выше и доступ SSH все еще работают перед закрытием соединения SSH или соединения с сервером! Если все хорошо работает, то последний шаг должен настроить псевдоним Google и сказать ему отправлять SMTP от того домена с другим сервером.


Конфигурация Google

Если Ваш Gmail будет находиться под системой Google Apps, и Вы не находитесь на плане Google Apps, который позволяет Вам использовать внешние серверы SMTP для почтовой отправки, то Вы не сможете внести свой вклад. Это - наложенное Google ограничение, и я не могу помочь Вам там.

От страницы GMail мы должны настроить вещи. Во-первых, войдите в свои настройки GMail.

GMail Settings Button

Однажды в Ваших настройках, перейдите к вкладке Accounts и Imports.

Необходимо будет 'удалить' любые псевдонимы набора до сих пор, в "Отправляют почту как", раздел, затем совершают нападки, "Добавьте другой адрес электронной почты".

enter image description here

Вставьте свое имя и другой адрес электронной почты для другого домена в окне, которое открывается.

enter image description here

После того как Вы поражаете "следующий шаг", Вы получите страницу как это. Удостоверьтесь, что ввели IP-адрес своего сервера правильно и также установили имя пользователя и пароль тем, мы создали ранее. Также удостоверьтесь, что выбрали опцию "Secured connection using SSL". Это осуществляет потребность возможности соединения SSL произойти прежде, чем отправить почту. Это должно выглядеть примерно так, кроме с IP-адресом Вашего сервера в пробеле:

enter image description here

Сохраните настройку с тем, "Добавьте Учетная запись". Вы получите электронное письмо, указывающее, что необходимо проверить, что Вы хотите, чтобы Gmail отправил почту с тем адресом; это отправит Вам ссылку на щелчок с кодом подтверждения. Можно просто ввести код подтверждения, после того как электронная почта прибывает в последнее окно, которое открывается во время этого процесса.

После того как это сделано, используйте Gmail для отправки электронного письма где-нибудь с другим "От" адреса, выбранного, и это должно отправить через сервер SMTP, который мы просто настраиваем!:)

4
ответ дан 1 December 2019 в 15:51

Другие вопросы по тегам:

Похожие вопросы: