本連載もいよいよ大詰めを迎えるに至った。今回は、qmailの導入や運用時にありがちなトラブルとその解決方法を解説する。あらゆるケースを網羅するのは不可能だが、この記事が何らかの糸口になれば幸いである。
今回は、qmail関係で遭遇するであろうトラブルと、その解決策を紹介します。
この連載で何回も繰り返してきた言葉ですが、qmailのインストールは簡単なものの、ちょっとしたことを実現させたい場合はアドインツールを導入せざるを得ない状況が多々あります。アドインツールの組み合わせが何通りも存在するように、トラブルもさまざまです。また、トラブルの発生頻度もqmail単体に比べて増えてしまいます。qmail自体はMTAのメジャーになりつつあるものの、アドインツールの組み合わせによっては、過去の対策事例が見つからないこともしばしばです。
ここですべてを紹介することはできませんが、私の経験やLinux Square会議室に書き込まれた事例を基に、いくつか紹介します。
当連載のとおりにやってみたものの、うまく機能しないということもあるかと思います。原因はさまざまで、皆さんのインストール環境と筆者の環境との差異によるものや、記事の中で重要な手順を省略してしまったといった提供側の問題もあるかもしれません。あってはいけないことですが、記事が間違っていることもあるでしょう(注)。
Linux Square会議室に寄せられた書き込みの多くが「インストールはできたもののサービスが正常に機能しない」というものでした。その対応策を見ていきましょう。
●ログに「fatal: unable to bind: address already used」と記録される
/var/log/maillogや/va/log/qmailなどに「fatal: unable to bind: address already used」と記録される場合は、すでに同様のサービスが起動していないかどうかを確認します。Linuxディストリビーションによっては、デフォルトでsendmailやimap4がインストールされ、場合によっては自動起動の状態になっている場合があります。最近はspamに対する意識やDoS攻撃の踏み台にされることに対する防御から、インストール時に意図的に選択しなければ起動しないようになっていますが、古いバージョンのディストリビューションは、自動起動が選択されている可能性があります。
まず、現在の状況を確認します。Turbolinuxであればturboserviceコマンド、Red Hat Linuxであればntsysvコマンドでサービスの状態を確認し、もし起動されているようなら自動起動しないように設定します。
# ntsysv
そのほかのディストリビューションでも同様のコマンドが用意されているはずですが、手っ取り早く確認するにはtelnetコマンドを使用します。SMTPが起動されているかどうかを確認する場合は25番ポートに対して、POP3の起動を確認するには110番ポートに対して以下のように実行します。
$ telnet localhost 25 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused
$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 host.example.jp ESMTP Sendmail 8.9.3+3.2W/3.7W; Tue, 17 Sep 2002 19:27: 20 +0900
$ telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK POP3 localhost v2001.80 server ready
確認作業を終了するには、
quit
とタイプします。
Nmapがインストールされているのであれば、これを使用します。
# nmap localhost Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/) Interesting ports on localhost (127.0.0.1): Port State Protocol Service 7 open tcp echo 9 open tcp discard 13 open tcp daytime 19 open tcp chargen 21 open tcp ftp 23 open tcp telnet 25 open tcp smtp ←注意 901 open tcp unknown 1024 open tcp unknown 5680 open tcp canna 6000 open tcp X11 Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
既存のSMTP/POP3サービスの存在が確認されたら、これらのサービスを停止して二度と起動しないようにします。先ほどはntsysvを紹介しましたが、今度はディストリビューションに依存しないchkconfigコマンドを使ってみます。
まず、サーバマシンの起動とともに実行されるサービスを確認します。
# /sbin/chkconfig --list alsasound 0:off 1:off 2:off 3:off 4:off 5:off 6:off pcmcia 0:off 1:off 2:off 3:off 4:off 5:off 6:off syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off (以下略)
0〜6の数字はランレベル(Linux Tips:ランレベルとは)です。「on」になっているランレベルを「off」にして起動しないようにします。
# chkconfig --level ランレベル sendmail off
chkconfigの使用については「Linux Tips:システムサービスのランレベルを調べたり変更するには」を参照してください。
POP3がxinetd経由で起動されている場合は、/etc/xinetd.d/pop-3などの設定ファイルを見つけて下記のように編集し、xinetdサービスを再起動します。
# vi /etc/xinetd.d/pop-3 # default: off # description: POP-3 Mail Server # securlevel: 30 service pop-3 { disable = yes ←ここを変更 socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/ipop3d } # /etc/init.d/xinetd restart
●設定が正しくない場合
qmailは、/var/qmail/controlディレクトリにあるmeファイルを環境に合わせて用意すれば、取りあえずは起動できます。/var/qmail/controlにあるファイルの正当性を確認するには、/var/qmail/bin/qmail-showctlコマンドを使用します。
# /var/qmail/bin/qmail-showctl qmail home directory: /var/qmail. user-ext delimiter: -. paternalism (in decimal): 2. silent concurrency limit: 120. subdirectory split: 23. user ids: 3005, 3006, 3007, 0, 3008, 3009, 3010, 3011. group ids: 3005, 3006. (中略) me: (Default.) My name is undefined! Uh-oh. ←meファイルがない場合 (以下略)
これで不備が見つかるようであれば、再度/var/qmail/control/下のファイルを作り直します。/var/qmail/control/下のファイルについては、「第1回 qmailによるSMTPサーバの構築」を参照ください。
サービスが起動できても、メールの送受信がうまくいかない場合があります。tcpserverを導入している場合は、cdbファイルにクライアントのIPが含まれているかどうかを確認します。もし含まれていなければ、/etc/tcp.smtpファイルを修正してcdbファイルを再構築します。
# vi /etc/tcp.smtp 192.168.0.:allow,RELAYCLIENT="" ←接続を許可するクライアントのIPを追加 # /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
最近のLinuxディストリビューションは、デフォルトインストールでセキュリティレベルを設定できます。「中」レベルを選択すると最小限のサービスのみを自動起動するように設定されますが、「高」レベルではipchainsを有効にするケースもあるようです。ipchainsはカーネル2.2から実装されたもの(注)で、自作ファイアウォールを構築された方にはなじみの深いものでしょう。ipchainsのパケットフィルタリング機能でホストのセキュリティを高めようというものですが、そのために追加サービスを開始する際の手順が増えます。
まず、ipchainsが有効かどうかを確認します。
# /sbin/ipchains -L Chain input (policy ACCEPT): target prot opt source destination ports ACCEPT tcp -y---- X.X.X.0/24 anywhere any -> ssh ACCEPT all ------ anywhere anywhere n/a REJECT tcp -y---- anywhere anywhere any -> any REJECT udp ------ anywhere anywhere any -> any Chain forward (policy ACCEPT): Chain output (policy ACCEPT):
ipchainsが有効でなければアクセスリストは表示されません。逆に、ipchainsをインストールしたつもりがなくても、Linuxの導入時にセキュリティレベルを「高」にしたことでインストールされている場合もあります。この状態では、各種のサービスを起動してもipchainsのパケットフィルタに引っ掛かり、クライアントとの接続が確立できません。
ipchainsを無効にするには、前述のturboserviceやnetsysv、chkconfigコマンドを使用してipchainsサービスを停止します。ipchainsを有効にしたままでSMTPやPOP3のサービスを解放する場合は、次の手順で行います。
SMTPやPOP3が使用するポートを双方向で解放するために、ipchainsを次のように実行します。ここではtcpserverで接続を制限するため、ipchainsでは発信元やあて先による制限は行いません。
# /sbin/ipchains -A input -p tcp -b -d 0.0.0.0/0 25 -j ACCEPT # /sbin/ipchains -A input -p tcp -b -d 0.0.0.0/0 110 -j ACCEPT
上記のコマンドが有効になっているかどうかを確認します。
# /sbin/ipchains -L Chain input (policy DENY): target prot opt source destination ports ACCEPT tcp ------ anywhere anywhere any -> smtp ACCEPT tcp ------ anywhere anywhere smtp -> any ACCEPT tcp ------ anywhere anywhere any -> pop-3 ACCEPT tcp ------ anywhere anywhere pop-3 -> any Chain forward (policy DENY): Chain output (policy ACCEPT):
このままではマシンを再起動すると設定が消えてしまうため、再起動後も設定が有効になるように/etc/sysconfig/ipchainsファイルに書き出します。
# ipchains-save > /etc/sysconfig/ipchains 以下の内容が追加されます。 :input DENY :forward DENY :output ACCEPT Saving `input'. -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 25:25 -p 6 -j ACCEPT -A input -s 0.0.0.0/0.0.0.0 25:25 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 110:110 -p 6 -j ACCEPT -A input -s 0.0.0.0/0.0.0.0 110:110 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT
サーバに必要なサービスは、これだけではありません。管理のためのsshやDNSサービス、HTTPサービスもあります。また、発信元やあて先のIPアドレスで制限をかける必要もあります。必要に応じて、「ゼロから始めるLinuxセキュリティ 第2回 ホストレベルセキュリティの総仕上げ」を参考にフィルタリングルールを追加しましょう。
ちなみに、Red Hat Linuxにはipchainsの設定を対話式で行うLokkitツールがあります。
# /sbin/lokkit
qmail単体であれば設定は至って簡単ですが、svcのためのdaemontoolsやtcpserverのためのucspi-tcpと、アドインツールをインストールするにつれて設定ファイルを準備する手間も増えてきます。そこで、qmail-confツールを使用するという方法もあります。
qmail-confはTetsu Ushijima氏によってhttp://www.din.or.jp/~ushijima/qmail-conf.htmlで公開されています。日本語の説明はhttp://www.y-min.or.jp/~nob/qmail/qmail-conf.htmlにあります。
大変便利なツールですが、できれば一度は自分で設定ファイルを1つ1つ確認しながらインストールすることをお勧めします。
Copyright © ITmedia, Inc. All Rights Reserved.