VPSレンタルサーバー(お名前.com、CentOS6.2)に自ドメイン用のメールサーバーを構築しています。初期状態では、メールサーバーはpostfixがインストールされていましたが、postfixは使用した事がなかったので使用経験があるqmailをインストールし、SMTPサーバを構築しました。
下記サイトを参考にして行いました。
qmailによるSMTPサーバの構築
※目次をクリックすると目次の下部にコンテンツが表示されます。
- 1.ディレクトリとユーザーの作成
- 2.qmailインストール
- 3.qmail初期設定と動作確認
- 4.tcpserver(ucspi-tcp)インストール
- 5.tcpserver(ucspi-tcp)の初期設定、起動設定
- 6.SMTPサーバの動作確認
●ディレクトリの作成
# mkdir /var/qmail
●ユーザー、グループの作成
# groupadd nofiles # useradd -g nofiles -d /var/qmail/alias alias -s /nonexistent # useradd -g nofiles -d /var/qmail qmaild -s /nonexistent # useradd -g nofiles -d /var/qmail qmaill -s /nonexistent # useradd -g nofiles -d /var/qmail qmailp -s /nonexiste # groupadd qmail # useradd -g qmail -d /var/qmail qmailq -s /nonexistent # useradd -g qmail -d /var/qmail qmailr -s /nonexistent # useradd -g qmail -d /var/qmail qmails -s /nonexistent
各プロセス毎に異なるユーザーで実行させるため、それぞれユーザーを作成しています。
・alias : エイリアスユーザー
・qmaild : デーモンユーザー
・qmaill : ログユーザー
・qmailp : パスワードユーザー
・qmailq : キューユーザー
・qmailt : リモートユーザー
・qmsild : 送信ユーザー
●ソースとパッチの入手
qmail-1.03.tar.gz、qmail-date-localtime.patchを入手します。
●ソースの解凍
# cd /usr/local/src # gunzip qmail-1.03.tar.gz # tar xvf qmail-1.03.tar
●パッチパッケージのインストール
VPS(レンタルサーバー)patchパッケージがインストールされていなかったため、インストールします。
# yum install patch Installed: patch.x86_64 0:2.6-6.el6 Complete!
●パッチの適用
# patch -p1 < ../qmail-date-localtime.patch patching file date822fmt.c
●make実行
# make setup check : ./compile auto-str.c auto-str.c:8: warning: conflicting types for built-in function ‘puts’ ./load auto-str substdio.a error.a str.a /usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in substdio.a(substdo.o) /lib64/libc.so.6: could not read symbols: Bad value collect2: ld returned 1 exit status make: *** [auto-str] Error 1
エラーが発生しました。ネットで調べてみると、
"conf-cc"のファイル内に"cc -O2 -include /usr/include/errno.h"を設定すると解決するようです。
Newbie: Installing Qmail error
●エラーの修正
上記サイトに従って、下記のように修正しました。
# vi /usr/local/src/qmail-1.03/conf-cc 訂正前 cc -O2 ↓ 訂正後 cc -O2 -include /usr/include/errno.h
●再度、make実行
# make setup check ./install ./instcheck
今度は、問題なく実行できました。
●config実行
# ./config Your hostname is XXXXXXXXXX. Your host's fully qualified name in DNS is XXXXXXXXXX. Putting XXXXXXXXXX into control/me... Putting myvps.jp into control/defaultdomain... Putting myvps.jp into control/plusdomain... Checking local IP addresses: 127.0.0.1: Adding localhost to control/locals... NNN.NNN.NNN.NNN: Adding XXXXXXXXXX to control/locals... If there are any other domain names that point to you, you will have to add them to /var/qmail/control/locals. You don't have to worry about aliases, i.e., domains with CNAME records. Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts... Now qmail will refuse to accept SMTP messages except to those hosts. Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
●DNS上のホスト名を指定してconfig実行
上記では、サーバー上で指定しているホスト名(DNSで登録されているホスト名ではない)が設定されてしまいました。
DNSにMXレコードで登録されているホスト名を指定してconfigを実行します。
# ./config-fast mail.example.com Your fully qualified host name is mail.example.com. Putting mail.example.com. into control/me... Putting example.com. into control/defaultdomain... Putting example.com. into control/plusdomain... Putting mail.example.com into control/locals... Putting mail.example.com into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to mail.example.com. Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
これでqmailのインストールが終了しました。
●システム管理アカウントへの配信の設定
postmaseter、MAILER-DEAMON、rootに対する配信の設定を行います。
# cd /var/qmail/alias # touch .qmail-postmaster .qmail-mailer-daemon .qmail-root # chmod 644 .qmail*
●postfixの停止
"お名前.com"のVPS(レンタルサーバー)では、postfixがインストールされていて、起動されている状態でしたので、postfixを停止します。
# /etc/rc.d/init.d/postfix stop Shutting down postfix: [ OK ]
そして、起動スクリプトが自動起動しないように設定変更します。
# chkconfig --list postfix postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off # chkconfig --level 2345 postfix off # chkconfig --list postfix (修正後の確認結果) postfix 0:off 1:off 2:off 3:off 4:off 5:off 6:off
●sendmailからのシンボリックリンクをpostfixからqmailに変更
sendmailがpotfixにシンボリックリンクされていましたので、それをqmailに変更しました。
デフォルトの状態 /usr/lib/sendmail -> /etc/alternatives/mta-sendmail /etc/alternatives/mta-sendmail -> /usr/lib/sendmail.postfix /usr/lib/sendmail.postfix -> ../sbin/sendmail.postfix 変更内容 mv /usr/sbin/sendmail.postfix /usr/sbin/sendmail.postfix.bak ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail.postfix
●Maildirの設定
# cp /var/qmail/boot/home /var/qmail/rc # vi /var/qmail/rc (修正内容) qmail-start ./Mailbox splogger qmail ↓ qmail-start ./Maildir/ splogger qmail
●ソースの入手
ucspi-tcp-0.88.tar.gzを入手します。
●ソースの解凍
# cd /usr/local/src # gunzip ucspi-tcp-0.88.tar.gz # tar xvf ucspi-tcp-0.88.tar
●confの修正
make実行時にエラーが発生するためqmailと同様に修正しました。
# vi /usr/local/src/ucspi-tcp-0.88/conf-cc 訂正前 cc -O2 ↓ 訂正後 cc -O2 -include /usr/include/errno.h
●make実行
# make : ./compile instcheck.c ./load instcheck hier.o auto_home.o unix.a byte.a
●make setup check実行
# make setup check ./install ./instcheck
これでtcpserverのインストールが終了しました。
●データベースファイル(cdb)の基になるファイルを準備
# vi /etc/tcp.smtp 192.168.0.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT=""
●データベースファイルの作成
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
●起動スクリプトの作成
参考サイトの設定例をベースに作成しました。
http://www.atmarkit.co.jp/ait/files/20010904/qmail.txt
修正箇所は、以下の通りです。
・自動起動の設定を追加
# chkconfig: 2345 99 30
・cshで実行する部分を修正
csh -cf '/var/qmail/rc &'
↓
/var/qmail/rc &
●自動起動の設定
# chkconfig --add qmail # chkconfig --list qmail qmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
●起動スクリプト起動確認
# /etc/rc.d/init.d/qmail start Starting qmail. # ps -ef | grep qmail qmails 7536 1 0 13:55 pts/0 00:00:00 qmail-send qmaild 7537 1 0 13:55 pts/0 00:00:00 tcpserver -v -u 504 -g 503 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd root 7538 1 0 13:55 pts/0 00:00:00 /var/qmail/bin/splogger smtpd 3 qmaill 7540 7536 0 13:55 pts/0 00:00:00 splogger qmail root 7541 7536 0 13:55 pts/0 00:00:00 qmail-lspawn ./Maildir/ qmailr 7542 7536 0 13:55 pts/0 00:00:00 qmail-rspawn qmailq 7543 7536 0 13:55 pts/0 00:00:00 qmail-clean root 7545 7276 0 13:55 pts/0 00:00:00 grep qmail
●各ユーザーのMaildirを作成
いままではrootユーザーでインストール、設定を行っていましたが、アカウントを作成するユーザーにスイッチし、下記コマンドを実行します。
$ /var/qmail/bin/maildirmake ~/Maildir
※rootユーザーで実行した場合は、chownでMaildirディレクトリのオーナーが各ユーザーになるように変更します。
●/etc/skelディレクトリにMaildirの雛形を作成
新規のユーザーについては、/etc/skelディレクトリにMaildirのひな型を置いておき、adduserコマンドなどでユーザーを作成した際に自動でMaildirディレクトリが生成されるようにします。
# /var/qmail/bin/maildirmake /etc/skel/Maildir
●ローカルからメール送信テスト
# echo to: test-wp@mail.example.com | /var/qmail/bin/qmail-inject $ pwd /home/test-wp/Maildir/new $ ls 1360559008.7594.mail.example.com
/home/test-wp/Maildir/new配下に、送られたメールのファイルが作成されています。
●外部端末から送信
外部端末からインターネット経由でメール送信する場合は、iptablesで25番ポートへの接続を許可する必要があります。
# vi /etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT # service iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ]
これで、外部からインターネット経由でSMTP接続できるようになりましたので、外部端末からメール送信テストを行います。
(実行例、ユーザーのディレクトリ)
$ pwd /home/test-wp/Maildir/new $ ls 1360559008.7594.mail.example.com 1360560462.7764.mail.example.com
上記のようにメールファイルが作成され受信できました。
動作確認が終了しましたので、iptablesのSMTP接続許可の設定をコメントアウトして、無効にしておきます。セキュリティの設定をしっかり行って、実際にメール受信が必要になったら有効にしたいと思っています。
# vi /etc/sysconfig/iptables # -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT # service iptables restart