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

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

下記サイトを参考にして行いました。
qmailによるSMTPサーバの構築
 
※目次をクリックすると目次の下部にコンテンツが表示されます。

ディレクトリとユーザーの作成
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 : 送信ユーザー

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のインストールが終了しました。

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

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のインストールが終了しました。

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

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

関連記事の目次

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください