Назад | Перейти на главную страницу

Как отделить веб-сервер от почтового сервера?

У меня есть сервер, на котором работают веб-сервер и почтовый сервер для нескольких доменов, и обе службы настроены на использование SSL-сертификатов от Let's Encrypt (для каждого домена веб-сервер и почтовый сервер используют один и тот же сертификат).

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

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

Сертификаты на сервере состоят из трех частей:

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

Обычно он защищен паролем.

Используя закрытый ключ, вы генерируете так называемый «CSR», то есть запрос на сертификацию. Вы отправляете это в центр, чтобы сгенерировать из него сертификат.

Запрос содержит данные о вашей компании (страна, местоположение, название компании, город, некоторые из них необязательны) и все имена хостов, для которых сертификат должен быть действителен (1-n), эта функция называется "альтернативные имена субъектов".

это свидетельство нужна вторая часть.

Третья часть - это цепочка сертификатов (имеется в виду все сертификаты, которые использовались при создании вашего сертификата). Обычно вы получаете цепочку от органа вместе со своим сертификатом. В противном случае вы всегда можете скачать его с веб-сайта ведомства.

Зная эти факты, легко сделать вывод, что:

пока

  • поскольку у вас есть три части (самая важная - закрытый ключ)
  • поскольку программное обеспечение вашего сервера (почтовый сервер, веб-сервер, что угодно) позволяет импортировать внешний закрытый ключ
  • поскольку имя хоста сервера соответствует хотя бы ОДНОМУ из альтернативных имен субъектов в сертификате (или сертификат является сертификатом с подстановочным знаком)

вы можете использовать ОДИН сертификат для любого количества серверов.

Развязка вообще не проблема.

Вы уже выделили основные этапы этого процесса: сертификаты и делегирование почтовых служб из Интернета на почтовый сервер.

Что касается сертификатов, я бы рекомендовал использовать разные имена хостов для почты и веб-сервера, а также разные сертификаты.

Поскольку вы используете Let's Encrypt, большинство его инструментов используются для веб-серверов. Протокол ACME требует проверки того, что вы контролируете свое доменное имя. Это прекрасно работает с веб-ресурсами. Certbot (или любой другой инструмент, поддерживающий ACME) поместит простой файл в ваш корневой веб-сайт и скажет Let's Encrypt проверить его через HTTP или HTTPS-запрос.

Для вашего почтового сервера это не работает. Но если вы используете любого совместимого поставщика DNS (например, Amazon Route 53 или DNS Made Easy или ...), вы можете сделать то же самое без веб-сервера.

См. Следующий список поддерживаемых подключаемых модулей поставщика DNS в Certbot:

--dns-cloudflare      Obtain certificates using a DNS TXT record (if you are
                      using Cloudflare for DNS). (default: False)
--dns-cloudxns        Obtain certificates using a DNS TXT record (if you are
                      using CloudXNS for DNS). (default: False)
--dns-digitalocean    Obtain certificates using a DNS TXT record (if you are
                      using DigitalOcean for DNS). (default: False)
--dns-dnsimple        Obtain certificates using a DNS TXT record (if you are
                      using DNSimple for DNS). (default: False)
--dns-dnsmadeeasy     Obtain certificates using a DNS TXT record (if you
                      areusing DNS Made Easy for DNS). (default: False)
--dns-google          Obtain certificates using a DNS TXT record (if you are
                      using Google Cloud DNS). (default: False)
--dns-luadns          Obtain certificates using a DNS TXT record (if you are
                      using LuaDNS for DNS). (default: False)
--dns-nsone           Obtain certificates using a DNS TXT record (if you are
                      using NS1 for DNS). (default: False)
--dns-rfc2136         Obtain certificates using a DNS TXT record (if you are
                      using BIND for DNS). (default: False)
--dns-route53         Obtain certificates using a DNS TXT record (if you are
                      using Route53 for DNS). (default: False)

См. Следующий пример, как это работает для Amazon Route53:

# set AWS API credentials
export AWS_ACCESS_KEY_ID="1234567890"
export AWS_SECRET_ACCESS_KEY="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# create a certificate
certbot certonly --noninteractive --agree-tos -m webmaster@example.com \n
  --no-eff-email --dns-route53 --rsa-key-size 4096 \n 
  -d mail.example.com -d smtp.example.com -d imap.example.com

Как вы можете видеть в последней строке данного примера, Let's Encrypt поддерживает многодоменные сертификаты. Если ваш почтовый сервер прослушивает несколько доменов, вам нужно пойти этим путем. SMTP или IMAP не поддерживают SNI, как HTTPS.

Второй шаг - перенаправить вашу почту с вашего веб-сервера на почтовый сервер. Лучше всего иметь для каждой службы отдельный сервер. Linux / Unix во многих случаях будет использовать локальную почту. Поэтому не следует полностью удалять Postfix со своего веб-сервера. Измените настройку Postfix на так называемую «спутниковую» настройку. Здесь ваш Postfix будет пересылать почту на сервер ретрансляции и предоставляет SMTP только для локальных служб (сокет и / или localhost: 25).

Если вы используете Debian или Ubuntu, вы можете перенастроить Postfix с помощью:

dpkg-reconfigure postfix

При настройке спутников вам будет предложено указать почтовый сервер ретрансляции. Введите здесь доменное имя вашего нового почтового сервера (например, mail.example.com).

При настройке почтового сервера вы должны включить IP-адрес вашего веб-сервера в качестве надежного источника для ретрансляции почты. Хороший подход - использование директивы конфигурации Postfix. allow_mynetworks.