作成開始 : 平成22年10月18日(月) 最終更新 : 平成22年10月23日(土)

Postfixでメール送信してみる。


VineLinuxには sendmail ではなく標準で Postfix がインストールされサービスが動いています。
ですが、ディフォルトのままでは使用できません。
せっかくなので、メールを送信できるように設定してみます。
メールの送受信が可能なメールサーバーはFreeBSD(sendmail + qpopper)で構築しているので、送信可能なようにしてみます。
Vine Linuxでメール送受信できる(セキュアなメールサーバー)ようにするのは別の機会にやってみたいと思います。


1.構築仕様

(1)サーバーの管理情報を毎日、指定時間にFreeBSDのメールサーバーへ配送する。
(2)PerlやPHPのスクリプトからメールの送信ができるようにする。
(3)その際、外部へ配送するメールはFreeBSDのメールサーバーを中継するものとする。
(4)メールの送信はLAN内のコンピュータからのみ可能なものとし、外部からの中継はしないものとする。

2.main.cf 設定

Postfixメールサーバの設定ファイルは/etc/postfix/main.cfです。
構築仕様に基づいた設定をしてみます。
編集はテキストエディタ ( vi とか Leafpadとか)を使います。

  ↑
ディフォルトはこんな感じです。
(1) myhostname = takaq1.plala.jp
メールサーバーにするホスト名を記述します。DNSサーバーで CNAME とか使える人は、mail.example.com とかにするといいですね。
私の場合 A レコードしかないのでドメイン名しかできません。
(2) mydomain = takaq1.plala.jp
ドメイン名を記述します。社内ネットワークとかでドメイン名を取得していない場合は勝手に好きなドメイン名をつけてかまいません。ただし(1)で説明したmyhostname記述の部分にあるドメイン名 (example.comに相当) と一致させる必要があります。
(3) myorigin = $mydomain
発信元の定義をする部分です。発信元アドレスに自分のドメインを指定します。
(4) inet_interfaces = all
これはメールの送受信インタフェースを指定するためのものです。allを指定することで、外部ネットワークに対してメールを送受信することができるようになります。
(5) mydestination = $myhostname, localhost.$mydomain, $mydomain
メールをローカルで受信するドメイン名を指定します。デフォルトはマシン自身宛のメールを受け取ります。
(6) mynetworks = 192.168.1.0/24, 127.0.0.0/8
配送を許可するネットワークを記述します。メールが不正中継されないようにこの設定には十分注意します。
(7) relayhost = libretto.takaq.jp
メール送信時の中継サーバー
私のところでは、各Webサーバー -> FreeBSD(sendmail + qpopper) -> ぷららの中継サーバー -> インターネットへ という構成をとっています。
ひととおり設定したら Postfix を再起動します。
# /etc/rc.d/init.d/postfix restart

  ↑
または、↓で再起動かな? (システム→システム管理→サービス)

3.その他設定

(1) aliases ( エイリアス ) の設定
エイリアスとは、宛先の 『 別名 』 という意味で、メールの送信先を別のユーザーへ転送することが出来る機能です。
サーバーの管理情報をメール送信する時なんかに使うとよいです。
例えば、root宛てのメールを管理者ユーザー( 例:master@libretto.takaq.jp )へ送信するには、設定ファイル

[ /etc/postfix/aliases ]

を編集します。
使用設定は、/etc/postfix/main.cf にある以下の記述です。
alias_maps = hash:/etc/postfix/aliases
aliases のディフォルトは以下のようになっています。
これの最後に root: master@libretto.takaq.jp (送信先アドレス) を追加します。
# postalias /etc/postfix/aliases で、/etc/postfix/aliases.db を作成します。

これですぐに設定が反映されます。# newaliases と入力して、aliases.db を初期化しても設定が反映されます。

※記述内容にエラーがあると postalias でメッセージ返してきますので、編集します。
 うまくいくと、aliases.db のタイムスタンプが変わります。
(2) cron による管理情報収集の実行
自動実行のファイルは /etc/crontab です。
crond は、毎分、以下の設定ファイルの内容に変更がないかを確認し、変更があった場合には、それを反映して実行します。
ファイル/ディレクトリ名 利用者 主な用途
/var/spool/cron/user 各ユーザ ユーザの自動タスク設定ファイル
/etc/crontab root 毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル
/etc/cron.hourly root 毎時実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.daily root 毎日実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.monthly root 毎月実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.weekly root 毎週実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.d root 上記以外の自動タスク設定ファイルを置くディレクトリ
ここでは、/etc/crontab について触れてみます。

通常、このファイルには、上記のように、「cron.hourly」、、「cron.daily」、「cron.weekly」、「cron.monthly」配下のファイルが、指定時間ごとに実行されるように設定されています。 書式は次のようになっています。
分 時 日 月 曜日 ユーザ コマンド
これらのディレクトリに、作成したシェルスクリプトを保存し、実行権を付与します。
実行権は chmod 755 ファイル で付与します。
Vine Linux 5.1 のディフォルトでは各ディレクトリには1つもファイルがありません。
そこで、毎日のログを読みや好く簡単に編集して指定のメールアドレスへ送信してくれる便利なソフト logwatch というものがあることを知りました。
ですが、Vine Linuxにはパッケージが無いので google で探してインストールしました。
Ver 7.3.6-1 です。ftp://ftp.kaybee.org/pub/redhat/RPMS/noarch/ にあります。(RedHatのやつですね)

logwatch-7.3.6-1.noarch.rpm です。

(このファイルにある noarch とは、CPUアーキテクチャに依存しないという意味で、どのCPUアーキテクチャでも動作するそうです。)

# cd /usr/local/bin
# wget ftp://ftp.kaybee.org/pub/redhat/RPMS/noarch/logwatch-7.3.6-1.noarch.rpm
# rpm -ivh logwatch-7.3.6-1.noarch.rpm

・・・とかしてインストールするところですが、次の手順でやってみました。
a.Windows PC でファイルをダウンロード
b.ダウンロードしたファイルを samba 共有場所へ保存
c.Vine Linux の「ファイル・ブラウザ」で /usr/local/bin へ保存
d.「システム」→「システム管理」→「RPM インストーラ」でインストール

 ↑
起動直後です。ここで「+」「-」をクリックしてファイルを選択します。

 ↑
「実行」をクリックします。エラーが表示されますが、/etc/cron.daily には以下のファイルがありました。
ここは、最初何もなかったところです。
では、logwatch の設定をしましょう。
vi /usr/share/logwatch/default.conf/logwatch.conf で編集します。

# Default Log Directory
# All log-files are assumed to be given relative to this directory.
LogDir = /var/log  → ログファイルの場所 (ディフォルト)

# You can override the default temp directory (/tmp) here
TmpDir = /tmp  → テンポラリファイルの場所 ( /var/cache/logwatch -> /tmp に変更)

# Default person to mail reports to. Can be a local account or a
# complete email address.
MailTo = root  → メールを送信する宛先(ディフォルト : 特定のメールアドレスに送信する場合はメールアドレスを入力)

# If set to ‘Yes’, the report will be sent to stdout instead of being
# mailed to above person.
Print = No  → Yesの場合は画面表示、Noはメール送信 (ディフォルト Yes -> No に変更)

# if set, the results will be saved in instead of mailed
# or displayed.
#Save = /tmp/logwatch → Yesの場合メール送信をせずにファイルに保存する (ディフォルト リマーク)
注釈付の全文は ここ です。
上記までの設定では、毎日朝 4時 2分に前日分の集計が集計され、root 宛てにメールで送られてきます。

4.テスト

(1) LAN内にあるドメインとプロバイダへ送信テストしてみます。
そして、クライアントPCで受信してみます。

  ↑
おぉ、ちゃんと届いています。プロバイダへのメールもOKでした。
ヘッダ情報を見るとキチンと中継サーバーを経由していました。
(2) logwatch による統計情報のメール送信
設定した時間に統計情報を収集してメール送信できました。
メール本文は ここ にあります。

戻る

サイトトップへ