Post 1330
Web

HTTP: disabled connection for (xxx) – SELinux-Fehler in Apache beheben

Wer Apache als Reverse-Proxy oder für externe Datenbankverbindungen nutzt, stößt auf Servern mit aktivem SELinux schnell auf den rätselhaften Fehler AH00940: HTTP: disabled connection for (xxx). Die eigentliche Ursache liegt nicht im Apache-Code, sondern in den SELinux-Sicherheitsrichtlinien – und die Lösung ist einfacher als gedacht.

Was bedeutet AH00940?

Der Apache-Fehlercode AH00940 taucht in /var/log/httpd/error_log auf, wenn Apache versucht, eine ausgehende Netzwerkverbindung herzustellen – beispielsweise zu einem Backend-Server (ProxyPass), zu einer Datenbank auf einem anderen Host oder zu einem externen Dienst. SELinux unterbindet diese Verbindung, weil der Apache-Prozess (httpd_t) standardmäßig keine ausgehenden Netzwerkverbindungen aufbauen darf.

Der vollständige Eintrag im Error-Log sieht typischerweise so aus:

[error] (13)Permission denied: proxy: HTTP: attempt to connect to 192.168.1.100:8080 (backend.example.com) failed
AH00940: HTTP: disabled connection for (backend.example.com)

Ursache: SELinux Boolean httpd_can_network_connect

SELinux arbeitet mit sogenannten Booleans – Schaltern, die bestimmte Verhaltensweisen von Prozessen erlauben oder verbieten. Der relevante Boolean für ausgehende Netzwerkverbindungen des Apache-Dienstes heißt httpd_can_network_connect. Er ist auf den meisten RHEL-, CentOS- und Fedora-Systemen standardmäßig auf off gesetzt.

Den aktuellen Status prüft man mit:

getsebool httpd_can_network_connect

Ausgabe bei deaktiviertem Boolean:

httpd_can_network_connect --> off

Lösung: setsebool

Die Lösung besteht darin, den Boolean zu aktivieren. Der folgende Befehl aktiviert die Netzwerkverbindungen für Apache dauerhaft (auch nach einem Neustart):

/usr/sbin/setsebool -P httpd_can_network_connect true

Der Parameter -P sorgt dafür, dass die Änderung persistent gespeichert wird. Ohne -P gilt die Einstellung nur bis zum nächsten Neustart des Systems. Nach dem Befehl sollte Apache sofort wieder Verbindungen aufbauen können – ein Neustart des Dienstes ist nicht erforderlich.

Alternative: Plesk Security Level

Wer einen Server mit Plesk-Oberfläche betreibt, kann die Einstellung auch über die grafische Oberfläche vornehmen, ohne auf die Kommandozeile angewiesen zu sein:

1. In Plesk einloggen und unter Tools & Settings den Bereich Security aufrufen.
2. Den Tab Security Level öffnen.
3. Im Abschnitt SELinux den Eintrag httpd_can_network_connect suchen und auf 1 (aktiviert) setzen.
4. Speichern – die Änderung wird sofort wirksam.

Weitere nützliche SELinux-Booleans für Apache

Neben httpd_can_network_connect gibt es weitere Booleans, die in bestimmten Szenarien relevant sind:

# Datenbankverbindungen erlauben (z.B. MySQL auf Remote-Host)
setsebool -P httpd_can_network_connect_db true

# LDAP-Verbindungen erlauben
setsebool -P httpd_can_connect_ldap true

# Sendmail/SMTP aus Apache heraus erlauben
setsebool -P httpd_can_sendmail true

# Alle verfügbaren httpd-Booleans anzeigen
getsebool -a | grep httpd

SELinux deaktivieren – keine empfohlene Lösung

Im Internet kursiert häufig der Ratschlag, SELinux einfach zu deaktivieren (setenforce 0 oder SELINUX=disabled in /etc/selinux/config). Das löst zwar das unmittelbare Problem, öffnet aber erhebliche Sicherheitslücken. SELinux ist eine wichtige Sicherheitsschicht, die Angriffe auf den Server deutlich erschwert. Das gezielte Aktivieren einzelner Booleans ist immer der bessere Weg.

Mit dem richtigen Boolean gesetzt läuft Apache wieder problemlos als Reverse-Proxy oder für externe Verbindungen – ohne Kompromisse bei der Systemsicherheit.