メールサーバー構築 SMTPサーバー Postfix

(最終更新日時:2012-11-28 20:42:59)
オープンソースのメール転送エージェント(MTA)である Postfix をSMTPサーバーとしてインストールします。

事前準備

関連パッケージとして、下記を事前にインストールしておきます。
MySQLデータベース 仮想ドメイン、アカウント管理や認証情報管理はMySQLを使用します
アンチウィルス Clam Anti Virusによるウィルス検査を行います
POP3/IMAPサーバー SMTP-AUTHの認証サーバーとして使用します
ウィルススキャンSMTPフィルタ ウィルス検査を行うためのフィルタです
Postgrey(Postfix Greylisting Policy Server) 迷惑メール対策用のポリシーサーバです
Python Policyd SPF SPF対応ポリシーデーモンです
GUI管理ツール Postfix Admin 仮想ドメイン、アカウントの運用管理はPostfix Adminを使用します

ダウンロード

The Postfix Home Page(http://www.postfix.org/)から次のファイルをダウンロードします。
Postfix 2.9 Patchlevel 4 Source Code postfix-2.9.4.tar.gz
 (※)下線部は 2012/11/24 現在の最新安定バージョンです。

インストール

postfix用のgroupおよびuserを作成します。
# groupadd -g 89 postfix
# groupadd -g 90 postdrop
# useradd  -u 89 postfix -s /sbin/nologin -d /var/spool/postfix -g postfix -G postdrop

/usr/local/srcディレクトリでアーカイブを展開し、コンパイルおよびインストールを行います。
また、迷惑メール対策として 佐藤潔さんtaRgrey を使用します。
$ cd /usr/local/src
$ wget http://mirror.ramix.jp/postfix-release/official/postfix-2.9.4.tar.gz
$ tar zxvf postfix-2.9.4.tar.gz
$ cd postfix-2.9.4

$ # taRgreyを使用するにあたり、sleep時の余計なプロセス増を減らすためのパッチを適用します
$ wget http://k2net.hakuba.jp/pub/postfix-2.9-sleep.patch
$ patch -p0 < postfix-2.9-sleep.patch

$ make makefiles \
>    CCARGS='-DUSE_TLS \                                      # SSL/TLSを使用します
>            -DHAS_MYSQL \                                    # MySQLを使用します
>            -DUSE_SASL_AUTH \                                # SMTP-AUTHを使用します
>            -DDEF_SASL_SERVER_TYPE="dovecot" \               # SMTP-AUTHの認証はdovecotで行います
>            -I/usr/include/mysql' \                          # MySQLのincludeパスを指定しています
>   AUXLIBS='-L/usr/lib64/openssl -lssl -lcrypto \            # OpenSSLのlibパスを指定しています
>            -L/usr/lib64/mysql -lmysqlclient \               # MySQLのlibパスを指定しています
>            -lz -lm' \                                       # 圧縮ライブラリlibz、数学ライブラリlibmを使用します
>   2>&1 | tee make_makefiles.log
$ make 2>&1 | tee make_makefiles.log

$ sudo make install 2>&1 | tee make_install.log
     :
install_root: [/][enter]
     :
tempdir: [/usr/local/src/postfix-2.9.4][enter]
     :
config_directory: [/etc/postfix][enter]
     :
command_directory: [/usr/sbin][enter]
     :
daemon_directory: [/usr/libexec/postfix][enter]
     :
data_directory: [/var/lib/postfix][enter]
     :
html_directory: [no][enter]
     :
mail_owner: [postfix][enter]
     :
mailq_path: [/usr/bin/mailq][enter]
     :
manpage_directory: [/usr/local/man][enter]
     :
newaliases_path: [/usr/bin/newaliases][enter]
     :
queue_directory: [/var/spool/postfix][enter]
     :
readme_directory: [no][enter]
     :
sendmail_path: [/usr/sbin/sendmail][enter]
     :
setgid_group: [postdrop][enter]

Postfix設定

仮想ドメイン、アカウント管理をPostfix AdminとMySQLで行うための定義ファイルを作成します。
なお、postfixをchroot環境で動作させるため、MySQLサーバーとはTCP/IPで接続するようにします。

MySQLサーバーがPostfixと同じサーバー上にある場合、設定ファイルのhostsパラメータに localhost を設定すると TCP/IP接続ではなく、Unix Socket接続になります。TCP/IP 接続にするにはIPアドレス 127.0.0.1 を設定します。
$ sudo mkdir /etc/postfix/virtual_maps
$ cd    /etc/postfix/virtual_maps
$ sudo vi domains.cf
----------(vi ここから)----------
user         = postfix
password     = MySQLユーザー postfix の接続パスワード
hosts        = actmysql.server.localnet
dbname       = postfix
table        = domain
select_field = domain
where_field  = domain
additional_conditions = AND backupmx = '0' AND active = '1'
----------(vi ここまで)----------

$ sudo vi mailbox.cf
----------(vi ここから)----------
user         = postfix
password     = MySQLユーザ postfix の接続パスワード
hosts        = actmysql.server.localnet
dbname       = postfix
table        = mailbox
select_field = maildir
where_field  = username
----------(vi ここまで)----------

$ sudo vi alias.cf
----------(vi ここから)----------
user         = postfix
password     = MySQLユーザ postfix の接続パスワード
hosts        = actmysql.server.localnet
dbname       = postfix
table        = alias
select_field = `goto`
where_field  = address
----------(vi ここまで)----------

$ sudo chown root.postfix *.cf
$ sudo chmod 640          *.cf
$ sudo chown root.postfix .
$ sudo chmod 750          .

定義ファイル main.cf を編集します。
$ sudo vi /etc/postfix/main.cf
----------(vi ここから)----------
     :
#myhostname = virtual.domain.tld
myhostname = mail.system-act.com                              # メールサーバーのホスト名(FQDN)を設定します
     :
#mydomain = domain.tld
mydomain = system-act.com                                     # メールサーバーのドメイン名を設定します
     :
#myorigin = $mydomain
myorigin = $mydomain                                          # 外部へ送信するメールアドレスのドメイン部分を設定します
     :
#inet_interfaces = all
inet_interfaces = all                                         # すべてのインターフェースで待ち受けます
     :
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydestination =                                               # 受信するホスト名/ドメイン名はvirtualで定義されます
local_transport = virtual                                     # localユーザー宛のメールもvirtualで処理します
     :
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
mynetworks = 192.168.101.0/24, 192.168.201.0/24, 127.0.0.0/8  # 信頼するSMTPクライアントのリスト
     :
#alias_maps = hash:/etc/aliases
alias_maps = hash:/etc/postfix/aliases                        # ローカル配送で使用するエイリアスデータベース
     :
#home_mailbox = Maildir/
home_mailbox = Maildir/                                       # メールボックスは Maildir 形式にします
     :
#header_checks = regexp:/etc/postfix/header_checks
header_checks = regexp:/etc/postfix/header_checks             # メールヘッダーによる配送チェックを行います# 特定の宛先におけるtransport指定
#
transport_maps = hash:/etc/postfix/transport                  # プロバイダ等のメールサーバーを経由する宛先を指定します

# MySQLによる仮想ドメイン、ユーザー(非UNIXユーザー)を使用するための設定
#
virtual_transport       = virtual                             # virtual_mailbox_domains宛のメールはvirtual配送を使用します
virtual_mailbox_base    = /home/mailbox                       # virtual配送におけるメールボックスの場所
virtual_alias_maps      = mysql:/etc/postfix/virtual_maps/alias.cf
                                                              # virtual配送で使用するエイリアスデータベース(MySQLを使用)
virtual_alias_domains   = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/virtual_maps/domains.cf
                                                              # virtual配送で使用するドメインデータベース(MySQLを使用)
virtual_mailbox_maps    = mysql:/etc/postfix/virtual_maps/mailbox.cf
                                                              # virtual配送で使用するメールボックスデータベース(MySQLを使用)
virtual_minimum_uid     = 5000                                # virtual配送がユーザーとして受付ける最小のUID
virtual_uid_maps        = static:5000                         # virtual配送ユーザーのUIDは固定で5000
virtual_gid_maps        = static:5000                         # virtual配送ユーザーのGIDは固定で5000

# SMTP-AUTHを使用するための設定と迷惑メール対策
#
smtpd_sasl_auth_enable   = yes                                # SMTP-AUTH認証を有効にします
smtpd_sasl_authenticated_header = yes                         # SMTP-AUTH認証のユーザー名をReceivedヘッダに出力します
broken_sasl_auth_clients = yes                                # 古いバージョンのAUTHコマンドを有効にします
smtpd_sasl_type          = dovecot                            # SMTP-AUTH認証はdovecotで行います
smtpd_sasl_path          = private/auth                       # dovecotとの認証ソケットファイルを指定します

smtpd_helo_required   = yes                                   # SMTPセッションの最初でHELO/EHLOコマンドを要求します
disable_vrfy_command  = yes                                   # SMTP VRFYコマンドを無効にします

policy-spf_time_limit = 3600s# 3600秒後にpolicy-spfのプロセスをkillします

smtpd_recipient_restrictions =                                # RCPTコマンド時に認証します
  permit_sasl_authenticated                                   # SMTP-AUTHにより認証された場合は接続します
  permit_mynetworks                                           # 信頼されたSMTPクライアントのリストにある場合は接続します
  reject_unauth_destination                                   # 指定配送先以外は拒否します
  reject_invalid_hostname                                     # HELO/EHLOのホスト名が正しくない場合は拒否します
  reject_non_fqdn_sender                                      # FQDNで表現されていないMAIL FROMを拒否します
  reject_non_fqdn_recipient                                   # FQDNで表現されていないRCPT TOを拒否します
  reject_unauth_pipelining                                    # 正しくないSMTPコマンドパイプラインを使用した場合は拒否します
  check_policy_service unix:private/policy-spf                # pypolicyd-spfによるSPFチェックを行います
  check_helo_access    regexp:/etc/postfix/filter/helo_access # HELO/EHLOによる迷惑メール送信ホストのチェックを行います
  check_client_access  regexp:/etc/postfix/filter/client_access
                                                              # クライアントアドレスによる迷惑メールのチェックを行います
  check_client_access  regexp:/etc/postfix/filter/permit_client_nots25r
                                                              # S25Rによる迷惑メール配信元判定を行います
  check_policy_service inet:10023                             # taRgreyによる迷惑メール配信元対策を行います(tarpitting)

smtpd_data_restrictions =                                 # DATAコマンド時に認証します
  permit_sasl_authenticated                               # SMTP-AUTHにより認証された場合は接続します
  permit_mynetworks                                       # 信頼されたSMTPクライアントのリストにある場合は接続します
  reject_multi_recipient_bounce                           # エンベロープ送信者がなく、エンベロープ受信者が複数の場合に拒否します
  check_client_access  regexp:/etc/postfix/filter/client_access
                                                          # クライアントアドレスによる迷惑メールのチェックを行います
  check_client_access  regexp:/etc/postfix/filter/permit_client_nots25r
                                                          # S25Rによる迷惑メール配信元判定を行います
  check_policy_service inet:10023                         # taRgreyによる迷惑メール配信元対策を行います

# SSL/TLS を使用するための設定
#
smtpd_tls_CAfile    = /home/ssl/CA/cacert.pem                 # CA証明書を指定します
smtpd_tls_cert_file = /home/ssl/server/mail/server.crt        # サーバー証明書を指定します
smtpd_tls_key_file  = /home/ssl/server/mail/server.key        # サーバー秘密鍵を指定します
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_scache     # キャッシュファイルを指定します
smtpd_tls_session_cache_timeout  = 3600s                      # キャッシュされている時間を指定します
smtpd_use_tls       = yes                                     # STARTTLSを有効にします
smtpd_tls_loglevel  = 1                                       # ログ出力を最小限にしています
smtpd_tls_received_header = yes                               # 情報をReceived:メッセージヘッダに含めます

# ClamSMTPでウィルススキャンをするための設定
#
content_filter = scan:127.0.0.1:10025                         # スキャンを依頼するサービス名・アドレス・ポート
receive_override_options = no_address_mappings                # アドレスマッピングを無効にします
----------(vi ここまで)----------

定義ファイル master.cf を編集します。
$ sudo vi /etc/postfix/master.cf
----------(vi ここから)----------
     :
smtp      inet  n       -       y       -       -       smtpd                  # chrootを有効にします
     :
#smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd                  # コメントを外し、chrootを有効にします
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
#628       inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       y       60      1       pickup                 # 以降、chrootを有効にします
cleanup   unix  n       -       y       -       0       cleanup
qmgr      fifo  n       -       y       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       y       -       -       proxymap
proxywrite unix -       -       y       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local                  # chrootしてはいけません!
virtual   unix  -       n       n       -       -       virtual                # chrootしてはいけません!
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
# (ClamSMTP によるウィルススキャンの設定を追加します)
#
# ====================================================================
# AntiVirus Scan Filter
# ====================================================================
scan      unix  -       -       n       -       16      smtp
      -o smtp_send_xforward_command=yes
127.0.0.1:10026 inet   n   -    n       -       16      smtpd
      -o content_filter=
      -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
      -o smtpd_helo_restrictions=
      -o smtpd_client_restrictions=
      -o smtpd_sender_restrictions=
      -o smtpd_recipient_restrictions=permit_mynetworks,reject
      -o mynetworks_style=host
      -o smtpd_authorized_xforward_hosts=127.0.0.0/8
# (SPF チェックの設定を追加します)
#
# ====================================================================
# SPF Policy Daemon
# ====================================================================
policy-spf unix -       n       n       -       -       spawn
      user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/postfix/policyd-spf.conf
----------(vi ここまで)----------

迷惑メール対策

ヘッダー情報により迷惑メールの判定を行うために、header_checksを編集します。
$ sudo vi /etc/postfix/header_checks
----------(vi ここから)----------
# (株)ウィンズコミュニケーションズのメール配信サービスから当サイトに届くメールは100%迷惑メールです。
# また、当サイトにおいては、そのメール配信サービスからのメールを拒否しても問題になることはありません。
# 時々、IPアドレスチェック、SPFやS25Rをくぐり抜けてしまうことがあるので、念のためenvelope-fromでREJECTしています。
/envelope-from=rainbow\+err/             REJECT 550 E-mail from your host was judged the spam mail, and refused.
     :
----------(vi ここまで)----------

HELO/EHLOのホスト名で迷惑メール発信元の判定を行うために、helo_accessを作成します。
$ sudo vi /etc/postfix/filter/helo_access
----------(vi ここから)----------
# サーバー自身のIPアドレスを騙ってくるのは迷惑メールの発信元と考えて問題ありません
/^203\.189\.48\.125$/                           550 E-mail from your host was judged the spam mail, and refused.

# 下記は、当サイトにおいて迷惑メールの発信元と判断しているホストです
# 記述方法の例示のため記載していますが、実際は client_access に設定しています
/cyber-mailer\.com$/                            550 E-mail from your host was judged the spam mail, and refused.
/mail-b\.net$/                                  550 E-mail from your host was judged the spam mail, and refused.
/r-serve\.info$/                                550 E-mail from your host was judged the spam mail, and refused.
/wins-beam\.net$/                               550 E-mail from your host was judged the spam mail, and refused.
----------(vi ここまで)----------

$ sudo chmod 644 /etc/postfix/filter/helo_access

接続クライアントのIPアドレスやホスト名で迷惑メール発信元の判定を行うために client_accessを作成します。
S25Rの再試行要求に該当するパターンを持つホスト名で迷惑メールの発信元でないことが明確なホストを WHITE LIST に登録します。
$ sudo vi /etc/postfix/filter/client_access
----------(vi ここから)----------
# ----------------------------------------
# IP BLACK LIST
# ----------------------------------------
# 現在は iptables で拒否していますので、ここには設定していません
/^61\.209\.246\./                               550 E-mail from your host was judged the spam mail, and refused.
/^210\.175\.47\./                               550 E-mail from your host was judged the spam mail, and refused.
/^210\.175\.62\./                               550 E-mail from your host was judged the spam mail, and refused.
/^210\.175\.80\./                               550 E-mail from your host was judged the spam mail, and refused.

# ----------------------------------------
# DOMAIN/HOST BLACK LIST
# ----------------------------------------
# 下記は、当サイトにおいて迷惑メールの発信元と判断しているホストです
/cyber-mailer\.com$/                            550 E-mail from your host was judged the spam mail, and refused.
/isp-service\.jp$/                              550 E-mail from your host was judged the spam mail, and refused.
/mail-b\.net$/                                  550 E-mail from your host was judged the spam mail, and refused.
/mail-bam\.net$/                                550 E-mail from your host was judged the spam mail, and refused.
/mail-bbc\.net$/                                550 E-mail from your host was judged the spam mail, and refused.
/r-serve\.info$/                                550 E-mail from your host was judged the spam mail, and refused.
/relaymailers\.jp$/                             550 E-mail from your host was judged the spam mail, and refused.
/wins-beam\.net$/                               550 E-mail from your host was judged the spam mail, and refused.
/zxy\.jp$/                                      550 E-mail from your host was judged the spam mail, and refused.

# ----------------------------------------
# IP WHITE LIST
# ----------------------------------------
# 例示のため一部のみ記載しています
# --------------------(CentOS Users Group)
/^61\.192\.220\.150$/                           OK

# ----------------------------------------
# DOMAIN/HOST WHITE LIST
# ----------------------------------------
# 例示のため一部のみ記載しています
# -----------------------(au Keitai:ezweb)
/\.ezweb\.ne\.jp$/                              OK
----------(vi ここまで)----------

$ sudo chmod 644 /etc/postfix/filter/client_access

S25Rによる迷惑メール配信元判定用のリストを作成します。
当サイトでは、taRgrey にある作成例ではなく、佐藤さんが初期に発表されたものに若干の手を加えて使用しています。
$ sudo vi /etc/postfix/filter/permit_client_nots25r
----------(vi ここから)----------
#
# *** S25R ***
/^unknown$/                                     DUNNO
/^[^\.]*[0-9][^0-9\.]+[0-9]/                    DUNNO
/^[^\.]*[0-9]{5}/                               DUNNO
/^([^\.]+\.)?[0-9][^\.]*\.[^\.]+\..+\.[a-z]/    DUNNO
/^[^\.]*[0-9]\.[^\.]*[0-9]-[0-9]/               DUNNO
/^[^\.]*[0-9]\.[^\.]*[0-9]\.[^\.]+\..+\./       DUNNO
/^(dhcp|dialup|ppp|adsl|xdsl|pool)[^\.]*[0-9]/  DUNNO

/./                                             OK
----------(vi ここまで)----------

$ sudo chmod 644 /etc/postfix/filter/permit_client_nots25r

SSL/TLS設定

OpenSSL運用 サーバー証明書の作成 を参考にメールサーバー用のサーバー証明書とサーバー秘密鍵を生成します。
# mkdir /home/ssl/server/mail                                 # サーバー証明書の生成・保管場所を作成します
# cd    /home/ssl/server/mail

     :
(サーバー証明書とサーバー秘密鍵を生成)
     :

起動前の環境設定

Mailboxディレクトリを作成します。
# mkdir /home/mailbox                                         # Mailboxディレクトリを作成します
# chown 5000.5000 /home/mailbox                               # virtual_uid_maps.virtual_uid_mapsを設定します
# chmod 750 /home/mailbox

SPFデーモン pypolicyd-spf の設定を行います。
$ sudo cp /usr/local/src/pypolicyd-spf-1.1/policyd-spf.conf.commented /etc/postfix/policyd-spf.conf
(※)下線部は 2012/11/27 現在の最新安定バージョンです。
必要に応じ /etc/postfix/policyd-spf.conf を編集してください。

greylistingポリシーサーバー Postgrey の設定を行います。
$ # データベースディレクトリを作成します
$ sudo mkdir /var/spool/postfix/postgrey
$ sudo chown postgrey.postgrey /var/spool/postfix/postgrey

$ # ホワイトリストをコピーします
$ sudo cp /usr/local/src/postgrey-1.34/postgrey_whitelist_* /etc/postfix/
(※)下線部は 2012/11/27 現在の最新安定バージョンです。

Postfix各定義のhashファイルを作成します。
$ sudo postalias /etc/postfix/aliases
$ sudo postmap   /etc/postfix/transport

chroot環境を作成します。
$ sudo sh /usr/local/src/postfix-2.9.4/examples/chroot-setup/LINUX2

Postfixの起動

自動起動スクリプトを作成します。
※ディストリビューションRPMから取得したものです
$ sudo vi /etc/rc.d/init.d/postfix
----------(vi ここから)----------
#!/bin/bash
#
# postfix      Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
#              that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
#
# Based on startup script from Simon J Mudd
# 25/02/99: Mostly s/sendmail/postfix/g by John A. Martin
# 23/11/00: Changes & suggestions by Ajay Ramaswamy
# 20/01/01: Changes to fall in line with RedHat 7.0 style
# 23/02/01: Fix a few untidy problems with help from Daniel Roesen.

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x /usr/sbin/postfix ] || exit 0
[ -d /etc/postfix ] || exit 0
[ -d /var/spool/postfix ] || exit 0

RETVAL=0

start() {
        # Start daemons.
        echo -n "Starting postfix: "
        alias_database=$(postconf -h alias_database 2>/dev/null)
        RETVAL=1
        [ -z "$alias_database" ] && {
            failure "determination of alias_database"
            echo
            return 0
        }
        /usr/sbin/postalias ${alias_database//,} 2>/dev/null
        RETVAL=$?
        [ $RETVAL -ne 0 ] && {
            failure "postalias $alias_database"
            echo
            return 0
        }
        /usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
        echo
        return $RETVAL
}

stop() {
        # Stop daemons.
        echo -n "Shutting down postfix: "
        /usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
        echo
        return $RETVAL
}

reload() {
        echo -n "Reloading postfix: "
        /usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure
        RETVAL=$?
        echo
        return $RETVAL
}

abort() {
        /usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure
        return $?
}

flush() {
        /usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure
        return $?
}

check() {
        /usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure
        return $?
}

restart() {
        stop
        start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  reload)
        reload
        ;;
  abort)
        abort
        ;;
  flush)
        flush
        ;;
  check)
        check
        ;;
  status)
        status master
        ;;
  condrestart)
        [ -f /var/lock/subsys/postfix ] && restart || :
        ;;
  *)
        echo "Usage: postfix {start|stop|restart|reload|abort|flush|check|status|condrestart}"
        exit 1
esac

exit $?
----------(vi ここまで)----------

$ sudo chmod 755 /etc/rc.d/init.d/postfix
$ sudo chkconfig postfix on

Postfixを起動します。
※POP3/IMAPサーバー Dovecot も併せて起動します。
$ sudo service dovecot start
$ sudo service postfix start

ファイアーウォール設定

ファイアーウォール iptables の設定スクリプトにPostfixの定義を追加します。
$ sudo vi /usr/local/sbin/firewall.sh
----------(vi ここから)----------# --- (INPUTチェイン) ---# SMTP/SMTPS接続を許可
iptables -A INPUT -i $EXTIF -p tcp --dport  25 -j CHK-SYNFLOOD
iptables -A INPUT -i $EXTIF -p tcp --dport 465 -j CHK-SYNFLOOD# --- (OUTPUTチェイン) ---# SMTP/SMTPS接続を許可
iptables -A OUTPUT -o $EXTIF -p tcp --sport  25 -j ACCEPT
iptables -A OUTPUT -o $EXTIF -p tcp --sport 465 -m state --state ESTABLISHED -j ACCEPT----------(vi ここまで)----------

$ sudo firewall.sh

Logwatch設定

Logwatchの出力を変更する場合は、/usr/share/logwatch/default.conf/services/postfix.confを編集するか、/etc/logwatch/conf/services/postfix.confにコピーして編集します。
下記は、Unmatched Entriesとなる一部の行を出力させないようにしています。
$ sudo cp /usr/share/logwatch/default.conf/services/postfix.conf /etc/logwatch/conf/services/
$ sudo vi /etc/logwatch/conf/services/postfix.conf
----------(vi ここから)----------
     :
#$postfix_PolicydWeight = 1

*Remove = smtpd.+ client=actgwsvr\[127\.0\.0\.1\], orig_queue_id=.+, orig_client= 

# vi: shiftwidth=3 tabstop=3 et
----------(vi ここまで)----------

フィードバック

記事の内容についてのご質問、ご指摘、その他ご意見等は、Weblog/Twitter にて受け付けております。

System House ACT Weblog 内記事 : Mail Transfer Agent : Postfix

トラックバックまたはコメントにてお寄せください。

Twitter では .@systemact 宛につぶやいてください。
また、こちら から、この記事についてつぶやくことができます。
a System House to build an Accounting system by the Computer Technology