vários tipos de usuário / regras de acesso para o OpenVPN no CentOS 7 e firewalld

1

Como posso definir funções separadas para usuários e administradores no OpenVPN em execução no servidor CentOS 7? Especificamente, os usuários só devem ter permissão para https , enquanto o administrador deve ter permissão para https e ssh .

PROGRESSO ATÉ AGORA:

Ao traduzir as instruções do link sugerido por @garethTheRed , eu definiram os seguintes passos. Também concluí os passos um, dois e três. Mas eu não sei como completar o passo quatro. Alguém pode, por favor, mostrar como traduzir o STEP QUAT em firewalld do iptables, e também confirmar os outros passos?

Primeiro passo (COMPLETED) : crie um mapa de endereço IP virtual de acordo com a classe de usuário:

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

Passo Dois (COMPLETED) : Em /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

Terceiro Passo (COMPLETED) : Em um novo diretório /etc/openvpn/ccd e novo arquivo de configuração /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

Passo Quatro (COMO FAZER ISSO EM FIREWALLD PARA QUE OS USUÁRIOS POSSAM SOMENTE https E PARA QUE O ADMINISTRADOR POSSA ssh AND 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

Nota: Quando digito firewall-cmd --list-all , a soma total da configuração do firewalld até agora é definida da seguinte forma:

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

Eu gostaria de alterar a configuração do firewall de qualquer maneira necessária para fornecer segurança ideal para este caso de uso.

Como modifico as informações acima para que isso funcione?

EDITAR:

Depois de ler a resposta útil do @ garethTheRed, tenho três perguntas / observações:

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

Na zona interna definida na resposta muito útil do @ garethTheRed, parece que os usuários da zona interna têm acesso aos seguintes serviços dhcpv6-client , ipp-client , mdns , samba-client e ssh . O caso de uso nesta postagem também incluiria https .

Portanto, parece que a solução para este lançamento envolveria:

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.  

Mas essas três coisas ainda são necessárias para concluir esse requisito? E como eu realizo essas 3 coisas?

    
por CodeMed 18.02.2015 / 23:15

1 resposta

2

Você pode modificar a zona e adicionar uma Regra Rich que bloqueia todo o tráfego de ssh que não seja de um determinado intervalo - a sub-rede Employee .

Descubra em qual zona a interface tun está listando todas as zonas:

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

Na saída, você deve ver algo semelhante a:

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

Você pode descobrir que o dispositivo tun ( tun0 no exemplo acima) está na mesma zona do seu adaptador Ethernet. Embora isso funcione, será mais fácil gerenciar se você os separar.

Seria aconselhável remover o serviço que você não precisa da internal zone - no seu caso, remova todos, menos ssh e também adicione http :

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

Repita o último comando com os outros serviços que você deseja remover. Certifique-se de não remover ssh ! Enquanto você faz isso, remova os serviços redundantes da sua external zone também.

Copie o arquivo de definição de zona da zona em que a interface tun está localizada para /etc/firewalld/zones . Por exemplo, se o dispositivo tun estiver na Internal zone:

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

Edite o arquivo copiado e adicione o seguinte logo antes do fechamento </zone> :

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

Por fim, execute firewall-cmd --reload para aplicar a regra.

Aviso : você pode se bloquear se isso não funcionar: -o

Opções alternativas:

Outra opção, mais simples, seria configurar sshd para aceitar apenas conexões de um determinado endereço de rede - 10.8.0.0 .

Uma opção ainda mais simples seria abandonar completamente a VPN e usar apenas o firewall. Se (e somente se) seus funcionários (ou seu roteador externo) tiverem um endereço IP estático, basta simplesmente configurar Rich Rules para permitir que apenas seu endereço IP ou endereço de rede atinjam o endereço IP. ssh service enquanto rejeita todos os outros endereços IP.

    
por 19.02.2015 / 09:40