Melhor maneira de gerenciar portas personalizadas no SELinux

6

No RHEL 6.2, estamos usando o httpd em um host como um proxy front-end para o Tomcat em outro host, e também temos o mod_status configurado para escutar em uma porta não padrão para fornecer informações de status a uma ferramenta de monitoramento. Portanto, precisamos do httpd para 1) estabelecer conexões de rede e 2) ouvir em uma porta não padrão.

A política de segmentação padrão (atualmente no modo permissivo) apenas permite que o httpd escute em uma lista definida de portas ( semanage port -l | grep http_port_t ) e não permitirá que o httpd faça conexões de rede de saída. aureport -a mostra as negações do AVC quando o httpd tenta ligar-se à porta de status personalizada e quando tenta se conectar às portas AJP no outro host.

Eu encontrei duas soluções, mas uma parece permissiva demais, e a outra muito frágil (isto é, é provável que apresente uma política de atualização).

Solução "ampla"

Eu usei audit2allow para gerar uma fonte de política local e, em seguida, checkmodule para compilá-la, semodule_package para gerar um pacote de política e semanage para começar a aplicá-la. Eu reiniciei o httpd e confirmei que nenhuma negação de AVC foi gerada. A política local gerada pelo audit2allow usou a seguinte concessão:

allow httpd_t port_t:tcp_socket { name_bind name_connect };

que permite ao httpd ligar-se a qualquer porta (não apenas às listadas em http_port_t) e a conectar-se a qualquer porta. A vantagem dessa abordagem é que ela está contida em uma política local e não será substituída no próximo yum update . O con é que concede uma permissão mais ampla do que o necessário; O httpd pode ligar e conectar-se a qualquer porta.

Solução "estreita"

A alternativa para ligação é usar o seguinte comando para adicionar nossa porta personalizada à lista http_port_t:

semanage port -a -t http_port_t -p tcp (custom-port-number)

Eu sei que posso ver a lista de portas em http_port_t usando semanage port -l | grep http_port_t , mas não sei onde essa lista está armazenada e não sei se o próximo yum update com uma nova diretiva substituirá a lista .

A alternativa para conexão é usar o seguinte comando para criar uma nova lista de portas:

semanage port -a -t ajp_port_t -p tcp 9010

e crie uma política local com o seguinte:

allow httpd_t ajp_port_t:tcp_socket { name_connect };

Assim como a lista http_port_t aumentada, não sei se minha nova lista ajp_port_t sobreviverá à instalação de uma nova versão de política segmentada.

    
por Eric Rath 24.02.2012 / 00:59

1 resposta

2

semanage cria novos módulos que não estão sob o controle do pacote de políticas. Quando o pacote de políticas é atualizado, esses módulos permanecerão e serão aplicados à nova política quando ela for carregada.

    
por 24.02.2012 / 01:04

Tags