Есль локальный web сервер (в нашем случае это NextCloud), необходимо его опубликовать через Sophos UTM по HTTPS с использование Let’s Encrypt
Из-за того что на текущий момент Sophos UTM официально не имеет инструментов для автоматической генерации сертификатов Let’s Encrypt, то мы будем использовать подмену сертификата. Итак приступим.
Что мы имеем:
Шлюз Sophos UTM — 192.168.10.1
Web сервер (NextCloud) — 192.168.10.71
Web сервер с LEMP на борту на базе FreeBSD 10 и несущий NextCloud на боту мы настраивали ранее, и все конфиги nginx мы будем использовать оттуда.
Схема подключения следующая:
Приступим:
1) Скачиваем промежуточный сертификат https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
2) Заходим в WebUi Sophos UTM и переходим по «Webserver Protection > Certificate Management > Certificate Authority > New CA…»
3) Добавляем скаченный сертификат как CA
4) Создаем новое правило для Firewall разрешающие соединение по SSH между шлюзом и Web сервером. В WebUi Sophos UTM переходим «Network Protection > Firewall > New Rule…» И вносим следующие настройки:
• Sources: ваш сервер Sophos UTM
• Services: сервис SSH (22 порт)
• Destinations: ваш webserver
• Сохраняем и включаем.
5) Подключаемся через SSH к нашему серверу Sophos UTM ( Как включить shell вы можете прочитать ЗДЕСЬ)
6) Скачиваем все необходимые скрипты и конфиги:
sudo su - cd /root wget https://raw.githubusercontent.com/srvrco/getssl/master/getssl --no-check-certificate wget https://raw.githubusercontent.com/rklomp/sophos-utm-letsencrypt/master/update-cert --no-check-certificate wget http://web.mit.edu/crypto/openssl.cnf chmod +x getssl chmod +x update-cert
7) Так как создать сертификат с нуля для Let’s Encrypt нельзя, а можно только заменить. То мы сначала создам болванку. Для это нам потребуется зайти «Webserver Protection > Certificate Management > Certificates > New Certificate…»
8) И создаем болванку которую потом мы будем потом подменять:
9) Возвращаемся в консоль SSH:
cc 127.0.0.1 MAIN > OBJS 127.0.0.1 OBJS > ca 127.0.0.1 OBJS ca > host_key_cert 127.0.0.1 OBJS ca host_key_cert >
Два раза нажимаем TAB и мы видим список всех сертификатов:
10) Выписываем (ну или запоминаем) REF сертификата который мы создали выше (в нашем случае это REF_kPsiGwrpNkhh[yoursite.com,ca,host_key_cert])
11) Набираем exit выходим
12) Создаем конфиги:
./getssl -c yourdomain.ru vi ~/.getssl/getssl.cfg
В этом файле редактируем строчки:
ACCOUNT_EMAIL=<Ваш рабочий email> SSLCONF="/root/openssl.cnf"
Сохраняем и выходим.
Редактируем файл конфигурации домена:
vi ~/.getssl/yourdomain.ru/getssl.cfg
В строчке «RELOAD_CMD=» прописываем REF сертификата который мы смотрели выше:
RELOAD_CMD="/root/update-cert yourdomain.ru REF_CaHosLetsEncrypt"
Редактируем строчку «ACL=» и приводим её к виду:
$ ACL=('ssh:root@192.168.10.71:/var/www/yourdomain.ru/letsencrypt/.well-known/acme-challenge')
Где root — это пользователь Web сервера, а 192.168.10.71 его IP.
Шлюз будет автоматически подключаться к Web серверу по SSH и ложить в заданную папку файл ответа (Ещё можно передачу файлов настроить через FTP, но мы ее не будем рассматривать).
На сервере Sophos UTM генерируем ключ SSH и передаем его на Web Server:
ssh-keygen ssh-copy-id root@192.168.10.71
Вводим пароль от пользователя root (или другого, зависит от того кого вы задали владельцем папки на Web сервере) и ждем положительного ответа что ключи перенеслись.
13) На Web Server необходимо поправить файлы конфигурации и проверить доступность папки. В нашем случае мы возьмем за основу конфигурацию файла из ранее установленного и настроенного сервера nginx под NextCloud, и добавим необходимые настройки:
server { listen 80; charset utf-8; server_name yoursite.com; # Add headers to serve security related headers # Before enabling Strict-Transport-Security headers please read into this # topic first. add_header Strict-Transport-Security "max-age=15552000; # includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; # Path to the root of your installation root /var/www/nextcloud/; location = /robots.txt { allow all; log_not_found off; access_log off; } # The following 2 rules are only needed for the user_webfinger app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/host-meta /public.php?service=host-meta last; #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json # last; location ~ /.well-known { location = /.well-known/acme-challenge/* { allow all; } } location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } # set max upload size client_max_body_size 10250M; fastcgi_buffers 64 4K; # Disable gzip to avoid the removal of the ETag header gzip off; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location / { rewrite ^ /index.php$uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_request_buffering off; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } # Adding the cache control header for js and css files # Make sure it is BELOW the PHP block location ~* \.(?:css|js|woff|svg|gif)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=7200"; # Add headers to serve security related headers (It is intended to # have those duplicated to the ones above) # Before enabling Strict-Transport-Security headers please read into # this topic first. # add_header Strict-Transport-Security "max-age=15768000; # includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; # Optional: Don't log access to assets access_log off; } location ~* \.(?:png|html|ttf|ico|jpg|jpeg)$ { try_files $uri /index.php$uri$is_args$args; # Optional: Don't log access to other assets access_log off; } }
(Если в вашем файле конфигурации сервера есть блок для запрета открытия файлов, начинающихся с точки, то нужно вставлять блок с .well-known ДО НЕГО, иначе при попытке зайти в браузере по адресу yourdomain.ru/.well-known/acme-challenge, вы будете получать 403 ошибку (так как запрещено открытие папок, начинающихся с точки))
Далее создаем все необходимые папки и раздаем права:
mkdir -p /var/www/nextcloud/.well-known/acme-challenge chown -hR www:www /var/www/nextcloud/.well-known/acme-challenge service nginx restart
Создаем файл для тестирования доступа папки:
echo "Hello world" > /var/www/nextcloud/.well-known/acme-challenge/index.html chown -hR www:www /var/www/nextcloud/.well-known/acme-challenge/index.html
И для проверки открываем браузер и вбиваем свой домен:
http://yourdomain.ru/.well-known/acme-challenge/index.html
Если вы увидели «Hello world» то все в порядке и можно двигаться дальше, если нет, то надо разбираться в чём дело двигаться дальше смысла нет.
13) В консоли Sophos UTM получаем сертификат и подменяем болванку:
Если вы увидели похожую картинку как на скриншоте движемся дальше, если нет, то возвращаемся назад и все перепроверяем и пробуем ещё раз.
14) Заканчиваем настройку:
vi ~/.getssl/yourdomain.ru/getssl.cfg
Расскоментируем строчку:
CA="https://acme-v01.api.letsencrypt.org"
Запускаем:
./getssl -f yourdomain.ru
Если опять увидели надпись Done! То Вас можно поздравить теперь у вас есть сертификат Let’s Encrypt и можно перенастроить публикацию Web Server на https.
16) Заходим в WebUi Sophos UTM, переходим «Webserver Protection > Web Application Firewall > Virtual Webservers» выбираем наш опубликованный сервер и редактируем его (Если у вас сервер еще не опубликован, то я вообще удивляюсь как вы смогли дойти до сюда и получить сертификат. Но всякое бывает и почитать инструкцию о публикации Webserver через Sophos UTM можно ТУТ).
Меняем:
Type: на Encrypted (HTTPS)
Certificate: выбираем ранее созданный.
17) Заходим в браузер заходим на наш опубликованный сайт, и мы должны увидеть вот это:
18) Возвращаемся в консоль Sophos UTM и редактируем cron:
crontab -e 0 0 * * * /root/getssl yourdomain.ru
19) А вот теперь все, можно пользоваться) Сертификат будет обновляться сам.