○ Postfix-2.11.xの設定

・Maildir形式のsmtpサーバの構築をします
・postfix-2.11.4をソースからインストールし、設定します
・postscreenを有効にしてRBLをメールフィルターに使います
・tls接続、DOVCOT_SASLを利用したsmtp-authに対応しています
・CentOS6には、デフォルトでpostfixがインストールされています
・ここのサイトでは、sendmailに変更し、postfixを除いています
・浅見秀雄さんのS25Rスパム対策と佐藤潔さんのStarpitを使っています
・make はメンテナンスマシンで行っています

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

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

○関連サイト

:postfix-2.11.4.tar.gz  (http://www.postfix.org/)
:white-list.txt (http://gabacho.reto.jp/anti-spam/)
:postfix-sleep.patch  (http://k2net.hakuba.jp/pub/)
:postfix.conf.2.tar.gz (http://k2net.hakuba.jp/targrey/)

○参照ファイル

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

○インストール環境

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

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



○postfix-2.11.4

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

uid/gid情報を参照

・ユーザID、グループIDの確認

# cat /etc/passwd
# cat /etc/group

・すでに設定されている場合

# usermod -d /dev/null -s /bin/false postfix

・設定されていない場合

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

○sendmailの停止

・事前にrpmパッケージをpostfix → 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 ~/src
[root@jupiter:~/src]
# tar zxvf postfix-2.11.4.tar.gz
# chown -R root:root postfix-2.11.4
# cd postfix-2.11.4
[root@jupiter:~/src/postfix-2.11.4]

・パッチを当てます
・パッチは~/srcディレクトリに置きます

# patch -p0 < ../postfix-2.11-sleep.patch
# make tidy

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

# source pfixcfg.sh

・コンパイル

# make

・インストール (アップデートは別項参照)

# make install
・・・・・・・・・・・・・・・・・・・
install_root: [/]
tempdir: [/root/src/postfix-2.11.4]
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]
・・・・・・・・・・・・・・・・・・・

・デフォルトの設定ファイルを保存しておきます

# cp -RL conf ~/src/postfix2114

# cd ..
[root@jupiter:~/src]
# tar jcvf postfix-2.11.4-150210.tar.bz2 postfix-2.11.4/

postfix-2.11-sleep.patch

・pstfix-sleep.patchを当てて差分をとっただけです


○アップデート

・新規インストールの場合は、次項へ進みます
・ソースの展開・コンパイルの表記は略します

・アップデート

# cd ~/src/postfix-2.11.4
[root@jupiter:~/src/postfix-2.11.4]
# make install

・新旧のデフォルト設定ファイルの差分を取り
・必要があれば、設定ファイルを修正します

# cp -RL conf ~/src/postfix2114
# cd ~/src
[root@jupiter:~/src]
# diff -urp postfix2113 postfix2114

・再起動します

# service postfix restart

○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:)を付けています
・if〜endif間の構文は、検索パターン(bdck:)の含まれる行のみで有効
・!で否定し、bdck:が付いていない場合にif〜endif間の構文をチェックします

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

・問い合わせフォームに、自動で送信する迷惑メールは1行で送る場合が多い
・メール本文の先頭に検索パターン(FbMF:)を設定し、構文チェックに使います
・("FbMF:"は"内容:"のエンコード文字列) DISCARDは受信して破棄する設定
・if〜endif構文を入れ子にして問い合わせフォームのみに対応させます

if !/bdck:/
/^(|[^>].*)carecough.ru/ REJECT
/8\\5R%j%9%H/ REJECT
if /FbMF:/
/kamagra/ DISCARD
/levitra/ DISCARD
/vardenafil/ DISCARD
/viagra/ DISCARD
/vigrx/ DISCARD
/pills/ DISCARD
endif
endif

・junkメールからドメイン名を取り出す

# cat * | grep 'http:' | \
sed 's/.*http:\/\///g' | sed 's/ .*$//' | \
sed 's/\/.*//g' | sed 's/^M//g' | \
sort -u > ~/domain.lst

・日本語の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を編集します

/etc/postfix/main.cf (詳細別記)

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

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

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

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

・省略

smtps     inet  n       -       n       -      -      smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

・省略


○postfixパラメータの確認

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

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

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

# postconf -n

○/usr/lib/sendmailのリンク変更

# cd /usr/lib
[root@jupiter:/usr/lib]
# mv sendmail sendmail-OLD
# ln -s /usr/sbin/sendmail sendmail

○iptablesの設定

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

Netfilter (iptables) の設定参照

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

/etc/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.