несколько пользовательских типов / правил доступа для OpenVPN на CentOS 7 и firewalld

Как определить отдельные роли для пользователей и администратора в OpenVPN, запущенных на сервере CentOS 7? В частности, пользователям разрешено указывать только https , а администратору должно быть разрешено использовать как https и ssh .

ПРОГРЕСС ТАК ФАР:

При переводе инструкций из ссылки, предложенной @garethTheRed , я определил следующие шаги. Я также выполнил шаги один, два и три. Но я не знаю, как завершить четвертый шаг. Может кто-нибудь, пожалуйста, показать, как перевести STEP FOUR в firewalld из iptables, а также подтвердить другие шаги?

Шаг первый (COMPLETED) : создайте виртуальную карту IP-адресов в соответствии с классом пользователя:

  Class Virtual IP range Allowed Services employees 10.8.0.0/24 https administrator 10.8.1.0/24 ssh, https 

Шаг второй (COMPLETED) : В /etc/openvpn/server.conf,

  define the Employee IP address pool: server 10.8.0.0 255.255.255.0 Add a route for the System Administrator IP range: route 10.8.1.0 255.255.255.0 Specify client configuration directory to assign a fixed IP forAdministrator: client-config-dir ccd 

Шаг третий (COMPLETED) : в новом каталоге /etc/openvpn/ccd и новом файле конфигурации /etc/openvpn/ccd/sysadmin :

  Define the fixed IP address for the Administrator VPN client: mkdir ccd cd ccd nano sysadmin1 type the following into /etc/openvpn/ccd/sysadmin1: ifconfig-push 10.8.1.1 10.8.1.2 

Шаг четвертый (КАК Я ДЕЛАТЬ ЭТО В FIREWALLD ТАК, ЧТО ПОЛЬЗОВАТЕЛИ МОГУТ ТОЛЬКО https И ТАК, ЧТО АДМИНИСТРАТОР МОЖЕТ ssh И https ?) :

  First, define a static unit number for our tun interface: dev tun0 //where does this go? Establish firewall rules for the employees and administrator (convert these to firewalld): # Employee rule // MUST ONLY BE ALLOWED TO https iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ACCEPT # Sysadmin rule //MUST BE ALLOWED TO ssh AND https iptables -A FORWARD -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ACCEPT 

Примечание. Когда я firewall-cmd --list-all , общая сумма всей конфигурации firewalld до сих пор определяется следующим образом:

 public (default, active) interfaces: enp3s0 sources: services: dhcpv6-client openvpn smtp ports: masquerade: yes forward-ports: icmp-blocks: rich rules: 

Я хотел бы изменить конфигурацию брандмауэра любым способом, необходимым для обеспечения оптимальной безопасности для этого варианта использования.

Как изменить приведенное выше, чтобы заставить это работать?

РЕДАКТИРОВАТЬ:

Прочитав полезный ответ @ garethTheRed, у меня есть три вопроса / замечания:

 1.) There is no `tun` device on the firewall, but yet I am able to connect to the VPN from the client with `openvpn --config /path/to/client.ovpn` with the firewall configured only as shown by the results of `firewall-cmd --list-all`. So why is it necessary to define a `tun` device in the firewall? 2.) `ip addr` shows that I was logged in as 10.8.0.6. How can I force being logged in as a fixed address, such as 10.8.1.1 defined in Step Three above? 3.) What privileges/access does a user really have when they log in to the server via OpenVPN when the firewall is configured as shown in the results of `firewall-cmd --list-all` above? Are they be able to do anything other than https without a password anyway? ssh would require knowledge of both a password and a username. 

EDIT # 2

Во внутренней зоне, определенной в очень полезном ответе @ garethTheRed, кажется, что пользователи внутренней зоны имеют доступ к следующим службам dhcpv6-client , ipp-client , mdns , samba-client и ssh . Вариант использования в этой публикации также будет включать https .

Поэтому представляется, что решение этой публикации включало бы:

 1.) setting up rules blocking the `10.8.0.0/24` ip range from `dhcpv6-client`, `ipp-client`, `mdns`, `samba-client`, and `ssh`, while allowing access to `https`. 2.) retaining access by the `10.8.1.0/24` ip range to all services defined in the internal zone. 3.) creating and installing separate client certificates for the two classes of users (administrator and user)? Each class, and therefore each certificate, must have a Canonical Name (CN) that matches the names of config files added to `/etc/openvpn/ccd`. Openvpn should then use the config file whose name matches the CN. This config file should be set to configure the network address that will be allocated to the clients in that class @garethTheRed's words are used here in #3. 

Но разве эти 3 вещи необходимы для выполнения этого требования? И как я могу выполнить эти 3 вещи?

Вы можете изменить зону и добавить Rich Rule, которая блокирует весь трафик ssh отличный от определенного диапазона – подсеть Employee .

Найдите, в какой зоне находится ваш интерфейс, перечисляя все зоны:

 firewall-cmd --list-all-zones | less 

На выходе вы должны увидеть нечто похожее на:

 internal (active) interfaces: tun0 sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: 

Вы можете обнаружить, что устройство tun ( tun0 в приведенном выше примере) находится в той же зоне, что и ваш ethernet-адаптер. Хотя это будет работать, вам будет проще управлять, если вы их отделите.

Было бы разумно удалить службу, которая вам не нужна, из internal зоны – в вашем случае удалите все, кроме ssh а также добавьте http :

 firewall-cmd --zone=internal --permanent --add-service=http firewall-cmd --zone=internal --permanent --remove-service=dhcpv6-client 

Повторите последнюю команду с другими службами, которые вы хотите удалить. Убедитесь, что вы не удалите ssh ! Пока вы на нем, удалите избыточные службы из своей external зоны.

Скопируйте файл определения зоны из зоны, в которой интерфейс tun находится в /etc/firewalld/zones zone. Например, если tun устройство находится во Internal зоне:

 sudo cp /usr/lib/firewalld/zones/internal.xml /etc/firewalld/zones 

Отредактируйте скопированный файл и добавьте следующее перед закрытием </zone> :

 <rule family="ipv4"> <source invert="True" address="10.8.0.0"/> <service name="ssh"/> <reject/> </rule> 

Наконец, запустите firewall-cmd --reload чтобы применить правило.

Предупреждение : вы можете заблокировать себя, если это не работает: -o

Альтернативные варианты:

Другим, более простым вариантом было бы настроить sshd только принимать соединения с заданного сетевого адреса – 10.8.0.0 .

Еще более простой вариант – отказаться от VPN в целом и использовать брандмауэр. Если (и только если) ваши сотрудники (или ваш внешний маршрутизатор) имеют статический IP-адрес, тогда просто настройте Rich Rules, чтобы разрешить доступ только к их IP-адресу или сетевому адресу к службе ssh , отклоняя все другие IP-адреса.