CentOS 7 和 firewalld 上 OpenVPN 的多個使用者類型/訪問規則
如何在 CentOS 7 伺服器上執行的 OpenVPN 中為使用者和管理員定義單獨的角色? 具體來說,必須只允許使用者使用
https
,而必須允許管理員同時使用https
和ssh
。迄今為止的進展:
在翻譯@garethTheRed 建議的連結中的說明時,我定義了以下步驟。我還完成了步驟一、二、三。但我不知道如何完成第四步。 有人可以展示如何將步驟四從 iptables 翻譯成防火牆,並確認其他步驟嗎?
第一步**(完成)**:根據使用者類創建一個虛擬IP地址映射:
Class Virtual IP range Allowed Services employees 10.8.0.0/24 https administrator 10.8.1.0/24 ssh, https
第二步**(完成)**:在 /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
第三步**(完成)**:在新目錄
/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
第四步**(我如何在防火牆中做到這一點,以便使用者只能
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.
編輯#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.
但是,完成這個要求還需要這三件事嗎?我如何完成這三件事?
您可以修改該區域並添加一個豐富的規則,該規則阻止
ssh
除特定範圍之外的所有流量 -員工子網。
tun
通過列出所有區域來查找您的界面所在的區域: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
在上面的範例中)與您的乙太網適配器位於同一區域。雖然這會起作用,但如果將它們分開,管理起來會更容易。明智的做法是從區域中刪除您不需要的服務
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
. 例如,如果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 地址,則只需配置豐富規則以僅允許其 IP 地址或網路地址訪問
ssh
服務,同時拒絕所有其他 IP 地址。