Назад | Перейти на главную страницу

Postfix и Amavis - использование сокета UNIX для связи

В настоящее время я использую сложную настройку почтового сервера, используя 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.