鯖が吹き飛んでqmailを入れ直しになったので、その時の記録。
使用OSはDebianLinux(lenny)。
今回は外部向けなので、踏み台にされたりしないように注意しながら構築していく。
とは言っても、qmailは基本的にはセキュリティが固めの設定がしてある。
DebianLinuxではapt-getである程度パッチの当たったソースコード(古い情報だけど、当たってるパッチ一覧)になっているが、一つ当たっていないパッチがある。
ユーザ名に記号が使われた時の対応パッチだ。
デフォルトでは何も文句を言わずに対象のメールを受け取ってしまう(さすがにドメインは設定したメールしか受け取らないが)。
そこらへんのパッチも当てつつ、頑張るとしよう。
# apt-get remove exim4-base # apt-get install qmail-src ucspi-tcp-src # build-ucspi-tcp
ここまでは特にデフォルトで問題ないと思う。
exim4-baseの削除はDebianLinuxを新規インストールした直後にqmailを入れる場合は、元に入っているMATを消す必要があるので入れてある。
該当しない環境の人は無視してよい。
では、問題のqmailをビルドする。
# build-qmail
途中のパッチを当てるタイミング(Press ENTER to continue…が出てる所)で、別コンソールからパッチを当てる。
当てたいパッチはqmail-smtpd-relay-reject。
ただ、このパッチはパッチを当てる順番により、今のDebian側で付けたパッチの後では一箇所パッチが当たらない部分がある。
そこはパッチファイルとソースファイルとにらめっこして修正しよう。
どうせ一箇所だし、パッチ作っておくのメンドイ(酷)
デフォルトでビルドした場合は解凍されたソースが/tmp/qmail/qmail-1.03に展開されている。
wget等でtmpあたりにパッチを落としておいて以下のコマンド。
# cd /tmp/qmail/qmail-1.03 # patch -s -p1 < ../../qmail-smtpd-relay-reject
その場にqmail-smptd.c.rejという名前でエラーで弾き出された部分のファイルが生成されるので、それを参照してqmail-smptd.cを追加修正しておこう。
一行書くだけだ。
で、元のコンソールに戻ってデフォルトで進んでいけばインストール完了。
まだメール鯖としては不完全なので、止めておこう。
# /etc/init.d/qmail stop
qmailの設定ファイルを弄っていく。
場所は/etc/qmailで、デフォルトでは自分自身の鯖のメールしか受け取らないし、転送すらしてくれない(と思う)。
それぞれのファイルを確認・修正・追加をしていこう。
なお、これらのファイルの書式はドメインごと改行で区切っていく。
設定例はhage.hoge.com(hageがホスト名でhoge.comがドメイン名)として、DNSの設定によりhoge.comでもメールを受けれるようになっている物とする。
me:自分自身のドメイン名
hage.hoge.com
locals:ローカルの物として処理するドメイン名
localhost hage.hoge.com hoge.com
rcpthosts:転送を許可する宛先のドメイン名
hage.hoge.com hoge.com
plusdomain:ドメイン部分に+が付いた時に追加するドメイン名
hoge.com
defaultdomain:ドメインが省略された場合に書き込まれるドメイン名
hoge.com
こんな感じだろう。
rcpthostsがこの中では一番重要なファイル。
これを削除してしまうと、その鯖は赤い絨毯が敷かれたスパムの踏み台。
お上品の欠片も無いスパマーが上って、やりたい放題メールを飛ばされてしまうので注意しよう。
受け取るべきメールのドメイン名のみを書こう。
後、ダブルバウンス対策(Fromを偽られた上にエラーになってFromの部分のアドレスに返って来るメール)もしておく。
どうせ読まないので、そのまま破棄する設定にする。
# touch doublebounceto
qmailはrootでメールを受け取る事は出来ないので、どこかのユーザにメールを転送する必要がある。
メール管理者のメールも一緒も転送する。
# mkdir alias # echo '&メールアドレスまたはユーザ名' > .qmail-root # echo '&メールアドレスまたはユーザ名' > .qmail-mailer-daemon # echo '&メールアドレスまたはユーザ名' > .qmail-postmaster
次に起動スクリプトをいじって、Maildir形式に対応する用にする。
/etc/init.d/qmailの「alias_empty=”./Maildir/”」を有効にして、他のalias_emptyは#でコメントアウトする。
各ユーザのホームディレクトリにメールを受け取る領域を作る。
メールを受け取るユーザになって、自分のホームディレクトリで以下のコマンドを発行。
$ maildirmake Maildir $ echo './Maildir/' > .qmail
これでメールを受け取る環境を作成完了。
ユーザ新規追加時のディレクトリにも適用するのであれば、管理者で以下のコマンドを発行。
# maildirmake /etc/skel/Maildir # echo './Maildir/' > /etc/skel/.qmail
このままでの設定によりメールは受け取る事が出来るが、外部に送るメールは許可されていないので配送できない。
鯖が設置されているローカルのIPに関してはメール転送を許可する必要がある。
ローカルIPの範囲を192.168.255.0/24として自分自身127.0.0.1を含めて許可する形で、/etc/tcp.smtpを編集する。
127.0.0.1:allow,RELAYCLIENT="" 192.168.255.:allow,RELAYCLIENT=""
これを元に認識できる設定ファイルを生成する。
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
これでローカルIPである192.168.255.0/24と鯖自身は自由なドメインにメール転送が出来るようになる。ここもスパマーの餌食にならないように注意する設定ですね。
以上で準備完了なので、qmailを起動する。
# /etc/init.d/qmail start
内部や外部からテストメールを送ってみたり、不正中継チェックをしてみたりして動いて安全か確かめましょう。
もしかしたら、起動してもプロセスが落ちるかもしれないのでこの記事も参考にしたら解決するかもしれない。
後はメールクライアントで読む為にpop3関係とかimap関係とか入れると良いだろう。
私はimapでcourier-imapを入れてます。
WordPressの重さに耐え切れず、スペックをアップさせたWeb鯖に載せ替えた時の記録。
使用OS:DebianLinux(lenny)
OSのインストールは最低限でデスクトップ環境のチェックは外して、標準システムのみ。
特筆するべき点はないので、普通にインストールする。
いらないサービスを削除する。
どんなポートが待機しているかは「netstat -lap」で確認する。
portmap関係とsmtpあたりが稼動していると思われる。
portmap関係は使わないし停止。
smptはexim4が稼動してると思うが、私はqmail派なので停止して後でqmailを入れ直す。
# apt-get remove portmap exim4-base
netstatで確認すると、しばらくsunrpcが見えているが時間が経つと消えているはず。
これで開いているポートは無くなるはずなので、必要な物を入れていく。
デフォルトのapt-getの設定だとqmailが入らないので、/etc/apt/sources.listの各行に「contrib non-free」を追加して以下のコマンドを打っておく。
# apt-get update
椅子に座って作業したいので、リモートログインのsshを入れる(笑)
これでディスプレイも取り外せます。
# apt-get install ssh
ftpでファイル転送する為にproftpdを入れる。
途中でstandaloneかinetdのどちらで起動するか訊かれるので、特に常時使うものじゃないのでinetdを選んどきましょう。
# apt-get install proftpd
インストール完了後に設定ファイル/etc/proftpd/proftpd.confをいじって、「ListOptions ”-la”」にしてドット付きのファイルを表示できるようにしておく。
そういえばセットアップしてる途中で気がついたんだが、debianのTCP Wrapperってデフォルトは何も書いてないんだな・・・。
適切に設定してあげてください。
データベースのMySQLをインストールする。
インストール中にMySQLのrootパスワードを訊かれるので、適宜入力しておく。
# apt-get install mysql-server
設定ファイルが/etc/mysql/my.cnfにあるので、接続時にDNSを見に行かないようにする「skip-name-resolve」を入れて、各種設定をいじって使用メモリを上げときます。
今回は旧鯖よりデータを保存されているファイルを直接コピー&ペーストで突っ込むので、メンテナンスユーザーのパスワードで引っかかるので、まずMySQLを停止して/etc/mysql/debian.cnfのパスワード部分を旧鯖のパスワードに書き換えた後に、/var/lib/mysql以下を旧鯖から持ってきて置き換えれば、移転完了である。
作業はMySQLをちゃんと止めて行う事。
ようやくApache2を入れる。
PHP5も一緒に入れて、WordPressも動くように準備しておく。
# apt-get install apache2 php5 php5-gd php5-mysql
何も訊かれずに全部入っていくので、インストール終了までやる事なし。
php5-gdを入れないと画像のサムネイルとか作れないので忘れずに入れておこう。
バーチャルホストの設定やらなんやらをやって、再起動。
コンタクトフォームとかコメント書かれた時にメールを飛ばしてくれるようにする為にMTAにqmailを入れる。
パッケージ化されていないのでソースを持ってきてビルドする事になる。
まあ、apt-getで持ってこれるからコマンドを一杯打つだけだ。
# apt-get install qmail-src ucspi-tcp-src # build-ucspi-tcp # build-qmail
build中に色々訊かれるが、エンターを押していけばちゃんと入ってくれる。
入れ終わったら、/etc/qmail内に設定を書いていけば終了。
これで稼動するはずです。
後はバックアップ体制を整えたりとかすればオッケーだ。
コメント (0)
qmailを色々いじる機会があったので、調べた事を記録しておく。
ここに書かれてるのはDebian(etch)のqmail-srcの話なので、環境が違ったりまっさらなオリジナルからやる人とは状況が少し違うかもしれない。
Debian(etch)のqmail-srcは、最初に以下のパッチが既に当ててある。
ちなみに実物を見たいのであれば、qmailのソースが解凍されている先のpatchesの中に入ってる。
- netscape-progress.patch
NetscapeのPOP3に対する修正パッチ、使わないからよく分からん - pop3-supplementarygroups.patch
checkpasswdに関するパッチらしい、でも私はPOP3使ってない・・・。 - qmail-0.0.0.0.patch
IP0.0.0.0を自分自信と認識する為のパッチ。 - qmail-1.03.errno.patch
そのままだとglibcの関係でコンパイルが通らないので、それを直すパッチ。
最新版から8年くらい経ってるから環境も変わっていくね。 - qmail-1.03.isoc.patch
古いCで書かれた表現を、今の標準規格のCに置き換えるパッチ。
64bitな環境で使うには当てないといけないとかなんとか。
後、バッファオーバーフローに対するバグ修正も入ってるとか。 - qmail-1.03.qmail_local.patch
ソースの一部の条件分岐が間違ってるのを直すパッチ。
私も学生時代にand/orで同じような事やった気がする・・・。 - qmail-date-localtime.patch
ヘッダ等に使われる時間表現を、標準時からローカル時にしてくれるパッチ。 - qmail-ldap-1.03-20041201.patch
LDAP用のパッチ。 - qmail-link-sync.patch
ファイルシステムに関係するパッチらしい。 - qmail-smtpd-bmtpatch.patch
設定ファイルbadmailtoを使えるようにするパッチ。 - qmail-smtpd-usint.patch
バッファオーバーフローに対する修正パッチ。
上にあるqmail-1.03.isoc.patchに手法が違うが近い修正がしてあるっぽい。 - qmailqueue-patch
環境変数QMAILQUEUEを使えるようにするパッチ
これにより、キューに入ったメールを別のプログラムに処理させる事ができる。 - qregex-20040725.patch
設定ファイルbad~で正規表現が使えるようにするパッチ。
ついでにbad~の設定ファイルがいくつか増える。詳しくは内容を見よう。 - usr-doc.patch
ドキュメントファイルの位置や、ドキュメントファイルの内容を書き換えるパッチ。
さらに調べてみると、最初からDNSに関するパッチが当たってる感じだった。
何度、再インストールしても直らなかったので、とりあえずメモ書き程度に。
環境:玄箱HG DebianLinux etch kernel-2.6.25.1
インストール方法:apt-getによるソース取得からのビルド&インストール
現象;qmailを立ち上げても、smtpポートが開かれない。特にエラーログもなし。
起動スクリプト(/etc/init.d/qmail)を書き換える。(赤い部分が変更箇所)
start)
echo -n "Starting mail-transfer agent: qmail" $rblmsg
sh -c "start-stop-daemon --start --quiet --user qmails \
--exec /usr/sbin/qmail-send \
--startas /usr/sbin/qmail-start -- \"$alias_empty\" $logger &"
# prevent denial-of-service attacks, with ulimit
ulimit -v 16384
sh -c "start-stop-daemon --start --quiet --user qmaild \
--pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
--exec /usr/bin/tcpserver -- -R -H \
-u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 25 \
$rblsmtpd /usr/sbin/qmail-smtpd 2>&1 \
| $logger &"