web-dev-qa-db-ja.com

Postfix&Amavis-通信にUNIXソケットを使用

私は現在、Postfix、Dovecot、Amavis、Spamassassinを使用して複雑なメールサーバーセットアップを使用しています。

すべて正常に動作しますが、Postfix-Amavis-Communicationを改善したいと思います。現時点では、postfixはすべてのメールをamavisサービスである_localhost:10024_に送信します。すべてのチェックの後、変更されたバージョンは_localhost:10025_に送り返されます。これはamavisメールを受信するためのPostfixサービスです。

私の考え:NIX SOCKETS(セキュリティ上の理由から、重要ではない理由)

そこで、_/run/amavis/amavis.socket_でunixソケットを生成するようにamavisを構成しました。

そして私はこれを変更しました:

_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
user219962

免責事項:postfix-> amavisの場合はソケットを使用できますが、amavis-> postfixの場合は使用できないため、これは半分の答えです。この回答の最後にある説明を参照してください。

ソケットを使用するには、SMTPではなくLMTPを使用して、postfixからamavisにメールを配信する必要があります。

NickWが上で言ったように、Postfixキューディレクトリ内にamavisソケットを置く必要があります。 この回答では、接尾辞キューディレクトリは/var/spool/postfix/であると想定しています。

Amavisソケットを保持するディレクトリを作成します

mkdir /var/spool/postfix/amavis/
chmod 750 /var/spool/postfix/amavis/
chown amavis:amavis /var/spool/postfix/amavis/

Amavisグループにpostfixユーザーを追加します

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

接尾辞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=<[email protected]>
amais postfix/qmgr[13352]: 4E0B82340F: from=<[email protected]>, 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=<[email protected]>
amais postfix/qmgr[13352]: 6081E2340B: from=<[email protected]>, size=688, nrcpt=1 (queue active)
amais postfix/smtpd[13363]: disconnect from localhost[127.0.0.1]
amais postfix/local[13365]: 6081E2340B: to=<[email protected]>, orig_to=<[email protected]>, 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 <[email protected]> -> <[email protected]>, Message-ID: <[email protected]>, mail_id: MLZDzoda7siu, Hits: -, size: 344, queued_as: 6081E2340B, 90 ms
amais postfix/lmtp[13361]: 4E0B82340F: to=<[email protected]>, 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
masegaloeh

これは、UNIXソケットを介した後置へのamavisの通信のためのソリューションです。マセガロエの答えの後半です。

まず、/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/unix...amavis/amavis-acceptのpidファイルを検索することです。これは機能しません。
したがって、回避策を使用する必要があります。

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

次に、メール(master.cf)を受け入れるようにsmtpdサービスを構成する必要があります。

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

次に、amavisd.confまたはOSの構成ファイルでamavisを構成します。

$forward_method = 'smtp:/var/spool/postfix/amavis/amavis-accept';

使い方

メールはamavisに転送され、masegaloehの回答の前半で確認できます。次に、amavisはそれをsmtpでunixソケットに送り返します。

問題は接尾辞でした。 postmapまたはpostfixグループにamavisを追加せずにamavisがアクセスできるunixソケットを作成する必要があります。そこで、最初に../amavis/amavis-acceptを使用して、ソケットが正常に作成されました。ただし、postfixはpidファイルを作成し、この名前を使用します。 UNIXソケットの接尾辞としてpid/unix. + services nameを使用します。これはpid/unix.../amavis/amavis-accept.でした。

だから私はこのリンクをpublicフォルダーに作成し、postfixがソケットを作成できるようにし(amavisディレクトリのアクセス許可を設定)、master.cfにamavis/amavis-acceptだけが必要です。

この構成では、pidファイルはpid/unix.amavis/amavis.acceptです。そのためには、unix.amavis directoryを作成するだけでよく、unix.amavisではなくunix...amavisのため、pidディレクトリのスタイルと少し一致します。

LMTPは私には機能しません!

2
user219962