CentOS 7 및 방화벽의 OpenVPN에 대한 다양한 사용자 유형/액세스 규칙

CentOS 7 및 방화벽의 OpenVPN에 대한 다양한 사용자 유형/액세스 규칙

CentOS 7 서버에서 실행되는 OpenVPN에서 사용자와 관리자에 대해 별도의 역할을 정의하는 방법은 무엇입니까? 특히, 사용자에게만 실행이 허용되고 관리자에게는 및 가 https모두 실행되도록 허용되어야 합니다 .httpsssh

지금까지의 진행 상황:

번역 중@garethTheRed가 제안한 링크의 지침, 다음 단계를 정의했습니다. 1단계, 2단계, 3단계도 완료했습니다. 하지만 네 번째 단계를 완료하는 방법을 모르겠습니다. 누군가 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

네 번째 단계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의 유용한 답변을 읽은 후 세 가지 질문/관찰이 있습니다.

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.  

그런데 이 세 가지가 아직도 이루어져야 합니까? 이 세 가지를 어떻게 달성합니까?

답변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 주소는 거부됩니다.

관련 정보