Está ouvindo conectando-se ao mesmo para o SELinux?

2

De acordo com semanage-port(1) ...

  • -a faz o mesmo que --add
  • -t faz o mesmo que --type
  • -p faz o mesmo que --port

e o comando

 semanage port -a -t http_port_t -p tcp 81

permite que o Apache execute LISTEN na porta 81.

Até agora, tudo bem. Mas esta solução para um problema relacionado ao haproxy me diz que o comando

semanage port --add --type http_port_t --proto tcp 8001

adiciona a porta à lista de portas que o haproxy pode CONECTAR.

Isso significa que listening on e connecting to são sempre os mesmos, no que diz respeito ao SELinux? Ou existe alguma regra que associa listas de portas como ingresso, saída ou ambos? Se sim, onde posso encontrar esta informação no meu SO e como posso modificá-la?

    
por Bananguin 09.05.2017 / 12:13

1 resposta

2

No que diz respeito ao SELinux, "escutar" e "conectar-se a" não são não a mesma coisa. Essas são duas coisas diferentes e, para ser capaz de fazer isso, o processo precisa ter a permissão correta. No caso de ligação a uma porta e conexão a uma porta, essas permissões são name_bind e name_connect , respectivamente.

Nesse caso, estamos interessados em permissões de classe. Mas, novamente, como é geralmente o caso com o SELinux, estamos perdendo uma informação - permissões em qual classe? Eu sinto que deve haver uma maneira melhor de encontrar isso, mas ainda não me deparei com isso. Então, vamos usar o que sabemos:

sesearch -d -A -t http_port_t
Found 81 semantic av rules:
    allow cloud_init_t http_port_t : tcp_socket name_connect ;
    ...

Isso nos mostrará todas as regras de permissão em que http_port_t é o destino. Felizmente, podemos notar que todos eles operam na mesma classe - tcp_socket. E isso faz sentido. Agora vamos verificar todas as permissões que a classe tcp_socket tem (tanto quanto sei, está definida na própria política).

seinfo -ctcp_socket -x
  • -c imprime classes de objetos (observe que não deve haver um espaço entre o sinalizador e o nome)
  • -x mostra mais informações (neste caso, a coisa em que estamos interessados - as permissões!)

Isso listará todas as permissões que se aplicam à classe tcp_socket - entre elas, name_bind e name_connect, que são os significados LISTEN ON e CONNECT TO da sua pergunta.

Vamos supor que você queira usar haproxy - haproxy tem o tipo SELinux de haproxy_t . Agora, para ver quais permissões o haproxy tem nas portas definidas em http_port_t:

sesearch -d -A -s haproxy_t -t http_port_t
Found 1 semantic av rules:
    allow haproxy_t http_port_t : tcp_socket { name_bind name_connect } ;

Isso nos mostra que haproxy tem permissões name_bind e name_connect. Portanto, qualquer porta que você adicionar a http_port_t, permitirá que o haproxy se conecte e conecte à referida porta (no entanto, todos os outros tipos que usam http_port_t também poderão usar suas respectivas permissões na porta mencionada! Por exemplo, o openvpn poderá receber e enviar mensagens e ligar e conectar).

Se em vez de http_port_t, haproxy usasse tipos específicos para cada permissão, haproxy_connect_port_t e haproxy_bind_port_t com permissões name_connect e name_bind, respectivamente, se você adicionasse a porta apenas a haproxy_connect_port_t, só conseguiria se conectar à porta, não escutar / ligue-se a ele.

    
por 10.05.2017 / 09:55

Tags