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


18

Я намагаюся налаштувати opendkim на Debian stretch, але мені не вдалося змінити сокет. Я хочу змінити сокет на /var/spool/postfix/opendkim/opendkim.sockтак, щоб я міг використовувати його з postfix.

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

а також спробував додати SOCKET="local:/var/spool/postfix/opendkim/opendkim.sockдо /etc/default/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

ОНОВЛЕННЯ2:

Тепер я замінив файл, що вкладається в пакет розтяжок 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

"тож я можу використовувати його з постфіксом" Ви впевнені, що вам це потрібно для того, щоб він працював з Postfix?
Мілош Джаконович

@Miloshio Я думав, що так, як постфікс працює в chroot. (Згідно з підручником, за яким я
слідую

Постфікс @Miloshio стверджує, connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directoryщо він навіть думав, що він існує так, як він написаний/var/spool/postfix/
lw1.at

Це звучить так, ніби не укорінено. Будь ласка, ви можете перевірити ще раз? Ваші шляхи повинні виглядати так, /var/spool/postfix/var/run...якби це
Мілош Джаконович

У будь-якому сценарії я б використовував inetзамість цього local. Можливо, якщо ви не налагоджуєте послугу вниз, спробуйте впровадити: digitalocean.com/community/tutorials/…
Miloš Đakonović

Відповіді:


31

Я нарешті знайшов рішення.

Схоже, /etc/init.d/opendkimнічого не робить. Але замість цього використовується службовий файл /lib/systemd/system/opendkim.service, у якого був неправильно розроблений сокет.

Але, напевно, пакет debian також включає в себе баш, який генерує правильну системну службу.

Тож після бігу

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

і перезапустіть opendkim файл сокета з’являється в очікуваному місці, що можна перевірити, зателефонувавши:

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

Оновлення: Схоже, існує проблема дегресівної програми щодо цієї проблеми: # 861169


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

Після перезавантаження системного демона, опендкіма та постфіксу, вихідну пошту було підписано без випуску, а в журналі журналу було вказано "поле підпису DKIM додано".

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

Під час налаштування OpenDkim з Centos7 нещодавно не було проблеми з підключенням, тому, мабуть, у цьому випадку це було пов'язано з Ubuntu. Дякуємо Лукасу Вінклеру за розміщення запитання та тим, хто поділився їхніми рішеннями.


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скрипт і перевірити, чи не встановлено файл шкарпетки на значення

  • спробуйте піти з дефолтом 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 socket settings - зараз ми маємо змінити /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

Це якраз та зміна, яку здійснює сценарій /lib/opendkim/opendkim.service.generate.
lw1.at

Велике спасибі - це виправлено це на Ubuntu 16.04.3 LTS, якого не вистачає opendkim.service.generate.
Іван Мир

0

OpenDKIM працював, поки я не оновив свій сервер. OpenDKIM не запустився, і не було запущено сокет для Milter, який би приєднався до. В /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

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'

(подивіться на другий рядок попередньої квоти), тому я пішов

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

та видалено "-" 3 рази

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

Це мені допомогло :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.