O que o Apache está tentando fazer com a porta 80 que o SELinux está bloqueando?

O que o Apache está tentando fazer com a porta 80 que o SELinux está bloqueando?

Eu tenho um pequeno servidor web (CentOS 8) que executa um pequeno aplicativo php e mysql. Ele também executa Nagios, BIND e Postfix rodando como um MX secundário.

Tudo parece "funcionar" e nunca notei nenhum problema. Consigo carregar o Nagios e o outro aplicativo php pela porta 443. Se eu carregar os URLs pela porta http/porta 80, o Apache será configurado para redirecionar para 443, e fará isso igualmente bem.

No entanto, o selinux registra rotineiramente o seguinte AVC, indicando algum problema na porta 80:

time->Sat Dec 12 01:55:16 2020
type=AVC msg=audit(1607756116.608:1381369): avc:  denied  { name_connect } for  pid=631936 comm="httpd" dest=80 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0

Olhando /var/log/httpd/error_log, vejo uma permissão negada correspondente para o mesmo pid ao mesmo tempo:

[Sat Dec 12 01:55:16.608941 2020] [core:warn] [pid 631936] (13)Permission denied: AH00056: connect to listener on [::]:80

Existe uma maneira de rastrear o que exatamente o Apache está tentando fazer e que está sendo bloqueado? Como mencionei, nada parece estar quebrado, então não tentei construir um módulo para permitir isso. Mas eu gostaria de encontrar a causa raiz da mensagem AVC negada aqui e:

  • Permita se for inofensivo e realmente deveria ser permitido, OU
  • Configure o Apache para parar de tentar fazer tudo o que está tentando fazer

Responder1

A conexão que está sendo feita aqui é o Apache conectando-se a si mesmo: eles são registrados como um internal dummy connectione são a maneira do Apache deacordando seus processos filhos.

Por padrão, o SELinux não permite que o servidor web faça conexões de rede de saída. Vários booleanos mudarão esse comportamento, mas provavelmente o que você deseja usar para corrigir isso é httpd_graceful_shutdownaquele que permite ao Apache se conectar a qualquer porta TCP rotulada http_port_t(80, 81, 443, 488, 8008, 8009, 8443, 9000) e nada outro. Como o nome sugere, isso faz com que o desligamento do Apache não emita avisos espúrios, pois ele também deseja se conectar a si mesmo ao desligar. Ele também eliminará o problema instantâneo e permitirá a conexão fictícia interna.

setsebool -P httpd_graceful_shutdown 1

informação relacionada