Postfix & Amavis - Используйте UNIX Soket для коммуникации

Я в настоящее время использование комплекса 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 что-либо хорошо работает. Как я могу решить его?

3
задан 5 January 2015 в 16:31
2 ответа

Отказ от ответственности:это половина ответа, потому что я могу использовать сокет, когда 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.

1
ответ дан 3 December 2019 в 06:32

Это решение для связи 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 у меня не работает!

2
ответ дан 3 December 2019 в 06:32

Теги

Похожие вопросы