「Postfix」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(校正(でき・出来))
 
(3人の利用者による、間の12版が非表示)
4行目: 4行目:
 
{{Related|Postfix と SASL}}
 
{{Related|Postfix と SASL}}
 
{{Related|Amavis}}
 
{{Related|Amavis}}
  +
{{Related|仮想ユーザーメールシステム}}
{{Related4|Virtual user mail system}}
 
{{Related4|Courier MTA}}
+
{{Related|Courier MTA}}
  +
{{Related|Exim}}
{{Related3|Exim with remote SMTP server|Exim}}
 
{{Related4|OpenSMTPD}}
+
{{Related|OpenSMTPD}}
  +
{{Related|OpenDMARC}}
  +
{{Related|OpenDKIM}}
  +
{{Related|SOGo}}
 
{{Related articles end}}
 
{{Related articles end}}
 
[http://www.postfix.org/ Postfix のサイト] より:
 
[http://www.postfix.org/ Postfix のサイト] より:
18行目: 21行目:
 
{{Pkg|postfix}} パッケージを[[インストール]]してください。
 
{{Pkg|postfix}} パッケージを[[インストール]]してください。
   
  +
{{Note|{{ic|/var/log/mail.log}} にログを出力するには [[syslog-ng]] などのパッケージを設定する必要があります。}}
=== DNS レコード ===
 
 
メールホストを MX レコードに設定する必要があります。通常はドメインプロバイダの設定インターフェイスから設定できます。
 
 
メール交換レコード (MX レコード) は Domain Name System におけるリソースレコードの一つで、受取人のドメインを代表してメールメッセージを受け取るメールサーバーを指定します。
 
 
メールメッセージがインターネットから送られると、メール転送エージェントが Domain Name System から受取人のドメイン名の MX レコードを聞き出します。このクエリに対して、メール交換サーバーのホスト名のリストが返ってきます。次に、エージェントはそれらのサーバーのどれか一つと (設定番号が一番若いサーバーから順番に) SMTP 接続を確立して、接続が出来た最初のサーバーにメールを配送します。
 
 
{{Note|Some mail servers will not deliver mail to you if your MX record points to a CNAME. For best results, always point an MX record to an A record definition. For more information, see e.g. [[Wikipedia:List of DNS record types|Wikipedia's List of DNS Record Types]].}}
 
   
 
== 設定 ==
 
== 設定 ==
34行目: 29行目:
 
{{ic|/etc/postfix/master.cf}} は利用するプロトコルの種類を指定できるマスター設定ファイルです。また、パイプを設定することでスパムのチェックなどを行うこともできます。
 
{{ic|/etc/postfix/master.cf}} は利用するプロトコルの種類を指定できるマスター設定ファイルです。また、パイプを設定することでスパムのチェックなどを行うこともできます。
   
[[#Secure SMTP]] に書かれているように Secure SMTP を有効化することを推奨します。
+
[[#Secure SMTP (送信)]] や [[#Secure SMTP (受信)]] に書かれているように Secure SMTP を有効化することを推奨します。
  +
  +
送受信されるメールの暗号化については [http://www.postfix.org/TLS_README.html このページ] を見てください。
   
 
=== main.cf ===
 
=== main.cf ===
50行目: 47行目:
   
 
*{{ic|mydestination}} はローカルユーザーのルックアップです。
 
*{{ic|mydestination}} はローカルユーザーのルックアップです。
:{{bc|1=mydestination = $myhostname, localhost.$mydomain, localhost}}
+
:{{bc|1=mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain}}
   
*{{ic|mynetworks}} と {{ic|mynetwork_style}} はリレーを制御し、許可するユーザーを指定します。リレーは設定しません。
+
*{{ic|mynetworks}} と {{ic|mynetworks_style}} はリレーを制御し、許可するユーザーを指定します。リレーは設定しません。
 
:{{ic|mynetwork_style}} は host に設定して、スタンドアロンの Postfix ホストを作成し、ウェブメールを利用できるようにします。リレーは行わず、他の MTA も使いません。ただのウェブメールです。
 
:{{ic|mynetwork_style}} は host に設定して、スタンドアロンの Postfix ホストを作成し、ウェブメールを利用できるようにします。リレーは行わず、他の MTA も使いません。ただのウェブメールです。
 
:{{bc|1=mynetworks_style = host}}
 
:{{bc|1=mynetworks_style = host}}
59行目: 56行目:
 
:{{bc|1=relay_domains = }}
 
:{{bc|1=relay_domains = }}
   
*{{ic|home_mailbox}} or {{ic|mail_spool_directory}} control how mail is delivered/stored for the users.
+
*{{ic|home_mailbox}} {{ic|mail_spool_directory}} はユーザーのメールの保存場所を指定します。
:If set, {{ic|mail_spool_directory}} specifies an absolute path where mail gets delivered. By default Postfix stores mails in {{ic|/var/spool/mail}}.
+
:設定する場合、{{ic|mail_spool_directory}} にはメールを保存するディレクトリを絶対パスで指定します。デフォルトでは Postfix {{ic|/var/spool/mail}} にメールを保存します。
   
:{{bc|1=home_spool_directory = /home/vmailer}}
+
:{{bc|1=mail_spool_directory = /home/vmailer}}
   
  +
:また、{{ic|home_mailbox}} はメールが配達されるメールボックスをユーザーのホームディレクトリからの相対パスで指定します (例: {{ic|/home/vmailer}})。
:Alternatively, if set, {{ic|home_mailbox}} specifies a mailbox relative to the user's home directory where mail gets delivered (eg: /home/vmailer).
 
   
  +
:Courier-IMAP は "Maildir" フォーマットを必要とするため、以下のように末尾にスラッシュを付ける必要があります:
:Courier-IMAP requires "Maildir" format, so you '''must''' set it like the following example with trailing slash:
 
 
:{{bc|1=home_mailbox = Maildir/}}
 
:{{bc|1=home_mailbox = Maildir/}}
   
{{Warning|If you plan on implementing SSL/TLS, please respond safely to [http://disablessl3.com/ POODLE] and [https://weakdh.org/sysadmin.html FREAK/Logjam] by adding the following to your configuration:
+
{{Warning|SSL/TLS を使用する場合、設定に以下を追加して [https://weakdh.org/sysadmin.html FREAK/Logjam] に正しく対応してください:
  +
{{bc|1=smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA, KRB5-DES, CBC3-SHA}}
{{bc|1=
 
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
 
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
 
smtpd_tls_protocols=!SSLv2,!SSLv3
 
smtp_tls_protocols=!SSLv2,!SSLv3
 
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA}}
 
   
Then, generate a [https://www.openssl.org/docs/apps/dhparam.html dhparam file] by following [https://weakdh.org/sysadmin.html these instructions] and then adding the following to your configuration:
+
そして [https://weakdh.org/sysadmin.html こちらの手順] に従って [https://www.openssl.org/docs/man1.0.2/apps/dhparam.html dhparam ファイル] を生成して、設定に以下を追加してください:
 
{{bc|1=smtpd_tls_dh1024_param_file = ${config_directory}/dhparams.pem}}
 
{{bc|1=smtpd_tls_dh1024_param_file = ${config_directory}/dhparams.pem}}
  +
2015年中頃から、[http://disablessl3.com/ POODLE] に対してはデフォルト設定で安全な状態となっています。
 
}}
 
}}
   
==== デフォルトメッセージとメールボックスの容量制限 ====
+
==== メッセージとメールボックスの容量制限 ====
   
  +
Postfix はデフォルトでメッセージとメールボックスの容量を制限します。{{ic|message_size_limit}} にはメッセージの最大容量をバイト数で指定します (デフォルトは 10240000 です)。{{ic|mailbox_size_limit}} はローカルのメールボックスや maildir ファイルの最大容量を決めます (デフォルトは 51200000 で、制限したくない場合は 0 に設定します)。配達時に書き出されるあらゆるファイルの容量を制限します。ローカルの配達エージェントによって実行された外部コマンド (procmail) で書き出されるファイルも含みます。バウンスメッセージの通知が生成される場合、{{ic|/var/spool/mail}} 下のローカルのメールボックスの容量を確認して、postconf を使って容量制限を確認してください:
Postfix imposes both message and mailbox size limits by default. The message_size_limit controls the maximum size in bytes of a message, including envelope information. (default 10240000) The mailbox_size_limit controls the maximum size of any local individual mailbox or maildir file. This limits the size of '''any''' file that is written to upon local delivery, '''including files written by external commands''' (i.e. procmail) that are executed by the local delivery agent. (default is 51200000, set to 0 for no limit) If bounced message notifications are generated, check the size of the local mailbox under {{ic|/var/spool/mail}} and use postconf to check these size limits:
 
   
# postconf -d mailbox_size_limit
+
# postconf mailbox_size_limit
 
mailbox_size_limit = 51200000
 
mailbox_size_limit = 51200000
# postconf -d message_size_limit
+
# postconf message_size_limit
 
message_size_limit = 10240000
 
message_size_limit = 10240000
   
104行目: 97行目:
 
newaliases
 
newaliases
   
{{Tip|Alternatively you can create the file {{ic|~/.forward}}, e.g. {{ic|/root/.forward}} for root. Specify the user to whom root mail should be forwarded, e.g. ''user@localhost''.
+
{{Tip|もしくは {{ic|~/.forward}} ファイル (例えば root ユーザーなら {{ic|/root/.forward}}) を作成する方法もあります。メールの転送先となるユーザーを指定してください (例: ''user@localhost''):
   
 
{{hc|/root/.forward|
 
{{hc|/root/.forward|
110行目: 103行目:
 
}}}}
 
}}}}
   
== ローカルメール ==
+
=== ローカルメール ===
   
  +
({{ic|/etc/passwd}} に記述されている) ローカルのシステムユーザーにしかメールを配達しないようにするには、{{ic|/etc/postfix/main.cf}} を以下のように変更してください:
To only deliver mail to local system users (that are in {{ic|/etc/passwd}}), you only need to change the following lines in {{ic|/etc/postfix/main.cf}}. Uncomment them and modify them to the specifics listed below. Everything else can be left as installed.
 
   
  +
myhostname = localhost
  +
mydomain = localdomain
 
mydestination = $myhostname, localhost.$mydomain, localhost
 
mydestination = $myhostname, localhost.$mydomain, localhost
inet_interfaces = loopback-only
+
inet_interfaces = $myhostname, localhost
 
mynetworks_style = host
 
mynetworks_style = host
  +
default_transport = error: outside mail is not deliverable
append_dot_mydomain = no
 
default_transport = error: Local delivery only!
 
   
  +
他の設定を変更する必要はありません。上記のように設定したら、[[#エイリアス|エイリアス]]を設定して [[#Postfix の起動|Postfix を起動]]してください。
== バーチャルメール ==
 
  +
  +
=== バーチャルメール ===
 
バーチャルメールはユーザーアカウントにマッピングされないメールです ({{ic|/etc/passwd}})。
 
バーチャルメールはユーザーアカウントにマッピングされないメールです ({{ic|/etc/passwd}})。
   
セットアップする方法は [[en2:Virtual user mail system|Virtual user mail system]] を見てさい。
+
セットアップする方法は[[仮想ユーザーメールシステム]]を見てください。
   
== Postfix check ==
+
=== DNS レコード ===
  +
  +
メールホストを MX レコードに設定する必要があります。通常はドメインプロバイダの設定インターフェイスから設定できます。
  +
  +
メール交換レコード (MX レコード) は Domain Name System におけるリソースレコードの一つで、受取人のドメインを代表してメールメッセージを受け取るメールサーバーを指定します。
  +
  +
メールメッセージがインターネットから送られると、メール転送エージェントが Domain Name System から受取人のドメイン名の MX レコードを聞き出します。このクエリに対して、メール交換サーバーのホスト名のリストが返ってきます。次に、エージェントはそれらのサーバーのどれか一つと (設定番号が一番若いサーバーから順番に) SMTP 接続を確立して、接続ができた最初のサーバーにメールを配送します。
  +
  +
{{Note|一部のメールサーバーは MX レコードが CNAME を示している場合にメールを配達しません。そのようなことが起こらないように、MX レコードは A レコードの定義を指し示すようにしてください。詳しくは [[Wikipedia:ja:DNSレコードタイプの一覧]]などを参照。}}
  +
  +
=== 設定のチェック ===
   
 
{{ic|postfix check}} コマンドを実行してください。設定ファイルで間違っている部分が出力されます。
 
{{ic|postfix check}} コマンドを実行してください。設定ファイルで間違っている部分が出力されます。
131行目: 137行目:
 
全ての設定を確認したいときは、{{ic|postconf}} と入力します。デフォルト設定との差異点を確認したいときは、{{ic|postconf -n}} を実行してみてください。
 
全ての設定を確認したいときは、{{ic|postconf}} と入力します。デフォルト設定との差異点を確認したいときは、{{ic|postconf -n}} を実行してみてください。
   
== Postfix の起動とテスト ==
+
== Postfix の起動 ==
  +
  +
{{Note|[[#エイリアス|エイリアス]]を全く設定していない場合でも Postfix を起動するには最低でも1回は {{ic|newaliases}} を実行する必要があります。}}
   
 
{{ic|postfix.service}} を[[systemd#ユニットを使う|起動・有効化]]してください。
 
{{ic|postfix.service}} を[[systemd#ユニットを使う|起動・有効化]]してください。
   
  +
== テスト ==
Now lets see if Postfix is going to deliver mail for our test user.
 
  +
  +
Postfix がテストユーザーにメールを配達できるかどうか確認してみましょう:
 
{{bc|
 
{{bc|
 
nc servername 25
 
nc servername 25
150行目: 160行目:
   
 
451 4.3.0 <lisi@test.com>:Temporary lookup failure
 
451 4.3.0 <lisi@test.com>:Temporary lookup failure
  +
MySQL のユーザー名やパスワードが間違っているか、あるいは MySQL のソケットが正しい場所に存在しません。
Maybe you have entered the wrong user/password for MySQL or the MySQL socket is not in the right place.
 
  +
  +
Postfix を起動する前に newaliases を実行していなかった場合も上記のエラーが発生します。Postfix をローカルのみで使用するのであれば MySQL は不要です。
   
 
550 5.1.1 <email@spam.me>: Recipient address rejected: User unknown in virtual mailbox table.
 
550 5.1.1 <email@spam.me>: Recipient address rejected: User unknown in virtual mailbox table.
Double check content of mysql_virtual_mailboxes.cf and check the main.cf for mydestination
+
{{ic|mysql_virtual_mailboxes.cf}} の中身や {{ic|main.cf}} {{ic|mydestination}} をチェックしてください。
   
 
=== メールを受け取ったことを確認 ===
 
=== メールを受け取ったことを確認 ===
169行目: 181行目:
 
最後のエントリが実際のメールです。これで動作していることが確認できます。
 
最後のエントリが実際のメールです。これで動作していることが確認できます。
   
  +
== ヒントとテクニック ==
== Extra ==
 
   
 
=== PostfixAdmin ===
 
=== PostfixAdmin ===
186行目: 198行目:
 
$CONF['domain_path'] = 'YES';
 
$CONF['domain_path'] = 'YES';
 
$CONF['domain_in_mailbox'] = 'NO';
 
$CONF['domain_in_mailbox'] = 'NO';
$CONF['database_type'] = 'mysql';
+
$CONF['database_type'] = 'mysqli';
 
$CONF['database_host'] = 'localhost';
 
$CONF['database_host'] = 'localhost';
 
$CONF['database_user'] = 'postfix_user';
 
$CONF['database_user'] = 'postfix_user';
196行目: 208行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
Dovecot をインストールするときにパスワードの認証方式を変更した場合 (例: SHA512-CRYPT)、Postfix の設定もそれにあわせてください:
If installing dovecot and you changed the password scheme in dovecot (to SHA512-CRYPT for example), reflect that with postfix
 
   
 
{{hc|/etc/webapps/postfixadmin/config.inc.php|<nowiki>
 
{{hc|/etc/webapps/postfixadmin/config.inc.php|<nowiki>
202行目: 214行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
Dovecot 2 現在、dovecotpw は非推奨となっています。新しいバイナリ名にあわせて設定を変更すると良いでしょう:
As of dovecot 2, dovecotpw has been deprecated. You will also want to ensure that your config reflects the new binary name.
 
   
 
{{hc|/etc/webapps/postfixadmin/config.inc.php|<nowiki>
 
{{hc|/etc/webapps/postfixadmin/config.inc.php|<nowiki>
208行目: 220行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
Apache の設定ファイルを作成:
Create the Apache configuration file:
 
 
{{hc|/etc/httpd/conf/extra/httpd-postfixadmin.conf|<nowiki>
 
{{hc|/etc/httpd/conf/extra/httpd-postfixadmin.conf|<nowiki>
 
Alias /postfixadmin "/usr/share/webapps/postfixAdmin"
 
Alias /postfixadmin "/usr/share/webapps/postfixAdmin"
219行目: 231行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
(セキュリティを高めるために) postfixadmin にローカルホストからしかアクセスできないようにしたい場合、以下を上記の <Directory> ディレクティブに追加してください:
To only allow localhost access to postfixadmin (for heightened security), add this to the previous <Directory> directive:
 
 
Order Deny,Allow
 
Order Deny,Allow
 
Deny from all
 
Deny from all
 
Allow from 127.0.0.1
 
Allow from 127.0.0.1
   
Now, include httpd-postfixadmin.conf to {{ic|/etc/httpd/conf/httpd.conf}}:
+
{{ic|/etc/httpd/conf/httpd.conf}} から {{ic|httpd-postfixadmin.conf}} をインクルードしてください:
 
# PostfixAdmin configuration
 
# PostfixAdmin configuration
 
Include conf/extra/httpd-postfixadmin.conf
 
Include conf/extra/httpd-postfixadmin.conf
   
  +
{{Note|
{{Note|If you go to yourdomain/postfixadmin/setup.php and it says do not find config.inc.php, add {{ic|/etc/webapps/postfixadmin}} to the {{ic|open_basedir}} line in {{ic|/etc/php/php.ini}}.}}
 
  +
* yourdomain/postfixadmin/setup.php を開いても config.inc.php が見つからないと表示される場合、{{ic|/etc/php/php.ini}} の {{ic|open_basedir}} 行に {{ic|/etc/webapps/postfixadmin}} を追加してください。
{{Note|If you get a blank page check the syntax of the file with {{ic|php -l /etc/webapps/postfixadmin/config.inc.php}}.}}
 
  +
* 空のページが表示される場合は {{ic|php -l /etc/webapps/postfixadmin/config.inc.php}} でファイルに問題がないか構文チェックをかけてください。}}
   
=== Secure SMTP ===
+
=== Secure SMTP (送信) ===
  +
  +
デフォルトでは Postfix/sendmail はメールを暗号化して他の SMTP サーバーに送信しません。TLS を使用するには、{{ic|main.cf}} に以下の行を追加してください:
  +
{{hc|/etc/postfix/main.cf|2=
  +
smtp_tls_security_level = may
  +
}}
  +
  +
TLS を強制的に使用したい場合、{{ic|may}} を {{ic|encrypt}} に変更してください (リモートサーバーが TLS をサポートしていなかった場合はメールの送信に失敗します)。
  +
  +
=== Secure SMTP (受信) ===
  +
  +
詳しくは [http://www.postfix.org/TLS_README.html Postfix TLS Support] を見てください。
   
 
==== STARTTLS over SMTP (ポート 587) ====
 
==== STARTTLS over SMTP (ポート 587) ====
   
  +
STARTTLS over SMTP (ポート 587, SMTP をセキュア化するプロトコル) を有効にするには、以下の行を {{ic|main.cf}} に追加してください:
To enable STARTTLS over SMTP (port 587, the proper way of securing SMTP), uncomment these lines in
 
   
{{hc|/etc/postfix/master.cf|<nowiki>
+
{{hc|/etc/postfix/main.cf|2=
  +
smtpd_tls_security_level = may
smtp inet n - n - - smtpd
 
  +
smtpd_tls_cert_file = '''/path/to/cert.pem'''
  +
smtpd_tls_key_file = '''/path/to/key.pem'''
  +
}}
  +
  +
また {{ic|master.cf}} から以下の行のコメントを取り外してサービスを有効にしてください:
  +
  +
{{hc|/etc/postfix/master.cf|2=
 
submission inet n - n - - smtpd
 
submission inet n - n - - smtpd
  +
}}
-o smtpd_tls_security_level=encrypt
 
-o smtpd_sasl_auth_enable=yes
 
</nowiki>}}
 
   
  +
古い SMTPS ポートの 465 を使う必要がある場合、次のセクションを読んでください。
If you need support for the deprecated SMTPS port 465, read the next section.
 
   
 
==== SMTPS (ポート 465) ====
 
==== SMTPS (ポート 465) ====
   
  +
SMTP をセキュアにする古い方法として '''smtps''' システムサービスを非標準のサービスとして使用してポート 465 で動作させる'''ラッパーモード'''を使う方法があります。
The deprecated method of securing SMTP is using the '''wrapper mode''' which uses the system service '''smtps''' as a non-standard service and runs on port 465.
 
   
  +
有効化するには以下の行をアンコメントしてください:
To enable it uncomment the following lines in
 
   
 
{{hc|/etc/postfix/master.cf|<nowiki>
 
{{hc|/etc/postfix/master.cf|<nowiki>
258行目: 287行目:
 
</nowiki>}}
 
</nowiki>}}
   
And verify that these lines are in {{ic|/etc/services}}:
+
そして {{ic|/etc/services}} の以下の行を確認してください:
 
smtps 465/tcp # Secure SMTP
 
smtps 465/tcp # Secure SMTP
 
smtps 465/udp # Secure SMTP
 
smtps 465/udp # Secure SMTP
   
  +
存在しない場合、追加してください (他のポート 465 を使用するサービスは置き換えてください)。追加しないと Postfix が起動せず以下のエラーが表示されます:
If they are not there, go ahead and add them (replace the other listing for port 465). Otherwise Postfix will not start and you will get the following error:
 
   
 
''postfix/master[5309]: fatal: 0.0.0.0:smtps: Servname not supported for ai_socktype''
 
''postfix/master[5309]: fatal: 0.0.0.0:smtps: Servname not supported for ai_socktype''
272行目: 301行目:
 
{{ic|/etc/mail/spamassassin/local.cf}} を開いて必要に応じて設定して下さい。
 
{{ic|/etc/mail/spamassassin/local.cf}} を開いて必要に応じて設定して下さい。
   
SpamAssassin のマッチパタンを更新:
+
==== SpamAssassin のルの更新 ====
  +
  +
SpamAssassin のマッチパターンを更新してコンパイル:
 
# sa-update
 
# sa-update
  +
# sa-compile
  +
  +
上記のコマンドを定期的に実行したい場合、[[Systemd/タイマー]]を使用するのが良いでしょう。
  +
  +
以下のサービスを作成してください:
  +
{{hc|1=/etc/systemd/system/spamassassin-update.service|2=
  +
[Unit]
  +
Description=spamassassin housekeeping stuff
  +
  +
[Service]
  +
User=spamd
  +
Group=spamd
  +
Type=oneshot
  +
ExecStart=-/usr/bin/vendor_perl/sa-update --allowplugins #You can remove the allowplugins options if you do not want direct plugin updates from SA.
  +
ExecStart=-/usr/bin/vendor_perl/sa-compile
  +
# You can automatically train SA's bayes filter by uncommenting this line and specifying the path to a mailbox where you store email that is spam (for ex this could be yours or your users manually reported spam)
  +
#ExecStart=-/usr/bin/vendor_perl/sa-learn --spam <path to your spam>
  +
}}
  +
  +
そして、上記のサービスを毎日実行するタイマーを作成してください:
  +
{{hc|1=/etc/systemd/system/spamassassin-update.timer|2=
  +
[Unit]
  +
Description=spamassassin house keeping
  +
  +
[Timer]
  +
OnCalendar=daily
  +
Persistent=true
  +
  +
[Install]
  +
WantedBy=timers.target
  +
}}
  +
  +
最後に SpamAssassin の systemd サービスを修正して新しいルールを読み込むために再起動するように設定してください。パッケージに含まれているサービスファイルをカスタムサービスファイルにコピー:
  +
{{bc|1=
  +
# cp /usr/lib/systemd/system/spamassassin.service /etc/systemd/system
  +
}}
  +
  +
そして新しく作成した {{ic|/etc/systemd/system/spamassassin.service}} に以下を記述してください:
  +
{{bc|1=
  +
[Unit]
  +
PartOf=spamassassin-update.service
  +
}}
  +
  +
上記の設定でタイマーが起動する前に Spamassassin の spamd が再起動されます。タイマーが毎日起動している場合、次の日にルールが使えるようになります。ルールのコンパイルにはしばらく時間がかかるため、{{ic|sa.service}} が実行している間にサービスが中断することはありません。
  +
  +
タイマーを起動する前に、先ほど {{ic|spamassassin-update.service}} で指定した {{ic|spamd}} ユーザと {{ic|spamd}} グループが SpamAssassin のマッチパターン更新に関係するディレクトリに書き込めるように所有権を変更します:
  +
{{bc|1=
  +
# chown -R spamd:spamd /etc/mail/spamassassin/sa-update-keys
  +
# chown -R spamd:spamd /var/lib/spamassassin
  +
}}
  +
  +
そして {{ic|spamassassin-update.timer}} を[[起動]]・[[有効化]]してください。
  +
  +
==== SpamAssassin のスタンドアロン設定 ====
   
  +
{{Note|SpamAssassin と Dovecot のメールフィルタリングを組み合わせたい場合、以下の2行は無視して次に進んでください。}}
{{Note|If you want to combine SpamAssassin and Dovecot Mail Filtering, ignore the next two lines and continue further down instead.}}
 
   
 
{{ic|/etc/postfix/master.cf}} を編集して smtp の下にコンテンツ・フィルタを追加:
 
{{ic|/etc/postfix/master.cf}} を編集して smtp の下にコンテンツ・フィルタを追加:
291行目: 376行目:
 
上記の設定をしたら {{ic|spamassassin.service}} を[[起動]]できます。
 
上記の設定をしたら {{ic|spamassassin.service}} を[[起動]]できます。
   
==== SpamAssassin と Dovecot LDA / Sieve を組み合わせる (Mailfiltering) ====
+
==== SpamAssassin と Dovecot LDA / Sieve を組み合わせる (メールフィルタリング) ====
 
[[Dovecot#Sieve]] に書かれているように LDA と Sieve-Plugin をセットアップします。ただし最後の行 {{ic|mailbox_command... }} は無視してください。
 
[[Dovecot#Sieve]] に書かれているように LDA と Sieve-Plugin をセットアップします。ただし最後の行 {{ic|mailbox_command... }} は無視してください。
   
304行目: 389行目:
 
[[Dovecot#Sieve]] に書かれているように LMTP と Sieve をセットアップします。
 
[[Dovecot#Sieve]] に書かれているように LMTP と Sieve をセットアップします。
   
{{ic|/etc/dovecot/conf.d/90-sieve.conf}} を編集して以下を追加:
+
{{ic|/etc/dovecot/conf.d/90-plugins.conf}} を編集して以下を追加:
   
sieve_before = /etc/dovecot/sieve.d/
+
sieve_before = /etc/dovecot/sieve.before.d/
 
sieve_extensions = +vnd.dovecot.filter
 
sieve_extensions = +vnd.dovecot.filter
 
sieve_plugins = sieve_extprograms
 
sieve_plugins = sieve_extprograms
  +
sieve_filter_bin_dir = /etc/dovecot/sieve-filter
  +
sieve_filter_exec_timeout = 120s #this is often needed for the long running spamassassin scans, default is otherwise 10s
   
ディレクトリを作成:
+
ディレクトリを作成して dovecot が実行できるように spamassassin をバイナリとして配置:
   
# mkdir /etc/dovecot/sieve.d/
+
# mkdir /etc/dovecot/sieve-filter
  +
# ln -s /usr/bin/vendor_perl/spamc /etc/dovecot/sieve-filter/spamc
   
新しいファイル {{ic|/etc/dovecot/sieve.d/spamassassin.sieve}} を以下の内容で作成:
+
新しいファイル {{ic|/etc/dovecot/sieve.before.d/spamassassin.sieve}} を以下の内容で作成:
   
 
require [ "vnd.dovecot.filter" ];
 
require [ "vnd.dovecot.filter" ];
filter "spamc" [ "--no-safe-fallback" ];
+
filter "spamc" [ "-d", "127.0.0.1", "--no-safe-fallback" ];
   
 
sieve ルール {{ic|spamassassin.svbin}} をコンパイル:
 
sieve ルール {{ic|spamassassin.svbin}} をコンパイル:
   
# cd /etc/dovecot/sieve.d
+
# cd /etc/dovecot/sieve.before.d
 
# sievec spamassassin.sieve
 
# sievec spamassassin.sieve
   
 
最後に、{{ic|dovecot.service}} を[[再起動]]してください。
 
最後に、{{ic|dovecot.service}} を[[再起動]]してください。
  +
  +
==== SpamAssassin から ClamAV を実行 ====
  +
  +
[[ClamAV]] に書かれているように clamd をインストール・設定してください。
  +
  +
上記の設定のどれかにしたがってメールシステムから SpamAssassin が呼び出されるようにしてください。
  +
  +
{{pkg|perl-cpanplus-dist-arch}} パッケージを[[インストール]]して、以下のように ClamAV の perl ライブラリをインストールしてください:
  +
  +
# /usr/bin/vendor_perl/cpanp -i File::Scan::ClamAV
  +
  +
http://wiki.apache.org/spamassassin/ClamAVPlugin から2つのファイルを {{ic|/etc/mail/spamassassin/}} に追加してください。{{ic|/etc/mail/spamassassin/clamav.pm}} を編集して {{ic|$CLAM_SOCK}} で clamd のソケットを指定してください (デフォルトでは {{ic|/var/lib/clamav/clamd.sock}} です)。
  +
  +
最後に、{{ic|spamassassin.service}} を[[再起動]]してください。
   
 
=== Razor を使う ===
 
=== Razor を使う ===
335行目: 437行目:
 
# chown spamd:spamd /etc/mail/spamassassin/razor
 
# chown spamd:spamd /etc/mail/spamassassin/razor
 
# sudo -u spamd -s
 
# sudo -u spamd -s
  +
$ cd /etc/mail/spamassassin/razor
 
$ razor-admin -home=/etc/mail/spamassassin/razor -register
 
$ razor-admin -home=/etc/mail/spamassassin/razor -register
 
$ razor-admin -home=/etc/mail/spamassassin/razor -create
 
$ razor-admin -home=/etc/mail/spamassassin/razor -create
350行目: 453行目:
   
 
===送信者の IP とユーザーエージェントを Received ヘッダに載せない===
 
===送信者の IP とユーザーエージェントを Received ヘッダに載せない===
  +
[[Thunderbird]] を使ってメールを送信している場合、プライバシーに関する懸念になります。Received ヘッダーには LAN や WAN の IP、使用しているメールクライアントの情報などが書かれています [https://askubuntu.com/questions/78163/when-sending-email-with-postfix-how-can-i-hide-the-senders-ip-and-username-in]。送信するメールから Received ヘッダを削除するには以下の手順に従ってください:
This is a privacy concern mostly, if you use Thunderbird and send an email. The received header will contain your LAN and WAN IP and info about the email client you used.
 
(Original source: [http://askubuntu.com/questions/78163/when-sending-email-with-postfix-how-can-i-hide-the-senders-ip-and-username-in AskUbuntu])
 
What we want to do is remove the Received header from outgoing emails. This can be done by the following steps:
 
   
  +
以下の行を {{ic|main.cf}} に追加してください:
Add this line to main.cf
 
 
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
 
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
Create /etc/postfix/smtp_header_checks with this content:
+
以下の内容で {{ic|/etc/postfix/smtp_header_checks}} を作成してください:
 
/^Received: .*/ IGNORE
 
/^Received: .*/ IGNORE
 
/^User-Agent: .*/ IGNORE
 
/^User-Agent: .*/ IGNORE
Finally, restart postfix.service
+
最後に {{ic|postfix.service}} を再起動してください。
  +
  +
===ルールベースのメール処理===
  +
ポリシーサービスを使うことで Postfix のメール処理を簡単に設定できます。{{Pkg|postfwd}} と {{AUR|policyd}}{{Broken package link|{{aur-mirror|policyd}}}} はそのようなポリシーサービスを提供して、[[SPF]] のポリシーチェックに加えて送信者や受信者のグレイリスト・ブラックリストを簡単に作ることができます。
  +
  +
ポリシーサービスはスタンドアロンなサービスであり、以下のようにして Postfix に接続します:
  +
{{hc|/etc/postfix/main.cf|<nowiki>
  +
smtpd_recipient_restrictions =
  +
...
  +
check_policy_service unix:/run/policyd.sock
  +
check_policy_service inet:127.0.0.1:10040
  +
</nowiki>}}
  +
最後にポリシーサービスを配置することで正当なメールだけでが処理されるようになり、負担が減ります。受信されたメッセージ全てが通るように permit ステートメントよりも前に配置してください。
  +
  +
=== DANE (DNSSEC) ===
  +
==== リソースレコード ====
  +
  +
{{warning|This is not a trivial section. Be aware that you make sure you know what you are doing. You better read [https://dane.sys4.de/common_mistakes Common Mistakes] before.}}
  +
  +
DANE は複数のタイプのレコードをサポートしていますが、全てが Postfix で使われるわけではありません。
  +
  +
Certificate Usage Field の0はサポートされておらず、1は3にマッピングされていて、2はオプションです。したがって "3" レコードを使用することが推奨されます。詳しくは [[DANE#リソースレコード]]を見てください。
  +
  +
==== 設定 ====
  +
無条件に信用する DANE は以下のように設定します:
  +
{{hc|/etc/postfix/main.cf|<nowiki>
  +
smtpd_use_tls = yes
  +
smtp_dns_support_level = dnssec
  +
smtp_tls_security_level = dane
  +
</nowiki>}}
  +
{{hc|/etc/postfix/master.cf|<nowiki>
  +
dane unix - - n - - smtp
  +
-o smtp_dns_support_level=dnssec
  +
-o smtp_tls_security_level=dane
  +
</nowiki>}}
  +
  +
To use per-domain policies, e.g. opportunistic DANE for example.org and mandatory DANE for example.com,
  +
use something like this:
  +
{{hc|/etc/postfix/main.cf|<nowiki>
  +
indexed = ${default_database_type}:${config_directory}/
  +
  +
# Per-destination TLS policy
  +
#
  +
smtp_tls_policy_maps = ${indexed}tls_policy
  +
  +
# default_transport = smtp, but some destinations are special:
  +
#
  +
transport_maps = ${indexed}transport
  +
</nowiki>}}
  +
  +
{{hc|transport|
  +
example.com dane
  +
example.org dane
  +
}}
  +
  +
{{hc|tls_policy|
  +
example.com dane-only
  +
}}
  +
  +
{{Note|For global mandatory DANE, change {{ic|smtp_tls_security_level}} to {{ic|dane-only}}. Be aware that this makes postfix tempfail on all delivieres that do not use DANE at all!}}
  +
  +
完全なドキュメントは [http://www.postfix.org/TLS_README.html#client_tls_dane こちら] にあります。
   
 
== 参照 ==
 
== 参照 ==

2024年7月10日 (水) 20:22時点における最新版

関連記事

Postfix のサイト より:

Postfix は高速で管理しやすくセキュアでありながら、同時に既存のユーザーを使えるように sendmail と互換性を保っています。そのため、外から見ると sendmail のようですが、中身は完全に別物です。

この記事では Postfix をセットアップする方法と基本的な設定ファイルの説明をします。ローカルのシステムユーザーだけが使える設定の手順と、仮想ユーザーを使う方法のリンクが存在します。

インストール

postfix パッケージをインストールしてください。

ノート: /var/log/mail.log にログを出力するには syslog-ng などのパッケージを設定する必要があります。

設定

master.cf

/etc/postfix/master.cf は利用するプロトコルの種類を指定できるマスター設定ファイルです。また、パイプを設定することでスパムのチェックなどを行うこともできます。

#Secure SMTP (送信)#Secure SMTP (受信) に書かれているように Secure SMTP を有効化することを推奨します。

送受信されるメールの暗号化については このページ を見てください。

main.cf

/etc/postfix/main.cf はあらゆることを設定できるメイン設定ファイルです。仮想ローカルのみの配送をする場合、以下の設定を推奨します。

  • myhostname はメールサーバーが複数のドメインを持っている場合に、プライマリドメインをメールホストにしたくないときに設定してください。DNS の A レコードと MX レコードの両方がこのホスト名を指定している必要があります。
myhostname = mail.nospam.net
  • mydomain は通常 myhostname の値から最初の部分を除いた部分になります。ドメインが信頼できないときは、手動で設定してください。
mydomain = nospam.net
  • myorigin はメールの送信元になります。通常は mydomain の値に設定します。単純なサーバーなら、これで十分です。ローカルアカウントからのメール用です。ローカル転送はしないため (送信は除く)、基本的にあまり重要ではありません。
myorigin = $mydomain
  • mydestination はローカルユーザーのルックアップです。
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
  • mynetworksmynetworks_style はリレーを制御し、許可するユーザーを指定します。リレーは設定しません。
mynetwork_style は host に設定して、スタンドアロンの Postfix ホストを作成し、ウェブメールを利用できるようにします。リレーは行わず、他の MTA も使いません。ただのウェブメールです。
mynetworks_style = host
  • relaydomains は Postfix のリレー先を指定します。デフォルトの値は空です。空のままでかまいません。
relay_domains =
  • home_mailboxmail_spool_directory はユーザーのメールの保存場所を指定します。
設定する場合、mail_spool_directory にはメールを保存するディレクトリを絶対パスで指定します。デフォルトでは Postfix は /var/spool/mail にメールを保存します。
mail_spool_directory = /home/vmailer
また、home_mailbox はメールが配達されるメールボックスをユーザーのホームディレクトリからの相対パスで指定します (例: /home/vmailer)。
Courier-IMAP は "Maildir" フォーマットを必要とするため、以下のように末尾にスラッシュを付ける必要があります:
home_mailbox = Maildir/
警告: SSL/TLS を使用する場合、設定に以下を追加して FREAK/Logjam に正しく対応してください:
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA, KRB5-DES, CBC3-SHA

そして こちらの手順 に従って dhparam ファイル を生成して、設定に以下を追加してください:

smtpd_tls_dh1024_param_file = ${config_directory}/dhparams.pem

2015年中頃から、POODLE に対してはデフォルト設定で安全な状態となっています。

メッセージとメールボックスの容量制限

Postfix はデフォルトでメッセージとメールボックスの容量を制限します。message_size_limit にはメッセージの最大容量をバイト数で指定します (デフォルトは 10240000 です)。mailbox_size_limit はローカルのメールボックスや maildir ファイルの最大容量を決めます (デフォルトは 51200000 で、制限したくない場合は 0 に設定します)。配達時に書き出されるあらゆるファイルの容量を制限します。ローカルの配達エージェントによって実行された外部コマンド (procmail) で書き出されるファイルも含みます。バウンスメッセージの通知が生成される場合、/var/spool/mail 下のローカルのメールボックスの容量を確認して、postconf を使って容量制限を確認してください:

# postconf mailbox_size_limit
mailbox_size_limit = 51200000
# postconf message_size_limit
message_size_limit = 10240000

エイリアス

エイリアス (別名フォワーダー) は /etc/postfix/aliases で指定できます。

root でメールを読むのはよろしくないので root に届いたメールは全て他のアカウントにマッピングするべきでしょう。

以下の行をアンコメントして、you を実際のアカウントに置き換えてください:

root: you

/etc/postfix/aliases の編集を終えたら postalias コマンドを実行してください:

postalias /etc/postfix/aliases

後で変更するときは:

newaliases
ヒント: もしくは ~/.forward ファイル (例えば root ユーザーなら /root/.forward) を作成する方法もあります。メールの転送先となるユーザーを指定してください (例: user@localhost):
/root/.forward
user@localhost

ローカルメール

(/etc/passwd に記述されている) ローカルのシステムユーザーにしかメールを配達しないようにするには、/etc/postfix/main.cf を以下のように変更してください:

myhostname = localhost
mydomain = localdomain
mydestination = $myhostname, localhost.$mydomain, localhost
inet_interfaces = $myhostname, localhost
mynetworks_style = host
default_transport = error: outside mail is not deliverable

他の設定を変更する必要はありません。上記のように設定したら、エイリアスを設定して Postfix を起動してください。

バーチャルメール

バーチャルメールはユーザーアカウントにマッピングされないメールです (/etc/passwd)。

セットアップする方法は仮想ユーザーメールシステムを見てください。

DNS レコード

メールホストを MX レコードに設定する必要があります。通常はドメインプロバイダの設定インターフェイスから設定できます。

メール交換レコード (MX レコード) は Domain Name System におけるリソースレコードの一つで、受取人のドメインを代表してメールメッセージを受け取るメールサーバーを指定します。

メールメッセージがインターネットから送られると、メール転送エージェントが Domain Name System から受取人のドメイン名の MX レコードを聞き出します。このクエリに対して、メール交換サーバーのホスト名のリストが返ってきます。次に、エージェントはそれらのサーバーのどれか一つと (設定番号が一番若いサーバーから順番に) SMTP 接続を確立して、接続ができた最初のサーバーにメールを配送します。

ノート: 一部のメールサーバーは MX レコードが CNAME を示している場合にメールを配達しません。そのようなことが起こらないように、MX レコードは A レコードの定義を指し示すようにしてください。詳しくは Wikipedia:ja:DNSレコードタイプの一覧などを参照。

設定のチェック

postfix check コマンドを実行してください。設定ファイルで間違っている部分が出力されます。

全ての設定を確認したいときは、postconf と入力します。デフォルト設定との差異点を確認したいときは、postconf -n を実行してみてください。

Postfix の起動

ノート: エイリアスを全く設定していない場合でも Postfix を起動するには最低でも1回は newaliases を実行する必要があります。

postfix.service起動・有効化してください。

テスト

Postfix がテストユーザーにメールを配達できるかどうか確認してみましょう:

nc servername 25
helo testmail.org
mail from:<test@testmail.org>
rcpt to:<cactus@virtualdomain.tld>
data
This is a test email.
.
quit

エラーレスポンス

451 4.3.0 <lisi@test.com>:Temporary lookup failure

MySQL のユーザー名やパスワードが間違っているか、あるいは MySQL のソケットが正しい場所に存在しません。

Postfix を起動する前に newaliases を実行していなかった場合も上記のエラーが発生します。Postfix をローカルのみで使用するのであれば MySQL は不要です。

550 5.1.1 <email@spam.me>: Recipient address rejected: User unknown in virtual mailbox table.

mysql_virtual_mailboxes.cf の中身や main.cfmydestination をチェックしてください。

メールを受け取ったことを確認

$ find /home/vmailer と入力してください。

以下のように表示されるはずです:

/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/tmp
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/cur
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/new
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/new/1102974226.2704_0.bonk.testmail.org

最後のエントリが実際のメールです。これで動作していることが確認できます。

ヒントとテクニック

PostfixAdmin

PostfixAdmin を使うには、Apache HTTP Server に書かれているように Apache/MySQL/PHP のセットアップが必要です。

IMAP を機能させるには、php-imap をインストールして /etc/php/php.iniimap.so をアンコメントしてください。

そして、postfixadminインストールしてください。

PostfixAdmin の設定ファイルを編集:

/etc/webapps/postfixadmin/config.inc.php
$CONF['configured'] = true;
// correspond to dovecot maildir path /home/vmail/%d/%u 
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix_user';
$CONF['database_password'] = 'hunter2';
$CONF['database_name'] = 'postfix_db';

// globally change all instances of ''change-this-to-your.domain.tld'' 
// to an appropriate value

Dovecot をインストールするときにパスワードの認証方式を変更した場合 (例: SHA512-CRYPT)、Postfix の設定もそれにあわせてください:

/etc/webapps/postfixadmin/config.inc.php
$CONF['encrypt'] = 'dovecot:SHA512-CRYPT';

Dovecot 2 現在、dovecotpw は非推奨となっています。新しいバイナリ名にあわせて設定を変更すると良いでしょう:

/etc/webapps/postfixadmin/config.inc.php
$CONF['dovecotpw'] = "/usr/sbin/doveadm pw";

Apache の設定ファイルを作成:

/etc/httpd/conf/extra/httpd-postfixadmin.conf
Alias /postfixadmin "/usr/share/webapps/postfixAdmin"
<Directory "/usr/share/webapps/postfixAdmin">
    DirectoryIndex index.html index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>

(セキュリティを高めるために) postfixadmin にローカルホストからしかアクセスできないようにしたい場合、以下を上記の <Directory> ディレクティブに追加してください:

   Order Deny,Allow
   Deny from all
   Allow from 127.0.0.1

/etc/httpd/conf/httpd.conf から httpd-postfixadmin.conf をインクルードしてください:

# PostfixAdmin configuration
Include conf/extra/httpd-postfixadmin.conf
ノート:
  • yourdomain/postfixadmin/setup.php を開いても config.inc.php が見つからないと表示される場合、/etc/php/php.iniopen_basedir 行に /etc/webapps/postfixadmin を追加してください。
  • 空のページが表示される場合は php -l /etc/webapps/postfixadmin/config.inc.php でファイルに問題がないか構文チェックをかけてください。

Secure SMTP (送信)

デフォルトでは Postfix/sendmail はメールを暗号化して他の SMTP サーバーに送信しません。TLS を使用するには、main.cf に以下の行を追加してください:

/etc/postfix/main.cf
smtp_tls_security_level = may

TLS を強制的に使用したい場合、mayencrypt に変更してください (リモートサーバーが TLS をサポートしていなかった場合はメールの送信に失敗します)。

Secure SMTP (受信)

詳しくは Postfix TLS Support を見てください。

STARTTLS over SMTP (ポート 587)

STARTTLS over SMTP (ポート 587, SMTP をセキュア化するプロトコル) を有効にするには、以下の行を main.cf に追加してください:

/etc/postfix/main.cf
smtpd_tls_security_level = may
smtpd_tls_cert_file = /path/to/cert.pem
smtpd_tls_key_file = /path/to/key.pem

また master.cf から以下の行のコメントを取り外してサービスを有効にしてください:

/etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd

古い SMTPS ポートの 465 を使う必要がある場合、次のセクションを読んでください。

SMTPS (ポート 465)

SMTP をセキュアにする古い方法として smtps システムサービスを非標準のサービスとして使用してポート 465 で動作させるラッパーモードを使う方法があります。

有効化するには以下の行をアンコメントしてください:

/etc/postfix/master.cf
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

そして /etc/services の以下の行を確認してください:

smtps 465/tcp # Secure SMTP
smtps 465/udp # Secure SMTP

存在しない場合、追加してください (他のポート 465 を使用するサービスは置き換えてください)。追加しないと Postfix が起動せず以下のエラーが表示されます:

postfix/master[5309]: fatal: 0.0.0.0:smtps: Servname not supported for ai_socktype

SpamAssassin

spamassassin パッケージをインストールしてください。

/etc/mail/spamassassin/local.cf を開いて必要に応じて設定して下さい。

SpamAssassin のルールの更新

SpamAssassin のマッチパターンを更新してコンパイル:

# sa-update
# sa-compile

上記のコマンドを定期的に実行したい場合、Systemd/タイマーを使用するのが良いでしょう。

以下のサービスを作成してください:

/etc/systemd/system/spamassassin-update.service
[Unit]
Description=spamassassin housekeeping stuff

[Service]
User=spamd
Group=spamd
Type=oneshot
ExecStart=-/usr/bin/vendor_perl/sa-update --allowplugins #You can remove the allowplugins options if you do not want direct plugin updates from SA.
ExecStart=-/usr/bin/vendor_perl/sa-compile
# You can automatically train SA's bayes filter by uncommenting this line and specifying the path to a mailbox where you store email that is spam (for ex this could be yours or your users manually reported spam)
#ExecStart=-/usr/bin/vendor_perl/sa-learn --spam <path to your spam>

そして、上記のサービスを毎日実行するタイマーを作成してください:

/etc/systemd/system/spamassassin-update.timer
[Unit]
Description=spamassassin house keeping

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

最後に SpamAssassin の systemd サービスを修正して新しいルールを読み込むために再起動するように設定してください。パッケージに含まれているサービスファイルをカスタムサービスファイルにコピー:

# cp /usr/lib/systemd/system/spamassassin.service /etc/systemd/system

そして新しく作成した /etc/systemd/system/spamassassin.service に以下を記述してください:

[Unit]
PartOf=spamassassin-update.service

上記の設定でタイマーが起動する前に Spamassassin の spamd が再起動されます。タイマーが毎日起動している場合、次の日にルールが使えるようになります。ルールのコンパイルにはしばらく時間がかかるため、sa.service が実行している間にサービスが中断することはありません。

タイマーを起動する前に、先ほど spamassassin-update.service で指定した spamd ユーザと spamd グループが SpamAssassin のマッチパターン更新に関係するディレクトリに書き込めるように所有権を変更します:

# chown -R spamd:spamd /etc/mail/spamassassin/sa-update-keys
# chown -R spamd:spamd /var/lib/spamassassin

そして spamassassin-update.timer起動有効化してください。

SpamAssassin のスタンドアロン設定

ノート: SpamAssassin と Dovecot のメールフィルタリングを組み合わせたい場合、以下の2行は無視して次に進んでください。

/etc/postfix/master.cf を編集して smtp の下にコンテンツ・フィルタを追加:

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin

以下の SpamAssassin のサービスエントリも追加:

spamassassin unix -     n       n       -       -       pipe
  flags=R user=spamd argv=/usr/bin/vendor_perl/spamc -e /usr/bin/sendmail -oi -f ${sender} ${recipient}

上記の設定をしたら spamassassin.service起動できます。

SpamAssassin と Dovecot LDA / Sieve を組み合わせる (メールフィルタリング)

Dovecot#Sieve に書かれているように LDA と Sieve-Plugin をセットアップします。ただし最後の行 mailbox_command... は無視してください。

代わりに /etc/postfix/master.cf にパイプを追加:

dovecot   unix  -       n       n       -       -       pipe
      flags=DRhu user=vmail:vmail argv=/usr/bin/vendor_perl/spamc -u spamd -e /usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

そして /etc/postfix/main.cf で有効化:

virtual_transport = dovecot

SpamAssassin と Dovecot LMTP / Sieve を組み合わせる

Dovecot#Sieve に書かれているように LMTP と Sieve をセットアップします。

/etc/dovecot/conf.d/90-plugins.conf を編集して以下を追加:

sieve_before = /etc/dovecot/sieve.before.d/
sieve_extensions = +vnd.dovecot.filter
sieve_plugins = sieve_extprograms
sieve_filter_bin_dir = /etc/dovecot/sieve-filter
sieve_filter_exec_timeout = 120s #this is often needed for the long running spamassassin scans, default is otherwise 10s

ディレクトリを作成して dovecot が実行できるように spamassassin をバイナリとして配置:

# mkdir /etc/dovecot/sieve-filter
# ln -s /usr/bin/vendor_perl/spamc /etc/dovecot/sieve-filter/spamc

新しいファイル /etc/dovecot/sieve.before.d/spamassassin.sieve を以下の内容で作成:

require [ "vnd.dovecot.filter" ];
filter "spamc" [ "-d", "127.0.0.1", "--no-safe-fallback" ];

sieve ルール spamassassin.svbin をコンパイル:

# cd /etc/dovecot/sieve.before.d
# sievec spamassassin.sieve

最後に、dovecot.service再起動してください。

SpamAssassin から ClamAV を実行

ClamAV に書かれているように clamd をインストール・設定してください。

上記の設定のどれかにしたがってメールシステムから SpamAssassin が呼び出されるようにしてください。

perl-cpanplus-dist-arch パッケージをインストールして、以下のように ClamAV の perl ライブラリをインストールしてください:

# /usr/bin/vendor_perl/cpanp -i File::Scan::ClamAV

http://wiki.apache.org/spamassassin/ClamAVPlugin から2つのファイルを /etc/mail/spamassassin/ に追加してください。/etc/mail/spamassassin/clamav.pm を編集して $CLAM_SOCK で clamd のソケットを指定してください (デフォルトでは /var/lib/clamav/clamd.sock です)。

最後に、spamassassin.service再起動してください。

Razor を使う

先に SpamAssassin をインストールしてから、razor パッケージをインストールしてください。

Razor の登録:

# mkdir /etc/mail/spamassassin/razor
# chown spamd:spamd /etc/mail/spamassassin/razor
# sudo -u spamd -s
$ cd /etc/mail/spamassassin/razor
$ razor-admin -home=/etc/mail/spamassassin/razor -register
$ razor-admin -home=/etc/mail/spamassassin/razor -create
$ razor-admin -home=/etc/mail/spamassassin/razor -discover

/etc/mail/spamassassin/local.cf に以下を追加:

razor_config /etc/mail/spamassassin/razor/razor-agent.conf

/etc/mail/spamassassin/razor/razor-agent.conf に以下を追加:

razorhome = /etc/mail/spamassassin/razor/

最後に、spamassassin.service再起動してください。

送信者の IP とユーザーエージェントを Received ヘッダに載せない

Thunderbird を使ってメールを送信している場合、プライバシーに関する懸念になります。Received ヘッダーには LAN や WAN の IP、使用しているメールクライアントの情報などが書かれています [1]。送信するメールから Received ヘッダを削除するには以下の手順に従ってください:

以下の行を main.cf に追加してください:

smtp_header_checks = regexp:/etc/postfix/smtp_header_checks

以下の内容で /etc/postfix/smtp_header_checks を作成してください:

/^Received: .*/     IGNORE
/^User-Agent: .*/   IGNORE

最後に postfix.service を再起動してください。

ルールベースのメール処理

ポリシーサービスを使うことで Postfix のメール処理を簡単に設定できます。postfwdpolicydAUR[リンク切れ: アーカイブ: aur-mirror] はそのようなポリシーサービスを提供して、SPF のポリシーチェックに加えて送信者や受信者のグレイリスト・ブラックリストを簡単に作ることができます。

ポリシーサービスはスタンドアロンなサービスであり、以下のようにして Postfix に接続します:

/etc/postfix/main.cf
smtpd_recipient_restrictions =
  ...
  check_policy_service unix:/run/policyd.sock
  check_policy_service inet:127.0.0.1:10040

最後にポリシーサービスを配置することで正当なメールだけでが処理されるようになり、負担が減ります。受信されたメッセージ全てが通るように permit ステートメントよりも前に配置してください。

DANE (DNSSEC)

リソースレコード

警告: This is not a trivial section. Be aware that you make sure you know what you are doing. You better read Common Mistakes before.

DANE は複数のタイプのレコードをサポートしていますが、全てが Postfix で使われるわけではありません。

Certificate Usage Field の0はサポートされておらず、1は3にマッピングされていて、2はオプションです。したがって "3" レコードを使用することが推奨されます。詳しくは DANE#リソースレコードを見てください。

設定

無条件に信用する DANE は以下のように設定します:

/etc/postfix/main.cf
smtpd_use_tls = yes
smtp_dns_support_level = dnssec
smtp_tls_security_level = dane
/etc/postfix/master.cf
dane       unix  -       -       n       -       -       smtp
  -o smtp_dns_support_level=dnssec
  -o smtp_tls_security_level=dane

To use per-domain policies, e.g. opportunistic DANE for example.org and mandatory DANE for example.com, use something like this:

/etc/postfix/main.cf
indexed = ${default_database_type}:${config_directory}/

# Per-destination TLS policy
#
smtp_tls_policy_maps = ${indexed}tls_policy

# default_transport = smtp, but some destinations are special:
#
transport_maps = ${indexed}transport
transport
example.com dane
example.org dane
tls_policy
example.com dane-only
ノート: For global mandatory DANE, change smtp_tls_security_level to dane-only. Be aware that this makes postfix tempfail on all delivieres that do not use DANE at all!

完全なドキュメントは こちら にあります。

参照