Linux/postfixのインストール

postfix のインストール(2016-11-24)


(※ここにある情報は古いです。CentOS Stream8での手順 を別途メモしています)


はじめに

postfix は smtp送受信を実装するためのパッケージです。

メールソフトで新規アカウントを設定する時って、
受信サーバと送信サーバの2つを設定すると思いますが、これは後者の機能です。
受信サーバについては、別途用意しましょう。
(例として dovecotをインストール

既存のpostfixの確認

まず、入っているかどうかの確認から。
既存のバージョンで満足するならば、特に入れなおす必要はないかと。

# yum info postfix

よし、私は最新のpostfixをソースからビルドするぞ!といういばらの道を歩む決心?がついたら、
まずは既存を削ります*1。要るファイルがあれば先に退避すること。
(/etc/postfix とか、/etc/init.d/postfix とか、/usr/lib/systemd/system/postfix.service とか)

# yum remove postfix

srcのダウンロード と インストール

Postfixのサイト で適当なURLを探してダウンロード。

以下は例。その時々の最新バージョンを入れましょう。

# cd /usr/local/src
# wget ftp://ftp.riken.jp/net/postfix/postfix-release/official/postfix-3.1.3.tar.gz

必要に応じて、鍵の検証も行います。
以下、gpgコマンドの例。初回実行だと ~/.gnupg が無いので gpg を空打ち&中断で作成できます。

# vi ~/.gnupg/gpg.conf
  (で、keyserver-options auto-key-retrieve のコメントを外しておく)
# wget ftp://ftp.riken.jp/net/postfix/postfix-release/official/postfix-3.1.3.tar.gz.sig
(前述のソース.tar.gz と この tar.gz.sig が同じディレクトリにある状態で)
# gpg --verify postfix-3.1.3.tar.gz.sig

まず、事前に必要なパッケージからですが、

postfix: warning: smtputf8_enable is true, but EAI support is not compiled in

※先に言うと、この機能を使わないなら後述のmain.cf に smtputf8_enable=no を指定するだけで良い。

この件、RELEASE_NOTES-3.0 に書いてあるように smtputf8_enable=yes がデフォルト値になっており、
これを使うにはlibicu-dev*2が必要になる。 だけど、icu が入っていない場合は EAIサポートなしでビルドされてしまって、上記のwarning が出るという話です。
なので、icu を入れます。
私の環境は CentOS 7 なので、libicu-devel です。

# yum install libicu-devel
# ldconfig

私の環境の場合だと /usr/lib64 に libicu が入りました。
このPATHはデフォルトでは make 時に読みに行ってくれなかった?ので、後述の make で SHLIB_RPATH を挟んでます。
ldconfig コマンドで読み込みましょう。


特に問題なければ、ファイルを展開、makeまで行います。
make install は対話式なので、特に変更点がなければEnterを押していきます。

# tar zxvf postfix-3.1.3.tar.gz
# cd postfix-3.1.3/
# make makefiles
# make
# make install

あとは、退避したファイルがあれば戻す or マージして、

/etc/init.d/postfix を作ってから 「chkconfig --add postfix」します。

または

「systemctl enabele postfix」 します。

私の場合は CentOS 7 なので後者です。

設定

※注意:この段階では、インターネット接続なのにSSL認証を使っていません。
 (暗号化していないから盗聴できるし、外からの防御も甘い)
 各環境に合わせて読み替えて設定すること。

/etc/postfix/main.cf で、取り急ぎ変えたのはこんな感じ。

  • smtpd_banner を使って通信相手に自分のバージョンは隠す事。*3
  • mail_spool_directory は語尾に "/" を忘れずに付ける or 取る事。*4
  • smtpd_*_restrictions *5は、この時点ではデフォルト値でいきますが、要チェック事項です。
myhostname = (あなたのドメイン名)
mydomain = (あなたのドメイン名)
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail/
smtpd_banner = $myhostname ESMTP something

(追記:mynetworks の記述を修正しました)
/etc/postfix/master.cf の方は サブミッションポート が必要な場合は、

 submission

と、その後に続くオプション(-o)の中でで必要なもののコメントを外す。


mail_spool_directory で指定した設定が「ディレクトリ( "/" あり)」ならば、
メールspoolをファイルからディレクトリに変更します。

# rm /var/spool/mail/ユーザ名
# mkdir /var/spool/mail/ユーザ名
# chown -R ユーザ:ユーザ  /var/spool/mail/ユーザ名
# chomod 700 /var/spool/mail/ユーザ名

また、その場合は useradd のデフォルト動作も変えた方が良いです。

# vi /etc/default/useradd
CREATE_MAIL_SPOOL=no     # ここをyes から no に変える

その上で、postfix が新規ユーザのディレクトリを自動で作れるようにします。

# chmod 777 /var/spool/mail

一通り終わったら、設定内容をチェックします。

# postfix check

起動は service から

# service postfix start

で、tail -f /var/log/maillog などを見ながら、外のアドレスにメールを投げられるか確認。
今回の設定はインターネット接続が前提なので、確認できたら安全のためにすぐに stop します。

# echo "this is test mail." | mail 誰か@どこか.ne.jp
# service postfix stop

大事なのでメモ。緊急時は stop では無く、abort で強制終了させる。攻撃受けてる場合とか。

# postfix abort

この後にDovecotの設定をやってから気づいたんですが、
CentOS 7 では、firewalld がデフォルトで外からの受信は止めてますね。
前述のように、ローカルから外への送信ならばできるようですが。
その辺りについては、SSL化するので、firewallの話はその時にします。


まずは、こんなところでしょうか。 これを踏まえて、

へと続きます。


*1 何の躊躇もなく上書きビルドしたら、少々まずいことになりました。特にsendmailの依存関係がどうとかでパッケージからremoveできなくなったり。
*2 ディストリビューションによってファイル名は異なるので smtputf8_enable=yes の説明を参照
*3 セキュリティ対策。バージョンがばれると脆弱性もばれる。
*4 メールディレクトリか、メールファイルか、どちらかを選びます。どちらが良いというよりは一長一短ですかね。
*5 第三者中継対策 として、知らないユーザ/サイトからの踏み台にならないように設定する必要があります。