mod_securityでspamトラックバック対策

 σ(^^)が管理してるMovableTypeサーバー2台が、ときどきハングアップしたように無反応になることが時々ありまして、topによるとmt-tb.cgiが原因ぽい。つまり、トラックバック処理でリソースが食いつぶされているということですね。

 spamトラックバックのフィルタリング自体はMT内蔵機能でほぼ解決できるんですが、この処理自体が重すぎて、山のようにトラックバックが来た場合にDoS状態になってしまう訳です。

 そこでApacheレベルで特定のリクエストを排除できるmod_securityを導入してみました。1.8/1.9系の設定例はたくさん見つかるんですが、設定文法がまるっと変更された2.x系の情報は見つからず苦労しました。なにも考えずに最新版を導入してしまった…

 とりあえず設定してみたって段階ですが、覚え書きしておきます。

■インストール

 ウチの環境だと、mod_unique_idは導入済みでした。libxml2はlibxml2-develパッケージまで入れておく必要があるみたいです。

 で、後はアーカイブを展開し、Makefile内のtop_dir = 行に、httpd.confのServer rootで指定してあるパスを記入し、make、make installします。

 Apache側の設定として、httpd.confの然るべき場所に、

LoadFile /usr/lib/libxml2.so

LoadModule unique_id_module modules/mod_unique_id.so
LoadModule security2_module modules/mod_security2.so

 を記入します。

■日本語を含まないトラックバックを弾く

 公式サイトには、USER-AGENTやIPアドレスなどのブラックリストを定義した設定ファイルが色々置かれていますが、この手は最新版を入れ続けないと効果が薄そうだし、ルックアップの負荷も大きそうなので、とりあえず日本の皆さんがやられている「日本語(2バイト文字)を含まないものを弾く」というアプローチを採ってみます。

 具体的な設定は、同じくhttpd.confで、

<Files “mt-tb.cgi”>
    SecRuleEngine On
    SecRequestBodyAccess On
    SecDefaultAction deny,log,status:406,phase:2,t:urldecode
    SecRule REQUEST_BODY “^[\x00-\x7F]+$”
    SecAuditEngine On
    SecAuditLog /var/log/httpd/mod_security.log
</Files>

としてみました。Filesディレクティブでトラックバック用スクリプトにだけ働くように指定しています。1.x系から変更になったコマンド名だけを書き換えるだけでは上手くいかず試行錯誤したんですが、どうやらSecDefaultActionにt:urlencodeを追加したら上手くいったっぽいです。

 動作試験しようにも、ウチのブログはブログ名が日本語なので、 一時的に

SecRule ARGS:excerpt “^[\x00-\x7F]+$”

 のように、POSTデータの内、excerpt(トラックバックで送られる概要)のみを検査対象にし、本文に日本語を含むエントリと含まないエントリからトラックバックしてみたところ、一応後者のみが弾かれました。

 これでしばらく様子を見てみたいと思います。

 が、しかし本ブログに関してはそもそもトラックバックが正しく受信できない問題が発覚しました。別途原因究明しないと…

 ともあれ、このmod_securityはかなり柔軟にレシピが書けるので、Webアプリケーションのセキュリティ対策に色々と活用できそうです。

VPNで実家でもDLNA

 寝室のテレビをDLNA対応のBRAVIAにしたことで、ルームリンクVGP-MR200が退役したので、 実家に設置してみました。

 当然、直接自宅のDLNAサーバー群を参照することはできないので、VPN(PacketiX)を使ってややトリッキーなことをしています。

 Zebedeeやstoneなどで単純にパケットが通ってもMPEG2では帯域が不安なのと、DLNAはuPnPを使ってるのでフォワードも難しそう、ということで、やや美しくないですが、DLNAサーバー(TVersity)は実家のマシンで稼働させました。で、そのマシンがPacketiXで自宅のファイルサーバーにあるDivXファイル群を参照しています(直接DLNAをVPN経由させてると期待した方、申し訳ありません)。

 こうすることで、VPNを通るのはDivXストリームなので割と帯域的には余裕みたいです。ただ欠点として、

  • 実家側でもPCを立ち上げておかないとならない
  • しかも結構パワーがいる

ということがあります。とりあえず少し前にやはり自宅で退役したAthronXP/2500+マシンでもそれなりにトランスコードできているようです。

 ルームリンクではなく、LinkTheaterなど直接DivXを再生できるメディアプレーヤーなら、もう少し別の方法があったでしょうが、とりあえず追加投資するほどでもないので、これで使ってみようかと。

twitterアカウント作ってみました

 話題になってるので一応試してみようということで、twitterにアカウント作りました。

http://twitter.com/do_gugan/

 ハイフンが使えなかったので、アンダースコアにしてみたところ、リンクの下線とカブって見づらいことが発覚orz。

 とりあえず、Web更新はマンドクセーので、Opera用のウィジェットであるTwipperaと、PHP実装のケータイ用ゲートウェイtwitterMobileを設置。出先では911Tから更新できる体制にしてみました。

 受信、というか読む方はGoogle Talkと連携したりもできるようですが、GoolgleTalkは普段立ち上げていないのでとりあえずなにも無し。コメントいただいても気づくのは遅めかと思われます。

JumboFrameに関する覚え書き

 TeraStation Livingの導入の際にトラブッたJumboFrameについて、マニュアルの注意書きを確認したので覚え書き。

TeraStationのJF設定 ハブ 相手PC 通信可否
ON 対応 対応
ON 対応 非対応
ON 非対応 非対応
ON 非対応 対応 ×

△:通信はできるが、標準フレームサイズにフォールバック

 わかりにくいのが、ピア同士がJumboFrame対応しているのに、途中経路のハブが非対応だった場合に通信ができなくなることですね(まさにこの状況でした)。ハブもPCも非対応ならフォールバックして通信できるのに、意外ですね。おそらくネゴシエーション的には通ってしまうので、パケットサイズが大きいままやりとりしようとしてしまうんでしょう。

 JumboFrame設定は見た目わかりにくいので、ネットワーク不通トラブルの際には気づきにくい要素だと思います。しっかり頭の隅に置いておきたいものです。

PacketiXが急に安定した

 実家からの接続が切れまくって使い物にならなかったPacietiXが突然安定しました。

 たまたまメインのLinuxサーバーが外から反応しなくなったんで、常時稼働でPacitiXサーバーのWindowsマシンにリモートデスクトップで接続してLAN側からアクセスを試みたんですが、どうも切れない。

 特に設定もかえておらず、状況が変化したといえば、

  • いぜんLinuxマシンにもPacietiXサーバーを入れてみようとしたことがあって、使ってないつもりだったんだけど、そっちも起きててなにかコンフリクトしていた?
  • フリーズしてたLinuxマシンがDHCPサーバーも兼ねてたためIPアドレスがとれず、クライアント側で固定IP設定にしてみた

くらいかなぁ。帰宅してLinuxサーバーを再起動した時、PacketiXサーバーは自動起動しなかった。ただこれはrcの設定がそうなってただけで、フリーズ前に動いていなかったことを証明はできない。

 DHCPに戻すのはすぐに試せるけど、まぁちゃんと動いてるならいいやw。それにLANからと外からで同じマシンに同じIPがふられてる方がなにかと便利な気もしてきたし。

 ただ、やはりSMBのパフォーマンスはZebedeeの方がいいカンジ。PacietiXはコネクション数とかチューニングの要素がいろいろありはするのだけれど。

 とりあえず一番パフォーマンスが必要な動画サーバーへの接続はZebedee。それ以外のファイルサーバーを使ったり、リモートデスクトップ、iTunesなどに用がある場合はPacketiXってカンジですかね。

 そうそう、PacketiXといえば、Homeのパッケージ版にはUSBメモリから再起動無しで起動でき、PCに痕跡も残さないユーティリティが同梱されてまして、こないだはじめてネットカフェで使ってみたんですがちゃんと動きました。便利便利。