Используя Apache/mailcow, я настраиваю домашний почтовый сервер. Я следовал руководству по докеризации mailcow. И смог подключиться к моему сайту mailcow по адресу:
http://mail.example.com:8080
Мне пришлось использовать 8080, потому что мой сайт также настроен на этом сервере.
Я столкнулся с проблемой при попытке подключить мой клиент nextcloud к моему почтовому серверу, думая, что это проблема с SSL. Итак, я наконец установил ssl с помощью certbot.
У меня были учебники, в которых говорилось, что мне нужно создать файлы redirect.conf и site.conf.
Теперь я не могу получить доступ к своему почтовому сайту ни по одному из приведенных ниже URL-адресов.
Mail.example.com
Mail.example.com:8080 или 8443
http://mail.example.com
https://mail.example.com
http(s)://mail.example.com:8080 или 8443
Я знаю, что это как-то связано с перезаписью, «прокси» или «обратным прокси», но я действительно не знаю, что все это означает, поэтому я не знаю, что проверять .
Я не знаю, как Apache узнает, куда что-то отправить, поскольку значения documentroot нет в конфигурации. Я не знаю, для чего нужны файлы перенаправления или конфигурации сайта.
Что мне не хватает? Почему я не могу попасть на свой сайт через простой mail.example.com. В конце концов, я бы хотел, чтобы все приведенные выше URL-адреса перенаправлялись/переписывались на защищенный ssl сайт mail.example.com. Нет, :8080 или :8443
Файл виртуального хоста
<VirtualHost *:80>
ServerName mail.example.com
ServerAlias autodiscover.*
ServerAlias autoconfig.*
RewriteEngine on
ProxyPass / http://mail.example.com:8080/
ProxyPassReverse / http://mail.example.com:8080/
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mail.example.com
ServerAlias autodiscover.*
ServerAlias autoconfig.*
# You should proxy to a plain HTTP session to offload SSL processing
#ProxyPass /Microsoft-Server-ActiveSync http://127.0.0.1:8080/Microsoft-Server-ActiveSync connectiontim>
#ProxyPassReverse /Microsoft-Server-ActiveSync http://127.0.0.1:8080/Microsoft-Server-ActiveSync
ProxyPass / http://mail.example.com:8080/
ProxyPassReverse / http://mail.example.com:8080/
ProxyPreserveHost On
ProxyAddHeaders On
RequestHeader set X-Forwarded-Proto âhttpsâ
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# If you plan to proxy to a HTTPS host:
#SSLProxyEngine On
# If you plan to proxy to an untrusted HTTPS host:
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerName off
#SSLProxyCheckPeerExpire off
</VirtualHost>
</IfModule>
Mailcow.conf
# -------------------------------
# конфигурация веб-интерфейса mailcow
# -------------------------------
# example.org _не_ является допустимым именем хоста, используйте здесь полное доменное имя.
# Административный пользователь по умолчанию — «admin».
# Пароль по умолчанию — «moohoo».
MAILCOW_HOSTNAME=mail.example.com
# Алгоритм хеширования пароля
# Поддерживаются только определенные алгоритмы хеширования паролей. Полный список поддерживаемых схем см.
# см. https://mailcow.github.io/mailcow-dockerized-docs/model-passwd/
MAILCOW_PASS_SCHEME=BLF-КРИПТА
# -------------------------------
# Конфигурация базы данных SQL
# -------------------------------
ИМЯБД=пример
DBUSER=пример
# Пожалуйста, используйте длинные случайные буквенно-цифровые строки (A-Za-z0-9)
ДБПАСС=**************
DBROOT=***************
# -------------------------------
# Привязки HTTP/S
# -------------------------------
# Вы должны использовать HTTPS, но в случае обратных прокси с разгрузкой SSL:
# Может быть важно: это также изменит привязку внутри контейнера.
# Если вы используете прокси в Docker, укажите ему порты, указанные ниже.
# _не_ используйте IP:PORT в HTTP(S)_BIND или HTTP(S)_PORT
# ВАЖНО: Не используйте порт 8081, 9081 или 65510!
# Пример: HTTP_BIND=1.2.3.4
# Для IPv4 и IPv6 оставьте поле пустым: HTTP_BIND= & HTTPS_PORT=
# Для IPv6 см. https://mailcow.github.io/mailcow-dockerized-docs/firststeps-ip_bindings/
HTTP_PORT=8080
HTTP_BIND=
HTTPS_PORT=8443
HTTPS_BIND=
# -------------------------------
# Другие привязки
# -------------------------------
# Вы должны оставить это в покое
# Формат: 11.22.33.44:25 или 12.34.56.78:465 и т. д.
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
ПОРТ_ПОРТ=110
ПОПС_ПОРТ=995
SIEVE_PORT=4190
DOVEADM_PORT=127.0.0.1:19991
SQL_PORT=127.0.0.1:13306
SOLR_PORT=127.0.0.1:18983
REDIS_PORT=127.0.0.1:7654
# Ваш часовой пояс
# См. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones для списка часовых поясов
# Используйте строку с именем «Имя базы данных TZ» + обратите внимание на строку «Примечания»
ТЗ=****
# Фиксированное имя проекта
# Пожалуйста, используйте только строчные буквы
COMPOSE_PROJECT_NAME=mailcowdockerized
# Установите для этого параметра значение «разрешить», чтобы включить псевдопользователя any. Отключено по умолчанию.
# Если этот параметр включен, можно создать ACL, который применяется ко «Всем аутентифицированным пользователям».
# Вероятно, это следует активировать только на почтовых хостах, которые используются исключительно одной организацией.
# В противном случае пользователь может поделиться данными со слишком большим количеством других пользователей.
ACL_ANYONE=запретить
# Очистка сборщика мусора
# Удаленные домены и почтовые ящики перемещаются в /var/vmail/_garbage/timestamp_sanitizedstring
# Как долго объекты должны оставаться в мусоре, пока они не будут удалены? (значение в минутах)
# Интервал проверки ежечасно
MAILDIR_GC_TIME=7200
# Дополнительный SAN для сертификата
#
# Вы можете использовать записи с подстановочными знаками для создания определенных имен для каждого домена, который вы добавляете в mailcow.
# Пример: добавьте домены «example.com» и «example.net» в mailcow, измените ADDITIONAL_SAN на значение, подобное:
#ADDITIONAL_SAN=imap.*,SMTP.*
# Это расширит сертификат до «imap.example.com», «smtp.example.com», «imap.example.net», «imap.example.net».
# плюс каждый домен, который вы добавите в будущем.
#
# Вы также можете просто добавить статические имена...
#ADDITIONAL_SAN=srv1.example.net
# …или комбинируйте подстановочные знаки и статические имена:
#ADDITIONAL_SAN=imap.*,srv1.example.com
#
ДОПОЛНИТЕЛЬНАЯ_САН=
# Дополнительные имена серверов для пользовательского интерфейса mailcow
#
# Укажите альтернативные адреса для ответа пользовательского интерфейса mailcow
# Это полезно, когда вы устанавливаете mail.* как ADDITIONAL_SAN и хотите убедиться, что mail.maildomain.com всегда будет указывать на пользовательский интерфейс mailcow.
# Если имя сервера не совпадает с известным сайтом, Nginx принимает решение на основе наилучшего предположения и может перенаправить пользователей на неверный корневой веб-узел.
# Вы можете понимать это как директиву server_name в Nginx.
# Список через запятую без пробелов! Пример: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f
ДОПОЛНИТЕЛЬНЫЕ_ИМЯ_СЕРВЕРА=
# Пропустить запуск ACME (acme-mailcow, сертификаты Let’s Encrypt) – y/n
SKIP_LETS_ENCRYPT=y
# Создать отдельные сертификаты для всех доменов – y/n
# это позволит добавить более 100 доменов, но некоторые почтовые клиенты не смогут подключаться с альтернативными именами хостов
# см. https://wiki.dovecot.org/SSL/SNIClientSupport
ENABLE_SSL_SNI=y
# Пропустить проверку IPv4 в контейнере ACME – y/n
SKIP_IP_CHECK=n
# Пропустить проверку HTTP в контейнере ACME – y/n
SKIP_HTTP_VERIFICATION=n
# Пропустить антивирус ClamAV (clamd-mailcow) (Rspamd автоматически обнаружит отсутствующий контейнер ClamAV) – y/n
SKIP_CLAMD=n
# Пропустить SOGo: отключит интеграцию SOGo и, следовательно, поддержку веб-почты, протоколов DAV и ActiveSync (экспериментальная, неподдерживаемая, не полностью реализованная) — y/n
SKIP_SOGO=n
# Пропустите Solr в системах с малым объемом памяти или если вы не хотите хранить удобочитаемый индекс ваших писем в solr-vol-1.
SKIP_SOLR=n
# Размер кучи Solr в МБ, рекомендации отсутствуют, см. документы Solr.
# Solr склонен к запуску OOM и должен контролироваться. Не рекомендуется использовать неконтролируемые настройки Solr.
SOLR_HEAP = 1024
# Разрешить администраторам входить в SOGo как пользователь электронной почты (без пароля)
ALLOW_ADMIN_EMAIL_LOGIN=n
# Включить сторожевой таймер (watchdog-mailcow) для перезапуска неработоспособных контейнеров
USE_WATCHDOG=y
# Отправлять уведомления сторожевого таймера по почте (отправляемые с адреса watchdog@MAILCOW_HOSTNAME)
# ОСТОРОЖНОСТЬ:
# 1. Вы должны использовать внешних получателей
# 2. Письма отправляются без подписи (без DKIM)
# 3. Если вы используете DMARC, создайте отдельную политику DMARC («v=DMARC1; p=none;» в _dmarc.MAILCOW_HOSTNAME)
# Разрешено несколько rcpts, БЕЗ кавычек, БЕЗ пробелов
#[email protected],[email protected],[email protected]
#WATCHDOG_NOTIFY_EMAIL=
# Уведомлять о заблокированном IP (включая поиск whois)
WATCHDOG_NOTIFY_BAN=n
# Тема для сторожевого письма. По умолчанию используется «Watchdog ALERT», за которым следует сообщение об ошибке.
#WATCHDOG_SUBJECT=
# Проверяет, является ли mailcow открытым ретранслятором. Требуется САЛ. Последуют дополнительные проверки.
# https://www.servercow.de/mailcow?lang=en
# https://www.servercow.de/mailcow?lang=de
# Данные не собираются. Подключенный и анонимный.
# Будет работать только с немодифицированными настройками mailcow.
WATCHDOG_EXTERNAL_CHECKS=n
# Включить подробное ведение журнала сторожевого таймера
WATCHDOG_VERBOSE=n
# Максимальное количество строк журнала на службу для хранения в журналах Redis
LOG_LINES=9999
# Внутренняя подсеть IPv4/24, формат n.n.n (расширяется до n.n.n.0/24)
# Используйте только частные IPv4-адреса, см. https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses
IPV4_NETWORK=172.22.1
# Внутренняя подсеть IPv6 в fc00::/7
# Используйте только частные IPv6-адреса, см. https://en.wikipedia.org/wiki/Private_network#Private_IPv6_addresses
IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
# Используйте этот IPv4 для исходящих соединений (SNAT)
#SNAT_TO_SOURCE=
# Используйте этот IPv6 для исходящих соединений (SNAT)
#SNAT6_TO_SOURCE=
# Создать или переопределить ключ API для веб-интерфейса
# Вы _должны_ определить API_ALLOW_FROM, который представляет собой список IP-адресов, разделенных запятыми.
# Ключ API, определенный как API_KEY, имеет доступ для чтения и записи
# Ключ API, определенный как API_KEY_READ_ONLY, имеет доступ только для чтения
# Допустимые символы для API_KEY и API_KEY_READ_ONLY: a-z, A-Z, 0-9, -
# Вы можете определить API_KEY и/или API_KEY_READ_ONLY
#API_KEY=
#API_KEY_READ_ONLY=
#API_ALLOW_FROM=172.22.1.1,127.0.0.1
# mail_home - это ~/Maildir
MAILDIR_SUB=Почтовый каталог
# Тайм-аут сеанса SOGo в минутах
SOGO_EXPIRE_SESSION=480
# DOVECOT_MASTER_USER и DOVECOT_MASTER_PASS должны быть предоставлены оба. Никаких специальных символов.
# Пусто по умолчанию, чтобы автоматически генерировать главного пользователя и пароль при запуске.
# Пользователь расширяется до [email protected]
# ОСТАВЬТЕ ПУСТОЙ, ЕСЛИ НЕ УВЕРЕНЫ
DOVECOT_MASTER_USER=
# ОСТАВЬТЕ ПУСТОЙ, ЕСЛИ НЕ УВЕРЕНЫ
DOVECOT_MASTER_PASS=
# Давайте зашифруем регистрационную контактную информацию
# Необязательно: оставьте пустым, если нет
# Это значение используется только при первом заказе!
# Чтобы установить его позже, потребуются следующие шаги:
# https://mailcow.github.io/mailcow-dockerized-docs/debug-reset_tls/
ACME_CONTACT=
# Проверка производителя устройства WebAuthn
# После установки WEBAUTHN_ONLY_TRUSTED_VENDORS=y разрешены только устройства проверенных производителей
# корневые сертификаты можно поместить для проверки в mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates
WEBAUTHN_ONLY_TRUSTED_VENDORS=n
Site.conf
Сервер {
Прослушать 80 default_server;
Слушать [::]:80 default_server;
Включить /etc/nginx/conf.d/server_name.active;
Если ($request_uri ~* â%0A|%0Dâ) { return 403; }
Вернуть 301 https://$host$uri$is_args$args;
}
Перенаправление.conf
Сервер {
Корень / сеть;
Прослушать 80 default_server;
Слушать [::]:80 default_server;
Включить /etc/nginx/conf.d/server_name.active;
Если ($request_uri ~* â%0A|%0Dâ) { return 403; }
Местоположение ^~ /.well-known/acme-challenge/ {
Позволять все;
Default_type «текстовый/обычный»;
}
Место расположения / {
Вернуть 301 https://$host$uri$is_args$args;
}
}