○ Postfix (SSL対応) のインストール

・Maildir形式のsmtpサーバの構築をします
・postfix-2.8.5をソースからインストールし、設定します
・postscreenを有効にしてRBLをメールフィルターに使います
・tls接続、DOVCOT_SASLを利用したsmtp-authに対応しています
・既存のsendmailを停止し、postfixのsendmailに置き換えます
・浅見秀雄さんのS25Rスパム対策と佐藤潔さんのStarpitを使っています
・make はメンテナンスマシンで行っています

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:postfix-2.8.5.tar.gz  (http://www.postfix.org/)
:white.list.txt (http://gabacho.reto.jp/anti-spam/)
:postfix-sleep.patch (http://k2net.hakuba.jp/)
:tarpit_client (http://k2net.hakuba.jp/)

○参照ファイル

パッケージの追加
最初の設定 (Xen)
opensslのインストール

○インストール環境

:OS CentOS 5.6
:selinux disabled or permissive
:インストール先 
:作業 /usr/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○postfix-2.8.5

○専用ユーザ・グループの作成

uid/gid情報を参照

[root@jupiter:~]
# useradd -u 89 -d /dev/null -s /bin/false postfix
# groupadd -g 90 postdrop

○sendmailの停止

[root@jupiter:~]
# service sendmail stop
# chkconfig --del sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail-OLD
# mv /usr/bin/mailq /usr/bin/mailq-OLD
# mv /usr/bin/newaliases /usr/bin/newaliases-OLD

・setuid権限を削除 (2755→0755)

# chmod 755 /usr/sbin/sendmail.sendmail

○ソースの展開・インストール

・htmlドキュメントを適当なディレクトリに保存して利用しましょう
・sleep中に相手が接続を切ったら、smtpdプロセスを終了するパッチを当てます
・dovecot_saslを使う設定です

# cd /usr/src
[root@jupiter:/usr/src]
# tar zxvf postfix-2.8.5.tar.gz
# chown -R root:root postfix-2.8.5
# cd postfix-2.8.5
[root@jupiter:/usr/postfix-2.8.5]

・パッチを当てます(下記参照)
・パッチは/usr/srcディレクトリに置きます

# patch -p1 < ../postfix-2.8-sleep.patch
# make tidy

・コンフィグシェルスクリプトを実効します
・同じディレクトリで実行します
pfixcfg.sh (詳細別記)

# source pfixcfg.sh
# make
# make install
・・・・・・・・・・・・・・・・・・・
install_root: [/]
tempdir: [/usr/src/postfix-2.8.5]
config_directory: [/etc/postfix]
command_directory: [/usr/sbin]
daemon_directory: [/usr/libexec/postfix]
data_directory: [/var/lib/postfix]
html_directory: [no]
mail_owner: [postfix]
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/man]
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path: [/usr/sbin/sendmail]
setgid_group: [postdrop]
・・・・・・・・・・・・・・・・・・・
# cd ..
[root@jupiter:/usr/src]
# tar jcvf postfix-2.8.5-110904.tar.bz2 postfix-2.8.5/

postfix-2.8-sleep.patch

・postfix-sleep.patchを参考に修正しています
・必須ではありません、問題があれば保留して下さい

○aliasesファイルを編集します (変更追加分)

:/etc/aliases (root root 644)

・設定例です
・sendmail用のaliasesを使用しています
・/dev/nullを指定すると配送されません
・root宛のメールは専用ユーザに配送します 専用ユーザ (luna)
・9文字以上のユーザー名にしたい場合、aliasesとcanonicalで設定します

root:           luna
starlight:      star
moonlight:      moon
webmaster:      /dev/null

:aliases.dbを作ります

# cd /etc
[root@jupiter:/etc]
# rm aliases.db
# newaliases

○canonicalファイルを編集します

:/etc/postfix/canonical (root root 644)

・設定例です

star    starlight
moon    moonlight

:canonical.dbを作ります

# cd /etc/postfix
[root@jupiter:/etc/postfix]
# postmap /etc/postfix/canonical

○S25R+Starpit用のファイル

:/etc/postfix/white.list.txt (root root 644)
:/etc/postfix/tarpit_client (root root 644)

・関連サイトにアクセスし、十分理解した上で使用します

○accessファイルを編集します

:/etc/postfix/access (root root 644)

・設定例です
・良く不正リレーメールが来るので必要なければ拒否します
・smtpd_sender_restrictionsで使用しています
・書式は各自学習してください

jss.cn          REJECT
jxs.cn          REJECT
sds.cn          REJECT
bjs.cn          REJECT
hns.cn          REJECT
tjs.cn          REJECT
yns.cn          REJECT

:access.dbを作ります

[root@jupiter:/etc/postfix]
# postmap /etc/postfix/access

○JUNKMAILを拒否・添付ファイルをチェックします

:/etc/postfix/header_checks (root root 644)

・設定例です
・マニュアルは"$ man 5 header_checks"
・正規表現またはPCREが使える?
・まともな方法で送られてくるスパムメールを、headerをチェックして拒否します
・nameのチェックはheader_checksで行ないます

/^X-Mailer:.*PostMaster General/    REJECT
/^Return-Path:.*<#.*@.*>/       REJECT
/^From:.*<#.*@.*>/              REJECT
/^subject: more money$/         REJECT
/^subject:.*I LOVE YOU/         REJECT
/^to: our valued customer$/     REJECT
/^from: your friend$/           REJECT

/^content-type:.*name.*\.scr.*/ REJECT
/^content-type:.*name.*\.exe.*/ REJECT
/^content-type:.*name.*\.inf.*/ REJECT
/^content-type:.*name.*\.pif.*/ REJECT
/^content-type:.*name.*\.bat.*/ REJECT
/^content-type:.*name.*\.dll.*/ REJECT
/^content-type:.*name.*\.vbs.*/ REJECT
/^content-type:.*name.*\.reg.*/ REJECT

/^Content-Type: text\/html/     REJECT HTML not allowed.

/GyRCTCQ+NUJ6OS05cCIoGyhC/      REJECT
/wkPjVCejktOXAiK/               REJECT
/MJD4lQno5LTlwIi/               REJECT

・日本語のBASE64エンコード

[root@jupiter:/etc/postfix]
$ echo -n "未承諾広告※"|nkf -MB
GyRCTCQ+NUJ6OS05cCIoGyhC

:/etc/postfix/body_checks (root root 644)

・設定例です
・マニュアルは"$ man 5 header_checks"
・正規表現またはPCREが使える?
・メール本文をcheckします
・logwachのpostfixレポートに対処します

・logwatchのpostfixレポートで接頭語(例 bdck:)を付けています
・bdck:が付いていない場合は if〜endif間の構文をチェックします

if !/bdck:/
/^(|[^>].*)carecough\.ru/ REJECT
/8\\5R%j%9%H/ REJECT
endif

・日本語のiso-2022-jp 7bitエンコード

[root@jupiter:/etc/postfix]
$ echo -n "顧客リスト"|nkf -j|awk '{gsub(/\x1B[$(]B/,"");print}'
8\5R%j%9%H

・正規表現で使われる文字を\でエスケープします

8\\5R%j%9%H

○postscreenのaccess_listでの制御

:/etc/postfix/postscreen_access

・設定例です
・permit (postscreenをスルーしてSMTP server processに渡されます)
・reject (postscreen_blacklist_actionパラメータで制御されます)

#
203.141.136.4		permit
#
211.166.9.0/24		reject

○main.cfを編集します

/étc/postfix/main.cf (詳細別記)

・証明書の作成は 認証局と証明書の発行 を参照してください

○master.cfを変更します (変更分)

・初段のsmtp(smtpdコマンド)行を無効にします
・postscreenを使う場合 赤色文字
・TLS(SSL)接続を使う場合 緑色文字
・OEがTLSラッパーモードでアクセスするのでsmtps (port465) を開放します

#smtp      inet  n       -       n       -      -      smtpd
smtps     inet  n       -       n       -      -      smtpd
  -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

・省略

smtp      inet  n       -       n       -     1     postscreen
smtpd     pass  -       -       n       -     -     smtpd
dnsblog   unix  -       -       n       -     0     dnsblog
tlsproxy  unix  -       -       n       -     0     tlsproxy

○postfixパラメータの確認

・デフォルトのパラメータを表示

[root@jupiter:/etc/postfix]
# postconf -d

・修正したパラメータの表示

# postconf -n

○iptablesの設定

・Netfilter (iptables) で制御している場合、ポートを開けてください

Netfilter (iptables) の設定参照

○postfix起動スクリプトを作ります

/étc/rc.d/init.d/postfix (詳細別記)

○selinuxヘの対応 (selinuxが有効の場合)

:新規インストールファイルのselinuxラベルを修正

# cd ~
[root@jupiter:~]
# restorecon -Rv /etc
# restorecon -Rv /usr
# restorecon -Rv /var

○自動起動スクリプトをonにし、postfixを起動します

[root@jupiter:~]
# chkconfig --add postfix
# service postfix start



○(参考)

○localオンリー

:/etc/postfix/main.cf (変更部分)

・マシンのIPアドレスを指定します

mynetworks = 192.168.0.22/32, 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail

○smtp のレスポンスコード

response-code

○ Copyright(c) 528p.com All Rights Reserved.