Раздел помощи SpaceWeb

Создание изолированной среды для Nextcloud

21 мар, 2024

В следующей статье мы создадим изолированный от внешней сети инстанс Nextcloud, который будет доступен только из под VPN по IP-адресу. Подобное решение повышает безопасность хранимых данных.

Подготовка

Для реализации этого решения нам потребуются следующие ресурсы:

Первым делом необходимо создать два сервера. Для Nextcloud и OpenVPN у нас уже имеются готовые решения, которые можно выбрать при заказе услуг. Доступы к серверам поступят после заказа.

Чтобы создать изолированную среду, нам потребуется соединить оба сервера в одну локальную сеть. Включить сервера в локальную сеть можно как во время создании новой услуги VPS (для этого нужно отметить соответствующую опцию при создании услуги), так и уже вручную после её заказа. Для настройки вручную можно воспользоваться следующей инструкцией.

Настройка OpenVPN

OpenVPN по умолчанию уже настроен, какую-либо настройку производить не требуется. Если же нужно внести какие-либо изменения, то можно воспользоваться инструкцией.

Настройка Nextcloud

Дальнейшая настройка производится на сервере с Nextcloud.

  1. Сначала нужно выпустить самоподписанный сертификат для сервиса. Подключитесь к серверу по SSH и выполните команду:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt

Данные могут указываться любые, но в Common Name рекомендуется указать локальный IP-адрес сервера.

  1. Так как доступ будет осуществляться по IP-адресу, необходимо убрать упоминания домена по умолчанию. Первым делом нужно удалить символьную ссылку /etc/nginx/sites-enabled/default
unlink /etc/nginx/sites-enabled/default

В файле виртуального хоста nginx по пути /etc/nginx/sites-available/nextcloud внесите следующие изменения:

  • во всех директивах server_name замените тестовый домен на локальный IP-адрес сервера;

  • в директивах ssl_certificate и ssl_certificate_key пропишите пути до ранее сгенерированных сертификатов:

ssl_certificate /etc/ssl/certs/nextcloud-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nextcloud-selfsigned.key;
  • В директивах перенаправления на https версию сайта замените указанный домен на локальный IP-адрес сервера:

if ($host = 10.0.0.99) {
return 301 https://$host$request_uri;
}
  1. Далее нужно прописать локальный IP-адрес вашего сервера в конфигурационном файле самого Nextcloud по пути /var/www/nextcloud/config/config.php. В Trusted Domains замените технический домен на локальный IP-адрес сервера.
  2. Последним этапом является отключение сервера Nextcloud от внешней сети. Сделать это можно в настройках сетевой карты.

В ОС Ubuntu это делается в файле /etc/netplan/50-cloud-init.yaml

Закомментируйте все строки интерфейса ens3, оставив только локальный интерфейс ens4:

network:  
    ethernets:  
        #ens3:  
            #addresses:  
            #- 77.222.60.8/24  
            #- 2a02:408:7722:54:77:222:60:8/64  
            #gateway4: 77.222.60.1  
            #gateway6: 2a02:408:7722:54::1  
            #nameservers:  
                #addresses:  
                #- 8.8.8.8  
                #- 8.8.4.4  
                #- 2001:4860:4860::8888  
                #- 2001:4860:4860::8844  
                #search: []  
            #optional: true
             ens4:
            addresses:
            - 10.0.0.99/27
  1. Сохраните файл и выполните команду
netplan generate
  1. Перезагрузите сервер.

Готово, теперь сервер доступен по локальному IP-адресу, при этом для доступа потребуется предварительно подключиться к серверу OpenVPN.

Использование домена вместо IP-адреса для подключения к Nextcloud

Если нужно, чтобы доступ к Nextcloud был по определенному домену (например, nextcloud.example.ru), то вместо локального IP-адреса при настройке потребуется везде указывать данный домен.

Чтобы работал резолвинг данного домена внутри сети, нужно на обоих серверах добавить следующую запись в файл /etc/hosts:

10.0.0.99 nextcloud.example.ru

где вместо 10.0.0.99 указывается локальный IP адрес сервера Nextcloud, а вместо nextcloud.example.ru - ваш домен.

Данный домен необязательно должен существовать, так как резолвинг будет происходить локально.