qmailをインストールし、SMTPサーバ構築

VPSレンタルサーバー(お名前.com、CentOS6.2)に自ドメイン用のメールサーバーを構築しています。初期状態では、メールサーバーはpostfixがインストールされていましたが、postfixは使用した事がなかったので使用経験があるqmailをインストールし、SMTPサーバを構築しました。

下記サイトを参考にして行いました。
qmailによるSMTPサーバの構築
 
インストール手順の流れ
1)ディレクトリとユーザーの作成
2)qmailインストール
3)qmail初期設定、postfixからの移行
4)tcpserver(ucspi-tcp)インストール
5)tcpserver(ucspi-tcp)の初期設定、起動設定
6)SMTPサーバの動作確認
 
 

1)ディレクトリとユーザーの作成


 
qmailインストールの準備として、ディレクトリの作成、ユーザーの作成を行います。
 
●ディレクトリの作成
 
# 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 : 送信ユーザー
 

2)qmailインストール


 
qmailのインストール作業を行います。
 
●ソースとパッチの入手
 
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のインストールが終了しました。
 

3)qmail初期設定と動作確認


 
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
 
4)tcpserver(ucspi-tcp)インストール
 
次に、smtp通信(25番ポート)をリッスンして、プロセスを起動するデーモンとしての働きをするtcpserver(ucspi-tcp)をインストールします。
 
●ソースの入手
 
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のインストールが終了しました。
 

5)tcpserver(ucspi-tcp)の初期設定、起動設定


 
次に、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

 

6)SMTPサーバの動作確認


 
一通りインストール、初期設定が終わりましたので動作確認を行います。
 
●各ユーザーの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

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です