2012 | 02 20 |
【手順書】RedHatで Postfix2.1.6 メールサーバー構築
正直、今になって役に立つのかさっぱりわかりませんが、シェア。
というかそもそも、今はsasldbとかもsasldb2とかになってるよね?
同じコマンド通用するんかな。
一応昨日試してみたら、通ったみたいなんだけどね。
バージョン違いによるモジュールの違いはあっても、コンフィグは大きく変わらんと予想。
ちなみに今のバージョンはPostfix 2.9.0あたりまで出ているようです。
細かい部分は過去作成した手順書ままなので、リンク切れとかはあると思います。
色々なサイトを参考に作ったので、コピペが多いです。
記憶違いでなければ
パソコンおやじさんのサイトをかなり参考にして作っています。
ここかな。
PostfixによるSMTPサーバー構築
http://www.aconus.com/~oyaji/centos/smtp-centos.htm
こちらだとCentOSで作ってますが、うちの環境はRedHatのエンタープライズ4とかだったと。
参考までに。
sendmailの停止
# cd ダウンロード・ディレクトリ/# tar zxvf postfix-2.1.6.tar.gz
# cd postfix-2.1.6
この段階でsendmailが動いているならば停止して、sendmailが再起動などしても動かないように
設定を変更する。
# mailq
# sendmail -q
# /etc/rc.d/init.d/sendmail stop
# chkconfig sendmail off
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
# mv /usr/bin/mailq /usr/bin/mailq.OFF
# chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF /usr/bin/mailq.OFF
上記で設定完了。sendmailが動いているとメール送信ができない。
さらに依存関係を修正する。
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# chmod 0 /usr/lib/sendmail.bak
# ln -s /usr/local/postfix/sbin/sendmail /usr/lib/sendmail
# mv /usr/bin/mailq /usr/bin/mailq.bak
# chmod 0 /usr/bin/mailq.bak
# ln -s /usr/local/postfix/bin/mailq /usr/bin/mqilq
# mv /usr/bin/newaliases /usr/bin/newaliases.bak
# chmod 0 /usr/bin/newaliases.bak
# ln -s /usr/local/postfix/bin/newaliases /usr/bin/newaliases
# ln -s /usr/sbin/sendmail.postfix /usr/sbin/sendmail
ユーザーとグループの追加
ユーザーとグループの追加を行う。ユーザー名はpostfixでログインシェルは/bin/bashで作成。ホームディレクトリは必要ない。
手動でUIDを設定し、それは12345等、使われていないものにすること。
# vi /etc/group
postfix:*:12345:
postdrop:*:54321:
上記を追加する。
CyrusSASLのインストール
CyrusSASLのインストールを行う。# tar zxvf cyrus-sasl-1.5.28.tar.gz(cyrus-sasl-2.1.22.tar.gz)
# cd cyrus-sasl-1.5.28(cyrus-sasl-2.1.22)
# ./configure –prefix=/usr –with-openssl=/usr/local/ssl –enable-login=yes
# make
# make install
注意するべき所はPostfixのバージョンが高すぎるとCyrusSASLと対応してない場合が多く
結果的にSASLを使えない場合が多いので確認されているPostfixのバージョンで動かすこと。
Postfixの設定ファイルを変更
Postfixの設定ファイルを変更する。# cd /usr/local/src/postfix-2.1.6
# vi Makefile
# make tidy
# make makefiles CCARGS=”-DUSE_SASL_AUTH -I/usr/include/” AUXLIBS=”-L/usr/lib -lsasl”
# make
make installの前に
vipw でpostfixの行を以下の様に変更します。
postfix:x:501:502:Postfix:/nonexistent:/sbin/nologin
※「501」、「502」の部分は環境によって異なるのでデフォルトのままで構いません。
Linux システムでシャドウパスワードを使用している場合、
「保存時に「このシステムではシャドウパスワードが使われています。 /etc/shadowを今すぐ編集しますか[y/n]?」
と聞かれるので「 y 」を押し、postfix の部分を以下の様に変更します。
postfix:!!:11964:0:99999:7:::
※先程と同様に「11964」の部分は環境によって異なるのでデフォルトのままで構いません。
Postfixのインストール
# make installinstall_root: 既定値
tempdir: 既定値
config_directory[/etc/postfix]: 既定値
daemon_directory[/usr/libexec/postfix]: 既定値
command_directory[/usr/sbin]: 既定値
rpm版がインストールされている場合は[/usr/local/sbin]
queue_directory[/var/spool/postfix]: 既定値
sendmail_path[/usr/sbin/sendmail]: 既定値
rpm版がインストールされている場合は[/usr/local/sbin/sendmail]
newaliases_path[/usr/sbin/newaliases]: 既定値
rpm版がインストールされている場合は[/usr/local/sbin/newaliases]
mailq_path[/usr/sbin/mailq]: 既定値
rpm版がインストールされている場合は[/usr/local/sbin/mailq]
mail_owner[postfix]: 既定値
setgid_group[postfix]: 既定値
manpage_directory[/usr/local/man]: 既定値
sample_directory[/etc/postfix]: 既定値
readme_dirctory: 既定値
Postfixの設定
最後の山場。設定。# vi /etc/postfix/main.cf
# ホスト名の設定
#myhostname = host.domain.name
myhostname = mail.example.co.jp
# ドメイン名の設定
#mydomain = domain.name
mydomain = example.co.jp
# メール送信の設定
myorigin = $myhostname
#myorigin = $mydomain
# メールの受信の設定
#inet_interfaces = all
inet_interfaces = all
# メールの最終目的地とみなすドメイン名の指定
mydestination = $myhostname, localhost.$mydomain, $mydomain
#mydestination = $myhostname, $mydomain
# 次の項目の mynetworks でサブネットを指定するので、subnet を指定する。
#mynetworks_style = subnet
mynetworks_style = subnet
# リレーを許可する対象を指定
#mynetworks = 192.100.189.0/28, 127.0.0.0/8
mynetworks = 192.168.0.0/24, 127.0.0.0/8
※環境に合わせる
# aliasesファイル・データベースの指定
#alias_maps = hash:/etc/aliases
alias_maps = hash:/etc/aliases
#alias_database = hash:/etc/aliases
alias_database = hash:/etc/aliases
# MailBoxを指定
#mail_spool_directory = /var/spool/mail
mail_spool_directory = /var/spool/mail
そして以下を一番下に追記。
# HELO コマンドでホスト名を通知しないホストの接続を拒否
smtpd_helo_required = yes
# SMTP の VRFY コマンドを使用不可にする
disable_vrfy_command = yes
# RFC822 で定義されている書式に適合しないメールアドレスが通知された場合、受信を拒否する
strict_rfc821_envelopes = yes
# この2つに「 no 」を指定すると何でもかんでも転送拒否してしまいます。
allow_percent_hack = yes
swap_bangpath = yes
# ソース・ルート形式で指定されている宛先メールアドレスを拒否しています。
allow_untrusted_routing = no
# Postfix サーバへの接続は、自サイトのネットワークからの接続を無条件で許可し、IP アドレスからホスト名への逆引きができないホストの接続を拒否。
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit
# ホスト名が正しい書式でホスト名を通知してきたホストのみ接続を許可
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_client, permit
# ホスト名と転送先ドメインとして許可されているドメインが宛先メールアドレスに指定されているものを受信
smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch, check_relay_domains
# 実際には存在しないドメイン名が送信元メールアドレスに使われているメールの受信を拒否
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
# SMTP の ETRN コマンドの使用をホスト名が不正(妖しげ)なホストには使用不可としている
smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname
# SMTP サーバ制御の設定
# SASLによるSMTP認証を使用
#smtpd_sasl_auth_enable = no
smtpd_sasl_auth_enable = yes
# 使用可能な認証メカニズムの設定(そのまま)
# noanonymous : 匿名での接続を拒否。
# noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応)
#smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_security_options = noanonymous
# ローカル認証 realm の名前を設定
# Postfixのデフォルトはmyhostnameである。
# 実はここで大嵌りで、PAM 認証の場合はここは設定なしのままでないと認証できないので注意が必要。
# 但し、これはsaslauthdによるPAM 認証の場合で、sasl パスワード認証の場合は、myorigin で設定した
# ドメイン(ホスト)名と同一の値を設定しないと、認証に失敗する。
#smtpd_sasl_local_domain = $mydomain
#smtpd_sasl_local_domain = $myhostname
# リレーを許可するものを設定(sample-smtpd.cf)
# ・permit_mynetworks : mynetworksで指定されたネットワークからのリレーを許可。
# ・permit_sasl_authenticated : SMTP認証を通過したものは許可。
# ・reject_unauth_destination : 目的地が $inet_interfaces、$mydestination $virtual_alias_domains
# または $virtual_mailbox_domains にマッチするアドレス宛のメール、及び$relay_domains にマッチする
# 目的地へのメール以外を拒否。
# (本設定で不正な外部からのメールをrejectする。check_relay_domainsは2.0では使用
# されなくなった。)
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
# AUTHコマンドのサポートを認識できないクライアントへの対応(sample-compatibility.cf)
# Outlook Express 4 および Exchange 5等はAUTH コマンドをサポートしていることを認識できないので、
# 使用時は下記のような設定を追加する。
broken_sasl_auth_clients=no
SMTP認証ユーザー追加
続いてSMTP認証用のユーザーを作成する。必要な人数だけ繰り返す。# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h myhostname` ユーザ名
DBのアクセス権限を設定する。
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb
最後にSMTP認証の際に使用するDBを指定します。/usr/lib/sasl/ に新規に smtp.conf というファイルを作成して、次の1行のみを記入します。
pwcheck_method: sasldb
終了して、Postfixを再起動する。
# /usr/sbin/postfix stop 又は/usr/local/sbin/postfix stop
# /usr/sbin/postfix start 又は/usr/local/sbin/postfix start
以上で完了です。
おおよそ動くはずですが、サーバーのDNS設定などがおかしいと、送信先のホスト名を名前解決できずに送信エラーを起こすことがあったりします。
大体は不正中継設定の行き過ぎでリレーが失敗してエラーが起きます。
エラーコードから予想が立てれますし、ログを見ればほぼ原因を特定出来ます。
実はSMTP認証のSASL部分でエラー起きてるとわかりにくかったりしますが、これもログにばっちり出ます。
今はインターネットという便利なものがあるので、検索しながらやればおおよそ実装出来ると思います。
それでは。