外向けサーバーの更新(その9;監視ツールの設定)

すでにswatchはインストールしていますが設定が中途半端なところで終わっています。また,sshdへの不正アクセスを遮断するためのツールもインストールします。

1. DenyHostsのインストール
DenyHosts-2.6.7をインストールします。
pkg install denyhots
でインストールされます。

/etc/hosts.allowを編集して
sshd : 192.168.0.0/255.255.0.0 : allow
sshd : /etc/hosts.deniedssh : deny
sshd : ALL : allow
ALL : ALL : allow
とします。1行目はあまり意味がないかもしれません。

/usr/local/etc/denyhots.confを編集します。
PURGE_DENY = 1h
最初のうちは,タイプミスでログインできなくなると怖いので,拒絶する期間を1時間とします。
BLOCK_SERVICE = sshd
のコメントを外して接続拒否をするサービスをsshdとします。あとはADMIN_EMAILに自分のユーザ名を書いておけばlocalhostの自分のアカウントにメールを送ってきます。また,
DAEMON_PURGE = 10m
として10分間隔でチェックするようにしておきます。

/etc/rc.confに
denyhots_enable="YES"
syslogd_flags="-c"
を追加して
system denyhots start
system syslogd restart
としてDenyHostsを起動し,syslogdを再起動します。

2. swatchの設定
先にpkg install swatchでインストールしているので設定をします。rc.confに以下を追加します。swatch_rulesで異なるswatchの設定を指定します。2種類のルールで運用したいときは下のように"1 2"と書きます。3つあれば"1 2 3"です。1種類の設定をswatch_1_XXXのように書いてまとめます。複数のルールがある場合は1の部分を2, 3...とします。swatchを動かすユーザーをrootとしないとswatchが起動せず,ずっと何かを待っていてOSが起動しない,というワナにはまります。起動時にこのワナにハマるとシングルユーザモードで再起動してディスクを書き込み可能で再マウントした上で/etc/rc.confのswatchの設定部分をコメントアウトしてrebootする,というような煩わしいことになってしまいます。設定した時に,ちゃんと起動させて確認すれば良いだけの話なのですけど...

swatch_enable="YES"
swatch_rules="1 2"
###swatch_rules="1"
swatch_1_flags="--config-file=/usr/local/etc/swatch/swatch_1.conf --tail-file=/var/log/messages --daemon --restart-time 15:15 --pid-file=/var/run/swatch_1.pid"
swatch_1_user="root"
swatch_1_pidfile="/var/run/swatch_1.pid"
#
swatch_2_flags="--config-file=/usr/local/etc/swatch/swatch_2.conf --tail-file=/var/log/httpd-error.log --daemon --restart-time 15:20 --pid-file=/var/run/swatch_2.pid"
swatch_2_user="root"
swatch_2_pidfile="/var/run/swatch_2.pid"

/usr/local/etc/swatch/swatch_[1,2].confを編集します。1番目のルールはdmesageを見ているので,
# Alert me of bad login attempts and find out who is on that system
watchfor /INVALID|REPEATED|INCOMPLETE|BAD|FAIL|FATAL/i
echo
mail=morika@localhost,subject=Swatch_login_log

# Kernel problems
watchfor /panic|halt|shutdown|reboot/i
mail=morika@localhost,subject=Swatch_kernel_problem

watchfor /file system full/i
mail=morika@localhost,subject=Swatch_file_system_full
というようなことを書いておきます。また,2番目のルールはhttpdのエラーを見ているので,
# Alert me of invalid method for httpd
watchfor /invalid method in request/i
echo
mail=morika@localhost,subject=Swatch_httpd_log
というようにしてみました。2つめのルールにひっかかるようなアクセスがあるのかどうか,過去のログをざっと見た感じではよくわからなかったのですが...

service swatch start
として起動すればOKです。

これでほぼ古いサーバーの環境を再現できたと思います。さすがに,一度にまとめてやるのは辛いものがありました。うーむ。

外向けサーバーの更新(その8;fml8の設定)

いつまでたっても設定が終わりませんが、次はメーリングリストの設定です。これまではfml4を使っていましたが、この機会にfml8に乗り換えることにします。

1. ソースのダウンロード
fml8については公式ページに詳細な情報が記されています。ソースコードはftp://ftp.fml.org/pub/fml8/から新しい日付のものをダウンロードします。

2. fmlユーザーの追加
adduserでユーザーfmlをグループfmlで作成します。

3. fml8のインストール
ユーザーfmlでソースを展開して、ソースのディレクトリに移動して./configureします。外向けのhostnameと内向けのそれが異なるためオプションをつけて対応します。
./configure --with-default-domain=DOMAIN --with-default-hostname=HOSTNAME
このサーバーではDOMAINとHOSTNAMEのいずれも外向けのhostnameを指定しておかないとうまく動きません。

その後、rootになってmake installすると実行ファイルが/usr/local/bin/に、設定ファイルが/usr/local/etc/fml/コピーされます。これまでの設定にあわせるために/usr/local/etc/fml/site_default_config.cfに

article_header_rewrite_rules -= rewrite_article_subject_tag
     += rewrite_subject_tag

article_subject_tag = [$ml_name:%04d]

を追加しておきます。また/usr/local/etc/fml/main.cfのdefault_domainを外向けのホスト名(ドメイン名ではない!)に修正しておきます。いずれも空白はタブです。

4. postfixの設定
postfixの設定を変更します。/usr/local/etc/postfix/main.cfに

allow_mail_to_commands = alias,forward,include

を追加します。また、
alias_maps = hash:/etc/aliases, hash:/var/sppl/ml/etc/mail/aliases
とします。

設定ができたらpostfix reloadとして設定を読み込ませます。

5. MLの作成
ユーザーfmlで
makefml newml test
makefml add test hoge@fuga.co.jp
としてMLを作成してメールアドレスを追加します。

アドレスを削除するには
makefml bye test hoge@fuga.co.jp
とします。またMLそのものの削除は
makefml rmml test
です。

6. fml4からの移行
fml4で運用していた設定ファイルは変換が面倒なのでメーリングリストを一つ一つ作成していきます。

一応、変換用ツールも用意されていますが、同じサーバー上でfml4とfml8が動いていることが前提のようなので今回の引越しには対応できないのです。

といってもmakefml newml ML_NAMEとしてMLを作成し、あとは、fml4の/var/spool/ml/ML_NAME/{members, seq, summary, actives, spool/*}をコピーするだけです。ただし、activesはrecipientsに名前を変えなくてはなりません。

これでなんとか動いているようです。

ただ、gmail.comから送ったメールはMultipertは危険なのでrejectするという返信が返ってきてメールを投稿することができなくなっていました。ちょっと面倒ですが、とりあえず運用を始めることを優先して目をつぶります。

メーリングリストの運用では当たり前ですがメールを受信できないのでルータのNATの設定で25番ポートが新しいサーバーのほうを向くように設定変更します。それに伴って,open relayの設定になっていないかどうかを念のため確認しておきます。オープンリレーを確認してくれるサイトを使うと便利かもしれません。

外向けサーバーの更新(その7;apache2.4の設定)

いつになったら終わるんだ、という感じですがなかなか思ったようには動作しません。

apache 2.4にアップデートしたためhttpd.confの設定がよくわからずハマります。2.2のhttpd.confを見ながら似たような設定項目を手作業で修正していきます。なんか、不毛ですが、やむを得ません。

1. LoadModuleの設定
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
のコメントをはずして生かして、さらに、
LoadModule php5_module libexec/apache24/libphp5.so
を追加します。

2. server名の設定など
ServerAdmin you@example.com
ServerName www.example.com:80
を適切な名前に変更します。この設定にあわせてメールサーバーにaliasesを設定するなどしてメールを受け取れるようにしておかねばなりません。

3. DocumentRootの設定
遠い昔のapacheはdocument rootはhtdocsと決まっていたのでいまだにそれを引きずっています。そのため、
DocumentRoot "/usr/local/www/htdocs"
<Directory "/usr/local/www/htdocs">
のように変更しておきます。

4. Optionsなど
<Directory "/usr/local/www/htdocs">のなかのオプション類を変更します。
Options Includes FollowSymLinks MultiViews
AllowOverride All

デフォルトではAllowOberride Noneですが、WordPressが.htaccessファイルを使うのでNoneではなくAllにしておかねばなりません。

5. その他のディレクトリ
職場内からのみアクセスを許可するような場合には、該当するディレクトリについてアクセス設定をします。
<Directory "/usr/local/www/htdocs/hogehoge">
Order deny,allow
Deny from all
Allow from xxx.yyy.zzz.vvv/16
Allow from 192.168.0.0/16
Allow from ppp.qqq.0.0/12
</Directory>
という感じです。

6. cgi-binのディレクトリ
これも遠い昔のデフォルトの感覚が抜けないため
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"
<Directory "/usr/local/www/cgi-bin">
のように修正します。

7. PHP関連
PHPについては前に設定をしていますので、それでOKです。

8. userdirの設定
/usr/local/etc/apache24/extra/の下にその他の設定ファイルが置かれていて、httpd.confがインクルードしています。そのなかにuserdirの設定があります。httpd.confのなかで
LoadModule userdir_module libexec/apache24/mod_userdir.so

Include etc/apache24/extra/httpd-userdir.conf
のコメントをはずしておきます。これで、デフォルトではhttp://hoge.fuga.jp/~USER/でユーザーのホームディレクトリ下のpublic_htmlにおかれたファイルにアクセスできます。ただし、デフォルトのままではindex.htmlが存在しない場合にディレクトリの一覧が表示されてしまってあまりよくないので、extra/httpd-userdir.confのOptionsからIndexesを削除しておきます。
<Directory "/home/*/public_html">
AllowOverride FileInfo AuthConfig Limit Indexes
## Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>

7. WordPressの引越し
WordPressのバックエンドで動いているデータベース(MySQL)はDMZで動かしたくないのでLAN内に設置してfirewall越しにアクセスしています。したがって、新しいサーバーではWordPressのフロントエンドだけをインストールすればOKです。古いサーバーに置かれているものをそのままディレクトリごとまるごとコピーすればちゃんと動作します。.htaccessもいっしょにちゃんとコピーしてくるところがポイントです。httpd.confの設定がまずいと500 internal server errorが出ます。私の場合はこのエラーはmod_rewrite.soをLoadModuleしていなかったことが原因でした。rewriteモジュールをロードすれば正しく動作しました。

また、.htaccessが存在しない場合は、トップページは正しく表示されますがすべてのパーマリンクがアクセス不能になります。

このあたりの設定でハマりまくりましたが、とりあえずなんとか動くようになりました。

ここまで設定ができたら、ルータのNATの設定を変更して80番ポートへのアクセスを新しいサーバーに振り向けるようにします。