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に関するパッチが当たってる感じだった。
データベースMySQLでバックアップする方法。
いつものようにrootで作業。
ネットを調べると微妙に危ないコマンド打ってる場合があるらしい。
# mysqldump -u ユーザ名 -pパスワード データベース名 > バックアップのファイル名
こんな感じの「-pパスワード」な感じの書き方は、マニュアルによるとpsコマンドでパスワードが見れる瞬間があるとかないとか。
手動の場合は-pのみで、プロンプトを使ってパスワードを入力するのが一番安全らしい。
さて、今回の場合は自動でバックアップ取らせるのでパスワードを上記の方法以外でやらないといけない。
で、比較的安全な方法はオプションファイルを使用する方法らしい。
ファイル名とか置く位置はOSで違うので、Windowsでやる時はマニュアルでも見てください。
オプションファイル/root/.my.cnfを作成、さらにchmodで600にしてroot以外見れないようにする。
下記のように中身を書く。
[client] password=パスワード
これにより-pを指定しない場合は、オプションファイルのパスワードを自動的に使ってくれる。
mysqldump -u ユーザ名 データベース名 > バックアップのファイル名
後はcronで自動起動すれば定期的にバックアップをしてくれる。
もしサーバが吹き飛んだ場合はデータベースを作ってリストアのコマンド。
mysql -u ユーザ名 データベース名 < バックアップのファイル名
これにrsync(https://www.maocat.net/?p=154)を合わせれば完璧だろう・・・多分。
鯖を立て替えたので、ついでに忘れてた事をメモしていく。
問題はWeb鯖がちんだら、これが見れないということか・・・。
同一IPで違うサイトを運営するには、バーチャルホストを使わないと実現できない。
URLの違いで判別する設定。
設定ファイルを/etc/apache2/sites-availableに作って、/etc/apache2/sites-enabledでリンクを作れば実行される。
その際に、既存の設定は反映させないようにリンクを消しておく。(デフォの設定は使わないし、NameVirtualHostの設定が既に書いてあるから、怒られる)
VirtualHostタグをいくつも付けていけば、その分だけホストが増設できる。
ServerNameの部分でサイトの振り分けを認識してくれる。
Log関係は分かりやすいように名前を変えておこう。
ServerSignatureはバージョン情報とか出したくないので隠す為にOffにしとく。
NameVirtualHost * <VirtualHost *> ServerName ホスト名(www.maocat.jpとか) ServerAdmin メールアドレス DocumentRoot ドキュメントの場所 ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost>
追記(2009/10/15)
NameVirtualHostの記述はApache2のバージョンによっては、ports.confに既に書かれている場合があるので、その時は書かなくても良い。
Debianはlennyからのバージョンで変わってるっぽいです。
エラー内容とかは、この記事に書いておいた。
NameVirtualHostの後ろのパラメータが「*:80」の場合は、VirtualHostタグの*の部分も「*:80」にしておく事。
変化しやすい設定ファイルなどを他の鯖にバックアップする方法。
作業はrootで行って、バックアップ元のコマンドはlocal#、バックアップ先のコマンドはremote#と表記。
とりあえず必要な物をインストールする。
この作業はバックアップ元とバックアップ先で必要なので、両方でやっておく。
local# apt-get install ssh rsync remote# apt-get install ssh rsync
次にsshの設定ファイルを変更する。
セキュリティの為に、rootからのアクセスに関しては認められたコマンド以外は受け付けないようにします。
バックアップ元とバックアップ先の/etc/ssh/sshd_configを編集する。
設定を反映させる為に、編集後にsshdを再起動しておく。
PermitRootLogin forced-commands-only
認証鍵と公開鍵を作ります。
ちゃんと、他のユーザには見えないように設定しておきましょう。
cronでの自動バックアップも考えているので、パスフレーズは指定しません。
local# mkdir -m 700 /root/.ssh local# ssh-keygen -t rsa -N "" -f /root/.ssh/rsync
公開鍵をバックアップする先に転送します。
rootのログインは制限してしまったので、一般ユーザに公開鍵を一度送ってからバックアップ先で作業します。
local# scp /root/.ssh/rsync.pub バックアップ先一般ユーザ名@バックアップ先ホスト名:~/
公開鍵をrootに送ります。
リダイレクション(>>)を使っている理由は使う公開鍵は一つのファイルに入れる必要があるので、mvとかcpではなく既存ファイルに行を追加という形を取っています。
初めて公開鍵の設定をするならmvとかcpを使って、chownでroot所持に変えてもいいかも。
remote# mkdir -m 700 /root/.ssh remote# cat /home/公開鍵を転送したユーザ名/rsync.pub >> /root/.ssh/authorized_keys remote# rm /home/公開鍵を転送したユーザ名/rsync.pub remote# chmod 700 /root/.ssh/authorized_keys
バックアップ先にある/root/.ssh/authorized_keysを編集して、実行するコマンドを表記します。
command="rsync --server -logDtprze.iL --delete . バックアップ保存先の場所" ssh-rsa 鍵の文字列
準備は完了したので、実際にデータを転送してみる。
local# rsync -vv -az --delete -e "ssh -i /root/.ssh/rsync" 転送するファイル名 root@バックアップ先ホスト名:バックアップ保存先の場所
実行すると転送されるファイルが表示されて終了する。
転送先を確認してファイルが存在すれば成功。
後はcronを使って定期的にコマンドを実行すれば安心です。
-vvオプションは結果報告なので、これは外しといた方がいいかも。
何度、再インストールしても直らなかったので、とりあえずメモ書き程度に。
環境:玄箱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 &"