Postfix - Opendkim - Verbindung zum lokalen Socket kann nicht hergestellt werden

Postfix - Opendkim - Verbindung zum lokalen Socket kann nicht hergestellt werden

Ich erhalte Ablehnungsfehler, wenn Postfix versucht, eine Verbindung zum Unix-Socket für OpenDKIM herzustellen. Tatsächlicher Fehler:

Sep 24 15:41:43 service-a-4 postfix/cleanup[17414]: warning: connect to Milter service unix:var/run/opendkim/opendkim.sock: Permission denied

EntsprechendPostfix-Dokumente, Postfix wird standardmäßig im "Chroot-Modus" ausgeführt, so dass Postfix auf /var/spool/postfix/ beschränkt ist, und gemäß derPostfix-Dokumente, beim Ausführen im „Chroot-Modus“ sind alle Milter- (Socket-)Referenzen relativ (zu /var/spool/postfix).

Meine Konfigurationen sehen also so aus:

# /etc/opendkim.conf
Socket local:/var/spool/postfix/var/run/opendkim/opendkim.sock

# /etc/postfix/main.cf
smtpd_milters = unix:/var/run/opendkim/opendkim.sock

Wenn ich jetzt versuche, eine Test-E-Mail zu senden, erhalte ich die Fehlermeldung „Berechtigung verweigert“. Daher habe ich ein paar Berechtigungstests durchgeführt:

# Correctly lists the socket file
sudo su -s /bin/bash postfix -c "ls /var/spool/postfix/var/run/opendkim/opendkim.sock"

Aber wenn ich versuche, eine Verbindung als Postfix herzustellen, passiert nichts:

# Does not work
sudo su -s /bin/bash postfix -c "nc -U -D /var/spool/postfix/var/run/opendkim/opendkim.sock"

# Does work (as root)
nc -U -D /var/spool/postfix/var/run/opendkim/opendkim.sock

SELinux ist während des Debuggens dieser Situation vorübergehend deaktiviert (permissiv). Und ich starte beide Prozesse (Opendkim und Postfix) nach jeder Konfigurationsänderung neu.

Was vermisse ich sonst noch?

Versionen:

CentOS 6.5
Postfix v2.6.6
Opendkim v2.9

Antwort1

Auf meinem CentOS6 getestet, scheint Postfix nicht wirklich "chrooted" zu sein.
Meine Einstellung:

# /etc/opendkim.conf
Socket local:/var/run/opendkim/opendkim.sock

# /etc/postfix/main.cf
smtpd_milters = unix:/var/run/opendkim/opendkim.sock

Das Ergebnis ist: connect to Milter service unix:/var/run/opendkim/opendkim.sock: Permission denied.
Die Socket-Umask ist jedoch 002, was zu führt srwxrwxr-x. opendkim:opendkim opendkim.sock.

Das Ändern der Umask auf 000 löst das Problem. Trotzdem ist es besser, wenn opendkim die Benutzergruppe wechselt, als es einfach für die Welt zu öffnen.

Umfeld:

centos 6.5 2.6.32-573.7.1.el6.x86_64
postfix 2.6.6-6.el6_5 @updates
opendkim 2.10.3-1.el6 @epel

Antwort2

Für diejenigen, die dies finden und das Problem mit den obigen Antworten nicht gelöst werden kann: Mein Problem waren fehlende Gruppenausführungsberechtigungen für den OpenDKIM-Socket-Ordner./var/run/opendkim/

Ich habe einen Cron @reboot hinzugefügt, um sicherzustellen, dass die Gruppenberechtigungen festgelegt wurden @reboot root chmod g+x /var/run/opendkim/

Behebt/patcht die folgende Warnung, damit diese nach einem Neustart nicht erneut angezeigt wird.

Warnung: Verbindung zum Milter-Dienst unix:/var/run/opendkim/opendkim.sock: Berechtigung verweigert

Eine TCP-Verbindung war für mich keine gute Lösung, da ich über 100.000 E-Mails pro Stunde signiere.

Antwort3

Soweit ich mich erinnere, läuft Postfix in CentOS 6 in seiner Standardkonfiguration nicht chroot-gehostet. Als ich OpenDKIM von Epel aus konfiguriert habe, kam es mit dieser Konfiguration:

Socket                  inet:8891@localhost

Um es in Postfix zu aktivieren, musste lediglich Folgendes zu main.cf hinzugefügt werden:

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

und Neustart von OpenDKIM und Postfixnachordnungsgemäße Konfiguration der Schlüssel, TrustedHosts, SigningTable, Keytable und Veröffentlichen der TXT-Einträge im DNS.

O, und ich vergaß: Postfix sollte auch Mitglied der Opendkim-Gruppe sein.

Antwort4

Damit Postfix und Opendkim über Unix-Sockets kommunizieren können, muss Opendkim den Socket erstellen und Postfix den Socket lesen können.

Unter Debian läuft Postfix als chroot /var/spool/postfix, eine mögliche Konfiguration ist daher:

/etc/opendkim.conf:
Socket                  local:/var/spool/postfix/opendkim/opendkim.sock

/etc/postfix/main.cf:
smtpd_milters = unix:opendkim/opendkim.sock

/var/spool/postfix/opendkim muss vorhanden sein und sollte opendkim gehören:

drwxr-xr-x 2 opendkim opendkim 4096 Jul 27 15:22 opendkim/

Dadurch sollte opendkim den Socket erstellen und Postfix auf das Verzeichnis zugreifen können. Allerdings kann Postfix den Socket immer noch nicht lesen:

srwxrwx--- 1 opendkim opendkim 0 Jul 27 15:22 opendkim.sock=

Sie können den Socket entweder in die Postfix-Gruppe einfügen:

/etc/opendkim.conf:
UserID                  opendkim:postfix

srwxrwx--- 1 opendkim postfix 0 Jul 27 15:43 opendkim.sock=

oder fügen Sie Postfix in die Opendkim-Gruppe ein:

$ usermod -a -G opendkim postfix

Beide sollten Postfix die richtigen Berechtigungen erteilen. Jetzt sollte Postfix in der Lage sein, Nachrichten zu signieren. Verschiedene Distributionen funktionieren möglicherweise etwas anders, aber das sollte Ihnen einen Anfang verschaffen.

Theoretisch könnten Sie auch die OpenDKIM-Umask auf 002 ändern, aber dadurch würde die Socket-Welt lesbar, was wahrscheinlich ein Sicherheitsproblem darstellt. Daher würde ich davon abraten.

verwandte Informationen