CentOS 7およびファイアウォールのOpenVPNのさまざまなユーザータイプ/アクセスルール

CentOS 7およびファイアウォールのOpenVPNのさまざまなユーザータイプ/アクセスルール

CentOS 7サーバーで実行されているOpenVPNでユーザーと管理者に別々の役割を定義する方法は? 具体的には、ユーザーのみが実行を許可し、管理者には、および両方を実行することをhttps許可する必要があります。httpsssh

これまでの進捗状況:

翻訳中@garethTheRedが提案したリンクの指示、次のステップを定義しました。 1段階、2段階、3段階も完了しました。しかし、4番目のステップを完了する方法がわかりません。 誰かがiptablesからFirewalldにステップ4を変換し、他のステップを確認する方法を教えてください。

ステップ1(十分):ユーザーカテゴリに基づいて仮想IPアドレスマッピングを作成します。

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

ステップ2(十分): /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

第4段階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これまでのファイアウォール構成全体の合計は次のように定義されます。

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

このユースケースに最適なセキュリティを提供するために必要な方法でファイアウォール設定を変更したいと思います。

上記の内容をどのように修正して機能させることができますか?

編集する:

@garethTheRedの有用な答えを読んだ後、3つの質問/観察があります。

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-clientmdnssamba-clientsshhttps

したがって、この投稿のソリューションには次のものが含まれているようです。

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つをどのように達成しますか?

答え1

ゾーンを変更して追加できます。豊富なルール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アドレスは拒否されます。

関連情報