Postfix - Opendkim - Невозможно подключиться к локальному сокету

Postfix - Opendkim - Невозможно подключиться к локальному сокету

Я получаю ошибки отказа, когда postfix пытается подключиться к сокету unix для opendkim, фактическая ошибка:

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 switch user:group, чем просто открыть для всего мира.

Среда:

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: Отказано в доступе

TCP-соединение не оказалось для меня хорошим решением, поскольку я подписываю более 100 тыс. писем в час.

решение3

IIRC, postfix в centos 6 не работает chrooted в своей стандартной конфигурации. Когда я настраивал opendkim из epel, он пришел с такой конфигурацией:

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

ru перезапуск opendkim и postfixпослеправильная настройка ключей, 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=

Вы можете поместить сокет в постфиксную группу:

/etc/opendkim.conf:
UserID                  opendkim:postfix

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

или поместить postfix в группу opendkim:

$ usermod -a -G opendkim postfix

Любой из них должен предоставить postfix правильные разрешения. Теперь postfix должен иметь возможность подписывать сообщения. Разные дистрибутивы могут работать немного по-разному, но это должно дать вам начало.

Теоретически вы также можете изменить umask opendkim на 002, но это сделает мир сокета доступным для чтения, что, вероятно, является проблемой безопасности, поэтому я бы не рекомендовал этого делать.

Связанный контент