私は現在、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を超えると、何でも問題なく動作します。どうすれば解決できますか?
免責事項: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のいずれかからの電子メールのみを受け入れます。
これは、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は私には機能しません!