Использование mailcow-dockerized с докеризованным Apache2.4 - PullRequest
0 голосов
/ 28 апреля 2018

Я не могу установить соединение из моего докеризованного Apache2.4 с почтовым докеризированным веб-интерфейсом. Конкретная ошибка Apache:

В соединении отказано: AH00957: HTTPS: попытка подключиться к 127.0.0.1:8443 (127.0.0.1) не удалось

У нас есть: 2 файла docker-compose. 1. Mailcow (mailcow-dockerized), 2. apache-letsencrypt (образ enoniccloud / apache2-letsencrypt)

Мы хотим: Использование Apache2.4 в качестве обратного прокси-сервера для веб-интерфейса mailcow-dockerized + использование Apache2.4 в качестве веб-сервера для веб-сайта.

Дополнительная информация: Интерфейс Mailcow может быть доступен, когда Apache2.4 не запущен, а привязки в его конфигурации установлены по умолчанию.

Docker-Compose контейнер apache-letsencrypt:

version: '2.1'
services:
  apache2:
    build: apache2
    hostname: root.yyy.com
    restart: always
    volumes_from:
      - letsencryptstore
    volumes:
      - /var/www/html:/var/www/html
    ports:
      - "80:80"
      - "443:443"
    expose:
      - "8080"
      - "8443"
    environment:
      LETS_ENCRYPT_EMAIL: "xyz@yahoo.de"
      LETS_ENCRYPT_DOMAINS: "root.yyy.com,mail2.yyy.com"
    labels:
      io.enonic.backup.data: "/etc/letsencrypt,/var/lib/letsencrypt"
    networks:
      - mailcowdockerized_mailcow-network
  letsencryptstore:
    image: busybox
    volumes:
      - "/etc/letsencrypt"
      - "/var/lib/letsencrypt"

networks:
  mailcowdockerized_mailcow-network:
    external: true

Конфигурация Apache:

<VirtualHost *:80>
    ServerName root.yyy.com
    DocumentRoot /var/www/html/

    RewriteEngine on
    RewriteRule ^/(.*) https://root.yyy.com/$1 [L,R=301]

</VirtualHost>

<VirtualHost *:80>
    ServerName mail2.yyy.com
    RewriteEngine on
    RewriteRule ^/(.*) https://mail2.yyy.com/$1 [L,R=301]
</VirtualHost>

<VirtualHost *:443>
    ServerName mail2.yyy.com
    ServerAlias autodiscover.mail2.yyy.com
    ServerAlias autoconfig.mail2.yyy.com

    # You should proxy to a plain HTTP session to offload SSL processing
    ProxyPass / https://127.0.0.1:8443/
    ProxyPassReverse / https://127.0.0.1:8443/

    ProxyPreserveHost On
    ProxyAddHeaders On

    # This header does not need to be set when using http
    RequestHeader set X-Forwarded-Proto "https"

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/certs/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/certs/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/certs/chain.pem

    RequestHeader set X-Forwarded-Proto "https"
    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

<VirtualHost *:443>
    ServerName root.yyy.com
    DocumentRoot /var/www/html/
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/certs/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/certs/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/certs/chain.pem

    RequestHeader set X-Forwarded-Proto "https"
    Header always set Strict-Transport-Security "max-age=15768000"

</VirtualHost>

SSLProtocol all -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on

SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)

Mailcow-Config:

# ------------------------------
# mailcow web ui configuration
# ------------------------------
# example.org is _not_ a valid hostname, use a fqdn here.
# Default admin user is "admin"
# Default password is "moohoo"
MAILCOW_HOSTNAME=mail2.yyy.com

# ------------------------------
# SQL database configuration
# ------------------------------
DBNAME=mailcow
DBUSER=mailcow

# Please use long, random alphanumeric strings (A-Za-z0-9)
DBPASS=RdnvlN1CXSAHA98CVz4sYUgfrMuF
DBROOT=Ve91gtedyLa8xGJf6sXNmMcNzFUp

# ------------------------------
# HTTP/S Bindings
# ------------------------------

# You should use HTTPS, but in case of SSL offloaded reverse proxies:
HTTP_PORT=8080
HTTP_BIND=127.0.0.1

HTTPS_PORT=8443
HTTPS_BIND=127.0.0.1

Остальная часть конфигурации по умолчанию.

Включены моды для Apache proxy, proxy_balancer, proxy_http.

Помощь будет высоко ценится:)

1 Ответ

0 голосов
/ 11 мая 2018

На моем веб-сервере Ubuntu 16 установлен Docker для Mailcow Nginx

Единственное отличие, которое я имею от вашей настройки, - это HTTP_BIND: Моя выглядит так:

HTTP_PORT=8080
HTTP_BIND=0.0.0.0

HTTPS_PORT=8443
HTTPS_BIND=0.0.0.0

Я установил привязки только на 0.0.0.0, чтобы я мог получить доступ к своему почтовому серверу через порт 8080 или 8443 с любого IP-адреса в случае, если мой веб-сервер apache не работает.

mail.domain.com-le-ssl.conf [сгенерировано посредством шифрования]

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mail.example.com

    ProxyPass / http://example.com:8080/

    ProxyPreserveHost On

SSLCertificateFile /etc/letsencrypt/live/mail.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Моя конфигурация виртуального хоста apache2 для обратного прокси: mail.example.com.conf

<VirtualHost *:80>
    ServerName mail.example.com

    ProxyPass / http://example.com:8080/

    ProxyPreserveHost On

RewriteEngine on
RewriteCond %{SERVER_NAME} =mail.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Обратите внимание, что мой исходный файл конфигурации apache2:

<VirtualHost *:80>
    ServerName mail.example.com

    ProxyPass / http://example.com:8080/

    ProxyPreserveHost On

</VirtualHost>

Поскольку мне не нужно ssl-шифрование между apache и nginx, правило перезаписи было добавлено, когда я установил давайте зашифруем сертификат на почтовом сервере apache для mail.example.com.

Мне нравится и используется только веб-клиент SOGo, поэтому мне не нужен почтовый ssl-сертификат. Если вы собираетесь использовать внешний почтовый клиент, то вы можете рассмотреть возможность указания файла сертификата Mailcow ssl на файлы, созданные encrypt-apache2

Другими словами: [Мне] --- SSL: 443 ---> [mail.example.com] - локальный -> http://example.com:8080/

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

Возможно http://localhost.com:8080/ тоже будет работать.

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

Пожалуйста, дайте мне знать, если вам нужна информация о моей настройке.

Это учебные пособия и документация, за которыми я следовал, чтобы запустить их.

https://www.digitalocean.com/community/tutorials/how-to-use-apache-as-a-reverse-proxy-with-mod_proxy-on-ubuntu-16-04

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04

https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04

https://mailcow.github.io/mailcow-dockerized-docs/firststeps-rp/

https://www.youtube.com/watch?v=VsiYowuiT6A&t=389s

https://www.youtube.com/watch?v=A3Prx_2YEm8&t=62s

...