web-dev-qa-db-ja.com

SendmailをMIMEDefangに接続できません

Ubuntu16.04でMIMEDefangを使用してミルターを設定したいと思います。 Sendmail8.15.2-3を使用している既存のサーバーがあります。 MIMEDefang 2.78-1ubuntu1.1(aptのデフォルトパッケージ)をインストールしました。必要に応じてフィルターを構成しましたが、サービスが実行されているようです。ミルターに接続するためのsendmailを取得できないようです。

私はもともとこの行をsendmail.mc行に追加しようとしました:

INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:1m;R:1m')

しかし、その構成では、誰もメールを送信できず、ログファイルに次のように表示されます。

May 23 11:21:52  sm-mta[17052]: w4NFLq30017052: Milter (mimedefang): local socket name /var/spool/MIMEDefang/mimedefang.sock unsafe
May 23 11:21:52  sm-mta[17052]: w4NFLq30017052: Milter (mimedefang): 
to error state
May 23 11:21:52  sm-mta[17052]: w4NFLq30017052: Milter: initialization failed, temp failing commands

netstat -na | grep fangを実行すると、ソケットのリストが表示されます。

unix  2      [ ACC ]     STREAM     LISTENING     154381   /var/spool/MIMEDefang/mimedefang-multiplexor.sock
unix  2      [ ACC ]     STREAM     LISTENING     154399   /var/spool/MIMEDefang/mimedefang.sock

しかし、/ var/pool/MIMEDefangの内容をリストすると、ソケットはリストされません(ls -l /var/spool/MIMEDefang):

total 8
-rw------- 1 defang defang 6 May 23 15:15 mimedefang-multiplexor.pid
srwx------ 1 defang defang 0 May 23 15:15 mimedefang-multiplexor.sock
-rw------- 1 defang defang 6 May 23 15:15 mimedefang.pid

答えだとは思いませんでしたが、lsにmimedefang.sockが表示されなかったため、sendmailをmimedefang-multiplexor.sockにリンクしようとしましたが、別のエラーが発生しました。それが私がすることになっていることであるならば、私は間違った質問をしている。

明らかな何かが欠けているような気がします。

編集:サービスステータスからわかるように、mimedefangは正しく開始されたようです。

● mimedefang.service
   Loaded: loaded (/etc/init.d/mimedefang; bad; vendor preset: enabled)
   Active: active (running) since Wed 2018-05-23 16:51:17 EDT; 4min 34s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 21578 ExecStop=/etc/init.d/mimedefang stop (code=exited, status=0/SUCCESS)
  Process: 20006 ExecReload=/etc/init.d/mimedefang reload (code=exited, status=0/SUCCESS)
  Process: 21587 ExecStart=/etc/init.d/mimedefang start (code=exited, status=0/SUCCESS)
    Tasks: 8
   Memory: 20.8M
      CPU: 122ms
   CGroup: /system.slice/mimedefang.service
           ├─21617 /usr/bin/mimedefang-multiplexor -p /var/spool/MIMEDefang/mimedefang-multiplexor.pid -E -z /var/spool/MIMEDefang -m 2 -x 10 -U defang -b 600 -l -y 0 -s /var/spool/MIMEDefang/mimedefang-multiplexor.sock
           ├─21634 /usr/bin/mimedefang -P /var/spool/MIMEDefang/mimedefang.pid -R -1 -m /var/spool/MIMEDefang/mimedefang-multiplexor.sock -z /var/spool/MIMEDefang -U defang -s  -p /var/spool/MIMEDefang/mimedefang.sock
           ├─21636 /usr/bin/mimedefang-multiplexor -p /var/spool/MIMEDefang/mimedefang-multiplexor.pid -E -z /var/spool/MIMEDefang -m 2 -x 10 -U defang -b 600 -l -y 0 -s /var/spool/MIMEDefang/mimedefang-multiplexor.sock
           └─21647 /usr/bin/mimedefang-multiplexor -p /var/spool/MIMEDefang/mimedefang-multiplexor.pid -E -z /var/spool/MIMEDefang -m 2 -x 10 -U defang -b 600 -l -y 0 -s /var/spool/MIMEDefang/mimedefang-multiplexor.sock

May 23 16:51:17  systemd[1]: Starting mimedefang.service...
May 23 16:51:17  mimedefang[21587]: Starting mimedefang-multiplexor:                            [  OK  ]
May 23 16:51:17  mimedefang-multiplexor[21617]: started; minSlaves=2, maxSlaves=10, maxRequests=500, maxIdleTime=300, busyTimeout=600, clientTimeout=10
May 23 16:51:17  mimedefang[21634]: MIMEDefang alive. slavesReservedForLoopback=-1 AllowNewConnectionsToQueue=0 doRelayCheck=0 doHeloCheck=0 doSenderCheck=1 doRecipientCheck=0
May 23 16:51:17  mimedefang-multiplexor[21617]: Initialized embedded Perl interpreter
May 23 16:51:17  mimedefang-multiplexor[21617]: Starting slave 0 (pid 21636) (1 running): Bringing slaves up to minSlaves (2)
May 23 16:51:17  mimedefang[21634]: Multiplexor alive - entering main loop
May 23 16:51:17  mimedefang[21587]: Starting mimedefang:                                        [  OK  ]
May 23 16:51:17  systemd[1]: Started mimedefang.service.
May 23 16:51:20  mimedefang-multiplexor[21617]: Starting slave 1 (pid 21647) (2 running): Bringing slaves up to minSlaves (2)

ここのログは、通常のMDソケットを使用しようとしているsendmailにまったく反応しません。マルチプレクサソケットを試してみると、エラーが表示されます(タイムアウトエラーだったと思います)。

1
Fr33dan

サービス状況をじっくりと見つめたところ、問題に気づきました。質問のステータスにリストされているコマンドを見ると、次のようになっています。

-U defang -s  -p /var/spool/MIMEDefang/mimedefang.sock

注意すべき重要な点は、-sパラメーターと-pパラメーターの間に2つのスペースがあることです。調査するために/etc/init.d/mimedefangに飛び込みます。私はbashの専門家にはほど遠いですが、これらの行の引用符が疑わしいように見えることに気づきました。

`[ "$MD_SKIP_BAD_RCPTS" = "yes" ] && echo "-N"` \
"`[ -n "$X_SCANNED_BY" ] && \
        ( [ "$X_SCANNED_BY" = "-" ] && \
            echo "-X" || echo "-x$X_SCANNED_BY" )`" \
`[ "$ALLOW_NEW_CONNECTIONS_TO_QUEUE" = "yes" ] && echo "-q"` \

私の場合のように$X_SCANNED_BYが定義されていなくても、コマンド間に空白が追加されるのではないかと思いました。それらの目的が何であるかはわかりませんでした。私の場合は$X_SCANNED_BYを使用していないため、外側の引用符を削除しました。

`[ "$MD_SKIP_BAD_RCPTS" = "yes" ] && echo "-N"` \
`[ -n "$X_SCANNED_BY" ] && \
        ( [ "$X_SCANNED_BY" = "-" ] && \
            echo "-X" || echo "-x$X_SCANNED_BY" )` \
`[ "$ALLOW_NEW_CONNECTIONS_TO_QUEUE" = "yes" ] && echo "-q"` \

この後、コマンドのオプション間にスペースが1つだけあり、lsの結果に表示されるはずの靴下が表示されます。

total 8
-rw------- 1 defang defang 6 May 24 10:29 mimedefang-multiplexor.pid
srwx------ 1 defang defang 0 May 24 10:29 mimedefang-multiplexor.sock
-rw------- 1 defang defang 6 May 24 10:29 mimedefang.pid
srwx------ 1 defang defang 0 May 24 10:29 mimedefang.sock

最後に、Sendmailは問題なく機能します。

1
Fr33dan