Postfix before-queue Milter���ݡ���


�Ϥ����

Postfix �С������ 2.3 �Ǥ� Sendmail �С������ 8 �� Milter (mail filter) �ץ��ȥ���Υ��ݡ��Ȥ�Ƴ�����ޤ������Υץ��ȥ����MTA�γ�¦�Υ��ץꥱ�������ǥ᡼������Ƥ����Ǥʤ�SMTP�Υ��٥�� (��³������)��SMTP ���ޥ�� (HELO��MAIL FROM �ʤ�) �򸡺�����Τ˻Ȥ��ޤ�������Ϥ��٤ƥ᡼�뤬���塼���������ˤ����ʤ��ޤ���

Postfix �� Milter ���ݡ��Ȥ��ɲä�����ͳ�ϡ�˾�ޤʤ��᡼���֥��å���������Ǥʤ����������򸡾ڤ����� (��: SenderID+SPF �� Domain keys)���᡼����Żҽ�̾������ (��: Domain keys) �Ȥ��ä���¸���ץꥱ������󤬤������󤢤뤿��Ǥ����������ä��������Υ��եȥ��������Ȥˤ⤦�ҤȤ� Postfix ��ͭ�ΥС���������ĤΤϿ�Ū����ӥ����ƥ�Υ꥽������̵�̸����Ǥ���

Postfix 2.3 �� Sendmail �С������ 8 �� Milter �ץ��ȥ���ΥС������ 4 �ޤǤΤ��٤Ƥ��׵�Τ������ʲ��ΤҤȤĤ�������٤Ƥ�������Ƥ��ޤ�: ��å�������ʸ���ִ���������ˤ��衢�ܥɥ�����ȤκǸ�ˤ���������ˡ����������򻲾Ȥ��Ƥ���������

���Υɥ�����Ȥϰʲ�������˴ؤ��������󶡤��ޤ�:

Milter ���ץꥱ��������Postfix����³������ˡ

Postfix�� Milter �����ϰۤʤ�դ��ĤΥ᡼��ե��륿�Υꥹ�Ȥ�Ȥ��ޤ�: �ꥹ�ȤΤҤȤĤ��SMTP�᡼��Ǥ����Ȥ���ե��륿�ǡ��⤦�ҤȤĤΥꥹ�Ȥ���SMTP�᡼��ǻȤ����ΤǤ����դ��ĤΥꥹ�Ȥ�Ŭ����ϰۤʤäƤ����Թ礬�褯����ޤ��󡣤�����򤱤�ˤ� Postfix �˽���ʺƹ��ۤ�ɬ�פˤʤ�Ǥ��礦��

Postfix �ι�¤�����̤��Ƥ���ͤΤ���ˡ��ʲ��� Milter ���ץꥱ������󤬤ɤΤ褦�� Postfix �ȤĤʤ��뤫�οޤ򼨤��ޤ���������³��̾���� Postfix���ޥ�ɤޤ��ϥ����Хץ������Ǥ��ꡢ�ƤĤ���Ȣ�����̾���˿����Τʤ���Τ� Postfix �Υ��塼��ɽ���ޤ����ѻ��ˤʤ�ʤ��褦���������뤫����Ƥ����ϩ�ϴʷ�ˤ��Ƥ���ޤ� (OVERVIEW �ɥ�����Ȥˤ�äȴ����ʵ��Ҥ�����ޤ�)��

SMTP ����
�ե��륿
�� SMTP
�ե��륿
^
|
|
v
^
|
|
|
|
|
|
v
�ͥåȥ�� -> smtpd(8)
\
�ͥåȥ�� -> qmqpd(8) -> cleanup(8) -> incoming
/
pickup(8)
:
�������� -> sendmail(1)

Milter ���ץꥱ�������Υӥ��

Milter ���ץꥱ�������� C �� JAVA��Perl �ǽ񤫤�Ƥ��뤫�⤷��ޤ��󤬡�����ʸ��Ǥ� C ���ץꥱ�����������򰷤��ޤ���Milter ���ץ�Τ���� Sendmail 8 Milter �ץ��ȥ��������������֥������ȥ饤�֥�꤬ɬ�פˤʤ�ޤ���Postfix �ϸ��ߤ��Τ褦�ʥ饤�֥����󶡤��Ƥ��ޤ��󤬡�Sendmail �ˤϤ���ޤ���

�����Ĥ��� Linux �� *BSD �ǥ����ȥ�ӥ塼�����ˤ� Sendmail �� libmilter �饤�֥�꤬�ǥե���Ȥǥ��󥹥ȡ��뤵��Ƥ��ޤ��������Ȥ��С��إ��ˤ�����ޤ蘆�ʤ��Ƥ� dk-milter �� sid-milter �Τ褦�ʥ��ץꥱ������󤬤Ǥ�������ޤ�:

$ gzcat dk-milter-x.y.z.tar.gz | tar xf -
$ cd dk-milter-x.y.z
$ make
[...���Ϥ�ά...]

�ۤ��Υץ�åȥۡ���ǤϤդ��Ĥ�����褬����ޤ�:

Milter ���ץꥱ��������ư�����

Milter ���ץꥱ��������ư�����ˤϡ����ץ����Τ���ե��륿�Υɥ�����Ȥ򻲾Ȥ��Ƥ���������ŵ��Ū�ʥ��ޥ�ɤϤ��Τ褦�ˤʤ�ޤ�:

# /some/where/dk-filter -u userid -p inet:portnumber@localhost ...other options...

userid ��¾�Υ��ץꥱ�������ǻȤ��Ƥ��ʤ��� ("postfix" �� "www" �ʤɤǤʤ���) ����ꤷ�Ƥ���������

Postfix ������

Sendmail ��Ʊ������Postfix �ˤϤɤΤ褦�� Milter ���ץꥱ�������Ȥ��Ȥꤹ�뤫�����椹�����ꥪ�ץ����¿������ޤ�������� Postfix �� Milter �ץ��ȥ�������Ǥϡ���������Υ��ץ���󤬥������Х롢���ʤ�����٤Ƥ� Milter ���ץꥱ��������Ŭ�Ѥ���ޤ�������� Postfix �С������Ǥ� Milter ���ȤΥ����ॢ���Ȥ� Milter ���ȤΥ��顼�ϥ�ɥ�󥰤ʤɤ򥵥ݡ��Ȥ���Ǥ��礦��

��������:

SMTP ���� Milter ���ץꥱ�������

SMTP ���� Milter ���ץꥱ�������� Postfix smtpd(8) �����Ф�Ȥ��ä��Ϥ����᡼��򰷤��ޤ��������ŵ��Ū�ˤϤ���ʤ��᡼���ե��륿�����ꡢ��ǧ���줿 SMTP ���饤����Ȥ���Υ᡼��˽�̾�����ꤹ��Τ˻Ȥ��ޤ���Postfix smtpd(8) �����Ф�Ȥ��ä��Ϥ����᡼��ϼ��˽Ҥ٤��� SMTP �ե��륿��Ŭ�Ѥ���ޤ���

����: Postfix ����ʬ���ղä��� Received: ��å������إå������뤿��� header_checks(5) �� IGNORE ����������ȤäƤϤ����ޤ��󡣤���ϥ᡼���̾�ե��륿������򵯤����ޤ��������ˡ�Postfix �� Received: ��å������إå��ϻĤ��������̵�������뤿��� header_checks(5) �� REPLACE ����������ȤäƤ���������

SMTP ���� Milter ���ץꥱ������� (�ҤȤİʾ�) �� smtpd_milters �ѥ�᡼���˻��ꤹ�롣���줾��� Milter ���ץꥱ�������� listen ���Ƥ��륽���åȤ�̾���Ǽ��̤���ޤ�; ����ʳ��� Milter ���ꥪ�ץ����ϸ����ǵ������ޤ���Milter ���ץꥱ�������ϻ��ꤵ�줿���Ŭ�Ѥ��졢���ޥ�ɤ���ݤ����ǽ�� Milter ���ץꥱ�������¾�� Milter ���ץꥱ������󤫤�α�����ͥ�褷�ޤ���

/etc/postfix/main.cf:
    # Milters for mail that arrives via the smtpd(8) server.
    # See below for socket address syntax.
    smtpd_milters = inet:localhost:portnumber ...other filters...

listen ���륽���åȤΰ���Ū��ʸˡ�ϰʲ��Τ褦�ˤʤ�ޤ�:

unix:pathname

���ꤵ�줿�ѥ�̾�ǥХ���ɤ���Ƥ����������� UNIX �ɥᥤ�󥵡��Фؤ���³���⤷ smtpd(8) �ʤ����� cleanup(8) �ץ������� chroot ����ư��Ƥ���С����Хѥ��� Postfix �Υ��塼�ǥ��쥯�ȥ꤫������Хѥ��Ȥ��Ʋ�ᤵ��ޤ���

inet:host:port

���ꤷ����������ʤ����ϥ�⡼�ȥۥ��Ȥλ��ꤷ�� TCP �ݡ��Ȥؤ���³���ۥ��Ȥȥݡ��ȤϿ�����̾���ǻ��ꤷ�ޤ���

����: Postfix ��ʸˡ�� inet:port@host �Ȥ��������� Milter ��ʸˡ�Ȥϰۤʤ�ޤ���

�� SMTP Milter ���ץꥱ�������

�� SMTP �ե��륿�� Postfix sendmail(1) �Υ��ޥ�ɥ饤��� Postfix qmqpd(8) �����Ф�Ȥ��ä��Ϥ��᡼��򰷤��ޤ���ŵ��Ū�ˤϥ᡼����Żҽ�̾�˻Ȥ��ޤ�����SMTP�ե��륿�����פʥ᡼��Υե��륿�˻Ȥ����Ȥ�Ǥ��ޤ�����������Ǹ�Ҥ���褦�����¤�����ޤ���Postfix smtpd(8) �����Ф�Ȥ��ä��Ϥ����᡼����� SMTP �ե��륿��Ŭ�Ѥ���ޤ���

����: Postfix ����ʬ���ղä��� Received: ��å������إå������뤿��� header_checks(5) �� IGNORE ����������ȤäƤϤ����ޤ��󡣤���ϥ᡼���̾�ե��륿������򵯤����ޤ��������ˡ�Postfix �� Received: ��å������إå��ϻĤ��������̵�������뤿��� header_checks(5) �� REPLACE ����������ȤäƤ���������

�� SMTP Milter ���ץꥱ�������� non_smtpd_milters �ѥ�᡼���˻��ꤷ�ޤ������Υѥ�᡼��������� smtpd_milters ��Ʊ��ʸˡ��Ȥ��ޤ���SMTP ���ѥե��륿��Ʊ���褦�ˡ��ҤȤİʾ�� Milter ���ץꥱ�����������Ǥ������ꤷ�����Ŭ�Ѥ��졢���ޥ�ɤ���ݤ����ǽ�� Milter ���ץꥱ�������¾�Υ��ץꥱ������󤫤�α�����ͥ�褷�ޤ���

/etc/postfix/main.cf:
    # Milters for non-SMTP mail.
    # See below for socket address syntax.
    non_smtpd_milters = inet:localhost:portnumber ...other filters...

�� SMTP �᡼��� Milter ���ץꥱ��������Ȥ��Ȥ��ˤҤȤľ����ʤ��ɤ����Ȥ�����ޤ�: SMTP ���å���󤬤���ޤ���Milter ���ץꥱ�������򤦤ޤ�ư��������ˡ�Postfix cleanup(8) �����Фϼ¤Ϥʤ�� SMTP ���饤����Ȥ���³�����ǤΥ��٥�Ȥ���ӡ�SMTP ���饤����Ȥ� EHLO��MAIL FROM��RCPT TO��DATA ���ޥ�ɤ򥷥ߥ�졼�Ȥ��Ƥ��ޤ���

����ϰ���Ū�ˤϴ��Ԥɤ����ư���ޤ������ҤȤĤ����㳰������ޤ�: �� SMTP �ե��륿�ϥ��ߥ�졼�Ȥ��줿 RCPT TO ���ޥ�ɤ���ݤ����ꡢ���Ū���Ԥˤ����ꤷ�ƤϤ����ޤ��� non_smtpd_milters ���ץꥱ������󤬼����Ԥ���ݤ�������Ū���Ԥ����ꤹ��ȡ�Postfix �����ꥨ�顼����𤷡��᡼��ϥ��塼��α�ޤ�ޤ���

�᡼����Żҽ�̾����᡼��ե��륿�ǤϤ�������ϵ����ޤ���

Milter �Υ��顼�ΰ���

Milter ���ץꥱ�������Υ��顼�� Postfix ���ɤΤ褦�˰������� milter_default_action �ѥ�᡼���ǻ��ꤷ�ޤ����ǥե���ȤǤϡ����饤����Ȥ���Ǻƻ�ԤǤ���褦�˰�����顼�Υ��ơ��������������Ȥ���ư��ˤʤ�ޤ����ե��륿���ʤ��ä����Τ褦�˥᡼�������Ȥꤿ����� "accept" ����ꤷ�����ץ��顼�Υ��ơ������ǥ᡼�����ݤ���ˤ� "reject" �Ȥ��ޤ���

    # What to do in case of errors?Specify accept, reject, or tempfail.
    milter_default_action = tempfail

Milter �ץ��ȥ���С������

Postfix �� Sendmail �� libmilter �饤�֥���Ȥäƥӥ�ɤ����櫓�ǤϤʤ��Τǡ�Postfix ���Ȥ��٤� Milter �ץ��ȥ���ΥС����������ꤹ��ɬ�פ����뤫�⤷��ޤ��󡣥ǥե���ȤΥС�������2�Ǥ���

milter_protocol = 2

�⤷Postfix milter_protocol �����ꤷ���С�����󤬾���������ȡ�libmilter �饤�֥��Ϥ��Τ褦�ʥ��顼��å�����������˵�Ͽ���ޤ�:

application name: st_optionneg[xxxxx]: 0xyy does not fulfill action requirements 0xzz

ľ���ˤ� Postfix �� milter_protocol �ΥС�������ֹ�����䤷�ޤ����������ʤ��顢Postfix �ǥ��ݡ��Ȥ���Ƥ��ʤ���ǽ�⤢��Τǡ����ˤ�����������⻲�Ȥ��Ƥ���������

�⤷ Postfix �� milter_protocol �����ꤷ���С�������礭������ȡ�libmilter �饤�֥��Ϸٹ������˽��Ϥ���ñ��˥ϥ󥰥��åפ���Postfix �ϰʲ��Τɤ��餫�ηٹ��å���������Ϥ��ޤ�:

postfix/smtpd[21045]: warning: milter inet:host:port: can't read packet header: Unknown error : 0
postfix/cleanup[15190]: warning: milter inet:host:port: can't read packet header: Success

ľ���ˤ� Postfix �� milter_protocol �ΥС�������ֹ���äȾ��������ޤ���

Milter �ץ��ȥ���Υ����ॢ����

Postfix �� Milter �Υץ��ȥ���Τ��줾����ʳ��ǰۤʤ����»��֤�����ޤ�������ɽ�ϤɤΥ����ॢ���Ȥ����ꤤ�ĻȤ��뤫�򼨤�����ΤǤ� (EOH = �إå��ν���ꡢEOM = ��å������ν����)��

�ѥ�᡼�� ���»��� �ץ��ȥ�����ʳ�
milter_connect_timeout 30s CONNECT
milter_command_timeout 30s HELO, MAIL, RCPT, DATA, UNKNOWN
milter_content_timeout 300s HEADER, EOH, BODY, EOM

����: DNS ������¿�������ʤ����ץꥱ�������Ǥ�30�ä��礭������ޤ��󡣤������ʤ��顢��Υ����ॢ���Ȥ��礭�����䤷������ȡ���⡼�� SMTP ���饤����Ȥ��������ƥ᡼�뤬�������������뤫�⤷��ޤ��󡣤���ϥ��塼�������ե��륿�ǤϤ�Ȥ�Ȥ�������Ǥ��롣

Sendmail �ޥ����Υ��ߥ�졼�����

Postfix �ϸ¤�줿���� Sendmail �ޥ�����ɽ�˼������褦�˥��ߥ�졼�Ȥ��ޤ���SMTP �ץ��ȥ���Τ��ʳ����Ȥ˰ۤʤ�Υޥ��������ѤǤ��ޤ� (EOM = ��å������ν����)������餬���ѤǤ��뤫�� Sendmail �Ⱦ��Ʊ���Ȥ����櫓�ǤϤ���ޤ��󡣲�褹��ˤϲ���������ˡ����򻲾Ȥ��Ƥ���������

̾ ���Ѳ�ǽ ��
i DATA, EOM ���塼ID
j ���ĤǤ� myhostname ����
_ ���ĤǤ� ���ڤ��줿���饤�����̾�ȥ��ɥ쥹
{auth_authen} MAIL, DATA, EOM SASL ��������̾
{auth_author} MAIL, DATA, EOM SASL ������
{auth_type} MAIL, DATA, EOM SASL ��������᥽�å�
{client_addr} ���ĤǤ� ���饤����� IP ���ɥ쥹
{client_connections} CONNECT ���Υ��饤����Ȥ�Ʊ����³
{client_name} ���ĤǤ� ���饤����ȥۥ���̾ (�������ȹ�˼��Ԥ����Ȥ��� "unknown")
{client_ptr} CONNECT, HELO, MAIL, DATA ���饤����Ȥεհ���̾ (�����˼��Ԥ����Ȥ��� "unknown")
{cert_issuer} HELO, MAIL, DATA, EOM TLS ���饤����Ⱦ������ issuer (ȯ�Լ�)
{cert_subject} HELO, MAIL, DATA, EOM TLS ���饤����Ⱦ������ subject
{cipher_bits} HELO, MAIL, DATA, EOM TLS ���å���󸰤Υ�����
{cipher} HELO, MAIL, DATA, EOM TLS �Ź沽����
{daemon_name} ���ĤǤ� milter_macro_daemon_name ����
{mail_addr} MAIL �����ԥ��ɥ쥹
{rcpt_addr} RCPT �����ԥ��ɥ쥹
{tls_version} HELO, MAIL, DATA, EOM TLS �ץ��ȥ���С������
v ���ĤǤ� milter_macro_v ����

Postfix �� SMTP �ץ��ȥ�����ʳ����Ȥ�����Υޥ����켰������ޤ������Υޥ�����ɽ�����������褦�ʥѥ�᡼�������ꤵ��ޤ� (EOM = ��å������ν����)��

�ѥ�᡼��̾ �ץ��ȥ���С������ �ץ��ȥ�����ʳ�
milter_connect_macros 2 �ʾ� CONNECT
milter_helo_macros 2 �ʾ� HELO/EHLO
milter_mail_macros 2 �ʾ� MAIL FROM
milter_rcpt_macros 2 �ʾ� RCPT TO
milter_data_macros 4 �ʾ� DATA
milter_end_of_data_macros 2 �ʾ� EOM
milter_unknown_command_macros 3 �ʾ� �����ʥ��ޥ��

������ˡ

����ƥ�ĥե��륿�� DomainKey ����¾�ν�̾��������⤷��ޤ���SMTP�١����Υ���ƥ�ĥե��륿��ȤäƤ���ʤ顢advanced content filter����˽񤫤�Ƥ���褦�� master.cf �� "-o disable_mime_output_conversion=yes" (����: "=" ������˶�����֤��ʤ�) ��ä���٤��Ǥ���

Sendmail �� Milter ���ץꥱ�������Ϥ�Ȥ�� Sendmail �С������ 8 �Ѥ˳�ȯ���줿��ΤǤ��ꡢPostfix �ȤϹ�¤���ۤʤ�ޤ�����̤Ȥ��ơ������Ĥ��� Milter ���ץꥱ�������� Postfix �Ǥ�����Ω���ʤ��Ķ�������ˤ��Ƥ����Τ�����ޤ���

����

������Ǥ� Postfix �� Milter �����ˤ��������¤���󤷤ޤ��������Ĥ������¤ϻ��֤򤫤��Ƽ������ʤद���˼��������Ǥ��礦��������󡢥��塼�������ե��륿��󥰤��̾�����¤Ͼ��Ŭ�Ѥ���ޤ�������� CONTENT_INSPECTION_README �򻲾Ȥ��Ƥ���������