Мне для нужд безопасной передачи файлов нужна инструкция, применяя которую я с Ubuntu 18.04 Server
где развернут сервис OpenVPN
смогу передавать файлы устройствам которые будут подключены через OpenVPN
—клиент к моей инфраструктуре за Mikrotik(ом)
которые подключается к OpenVPN
—серверу через USB
—модем + SIM
—карта TELE2.
Т.е. схема такая:
OpenVPN-сервер, генерирую ключи для клиента -> через WebDAV передаю их на собственный OwnCloud-сервер -> на клиенте подключаюсь к OwnCloud-серверу (Приложение или Браузер) и забираю сертификтаы.
В роли устройств могут выступать:
- Windows системы
- Android смартфоны (к примеру Huawei Honor 5C)
- Ubuntu Desktop
Исходные данные:
- Srv-vpn: -> Система
Ubuntu 18.04 Server amd64
которая развернута изTemplate
купленной VPS (на ней же развернут OpenVPN-сервер) - Srv-cloud: -> Система
Ubuntu 18.04 Server amd64
на которой развернутownCloud 10.0.10 (stable)
(172.35.35.6
илиWAN
-адрес)
На вашем OwnCloud
должен уже быть создан каталог у пользователя которого будем монтировать.
Узнать путь по обращению через webdav
для OwnCloud 10.0.10 (stable)
можно открыв URL
страницу: https://IP&DNS – user&pass
(Административный) – Настройки
– и в окне с названием WebDAV
будет URL
строка на подключение:
https://IP&DNS/remote.php/dav/files/ekzorchik/
которую я сейчас и буду использовать на консольное подключение к системе, где у меня роль OpenVPN
-сервера.
где ekzorchik
— это моя учетная запись под которой я авторизуюсь на собственном OwnCloud 10
, как в локальной сети, так из вне.
Шаг №1: Обновляю систему srv-bionic
до самого последнего состояния в рамках текущего релиза:
ekzorchik@srv-vpn:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-vpn:~$ sudo nano /etc/update-manager/release-upgrades Prompt=never ekzorchik@srv-vpn:~$ sudo apt-get update && sudo apt-get upgrade -y ekzorchik@srv-vpn:~$ sudo apt-get autoremove && sudo apt-get autoclean ekzorchik@srv-vpn:~$ sudo reboot ekzorchik@srv-vpn:~$ uname -a && lsb_release -a Linux srv-bionic 4.15.0-60-generic #67-Ubuntu SMP Thu Aug 22 16:55:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionic ekzorchik@srv-vpn:~$
Шаг №2: Устанавливаю пакет davfs2:
ekzorchik@srv-vpn:~$ sudo apt-get install -y davfs2 Should unprivileged users be allowed to mount WebDAV resources? No
- No -> это чтобы только от имени повышения прав через
sudo
можно было взаимодействовать сWebDAV
-ресурсом - Yes -> это чтобы от имени учетной записи локальной системы которая будет входить в группу
davfs2 (sudo usermod -aG davfs2 ekzorchik).
Изменить привилегии взаимодействия с ресурсом WebDAV
можно:
ekzorchik@srv-vpn:~$ sudo dpkg-reconfigure davfs2
Шаг №3: Проверяю, через консоль возможность подключения к WebDAV
ресурсу:
ekzorchik@srv-vpn:~$ sudo mkdir /media/client ekzorchik@srv-vpn:~$ sudo mount -t davfs https://IP&DNS/remote.php/dav/files/ekzorchik/client /media/client -o rw Please enter the username to authenticate with server https://IP&DNS/remote.php/dav/files/ekzorchik/client or hit enter for none. Username: ekzorchik Please enter the password to authenticate user ekzorchik with server https://IP&DNS/remote.php/dav/files/ekzorchik/client or hit enter for none. Password: /sbin/mount.davfs: connection timed out two times; trying one last time /sbin/mount.davfs: server temporarily unreachable; mounting anyway ekzorchik@srv-vpn:~$ ekzorchik@srv-vpn:~$ df -h | grep client https://IP&DNS/remote.php/dav/files/ekzorchik/client 1.3T 763G 509G 61% /media/client ekzorchik@srv-vpn:~$ ekzorchik@srv-vpn:~$ sudo mkdir /media/client/1 mkdir: cannot create directory ‘/media/client/1’: Resource temporarily unavailable
https://IP&DNS/remote.php/dav/files/ekzorchik/client
, где client
это каталог на OwnCloud
хранилище учетной записи ekzorchik
, можно создать, а можно и не создавать, а значит и не указывать при монтировании.
Ресурс не подключен. Т.к. я вспомнил, что данное DNS
-имя remote.ekzorchik.ru
(в качестве примера) – это CNAME
-запись моего внешнего IP
-адреса через который я выхожу в интернет. А раз я в своей локальной сети, то мне нужно указывать внутренний IP
-адрес (172.35.35.6
) сервиса OwnCloud 10:
ekzorchik@srv-vpn:~$ sudo umount /media/client /sbin/umount.davfs: waiting while mount.davfs (pid 605) synchronizes the cache .. OK ekzorchik@srv-vpn:~$ sudo mount -t davfs https://172.35.35.6/remote.php/dav/files/ekzorchik/client /media/client -o rw Please enter the username to authenticate with server https://172.35.35.6/remote.php/dav/files/ekzorchik/client or hit enter for none. Username: ekzorchik Please enter the password to authenticate user ekzorchik with server https://172.35.35.6/remote.php/dav/files/ekzorchik/client or hit enter for none. Password: /sbin/mount.davfs: the server certificate is not trusted issuer: 172.35.35.6 subject: 172.35.35.6 identity: 172.35.35.6 fingerprint: 4c:ba:66:59:71:93:0f:b7:ff:d8:ed:b8:9d:b2:ac:55:49:7f:5d:b3 You only should accept this certificate, if you can verify the fingerprint! The server might be faked or there might be a man-in-the-middle-attack. Accept certificate for this session? [y,N] y /sbin/mount.davfs: warning: the server does not support locks ekzorchik@srv-vpn:~$
Ошибка: «the server does not support locks»
убирается, как редактирование на системе, на которой происходит подключение к WebDAV:
ekzorchik@srv-vpn:~$ sudo nano /etc/davfs2/davfs2.conf # use_locks 1 use_locks 0 ekzorchik@srv-vpn:~$ df -h | grep client https://172.35.35.6/remote.php/dav/files/ekzorchik/client 16E 8.0K 16E 1% /media/client
Проверяю, а вижу ли я содержимое каталога /media/client?:
ekzorchik@srv-vpn:~$ ls /media/client/ ca.crt client2.crt client2.csr client2.key lost+found ekzorchik@srv-vpn:~$ ekzorchik@srv-vpn:~$ sudo umount /media/client /sbin/umount.davfs: waiting while mount.davfs (pid 631) synchronizes the cache .. OK ekzorchik@srv-vpn:~$
Ответ да, вижу файлы, как раз у меня там файлы клиентского сертификата для OpenVPN
-клиента.
На заметку: Если все выше проделывать на системе Ubuntu 18.04 Server
которая не находится в моей локальной сети, то подключение проходит по FQDN
имени.
Шаг №4: Если нужно на постоянку, чтобы OwnCloud
папка была смонтирована, то вот действия:
ekzorchik@srv-vpn:~$ sudo nano /etc/davfs2/secrets https://172.35.35.6/remote.php/dav/files/ekzorchik/client<TAB>ekzorchik<TAB><PASSWORD>
После не забываем сохранить внесенные изменения.
ekzorchik@srv-vpn:~$ sudo nano /etc/fstab https://172.35.35.6/remote.php/dav/files/ekzorchik/client<TAB>/media/client<TAB>davfs<TAB>rw,user,auto<PROBEL>0<PROBEL>0
После не забываем сохранить внесенные изменения.
Монтируем что было предопределено в файле /etc/fstab
сейчас, либо можно перезагрузить систему и в момент, когда она загрузится ресурс будет подключен. Но делает это сейчас дабы распознать какие-либо ошибки:
ekzorchik@srv-vpn:~$ sudo mount -a /sbin/mount.davfs: the server certificate is not trusted issuer: 172.35.35.6 subject: 172.35.35.6 identity: 172.35.35.6 fingerprint: 4c:ba:66:59:71:93:0f:b7:ff:d8:ed:b8:9d:b2:ac:55:49:7f:5d:b3 You only should accept this certificate, if you can verify the fingerprint! The server might be faked or there might be a man-in-the-middle-attack. Accept certificate for this session? [y,N] y ekzorchik@srv-vpn:~$ ekzorchik@srv-vpn:~$ df -h | grep client https://172.35.35.6/remote.php/dav/files/ekzorchik/client 16E 8.0K 16E 1% /media/client ekzorchik@srv-vpn:~$
Ресурс смонтирован.
Но для своего сервера с ролью OpenVPN
я предпочитаю вручную монтировать OwnCloud
каталог, когда это необходимо, либо можно создать отдельного пользователя, указать ему квоту на размер использования и уже его подключать к конечному устройству в момент настройки OpenVPN
-клиента. Что кстати, наверное, будет самым правильным и безопасным вариантом. А то мало ли кто-либо проникнем на сервер с ролью сервера OpenVPN
и получается получит как бы невзначай доступ и к хранилищу, да и узнает про него.
Шаг №5: Если Ваш OwnCloud
—сервис и клиент кто к нему подключается из консоли в Вашей доверенной сети, то нужно отдельно заморочиться для автоматического подключения убрав возможность принятия самоподписанного сертификата:
ekzorchik@srv-vpn:~$ openssl s_client -connect 172.35.35.6:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > certificate.pem ekzorchik@srv-vpn:~$ ls -lh certificate.pem && file certificate.pem -rw-rw-r-- 1 ekzorchik ekzorchik 1.1K Sep 26 12:58 certificate.pem certificate.pem: PEM certificate ekzorchik@srv-vpn:~$ ekzorchik@srv-vpn:~$ sudo cp certificate.pem /etc/davfs2/certs/ ekzorchik@srv-vpn:~$ sudo nano /etc/davfs2/davfs2.conf # trust_server_cert trust_server_cert<TAB>/etc/davfs2/certs/certificate.pem
После не забываем сохранить внесенные изменения.
Проверяем:
ekzorchik@srv-vpn:~$ sudo umount /media/client /sbin/umount.davfs: waiting while mount.davfs (pid 689) synchronizes the cache .. OK ekzorchik@srv-vpn:~$ sudo mount -a ekzorchik@srv-vpn:~$ df -h | grep client && ls -lh /media/client https://172.35.35.6/remote.php/dav/files/ekzorchik/client 16E 8.0K 16E 1% /media/client total 11K -rw-r--r-- 1 root root 1.8K Sep 26 10:50 ca.crt -rw-r--r-- 1 root root 5.4K Sep 26 10:49 client2.crt -rw-r--r-- 1 root root 1.1K Sep 26 10:50 client2.csr -rw-r--r-- 1 root root 1.7K Sep 26 10:49 client2.key drwx------ 2 root root 0 Sep 26 12:11 lost+found ekzorchik@srv-vpn:~$
Вот теперь без каких-либо вопросов касательно того факта что на сервере где поднят сервис OwnCloud
стоит самоподписанный сертификат. Все работает. Итого ранее разобранная заметка «Подключение через webdav к OwnCloud” была доработана и приобщена к практическому делу по передачи клиентских сертификатов на конечное устройство с целью организации OpenVPN
соединений, а в Вашем случае под Ваши задачи.
На заметку: от 09.10.2019
При монтировании не нужно указывать каталог .. openvpn/client /media/client
после имени учетной записи, частенько пишет что ресурс не доступен, а если просто корень то проблем нет. Вот такое вот наблюдение.
На Вашем купленном сервере, VPS
-система, к примеру купленная здесь (https://cloudlite.ru/?from=4116 и промо-код CloudLITE4116
чтобы еще сэкономить.) следует указать вместо 172.35.35.6 – FQDN
имя Вашего сервиса OwnCloud
(если он у Вас есть и доступен через интернет) и заменить логин ekzorchik
на свой.
На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.