Postfix でメールサーバー設定
sendmail の代替 MTA として、qmail, postfixというものがあります。sendmail や qmail について記述したページを作ったので、ついでに Postfix のページも作ります。(インストール方法だけというすごく大雑把な内容です)
Postfix の入手
Postfix のオフィシャルサイトへ行くと、ダウンロードサイトのリストがあるので一番身近なダウンロードサイトからソースを入手します。
Postfix オフィシャルページ オリジナルサイト
ダウンロードサイトのリスト http://www.postfix.org/ftp-sites.html
postfix-20010228-pl08.tar.gz | リリースされている最新のものを入手(Snapshotでないもの) |
インストールと事前にやっておくこと
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 等のログにエラーが出力されていないか調べる。Berkeley DB を使用していると想定しています。
# 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 transport_maps = hash:/etc/postfix/transport mail_spool_directory = /var/mail mynetworks_style = subnet # /usr/sbin/postfix check
メールアドレスのエイリアスを記述する/etc/aliases
、配送方法のマップを記述する/etc/postfix/transport
はpostmap コマンドでデータベースを作成します。
# edit /etc/aliases webmaster: sysadmin support: user1, user2 # edit /etc/postfix/transport docomo.ne.jp smtp:[mail.foobar.co.jp] .docomo.ne.jp smtp:[mail.foobar.co.jp] # postmap hash /etc/aliases # postmap hash /etc/postfix/transport
起動
起動には、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、ドメインなどに対するアクセス設定が行えます
データベースのレコードフォーマットは
smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/clients, rejectDRAC を利用してPOP before SMTPを設定する場合、 check_client_access として以下のように設定します。
smtpd_recipient_restrictions = check_client_access hash:/etc/mail/dracd |
受信メールの拒否
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