Nie można zmienić gniazda OpenDKIM w odcinku Debian w / etc / default / opendkim

18

Próbuję skonfigurować opendkim na odcinku Debian, ale nie mogę zmienić gniazda. Chcę zmienić gniazdo na, /var/spool/postfix/opendkim/opendkim.sockaby móc używać go z postfiksem.

Dodałem Socket local:/var/spool/postfix/opendkim/opendkim.sockdo/etc/opendkim.conf

i także próbowałem dodać SOCKET="local:/var/spool/postfix/opendkim/opendkim.sockdo /etc/default/opendkim(który musiałem stworzyć).

Bez względu na to, co zmieniam lub jak często restartuję opendkim, zawsze używa go /var/run/opendkim/opendkim.sockjako gniazda.

➜  ~ 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)

Co ja robię źle? (Myślę, że to mój błąd, ponieważ nie mogę znaleźć nikogo z tym samym problemem)

AKTUALIZACJA:

Zmieniających /etc/default/opendkimsię SOCKET="inet:8891@localhost"i zmieniających config postfix do wykorzystania tego gniazda wyników winet:localhost:8891: Connection refused

AKTUALIZACJA 2:

Zastąpiłem teraz plikiem zawartym w pakiecie stretch 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:[email protected]                                                                                                                                                
USER=opendkim                                                                                                                                                               
GROUP=opendkim                                                                                                                                                              
PIDFILE=$RUNDIR/$NAME.pid                                                                                                                                                   
EXTRAAFTER=   

Obejmuje następujące wiersze, w których decyduje gniazdo:

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
źródło
„więc mogę używać go z Postfixem” Czy jesteś pewien, że potrzebujesz go, aby działał z Postfixem?
Miloš Đakonović
@Miloshio Myślałem tak, ponieważ postfix działa w chroot. (Zgodnie z samouczkiem, który
śledzę
@ Miloshio postfix twierdzi connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directorynawet, że istnieje, ponieważ jest chrootowany/var/spool/postfix/
lw1.at
Wygląda na to, że nie jest chrootowany. Czy mógłbyś sprawdzić jeszcze raz? Twoje ścieżki powinny wyglądać tak, /var/spool/postfix/var/run...jakby tak było
Miloš Đakonović
W każdym scenariuszu użyłbym inetzamiast local. Być może, jeśli nie są debugowanie w dół usługi, starają się realizować: digitalocean.com/community/tutorials/...
Miloš Djakonovic

Odpowiedzi:

31

W końcu znalazłem rozwiązanie.

/etc/init.d/opendkimWydaje się nie robić nic. Zamiast tego /lib/systemd/system/opendkim.serviceużywany jest plik serwisowy, w którym źle wpisano niewłaściwe gniazdo.

Ale pakiet debian również wydaje się zawierać bash, który generuje poprawną usługę systemową.

Więc po uruchomieniu

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

i restartowanie opendkim plik gniazda pojawia się w oczekiwanym miejscu, co można zweryfikować, wywołując:

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

Aktualizacja: Wygląda na to, że jest zgłoszenie błędu Debiana dotyczące tego problemu: # 861169

lw1.at
źródło
2

Nie mam wystarczającej reputacji, aby móc komentować, i chciałem potwierdzić, że po wielu godzinach szukania rozwiązania komunikatu o błędzie „odmowa połączenia” OpenDKim-Postfix /lib/systemd/system/opendkim.serviceedycja udostępniona przez LocutusBE działała z Ubuntu 17.04:

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

edytować /lib/systemd/system/opendkim.service

zmiana:

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

do:

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

systemctl daemon-reload

i

systemctl opendkim restart

Przed przystąpieniem do edycji dodałem użytkownika postfiksa do grupy opendkim i wypróbowałem rozwiązanie /lib/opendkim/opendkim.service.generatewedług Lukasa Winklera . Błąd odmowy połączenia trwał do momentu dodania numeru portu /lib/systemd/system/opendkim.service.

Aby zaktualizować /lib/systemd/system/opendkim.service, użyłem portu 8891 dla Ubuntu i skomentowałem oryginalną linię ExecStart do celów testowych, a następnie dodałem nową linię z portem #:

/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

Pasujący numer portu został dodatkowo określony w /etc/opendkim.conf:

Socket                  inet:8891@localhost

I /etc/postfix/main.cf:

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

Po zrestartowaniu demona systemctl, opendkim i postfix poczta wychodząca została podpisana bez problemu, a dziennik poczty pokazywał „Dodano pole sygnatury DKIM”.

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

Ostatnio nie było problemu z połączeniem podczas konfigurowania OpenDkim z Centos7, więc najwyraźniej w tym przypadku było to związane z Ubuntu. Podziękowania dla Lukasa Winklera za opublikowanie pytania i tych, którzy podzielili się swoimi rozwiązaniami.

1 właściciel
źródło
1

Aby użyć inetgniazda, musisz określić:

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

musisz także zmienić ustawienia Postfix:

w /etc/postfix/main.cf dodatku:

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

jeśli nie możesz ustawić localżądanej ścieżki, radzę:

  • chwycić dziennika z mail, sysloglub opendkimw /var/logi sprawdzić

  • sprawdź /etc/init.d/opendkimskrypt i sprawdź, czy plik skarpety ma ustaloną wartość

  • spróbuj przejść z ustawieniem domyślnym local:/var/run/opendkim/opendkim.sock- i określ smtpd_milters = local:/var/run/opendkim/opendkim.sockoraz non_smtpd_milters = local:/var/run/opendkim/opendkim.sockw/etc/postfix/main.cf

Miloš Đakonović
źródło
Zmieniłem teraz konfigurację, aby była dokładnie taka jak twoja (ten sam port), ale nadal otrzymujęwarning: connect to Milter service inet:localhost:12301: Connection refused
lw1.at
próbowałeś zrestartować obie usługi po edycji?
Miloš Đakonović
Zrobiłem i teraz zrestartowałem. Kiedy patrzę na mail.log, zawsze widzę następujący wierszOpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
lw1.at 30.04.17
Widzisz tę linię nawet z SOCKET="inet:12301@localhostzestawem do opendkim conf?
Miloš Đakonović
1
opendkim ignoruje / etc / default / opendkim ustawienie gniazda - na razie musimy zmienić /etc/opendkim.conf
SledgehammerPL
1

To działało dla mnie:

edytować /lib/systemd/system/opendkim.service

zmiana:

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

do:

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

systemctl daemon-reload

i

systemctl opendkim restart
LocutusBE
źródło
Jest to dokładnie zmiana dokonana przez skrypt /lib/opendkim/opendkim.service.generate.
lw1.at 28.07.17
Wielkie dzięki - naprawiłem to na Ubuntu 16.04.3 LTS, którego brakuje opendkim.service.generate.
Ivan Mir,
0

OpenDKIM działał, dopóki nie zaktualizowałem mojego serwera. OpenDKIM nie chciał się uruchomić i nie było uruchomionego gniazda dla Miltera. W /var/log/syslogmogłem zobaczyć, że opendkim zawiodły próby utworzenia gniazda do innego miejsca niż przed uaktualnieniem. Próbowałem zmieniać ustawienia gniazda w /etc/opendkim.conf, /etc/default/opendkima /lib/systemd/system/opendkim.serviceale to nie pomogło. Okazuje się, że informacje były cały czas przede mną:

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

Zauważyłem, że ustawienia zostały nadpisane przez plik „override.conf” i poddane edycji, aby były dostosowane do mojego /etc/postfix/main.cf(działa jako chroot):

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

Edytować /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

I wreszcie zrestartowanie demona i opendkim:

systemctl daemon-reload && systemctl restart opendkim
lallepot
źródło
0

Właśnie zmieniłem nazwę /etc/systemd/system/opendkim.service.d/override.conf na /etc/systemd/system/opendkim.service.d/override.conf.old, aby nie zastępował parametrów ExecStart.

Wszystko działa poprawnie, wybierając konfigurację z /etc/opendkim.conf

Aslam Sayyed
źródło
0

Moja usługa opendkim nie obudziła się na porcie 8100 po instalacji i poprzednie rozwiązania nie pomogły. Więc próbowałem

/lib/opendkim/opendkim.service.generate

ze wspomnianym

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

więc spojrzałem na plik usługi

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

i znalazłem dziwne ścieżki

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

i dowodzenie

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

powiedziany

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

(spójrz do drugiej linii na poprzednim przydziale), więc poszedłem do

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

i usunąłem „-” 3 razy Następnie

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

To pomogło mi :-)

Andy Velychkovskyi
źródło