Я в настоящее время использование комплекса mailserver установка с помощью Постфикса, Голубятни, Amavis и Spamassassin.
Все хорошо работает, но я хочу улучшить Postfix-Amavis-Communication. В данный момент постфикс отправит все письма в localhost:10024
который является amavis сервисом. После всех проверок измененной версии передают обратно localhost:10025
который является постфиксным сервисом для получения amavis письма.
Моя идея: СОКЕТЫ UNIX (Из-за соображений безопасности; не важный, почему)
Таким образом, я настроил amavis для порождения сокета Unix в /run/amavis/amavis.socket
.
И я изменил это:
amavis-forward:[127.0.0.1]:10024` to `amavis-forward:unix:/run/amavis/amavis.sock
Но затем я получаю эту ошибку:
Jan 5 13:55:23 server postfix/smtp[1447]: fatal: unknown service: /run/amavis/amavis.sock/tcp
Jan 5 13:55:24 server postfix/qmgr[1254]: warning: private/amavis-forward socket: malformed response
Jan 5 13:55:24 server postfix/qmgr[1254]: warning: transport amavis-forward failure -- see a previous warning/fatal/panic logfile record for the problem description
Таким образом, почтовое состояние установлено на status=deferred (unknown mail transport error)
.
master.cf:
...
# Amavis
amavis-forward unix - - - - 2 smtp
-o smtp_tls_security_level=none
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
...
Более чем:10024 что-либо хорошо работает. Как я могу решить его?
Отказ от ответственности:это половина ответа, потому что я могу использовать сокет, когда postfix -> amavis, но я не могу использовать его, когда amavis -> postfix. См. Объяснение в конце этого ответа.
Чтобы использовать сокет, вы должны использовать LMTP вместо SMTP для доставки электронной почты от postfix до amavis.
Как сказал NickW выше, вам нужно поместить сокет amavis в очередь Postfix каталог. В этом ответе я предполагаю, что каталог очереди постфиксов - / var / spool / postfix /
.
Создать каталог для хранения сокета amavis
mkdir /var/spool/postfix/amavis/
chmod 750 /var/spool/postfix/amavis/
chown amavis:amavis /var/spool/postfix/amavis/
Добавить пользователя postfix в группу amavis
usermod -G amavis postfix
Конфигурация в amavisd.conf
# for socket, it should reside in /var/spool/postfix
$unix_socketname = "/var/spool/postfix/amavis/amavisd.sock";
# set permission so amavis group can access this socket
$unix_socket_mode = 0660;
# Replace $interface_policy{'SOCK'} = 'AM.PDP';
$interface_policy{'SOCK'} = 'mysock';
$policy_bank{'mysock'} = {
protocol => 'LMTP',
auth_required_release => 0, # don't require secret-id for release
};
Postfix main.cf
content_filter = amavis-forward:unix:amavis/amavisd.sock
Postfix master.cf
# Amavis
amavis-forward unix - - - - 2 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
Результат
amais postfix/smtpd[13393]: connect from localhost[127.0.0.1]
amais postfix/smtpd[13393]: 4E0B82340F: client=localhost[127.0.0.1]
amais postfix/cleanup[13359]: 4E0B82340F: message-id=<20150106070245.4E0B82340F@example.net>
amais postfix/qmgr[13352]: 4E0B82340F: from=<root@example.net>, size=344, nrcpt=1 (queue active)
amais postfix/smtpd[13363]: connect from localhost[127.0.0.1]
amais postfix/smtpd[13363]: 6081E2340B: client=localhost[127.0.0.1]
amais postfix/cleanup[13359]: 6081E2340B: message-id=<20150106070245.4E0B82340F@example.net>
amais postfix/qmgr[13352]: 6081E2340B: from=<root@example.net>, size=688, nrcpt=1 (queue active)
amais postfix/smtpd[13363]: disconnect from localhost[127.0.0.1]
amais postfix/local[13365]: 6081E2340B: to=<root@example.net>, orig_to=<koala@example.net>, relay=local, delay=0.01, delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
amais postfix/qmgr[13352]: 6081E2340B: removed
amais amavis[13113]: (13113-03) Passed CLEAN {RelayedInbound}, mysock <root@example.net> -> <koala@example.net>, Message-ID: <20150106070245.4E0B82340F@example.net>, mail_id: MLZDzoda7siu, Hits: -, size: 344, queued_as: 6081E2340B, 90 ms
amais postfix/lmtp[13361]: 4E0B82340F: to=<koala@example.net>, relay=example.net[amavis/amavisd.sock], delay=0.11, delays=0.01/0/0.01/0.09, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 6081E2340B)
amais postfix/qmgr[13352]: 4E0B82340F: removed
Для транспорта amavis -> postfix он управляется параметром forward_method
. Я не знаком с этой конфигурацией, кроме smtp. В примере на этой странице , очевидно, протокол, поддерживаемый этим параметром, - это pipe, smtp и bsmtp. Кроме того, на основе архитектуры postfix , postfix принимает электронную почту только от smtpd, qmqmd или sendmail.
Это решение для связи amavis с postfix через сокет unix. Это вторая половина ответа masegaloeh.
Во-первых, вы должны изменить каталог / var / spool / postfix / amavis
:
chmod 770 /var/spool/postfix/amavis
chown amavis:postfix /var/spool/postfix/amavis
Идея, лежащая в основе этого: Postfix создаст unix-сокет smtpd сервис в этом каталоге. Проблема в том, что вы определили это в master.cf как ../ amavis / amavis-accept - - - 2 smtpd
, но тогда postfix будет искать файл pid в pid / unix .. .amavis / amavis-accept
, который не работает.
Поэтому мы должны использовать обходной путь:
Создайте ссылку на каталог amavis
:
cd /var/spool/postfix/public
ln -s ../amavis amavis
После этого необходимо подготовить каталог файла pid:
cd /var/spool/postfix/pid
mkdir unix.amavis
chown root:root unix.amavis
chmod 700 unix.amavis
Теперь нам нужно настроить службу smtpd для приема почты (master.cf):
amavis/amavis-accept unix n - - - - smtpd
-o smtpd_tls_security_level=none
-o cleanup_service_name=amaviscleanup
-o mynetworks=127.0.0.0/8
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_unknown_recipient_checks
Теперь настройте amavis в amavisd.conf или в файле конфигурации вашей операционной системы:
$forward_method = 'smtp:/var/spool/postfix/amavis/amavis-accept';
Письмо пересылается на amavis, что вы можете увидеть в первой половине ответа masegaloeh. Затем amavis отправляет его обратно в сокет unix с помощью smtp.
Проблема заключалась в postfix. Вам необходимо создать сокет unix, к которому amavis может получить доступ без добавления amavis в postmap или группу postfix. Поэтому я сначала использовал ../ amavis / amavis-accept
, чтобы сокет был успешно создан. Но postfix создает pid-файл и использует это имя. В качестве постфикса сокета unix используйте pid / unix. + имя службы
, которое было pid / unix ... / amavis / amavis-accept.
Итак, я создал эту ссылку в общедоступной папке
, и постфикс может создать сокет ( установить разрешения для каталога amavis), и мне нужно только amavis / amavis-accept
в master.cf.
В этой конфигурации файл pid будет pid / unix.amavis / amavis. принять
. Для этого мне нужно было только создать каталог unix.amavis
, и из-за unix.amavis
, а не unix ... amavis
он соответствует стилю pid каталог немного.
LMTP у меня не работает!