17 February 2010

(Linux, Postfix) root宛のメッセージをプロバイダのメールアドレスに転送

クライアント端末として利用しているLinuxで、root宛に届くメッセージを、外部のプロバイダのメールアドレスに転送する設定。 (わざわざ mail コマンドで確認する手間を省くため)

また、ウイルスに感染した場合、外部に勝手にメールを出されるのを防ぐため、指定したドメイン以外へのメール送信を拒否する設定とする。

■ 検証環境
  Ubuntu 9.10, 10.04, 12.04
CentOS 6.5
  Raspberry Pi (Debian) 2013-02-09-wheezy-raspbian

■ 想定環境
  外部のプロバイダのメールサーバ:smtp.example.com
  外部のプロバイダのメールアドレス:myname@example.com
  外部のプロバイダのメールパスワード:mypassword

■ 必要なソフトウエアのインストール

# apt-get install postfix sasl2-bin

■ Postfixの設定

/etc/postfix/main.cf
myorigin = example.com
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
 
# appending .domain is the MUA's job.
append_dot_mydomain = no
 
# 再送リトライは1回とする
maximal_queue_lifetime = 0
bounce_queue_lifetime = 0
 
readme_directory = no
 
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
# 基本的な設定
myhostname = クライアントPCの名前
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# user@localhost を user@example.com に書き換える等のルール設定ファイル
smtp_generic_maps = hash:/etc/postfix/generic
mydestination = クライアントPCの名前, localhost.localdomain, localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
#inet_interfaces = all
# localhostのみをListenする
inet_interfaces = localhost
#default_transport = error
#relay_transport = error
inet_protocols = ipv4
 
# ISPのSMTPサーバへリレー
relayhost = [smtp.example.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/isp_auth
smto_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = cram-md5, login, plain
 
smtp_generic_maps = hash:/etc/postfix/generic
 
# 送信先アドレスの制限
relay_domains = example.com
smtpd_recipient_restrictions = permit_auth_destination,reject

■ ISPのSMTP認証用のユーザ名とパスワードを設定する。

/etc/postfix/isp_auth
[smtp.example.com]:587 myname@example.com:mypassword

そして、次のコマンドでハッシュ化する。そして、ソースファイルを削除し、ハッシュ化されたファイルはルートユーザ以外は読めないようにする。

# postmap /etc/postfix/isp_auth
# rm /etc/postfix/isp_auth
# chmod go-r /etc/postfix/isp_auth.db

ハッシュ化したファイル(/etc/postfix/isp_auth.db)が作成されれば、オリジナルのソースコード(/etc/postfix/isp_auth)ファイルは不要なので削除してよいと思う。

■ 転送設定を行う

/etc/aliases
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root:  myname@example.com

そして、次のコマンドでハッシュ化する

# postalias /etc/aliases

■ SMTP送信時の送信者アドレスの変換設定

アドレス書き換えについての詳細は「Postfix アドレス書き換え」を参照のこと

/etc/postfix/generic
@localhost  @example.com

そして、次のコマンドでハッシュ化する

# postmap /etc/postfix/generic

■ Postfixの設定(main.cf)の文法チェック

次のコマンドで何もエラーが表示されなければOK。

# postfix check

次のようなエラーメッセージが出てきた場合は、/etc/resolv.conf/var/spool/postfix/etc/にコピーする。

postfix/postfix-script: warning: /var/spool/postfix/etc/resolv.conf and /etc/resolv.conf differ

また、ipv6を無効化していてエラーメッセージが表示される場合は、/etc/postfix/main.cf を修正する。

/etc/postfix/main.cf
inet_protocols = ipv4

■ 送信テスト

mailutilsパッケージをインストールし、mailコマンドを使って送信テストする。

# mail myname@example.com
CC:
Subj: TEST MAIL
Test Message
CTRL + D キーを押す

■ 参考資料
Postfix設定パラメータ