У меня есть сервер, на котором работают веб-сервер и почтовый сервер для нескольких доменов, и обе службы настроены на использование SSL-сертификатов от Let's Encrypt (для каждого домена веб-сервер и почтовый сервер используют один и тот же сертификат).
Я хочу перейти к настройке с двумя серверами и разместить веб-сервер на одном компьютере и почтовую службу на другом. Чтобы это произошло, я думаю, мне придется столкнуться со следующими препятствиями:
mail.example.com
вместо того example.com
и настройте это для каждого доменаКак лучше всего разделить эти службы и как я могу настроить сервер для каждой службы, не сталкиваясь с описанными мною проблемами?
Сертификаты на сервере состоят из трех частей:
Сначала закрытый ключ: Это либо создается самим приложением, либо с помощью такого инструмента, как 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.