Я хотел бы установить milter с помощью MIMEDefang в Ubuntu 16.04. У меня есть существующий сервер, использующий Sendmail 8.15.2-3. Я установил MIMEDefang 2.78-1ubuntu1.1 (пакет по умолчанию от apt). Я настроил свой фильтр так, как хотел, и служба, похоже, работает. Кажется, я не могу заставить sendmail подключиться к milter через.
Первоначально я пытался добавить эту строку в свою строку 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 / spool / 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
Я не думал, что это был ответ, но я попытался связать sendmail с mimedefang-multiplexor.sock, так как я не видел mimedefang.sock в ls
но так как у меня другая ошибка. Если это то, что я должен делать, то я задаю неправильный вопрос.
Я чувствую, что упускаю что-то очевидное.
Редактировать: Насколько я могу судить по статусу службы, 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)
Журнал здесь вообще не реагирует на попытки sendmail использовать обычный сокет MD. Он показывает ошибку (я думаю, что это была ошибка тайм-аута), если я пытаюсь использовать сокет мультиплексора.
Внимательно посмотрев на статус службы, я заметил проблему. Если вы посмотрите на команду, указанную в статусе вопроса, она будет выглядеть так:
-U defang -s -p /var/spool/MIMEDefang/mimedefang.sock
Важно отметить, что между -s
параметр и -p
параметр. Я нырнул в /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"` \
После этого у команды был только один пробел между опциями, и sock появился как должен в 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 работает без проблем.