В настоящее время я использую сложную настройку почтового сервера, используя Postfix, Dovecot, Amavis и Spamassassin.
Все работает нормально, но я хочу улучшить Postfix-Amavis-Communication. На данный момент postfix отправляет все письма на адрес 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 все нормально работает. Как я могу это решить?
Это решение для связи amavis с postfix через сокет unix. Это вторая половина ответа масегалоэ.
Во-первых, вам нужно изменить /var/spool/postfix/amavis
каталог:
chmod 770 /var/spool/postfix/amavis
chown amavis:postfix /var/spool/postfix/amavis
Идея, лежащая в основе этого: Postfix создаст в этом каталоге службу smtpd сокета unix. Проблема в том, что вы определили это в 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.
Проблема была постфиксная. Вам необходимо создать сокет unix, к которому amavis может получить доступ без добавления amavis в postmap или группу postfix. Итак, я сначала использовал ../amavis/amavis-accept
так что сокет успешно создан. Но postfix создает pid-файл и использует это имя. В качестве постфикса сокета unix используйте pid/unix. + services name
который был pid/unix.../amavis/amavis-accept.
Я создал эту ссылку в public
папка, и поэтому postfix может создать сокет (установить разрешения для каталога amavis), и мне нужно только amavis/amavis-accept
в master.cf.
В этой конфигурации файл pid pid/unix.amavis/amavis.accept
. Для этого мне нужно было только создать unix.amavis directory
и из-за unix.amavis
и нет unix...amavis
он немного соответствует стилю каталога pid.
LMTP у меня не работает!
Отказ от ответственности: это половина ответа, потому что я могу использовать сокет, когда 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
};
Постфикс 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 принимает электронную почту только от smtpd, qmqmd или sendmail.