|
sendmail の代替 MTA として、qmail, postfixというものがあります。sendmail や qmail について記述したページを作ったので、ついでに
Postfix のページも作ります。(インストール方法だけというすごく大雑把な内容です)
Postfix の入手
インストールと事前にやっておくこと
Postfix モジュールをダウンロードして展開します。 Postfix で必要となるユーザーやグループを新規に登録します。(インストールドキュメントでは、モジュールをインストールする直前でユーザー登録を行っている)作業はスーパーユーザーで行います。
また、Redhat Linux 6.2 で作業を行いました。
postfix というユーザーを、むやみにログインできないようにシェルなしで登録します。そして、postfix 宛てのメールを root
に振ります。
# useradd -s /bin/true postfix
# edit /etc/aliases
postfix: root
# newaliases
今まで利用していた sendmailを終了させ、起動されないような手続きを行います。sendmail の終了は kill コマンドを使用して
sendmailプロセスを終了させます。その後、sendmail が起動されないようにします。queue にある未処理のメールを配送する。
# kill -TERM 'process number of sendmail'
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
# mv /usr/bin/mailq /usr/bin/mailq.OFF
# chmod 755 /usr/sbin/sendmail.OFF
# /usr/sbin/sendmail.OFF -q
ダウンロードしてきたソースの展開とコンパイル。
# gzip -dc postfix-20010228-pl08.tar.gz | tar xf -
# cd postfix-20010228-pl08
# make
コンパイルが終了したら、インストールします。このときに、インタラクティブにいろいろと入力を求められます。全て [] 内のデフォルト設定でインストールして構わなければ、リターンキーを入力していきます。
# make install
Warning: this script replaces existing sendmail or Postfix programs.
Make backups if you want to be able to recover.
...
install_root: [/] <Enter>
tempdir: [/tmp/postfix-20010228-pl08] <Enter>
config_directory: [/etc/postfix] <Enter>
daemon_directory: [/usr/postfix/bin] <Enter>
command_directory: [/usr/postfix/bin] <Enter>
queue_directory: [/var/spool/postfix] <Enter>
sendmail_path: [/usr/sbin/sendmail] <Enter>
newaliases_path: [/usr/bin/newaliases] <Enter>
mailq_path: [/usr/bin/mailq] <Enter>
mail_owner: [postfix] <Enter>
setgid: [no] <Enter>
manpages: [/usr/local/man] <Enter>
...
#
設定
Postfix では、mail.cf
というファイルを編集することで環境を設定することが出来ます。postfix コマンドに引数 check を付けて実行すると設定内容がチェックできます。syslog
等のログにエラーが出力されていないか調べる。
# cd /etc/postfix
# cp main.cf main.cf.org
# edit main.cf
# 最低限必要な設定
myhostname = myhost.foobar.co.jp
mydomain = foobar.co.jp
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/mail
mynetworks_style = subnet
# /usr/sbin/postfix check
起動
起動には、postfix コマンドに引数 start を付けて実行することで MTA として起動されます。
# /usr/sbin/postfix start
このプログラムを、OS 起動時に実行するように /etc/rc.d 以下の必要な場所にスクリプトを記述しておくと良い。
メールの中継制限
Postfix には、メール配送方法を制御するパラメータがいくつか用意されています。外部ホストから受信したメッセージをどのように配送するかを制御するといった、最も一般的なメールのリレー制御は
smtpd_recipient_restrictions
というパラメータを使用します。これらはやはり、main.cf
設定ファイルに記述します。ソースパッケージに付属の sample-smtpd.cf ファイルを参考にすると良い。smtpd_recipient_restrictions
パラメータで良く使われると思われるものを表にしておきます。また、以下の太字表示の内いずれかひとつは必ず設定されていなければなりません。
|
値
|
制限される要求
|
| permit_mynetworks |
ローカルネット上の IP Address を持つクライアントを許可する |
| permit |
任意のクライアントに対して任意のホストへのリレーを許可する |
| permit_auth_destination |
$check_relay_domains の基準に合うメッセージを許可する |
| permit_mx_backup |
DNSの MXレコードのエントリーにあるドメイン宛のメッセージ受信を許可する |
| check_relay_domains |
$mydestination, $inet_interfaces, $virtual_maps, $relay_domains
それぞれのパラメータ値にリストされたアドレス宛かチェックする |
| reject |
ローカルを含めすべてのメッセージを拒否する |
| reject_invalid_hostname |
無効な HELOホスト名の場合拒否する |
| reject_maps_rbl |
$maps_rbl_domains(Realtime Blackhole List)に登録されているクライアントからのメッセージを拒否する |
| reject_non_fqdn_hostname |
FQDN(Fully Qualified Domain Name)でない HELOホスト名の場合拒否する |
| reject_non_fqdn_recipient |
受信者アドレスが FQDNでない場合拒否する |
| reject_non_fqdn_sender |
送信者アドレスが FQDNでない場合拒否する |
| reject_unauth_destination |
$check_relay_domains の基準に合わないメッセージはすべて拒否する |
| reject_unauth_popelining |
パイプを使用するプログラムから送信されたメールを拒否する |
| reject_unknown_client |
クライアントのホスト名が不明な場合拒否する |
| reject_unknown_hostname |
DNS の Aレコードや MXレコードのエントリーにない HELOホスト名の場合拒否する |
| reject_unknown_recipient_domain |
受信者のメールアドレスが DNS の Aレコードや MXレコードを持たない場合拒否する |
| reject_unknown_sender_domain |
送信者のメールアドレスが DNS の Aレコードや MXレコードを持たない場合拒否する |
check_client_access
check_helo_access
check_recipient_access
check_sender_access |
データベースに登録されたホストやIP Address、ドメインなどに対するアクセス設定が行えます
check_client_access hash:/etc/postfix/clients
といった形式で、データベースのタイプとデータベース名を指定します。
データベースのレコードフォーマットは
address action
となり、address フィールドには、ホスト名、IP Address、ドメイン名、IPネットワークの範囲を指定できます。action
フィールドには、指定された address に対するアクションを記述します。
REJECT - 拒否
4xx text - textをメッセージとした一時的なエラー
5xx text - textをメッセージとした永続的なエラー
テキスト形式でデータベースのテーブルファイルを上記の形式で作成したら、postmap コマンドでバイナリーのデータベースファイルを作成します。
postmap hash /etc/postfix/clients
また、以下のように指定すると、データベースに登録されたホストやドメインはすべて拒否することになります
smtpd_recipient_restrictions
= check_client_access hash:/etc/postfix/clients, reject
|
受信メールの拒否
Postfixでは、前節のようにリレーに関する細かい設定が行えますが、これをホスト/HELO/MAIL
FROM: に対しても設定することができます。
|
確認
|
パラメータ
|
設定例
|
| 送信元ホスト |
smtpd_client_restrictions |
= check_client_access hash:/etc/postfix/bad_clients
|
| HELOコマンド |
smtpd_helo_restrictions |
= reject_unknown_hostname, permit_mynetworks
= check_helo_access hash:/etc/postfix/bad_helo |
| MAIL FROM: コマンド |
smtpd_sender_restrictions |
= reject_unknown_sender_domain, permit_mynetworks
= check_sender_access hash:/etc/postfix/bad_secer
|
メッセージフィルタを利用してメールを拒否することもできます。Postfix の header_checks パラメータを利用すると、メッセージヘッダーをスキャンし、特定のフレーズを含むメッセージの配送をブロックすることができます。
header_checks = regexp:/etc/postfix/bad_header
と設定(正規表現テーブルを使用する場合)し、以下のレコードフォーマットでファイルを作成します。
pattern action
pattern はヘッダーフィールドでマッチングされる正規表現を記述し、action は、パターンにマッチした際のアクションを指定します。
アクションには、
REJECT - メッセージを拒否
OK - メッセージを許可
IGNORE - メッセージからヘッダー行を破棄
すべてのヘッダー行に対して指定した条件を実行します。
テーブルの例は以下のようになります。大文字小文字の区別は行いません。
/^subject: more money$/ REJECT
/^from: your friend$/ REJECT
|