Невозможно изменить сокет OpenDKIM в растяжке Debian в / etc / default / opendkim

18

Я пытаюсь настроить opendkim на Debian Stretch, но мне не удается изменить сокет. Я хочу изменить сокет, /var/spool/postfix/opendkim/opendkim.sockчтобы я мог использовать его с постфиксом.

Я добавил Socket local:/var/spool/postfix/opendkim/opendkim.sockк/etc/opendkim.conf

а также попытался добавить SOCKET="local:/var/spool/postfix/opendkim/opendkim.sockв /etc/default/opendkim(который я должен был создать).

Независимо от того, что я изменяю или как часто я перезапускаю opendkim, он всегда использует в /var/run/opendkim/opendkim.sockкачестве сокета.

➜  ~ netstat -a | fgrep LISTEN | grep open
unix  2      [ ACC ]     STREAM     LISTENING     5534128  /var/run/opendkim/opendkim.sock

➜  ~ sudo systemctl status opendkim.service

● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
   Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-04-30 12:41:54 CEST; 5min ago
     Docs: man:opendkim(8)
           man:opendkim.conf(5)
           man:opendkim-genkey(8)
           man:opendkim-genzone(8)
           man:opendkim-testadsp(8)
           man:opendkim-testkey
           http://www.opendkim.org/docs.html
  Process: 25246 ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock (code=exited, status=0/SUCCESS)
 Main PID: 25248 (opendkim)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/opendkim.service
           ├─25248 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
           └─25249 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

Apr 30 12:41:54 vServer systemd[1]: Starting OpenDKIM DomainKeys Identified Mail (DKIM) Milter...
Apr 30 12:41:54 vServer systemd[1]: Started OpenDKIM DomainKeys Identified Mail (DKIM) Milter.
Apr 30 12:41:54 vServer opendkim[25249]: OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)

Что я делаю неправильно? (Я думаю, это моя ошибка, так как я не могу найти кого-то еще с той же проблемой)

ОБНОВИТЬ:

Изменение /etc/default/opendkimк SOCKET="inet:8891@localhost"и изменения конфигурации постфикса использовать эти результаты в сокетinet:localhost:8891: Connection refused

UPDATE2:

Теперь я заменил файл, включенный в пакет растяжения debian:

# Command-line options specified here will override the contents of                                                                                                         
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.                                                                                                       
#DAEMON_OPTS=""                                                                                                                                                             
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with                                                                                                   
# postfix in a chroot:                                                                                                                                                      
RUNDIR=/var/spool/postfix/var/run/opendkim                                                                                                                                  
#RUNDIR=/var/run/opendkim                                                                                                                                                   
#                                                                                                                                                                           
# Uncomment to specify an alternate socket                                                                                                                                  
# Note that setting this will override any Socket value in opendkim.conf                                                                                                    
# default:                                                                                                                                                                  
SOCKET=local:$RUNDIR/opendkim.sock                                                                                                                                          
# listen on all interfaces on port 54321:                                                                                                                                   
#SOCKET=inet:54321                                                                                                                                                          
# listen on loopback on port 12345:                                                                                                                                         
#SOCKET=inet:12345@localhost                                                                                                                                                
# listen on 192.0.2.1 on port 12345:                                                                                                                                        
#SOCKET=inet:12345@192.0.2.1                                                                                                                                                
USER=opendkim                                                                                                                                                               
GROUP=opendkim                                                                                                                                                              
PIDFILE=$RUNDIR/$NAME.pid                                                                                                                                                   
EXTRAAFTER=   

Включает следующие строки, где определяется сокет:

if [ -f /etc/opendkim.conf ]; then                                                                                                                                          
    CONFIG_SOCKET=`awk '$1 == "Socket" { print $2 }' /etc/opendkim.conf`                                                                                                    
fi                                                                                                                                                                          

# This can be set via Socket option in config file, so it's not required                                                                                                    
if [ -n "$SOCKET" -a -z "$CONFIG_SOCKET" ]; then                                                                                                                            
    DAEMON_OPTS="-p $SOCKET $DAEMON_OPTS"                                                                                                                                   
fi
lw1.at
источник
«так что я могу использовать его с постфиксом» Вы уверены, что вам это нужно, чтобы он работал с Postfix?
Милош Чаконович
@Miloshio Я так и думал, так как postfix работает в chroot. (Согласно учебнику я следую )
lw1.at
@Miloshio postfix утверждает, что connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directoryдаже думал, что он существует, так как /var/spool/postfix/
привязан
Похоже, что это не chroot. Пожалуйста, не могли бы вы проверить еще раз? Ваши пути должны выглядеть так, как /var/spool/postfix/var/run...если бы это было
Милош Чаконович
В любом случае я бы использовал inetвместо local. Может быть, если вы не отлаживаете сервис, попробуйте внедрить: digitalocean.com/community/tutorials/…
Милош Чаконович

Ответы:

31

Я наконец нашел решение.

/etc/init.d/opendkim, Кажется, не делать ничего. Но вместо этого используется служебный файл, /lib/systemd/system/opendkim.serviceкоторый имеет неправильный сокет.

Но пакет debian также включает в себя bash, который генерирует правильный сервис systemd.

Итак, после запуска

/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart

и перезапуская файл сокета появляется в ожидаемом месте, что можно проверить, вызвав:

tail /var/log/mail.log | grep OpenDKIM

Обновление: кажется, есть сообщение об ошибке в Debian об этой проблеме: # 861169

lw1.at
источник
2

У меня недостаточно репутации, чтобы комментировать, и я хотел признать, что после нескольких часов поиска решения для сообщения об ошибке «Отказано в соединении» OpenDKim-Postfix /lib/systemd/system/opendkim.serviceредактирование, предоставленное LocutusBE, работало с Ubuntu 17.04:

warning: connect to Milter service inet:localhost:8891: Connection refused

редактировать /lib/systemd/system/opendkim.service

сдача:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

чтобы:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:12301@localhost

systemctl daemon-reload

и

systemctl opendkim restart

Перед тем , как редактирование я добавил пользователь постфикса к opendkim группы и попытался /lib/opendkim/opendkim.service.generateза Лукас Винклера решения. Ошибка отказа в соединении сохранялась до тех пор, пока не был добавлен номер порта /lib/systemd/system/opendkim.service.

Для обновления /lib/systemd/system/opendkim.serviceя использовал порт 8891 для Ubuntu и закомментировал исходную строку ExecStart для целей тестирования, затем добавил новую строку с номером порта:

/lib/systemd/system/opendkim.service (Service category):

    [Service]
    Type=forking
    PIDFile=/var/run/opendkim/opendkim.pid
    User=opendkim
    UMask=0007
    #ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
    ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:8891@localhost
    Restart=on-failure
    ExecReload=/bin/kill -USR1 $MAINPID

Соответствующий номер порта был дополнительно указан в /etc/opendkim.conf:

Socket                  inet:8891@localhost

И /etc/postfix/main.cf:

smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

После перезапуска демона systemctl, opendkim и postfix исходящая почта была подписана без проблем, и в журнале почты отображалось «Добавлено поле подписи DKIM».

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

В последнее время не было проблем с подключением при настройке OpenDkim с Centos7, поэтому, очевидно, в этом случае это было связано с Ubuntu. Спасибо Лукасу Винклеру за размещение вопроса и тех, кто поделился своими решениями.

1keown
источник
1

Для использования inetсокета необходимо указать:

SOCKET="inet:12301@localhost" в /etc/default/opendkim

Кроме того, вам необходимо изменить настройки в Postfix, следовательно:

в /etc/postfix/main.cf добавлении:

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

если вы не можете установить localжелаемый путь, я бы посоветовал вам:

  • захватить журнал от mail, syslogили opendkimв /var/logи проверить

  • проверьте /etc/init.d/opendkimскрипт и проверьте, не установлено ли значение файла sock на значение

  • попробуй пойти с дефолтом local:/var/run/opendkim/opendkim.sock- и укажи smtpd_milters = local:/var/run/opendkim/opendkim.sockи non_smtpd_milters = local:/var/run/opendkim/opendkim.sockв/etc/postfix/main.cf

Милош Чаконович
источник
Теперь я изменил конфигурацию, чтобы она была точно такой же, как у вас (тот же порт), но я все еще получаюwarning: connect to Milter service inet:localhost:12301: Connection refused
lw1.at
Вы пытались перезапустить обе службы после редактирования?
Милош Чаконович
Я сделал и теперь я тоже перезагрузился. При просмотре mail.log я всегда вижу следующую строкуOpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
lw1.at
Вы видите эту строку даже с SOCKET="inet:12301@localhostустановленным в opendkim conf файлом?
Милош Чаконович
1
opendkim игнорирует параметр сокета / etc / default / opendkim - сейчас нам нужно изменить /etc/opendkim.conf
SledgehammerPL
1

Это сработало для меня:

редактировать /lib/systemd/system/opendkim.service

сдача:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

чтобы:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:12301@localhost

systemctl daemon-reload

и

systemctl opendkim restart
LocutusBE
источник
Это именно то изменение, которое выполняется скриптом /lib/opendkim/opendkim.service.generate.
lw1.at
Большое спасибо - это исправлено в Ubuntu 16.04.3 LTS, в котором отсутствует opendkim.service.generate.
Иван Мир
0

OpenDKIM работал, пока я не обновил свой сервер. OpenDKIM не запустился, и у Милтера не было сокета, к которому можно было бы подключиться. В /var/log/syslogя мог видеть , что opendkim Ошибка при попытке создать сокет в другое место , чем перед обновлением. Я попытался изменить настройки сокетов в /etc/opendkim.conf, /etc/default/opendkimи , /lib/systemd/system/opendkim.serviceно это не помогает. Оказывается, информация была передо мной все время:

opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter 
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)   
Drop-In: /etc/systemd/system/opendkim.service.d
           └─override.conf    
Active: active (running) since Sat 2017-10-14 16:03:45 CEST; 4h 44min ago

Я заметил, что настройки были перезаписаны файлом «override.conf» и отредактированы так, чтобы он был выровнен с моим /etc/postfix/main.cf(работает как chroot):

smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = local:/opendkim/opendkim.sock

редактировать /etc/systemd/system/opendkim.service.d/override.conf

[Service]
PIDFile=/var/spool/postfix/opendkim/opendkim.pid
ExecStart=
ExecStart=/usr/sbin/opendkim -P /var/spool/postfix/opendkim/opendkim.pid -p local:/var/spool/postfix/opendkim/opendkim.sock

И наконец перезапускаем демона и опендким:

systemctl daemon-reload && systemctl restart opendkim
lallepot
источник
0

Я просто переименовал /etc/systemd/system/opendkim.service.d/override.conf в /etc/systemd/system/opendkim.service.d/override.conf.old, чтобы он не переопределял параметры ExecStart.

Все работает нормально, выбирая конфигурацию из /etc/opendkim.conf

Аслам Сайед
источник
0

Мой opendkim сервис не проснулся на порту 8100 после установки, и предыдущие решения не помогли. Итак, я попробовал

/lib/opendkim/opendkim.service.generate

с сказал

-bash: /lib/opendkim/opendkim.service.generate: No such file or directory

поэтому я посмотрел на служебный файл

cat /lib/systemd/system/opendkim.service
# If you are using OpenDKIM with SQL datasets it might be necessary to start OpenDKIM after the database servers.
# For example, if using both MariaDB and PostgreSQL, change "After=" in the "[Unit]" section to:
# After=network.target nss-lookup.target syslog.target mariadb.service postgresql.service

[Unit]
Description=DomainKeys Identified Mail (DKIM) Milter
Documentation=man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html
After=network.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=-/etc/default/opendkim
PIDFile=/var/run/opendkim/opendkim.pid
PermissionsStartOnly=true
User=opendkim
Group=opendkim
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim
ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS
TimeoutStartSec=10
ExecReload=/bin/kill -USR1 $MAINPID

и нашел странные пути

EnvironmentFile=-/etc/default/opendkim
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim

и команда

 /usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS

сказал

/usr/sbin/opendkim: option requires an argument -- 'p'

(посмотрите на 2-ю строку в предыдущей квоте), поэтому я пошел в

sudo nano /lib/systemd/system/opendkim.service

и удалил "-" 3 раза

sudo systemctl daemon-reload
sudo service opendkim restart
sudo netstat -tulpn

Это помогло мне :-)

Энди Величковский
источник