Apache는 SELinux가 차단하는 포트 80으로 무엇을 하려고 합니까?

Apache는 SELinux가 차단하는 포트 80으로 무엇을 하려고 합니까?

저는 작은 PHP 및 mysql 앱을 실행하는 작은 웹 서버(CentOS 8)를 가지고 있습니다. 또한 보조 MX로 실행되는 Nagios, BIND 및 Postfix를 실행합니다.

모든 것이 "작동"하는 것 같으며 어떤 문제도 발견한 적이 없습니다. 포트 443을 통해 Nagios와 다른 PHP 앱을 로드할 수 있습니다. 포트 http/포트 80을 통해 URL을 로드하면 Apache는 443으로 리디렉션되도록 구성되어 똑같이 잘 수행됩니다.

그러나 selinux는 포트 80의 일부 문제를 나타내는 다음 AVC를 정기적으로 기록합니다.

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

을 보면 /var/log/httpd/error_log동일한 PID에 대해 해당하는 Permission Denied가 동시에 표시됩니다.

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

Apache가 수행하려는 작업이 정확히 무엇인지 추적할 수 있는 방법이 있습니까? 앞서 언급했듯이 깨진 것은 없는 것 같아서 이를 허용하는 모듈을 만들려고 시도하지 않았습니다. 하지만 여기에서 AVC 거부 메시지의 근본 원인을 찾고 싶습니다.

  • 무해하고 실제로 허용되어야 하는 경우 허용하거나
  • Apache가 수행하려는 작업을 중지하도록 구성

답변1

여기서 이루어지는 연결은 Apache가 자신에게 다시 연결하는 것입니다. 이는 internal dummy connectionApache의 방식으로 기록됩니다.자식 프로세스 깨우기.

기본적으로 SELinux는 웹 서버가 아웃바운드 네트워크 연결을 만드는 것을 허용하지 않습니다. 여러 부울이 이 동작을 변경하지만 이 문제를 해결하기 위해 사용하고 싶은 것은 httpd_graceful_shutdownApache가 레이블이 지정된 모든 TCP 포트(80, 81, 443, 488, 8008, 8009, 8443, 9000)에 연결할 수 있도록 허용하는 것 http_port_t입니다. 또 다른. 이름에서 알 수 있듯이 이는 Apache가 종료될 때 자체적으로 연결하기를 원하기 때문에 Apache의 종료 시 잘못된 경고를 표시하지 않게 합니다. 또한 즉각적인 문제를 제거하고 내부 더미 연결을 허용합니다.

setsebool -P httpd_graceful_shutdown 1

관련 정보