Создание интрасети с помощью OpenVPN в Ubuntu 16.04

Интранет (или интрасеть) – это частная сеть, созданная для облегчения обмена данными. Интранет собирается путем подключения нескольких сетей по всему миру для создания новой виртуальной сети. Пользователи, подключенные к интрасети, могут получить доступ к определенным внутренним веб-сайтам или получить доступ к другим сетевым сервисам и контенту. Например, если внештатный сотрудник хочет получить доступ к конфиденциальной информации, расположенной в основной сети своего работодателя, он подключится к VPN-серверу, расположенному в основной сети офиса. Это VPN-соединение создаст безопасный туннель между сотрудником и офисом. В сети соединение сотрудника будет выглядеть так, как если бы они были локально подключены к основной сети.

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

Требования

  • Свежий сервер Ubuntu 16.04, настроенный по этому мануалу.
  • Установленная платформа OpenVPN. Предполагается, что VPN-сервер расположен на IP-адресе 10.8.0.1, и что вы можете подключиться к VPN с вашего локального компьютера.
  • Зарегистрированное доменное имя и соответствующие DNS-записи. В этом мануале используется условный домен example.com. Больше информации можно найти в мануале Как настроить имя хоста.
  • Веб-сервер Apache и два виртуальных хоста – для example.com и intranet.example.com, со стандартной HTML-страницей для каждого (читайте мануал Настройка виртуальных хостов Apache в Ubuntu 16.04).

1: Установка и настройка файлового сервера Samba

Начнем с настройки Samba, чтобы люди в интрасети могли делиться файлами. Samba отличается от других приложений для обмена файлами, таких как Dropbox, тем, что у него нет веб-интерфейса и какого-либо ограничения на хранение. Кроме того, вам не нужно будет загружать свои данные на внешние серверы, которые вы не контролируете.

Создайте два общих каталога. Первый каталог будет доступен всем пользователям в частной сети. Второй каталог будет доступен только определенным пользователям. Назовите эти каталоги Allusers и Restricted соответственно.

Сначала установите сервер Samba и его зависимости:

sudo apt-get install samba samba-common python-glade2 system-config-samba

Создайте резервную копию конфигурационного файла Samba (чтобы можно было откатить изменения в случае ошибки).

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Также нужно открыть порт Samba в брандмауэре:

sudo ufw allow samba

Теперь создайте общие каталоги.

sudo mkdir -p /samba/allusers
sudo mkdir -p /samba/restricted

Затем отредактируйте конфигурационный файл Samba:

sudo nano /etc/samba/smb.conf

Удалите из файла все и добавьте туда новые параметры. Сначала укажите глобальные параметры сервера Samba. Добавьте в файл конфигурации следующие строки:

[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no
interfaces = 10.8.0.1/8
bind interfaces only = yes

  • Параметр workgroup определяет рабочую группу, в которой сервер будет отображаться при запросе клиентов. Группа по умолчанию – WORKGROUP (для Windows), но вы можете изменить ее, если у вас уже есть имя рабочей группы, которое вы используете.
  • Строки server string и netbios задают имя сервера Samba и платформу соответственно.
  • Параметр security указывает, что это будет автономный файловый сервер со своими учетными записями пользователей. Опция map to guest воспринимает все логины с недопустимым именем пользователя или паролем в качестве гостевых пользователей, а параметр dns proxy отключает разрешение доменов (так как для этой интрасети собственный DNS не запускается).
  • Параметр interfaces определяет интерфейсы, которые прослушивает сервер. В данном случае это будет IP-адрес VPN-сервера, а не внешний IP-адрес. Опция bind interface прослушивает только запросы, исходящие из VPN.

Теперь нужно добавить параметры логирования Samba. Добавьте эти строки в раздел [global].

[global]
...
## Logging
log level = 2
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes

Параметр log level определяет уровень детализации логов. Есть уровни от 1 до 10, но в данном случае используется уровень 2. Параметр log file определяет путь к файлу и имя лога, а max log size ограничивает размер лога. Параметр debug timestamp включает метки времени в логе.

Глобальные параметры указаны. Теперь нужно добавить параметры общего доступа. Эти параметры определяют файлы, которые нужно расшарить, и пользователей, у которых будет доступ к этим файлам.

В данной настройке будет два общих каталога – Allusers и Restricted. Сначала добавьте настройки для каталога Allusers. Пользователи смогут просматривать, записывать и читать файлы в /samba/allusers. Добавьте эту конфигурацию в файл:

#============ Share Defenitions ==================
[Allusers]
path = /samba/allusers
browsable = yes
writable = yes
guest ok = yes
read only = no
force user = nobody

Блок [Allusers] указывает, что приведенные ниже настройки применимы только к общей папке Allusers. Он также определяет имя общего ресурса, который будут видеть пользователи. Параметр path указывает путь к каталогу, который будет расшарен в интрасети. Параметры browsable и writable со значением yes дают пользователям разрешение на просмотр, чтение и запись файлов в этом каталоге.

Нужно, чтобы все пользователи получили доступ к этому ресурсу, даже если у них нет учетной записи пользователя на сервере. Помните, что в глобальном разделе указан параметр map to guest, что означает, что пользователи, у которых нет учетной записи или валидных учетных данных, могут по-прежнему обращаться к файлам, открытым для гостей. Гости могут получить доступ к общим файлам благодаря параметру guest ok со значением yes; после этого пользователь идентифицируется как nobody с помощью опции force user = nobody.

Группа пользователей nobody – группа по умолчанию в любой системе Linux. Вы можете установить необходимые права на каталог /samba/allusers для пользователя nobody. Затем сервер Samba позволит нескольким гостям использовать этот идентификатор. Таким образом, вы сможете легко управлять доступом гостей к системе.

Больше о пользователе nobody можно узнать в вики Ubuntu.

Теперь создайте параметры для общего каталога Restricted, который будет доступен только членам группы smbrestricted.

[Restricted]
path = /samba/restricted
valid users = @smbrestricted
guest ok = no
writable = yes
browsable = yes

Снова раздел начинается с указания каталога, который нужно расшарить. Затем предоставляются права на просмотр и запись – так же, как с общим ресурсом allusers. Затем идет параметр valid users = @smbrestricted, благодаря которому Samba открывает доступ к каталогу членам группы smbrestricted. Позже нужно создать эту группу.

Файл готов. В итоге он должен выглядеть так:

[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no
interfaces = 10.8.0.1/8
bind interfaces only = yes
## Logging
log level = 2
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes
#============ Share Defenitions ==================
[Allusers]
path = /samba/allusers
browsable = yes
writable = yes
guest ok = yes
read only = no
force user = nobody
[Restricted]
path = /samba/restricted
valid users = @smbrestricted
guest ok = no
writable = yes
browsable = yes

2: Настройка доступа к общим каталогам

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

Для начала создайте группу smbrestricted:

sudo addgroup smbrestricted

Теперь создайте аккаунт пользователя и добавьте его в эту группу (в руководстве пользователь называется client1).

sudo useradd client1 -G smbrestricted

После этого нужно создать пароль Samba для client1. Согласно созданной ранее настройке, Samba использует собственную систему проверки учетных данных, которая отделена от системы проверки Linux. Это хорошо, потому что так вы сможете создавать пользователей, у которых будет доступ к общим папкам Samba, не предоставляя им доступ к входу в систему.

Установите пароль Samba для client1:

sudo smbpasswd -a client1

Примечание: Если в системе есть пользователи, которым также нужен доступ к общим ресурсам Samba, вы должны создать пароль Samba для этих пользователей, так как их текущие учетные данные не подойдут согласно этой конфигурации.

Теперь нужно определить права на каталоги, которые будут расшарены. Для начала определите права на allusers:

sudo chmod -R 766 /samba/allusers
sudo chown -R nobody:nogroup /samba/allusers

Это предоставляет владельцу каталога все права на него, остальные члены группы получают только разрешения на чтение и запись. Затем команда chown изменяет владельца и группу каталога на nobody:nogroup.

Однако есть небольшая проблема с изменением владельца и группы на nobody:nogroup. Команда chmod -R 766 предоставляет права на чтение и запись только текущих и новых файлов и каталогов в каталоге /samba/allusers, независимо от того, кто создал эти файлы или каталоги. Это означает, что как только вы попытаетесь создать новый файл внутри папки, расположенной в /samba/allusers, вы получите ошибку «недостаточно прав». Помните, что когда вы работаете в рамках Allusers, вы используете nobody, а права этого пользователя сильно ограничены.

Чтобы устранить эту проблему, используйте списки контроля доступа (ACL). Правила ACL позволяют автоматически присваивать пользователям и группам права на новые файлы и каталоги.

Задайте правила ACL для /samba/allusers  с помощью команд:

sudo setfacl -dm g:nogroup:rw /samba/allusers/
sudo setfacl -dm u:nobody:rw /samba/allusers/

Команда setfacl -dm определяет новые правила разрешений для каталога или файла, а в будущем эти разрешения должны применяться и к новым объектам. g:nogroup:rw и u:nobody:rw – это новые правила ACL, предоставляющие разрешения на чтение и запись для пользователя nobody и членов группы nogroup.

Больше информации об ACL можно найти в вики Ubuntu.

Теперь можно установить права на каталог restricted:

sudo chmod -R 770 /samba/restricted
sudo chown root:smbrestricted /samba/restricted

На этот раз команда полностью блокирует доступ к этому каталогу, за исключением владельца и членов группы smbrestricted. Здесь не нужно устанавливать правила ACL, потому что функции разрешений обычно находятся в этой общей папке (поскольку тут используются только аутентифицированные учетные записи пользователей).

Перезапустите сервер Samba, чтобы обновить настройки:

sudo service smbd restart

3: Подключение к серверу Samba с клиента

Цель интранета – доступ и совместное использование файлов в безопасной среде, как если бы пользователи были подключены к основной сети. Когда клиент подключается к Samba, он монтирует каталоги общего доступа в проводнике файлов этого клиента. Давайте протестируем это.

Подключение в Windows

Откройте Windows Explorer. В панели навигации введите адрес сервера Samba, \\10.8.0.1, и нажмите Enter.

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

Обратите внимание: новая точка подключения к сети создается во вкладке Network в панели быстрого доступа Quick access. Имя точки монтирования – 10.8.0.1, то же, что и IP VPN.

Вы получаете доступ к ресурсу Allusers так же, как и к любой другой папке, поскольку никаких учетных данных для этого не требуется. Просто дважды щелкните папку, чтобы просмотреть ее содержимое.

Чтобы получить доступ к ограниченному ресурсу Restricted, дважды щелкните папку с именем Restricted. Появится всплывающее окно Windows Security, в котором говорится, что для получения доступа необходимы учетные данные сети.

Введите имя пользователя и пароль созданного вами пользователя и, при необходимости, установите флажок, чтобы запомнить свои учетные данные. Затем нажмите «ОК», чтобы подключиться.

После соединения вы можете создавать файлы и каталоги или даже загружать их на свою машину.

Подключение в Ubuntu

Чтобы подключиться в системе Ubuntu, откройте проводник файлов и выберите Connect to Server в панели слева. Это откроет новый экран, на котором можно ввести адрес сервера.

Введите smb://10.8.0.1/ и нажмите Connect в нижнем правом углу. Вашему ПК может потребоваться несколько секунд для подключения к серверу в зависимости от скорости соединения. Когда вы подключитесь, появится экран, показывающий все общие каталоги на сервере.

Чтобы получить доступ к каталогу Allusers, просто дважды щелкните по папке. Появится экран входа в систему с запросом имени пользователя и пароля. Каталог Allusers не требует учетных данных, поэтому можно выбрать Anonymous в опции Connect As. Нажмите Connect, чтобы открыть папку общего доступа.

Обратите внимание, как эти общие каталоги монтируются в вашей файловой системе после того, как вы получили к ним доступ. Каталог Allusers монтируется как сетевой диск вместе с другими локальными дисками.

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

Чтобы получить доступ к ресурсу с ограниченным доступом Restricted, необходимо ввести правильное имя пользователя и пароль. Дважды нажмите на каталог Restricted, снова появится экран входа в систему. В Connect As выберите Registered User и введите имя пользователя и пароль, оставив параметр Domain без изменений. Затем нажмите Connect, и вы сможете получить доступ к общим файлам.

Подключение в Mac

Чтобы подключиться из системы Mac, откройте Finder, выберите меню Go и Connect to Server…. Затем укажите smb://10.8.0.1/ в Server Address.

Остальная часть процесса подключения идентична процессу Linux или Windows. Вам будет предложено ввести имя пользователя и пароль, а также просмотреть и подключиться к доступным каталогам.

4: Настройка доступа к виртуальным хостам Apache

Согласно требованиям мануала вы создали два виртуальных хоста. Первый хост, example.com, будет доступен всем пользователям. Это может быть основной публичный веб-сайт. Второй хост, intranet.example.com, будет доступен только клиентам, подключенным к интрасети.

Чтобы ограничить доступ к intranet.example.com, отредактируйте виртуальный хост /etc/apache2/sites-available/intranet.example.com.conf:

sudo nano /etc/apache2/sites-available/intranet.example.com.conf

Измените декларацию VirtualHost:

<VirtualHost *:80>

так:

<VirtualHost 10.8.0.1:80>

До этого изменения Apache обслуживает запросы для internal.example.com на всех сетевых интерфейсах. После этого изменения он обслуживает запросы только на интерфейсе интрасети. Это похоже на конфигурацию, которую вы использовали для Samba.

Сохраните и закройте файл.

Перезапустите Apache:

sudo systemctl restart apache2

Также для правильной работы Apache необходимо открыть соединения в UFW. Если вы еще этого не сделали, выполните эту команду, чтобы пропустить трафик Apache через брандмауэр:

sudo ufw allow http

Если вы хотите разрешить HTTPS-трафик, введите команду:

sudo ufw allow https

5: Настройка доменов

На этом этапе нужно настроить доменное имя для перенаправления трафика интрасети, а также для обслуживания общедоступного веб-сайта. Согласно требованиям этого мануала, вы должны были направить свое доменное имя на серверы имен.

С помощью панели управления вашего DNS-провайдера откройте параметры сети.

Добавьте свой домен, укажите внешний IP-адрес сервера интрасети.

Убедитесь, что домен был добавлен.

Для этого домена нужны три записи: одна для интрасети и две – для корректного разрешения запросов веб-сайта.

Сначала создайте запись А для интранета.

В поле Name укажите intranet, а в поле IP – внутренний IP-адрес сервера (10.8.0.1).

Теперь нужно создать запись А, которая направляет трафик в нужное место. Создайте еще одну запись A, установите для нее имя @ и укажите внешний IP-адрес сервера.

Затем создайте запись CNAME для www. укажите имя www и введите домен (example.com) как Hostname.

А-запись intranet направляет запросы на intranet.example.com только в том случае, если они исходят от VPN-сервера. Это означает, что только клиенты, подключенные к VPN, смогут получать доступ к контенту, размещенному на intranet.example.com. Вторая запись А и CNAME направляют трафик, который не имеет доступа к интрасети, на общедоступный веб-сайт.

Примечание: Обновление настроек DNS может занять до 72 часов.

Откройте браузер и посетите сайт http://intranet.example.com, не подключившись к VPN. Вы должны увидеть, что ваш браузер пытается загрузить веб-страницу только для возврата ошибки. Теперь подключитесь к VPN и перезагрузите веб-страницу. Теперь вы можете получить доступ к веб-странице, поскольку запись DNS будет разрешена.

6: Управление доступом к интрасети

Последний раздел мануала посвящен управлению доступом к интрасети и ее общим файлам. Вы узнаете, как отозвать сертификаты клиентов для доступа к VPN, как удалить пользователей из группы smbrestricted, добавить пользователей и предоставить им доступ.

Отзыв доступа к VPN

Чтобы отменить доступ к VPN, нужно отозвать сертификат клиента. Это позволяет заблокировать доступ к интрасети, не создавая новых сертификатов для любых других клиентов или сервера.

Во-первых, нужно добавить дополнительную строку в конфигурационный файл VPN-сервера, чтобы аннулировать любой сертификат клиента без изменения исходного сертификата ЦС или сервера. Это упрощает контроль доступа, так как теперь вы можете легко отменять сертификаты на ходу, не нарушая никаких других клиентских подключений.

Откройте конфигурационный файл:

sudo nano /etc/openvpn/server.conf

В конец добавьте строку:

crl-verify crl.pem

Теперь VPN-сервер будет искать файл crl.pem, который является списком отзыва сертификатов. Этот файл будет содержать список всех сертификатов, у которых больше нет доступа к VPN.

Сохраните и закройте файл конфигурации, но не перезагружайте сервер; сейчас нужно создать файл crl.pem.

Чтобы создать этот файл, перейдите в каталог ~/openvpn-ca/ на сервере:

cd ~/openvpn-ca/

Предположим, вам нужно отозвать сертификат пользователя client1. Для этого нужно запустить:

source vars
./revoke-full client1
Using configuration from /home/intranetexapmle/openvpn-ca/openssl-1.0.0.cnf
Revoking Certificate 02.
Data Base Updated
Using configuration from /home/intranetexample/openvpn-ca/openssl-1.0.0.cnf
client1.crt: C = US, ST = NY, L = New-York City,
error 23 at 0 depth lookup:certificate revoked

В последней строке вывода всегда должна указываться ошибка 23. Эта ошибка только подтверждает, что сертификаты были отозваны.

Это также создает crl.pem в каталоге ~/openvpn-ca/keys/. Чтобы подтвердить отмену сертификатов, откройте файл keys/index.txt в текстовом редакторе или отобразите его содержимое с помощью cat:

cat keys/index.txt

Рядом с клиентом, чей сертификат был отозван, вы увидите R:

V       260904153313Z           01      unknown /C=US/ST=NY/L=New York/O=MyOrganization/OU=Community/CN=server/name=server/emailAddress=me@example.com
R       260904172539Z   160915150543Z   02      unknown /C=US/ST=NY/L=New York/O=MyOrganization/OU=Community/CN=client1/name=server/emailAddress=me@example.com

Теперь скопируйте файл crl.pem в каталог /etc/openvpn/, где его будет искать сервер OpenVPN:

sudo cp keys/crl.pem /etc/openvpn/

Перезапустите сервер OpenVPN, чтобы отозвать сертификат:

sudo systemctl restart openvpn@server

Сервер OpenVPN обращается к файлу crl.pem каждый раз, когда на сервер поступает новое соединение. Каждый раз, когда вы отменяете сертификаты клиента, вы заменяете старый файл crl.pem новым. Вам не нужно перезапускать сервер.

Важно отметить, что после отзыва сертификата VPN его нельзя повторно использовать в будущем. Клиенту, чей сертификат VPN был отозван, потребуется новый сертификат, чтобы снова подключиться к сети.

Блокирование доступа пользователя

Ранее вы создали общий каталог, доступный только пользователям в группе smbrestricted. Чтобы запретить доступ пользователю, который находится в этой группе, можно удалить его группы. Например, чтобы удалить client1, используйте следующую команду:

sudo deluser client1 -G smbrestricted
Removing user `client1' from group `smbrestricted' ...
Done.

Если вы не уверены, что пользователь включен в группу или хотите убедиться, что пользователь удален, вы можете использовать команду members:

sudo apt-get install members
members smbrestricted

Это отобразит всех членов группы.

Добавление пользователя в интрасеть

Каждому новому пользователю интрасети потребуется собственный сертификат VPN. Например, чтобы создать пользователя с именем client2, вы должны сделать следующее.

Сначала нужно собрать ключ:

cd ~/openvpn-ca
./build-key client2

Затем сгенерировать клиентскую конфигурацию.

cd ~/client-configs
./make_config.sh client2

После этого загрузите конфигурацию на локальную машину:

sftp 8host@openvpn_server_ip:client-configs/files/client2.ovpn ~/

Чтобы предоставить новому пользователю доступ к ограниченным файлам, выполните те же действия, что и для client1:

  • Создайте пользователя и добавьте его в группу smbrestricted.
  • Создайте пароль Samba для пользователя с помощью smbpassword.
  • Проверьте соединение.

Затем повторите этот процесс для каждого пользователя, которого вы хотите добавить.

Tags: , ,