Postfix - Opendkim - 로컬 소켓에 연결할 수 없습니다

Postfix - Opendkim - 로컬 소켓에 연결할 수 없습니다

postfix가 opendkim의 unix 소켓에 연결을 시도할 때 거부 오류가 발생합니다. 실제 오류는 다음과 같습니다.

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

에 따르면접미사 문서, postfix는 기본적으로 "chroot 모드"에서 실행되므로 postfix는 /var/spool/postfix/에 잠겨 있으며접미사 문서, "chroot 모드"에서 실행하는 경우 모든 milter(소켓) 참조는 /var/spool/postfix에 대해 상대적입니다.

그래서 내 구성은 다음과 같습니다.

# /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

이제 테스트 이메일을 보내려고 하면 권한 거부 오류가 발생하므로 몇 가지 권한 테스트를 시도했습니다.

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

하지만 postfix로 연결하려고 하면 아무 일도 일어나지 않습니다.

# 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는 일시적으로 비활성화됩니다(허용). 그리고 구성이 변경될 때마다 두 프로세스(opendkim 및 postfix)를 모두 다시 시작합니다.

내가 또 무엇을 놓치고 있나요?

버전:

CentOS 6.5
Postfix v2.6.6
Opendkim v2.9

답변1

내 CentOS6에서 테스트한 결과 postfix가 실제로 "chrooted"되지 않은 것 같습니다.
내 설정:

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

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

그러면 다음이 생성됩니다 connect to Milter service unix:/var/run/opendkim/opendkim.sock: Permission denied.
그러나 소켓 umask는 002이므로 결과는 srwxrwxr-x. opendkim:opendkim opendkim.sock.

umask를 000으로 변경하면 문제가 해결됩니다. 그래도 그냥 공개하는 것보다 opendkim에서 사용자:그룹을 전환하는 것이 더 좋습니다.

환경:

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

답변2

이 문제를 발견했지만 위의 답변으로 문제가 해결되지 않는 경우 내 문제는 opendkim 소켓 폴더에 그룹 실행 권한이 없다는 것입니다./var/run/opendkim/

그룹 권한이 설정되었는지 확인하기 위해 cron @reboot를 추가했습니다. @reboot root chmod g+x /var/run/opendkim/

재부팅 후 반환되지 않는 다음 경고를 수정/패치합니다.

경고: Milter 서비스 unix:/var/run/opendkim/opendkim.sock에 연결: 권한이 거부되었습니다.

시간당 100,000개 이상의 이메일에 서명하기 때문에 TCP 연결은 나에게 좋은 솔루션이 아니었습니다.

답변3

IIRC, centos 6의 postfix는 표준 구성에서 chrooted를 실행하지 않습니다. epel에서 opendkim을 구성했을 때 다음 구성이 함께 제공되었습니다.

Socket                  inet:8891@localhost

따라서 postfix에서 이를 활성화하려면 main.cf에 다음을 추가하면 됩니다.

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

en postfix와 opendkim을 모두 다시 시작합니다.~ 후에키, TrustedHosts, SigningTable, Keytable을 올바르게 구성하고 txt 레코드를 dns에 게시합니다.

아, 그리고 잊어버렸어요: postfix도 opendkim 그룹의 구성원이어야 합니다.

답변4

postfix와 opendkim이 unix 소켓을 통해 통신하려면 opendkim이 소켓을 생성할 수 있어야 하고 postfix가 소켓을 읽을 수 있어야 합니다.

Debian에서 postfix는 chroot /var/spool/postfix로 실행되므로 가능한 설정 중 하나는 다음과 같습니다.

/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이 존재해야 하며 opendkim이 소유해야 합니다.

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

이렇게 하면 opendkim이 디렉토리에 액세스하기 위한 소켓과 postfix를 생성할 수 있지만 postfix는 여전히 소켓을 읽을 수 없습니다.

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

소켓을 postfix 그룹에 넣을 수 있습니다:

/etc/opendkim.conf:
UserID                  opendkim:postfix

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

또는 opendkim 그룹에 postfix를 넣으세요:

$ usermod -a -G opendkim postfix

어느 쪽이든 postfix에 올바른 권한을 부여해야 합니다. 이제 postfix는 메시지에 서명할 수 있습니다. 다른 배포판은 약간 다르게 작동할 수 있지만 이것이 시작점입니다.

이론적으로는 opendkim umask를 002로 변경할 수도 있지만 이렇게 하면 소켓 전체를 읽을 수 있게 되며 이는 보안 문제일 수 있으므로 권장하지 않습니다.

관련 정보