R・田中一郎bot、再度復活。

先月になってからR・田中一郎botが403 Forbidden で動かなくなっておりました。どうせまたTwitter側がAPI変えたんだろう、とわかっていたのですけど、よく調べもせぬまま今日に至っておりました。どうもすみません。

んで、今日ちょっと時間があったので調べてみたら、Net::Twitterがバージョンアップしていたのでさっそく導入。何が変わったのかな、とドキュメントを見てみたら、まあ。「TWITTER NOW REQUIRES SSL」とか書いてあるじゃないですか。ああ、やっぱり、って感じで。

というわけで、SSLを有効にしてbotを走らせてみたところ、403で蹴られることもなくツイートが無事に通るようになりましたとさ。めでたしめでたし。ああ、何だかなぁ。

にしても、今回のSSLの件って、ニュースとか何かになってましたっけ。なってればどこかで目にしてたと思うんですけど……と思って調べてみたら、ちょろっとあったようです。でも、日本語のニュースで触れていたのはこれくらいしかなかったみたい。bot系にとってはけっこうインパクトの大きい変更だったにしては、あまり話題にならなかったような?? まあ、解決したからいいんですけどね。

ともあれ、ご愛用頂いているフォロワー各位にはご迷惑をおかけ致しました。お詫び申し上げます。

さて、それでは寝ます。あまり夜更かししていると相方に叱られちゃうもんでw

プログラム投稿型コメントスパムをブロックするプラグイン「MT-Keystrokes」

MovableTypeのスパム対策その2として導入したのが、人の手によらない(プログラムで投稿される)コメントスパムをブロックするプラグイン「MT-Keystrokes」です。プログラム投稿型のコメントスパムを防止する手段としてよく知られているのは「CAPTCHA」ですが、正直あれは嫌いなものでして。あれを入力しないとコメントできないブログにはコメントをためらってしまうくらいです。最近のCAPTCHAは読みづらいし、何より防止手段としてエレガントじゃない(笑) ちゃんと投稿ボタンが押されたことを判断すればいいのですから、あんな前衛芸術みたいな文字を眉間にしわ寄せながら解読する必要なんて、本来ないはずなんです。

その辺の基本に立ち返ったプラグインが、今回導入した「MT-Keystrokes」なわけです。プログラムを見るとやってることは実にシンプル。非常に好感が持てます。ただ、開発されたのがずいぶん昔なので、導入するには少々手間がかかります。何をしなきゃいけないかというと、

  1. プログラムをプラグインのディレクトリにインストール
  2. テンプレートにタグを埋め込んで、フォームのタグに修正を加える
  3. エディタを使って、バージョンチェックの部分をいじる
  4. 不必要な行をコメントアウトする

以上になります。

続きを読む “プログラム投稿型コメントスパムをブロックするプラグイン「MT-Keystrokes」”

日本語でないスパムをフィルタするプラグイン「NotJapaneseLookup」

MovableTypeのスパム対策その1として、日本語でないスパムをフィルタするプラグイン「NotJapaneseLookup」を導入しました。このプラグイン、MT4.25時代から使っていたのですが、抜群によく効きます。海外からコメントがつく可能性だってないわけじゃないんですが、日本語で運用している限りその確率は無視できるくらい小さいですし、その代わりに日に数百通も押し寄せるスパムをブロックできるのですから、恩恵を取らないわけにはいきません。

このプラグインは、コメントスパムだけではなくトラックバックスパムにも対応してくれるので、いっそう便利です。今どきトラックバックなんかも流行らなくなってしまいましたが、ブログを運用しているとやはり気になるものです。トラックバックスパムに効果的なプラグインはなかなかないですから、MTを運用している方にはぜひ導入をお勧めしたいです。

MovebleTypeを6.02にアップグレード

このブログを動かしてるCMSがMovableTypeなわけですが、それを久しぶりにバージョンアップしてみました。 以前の4.25から6.02に一気にジャンプアップ。せっかくなので見た目も(付属のテーマ使って)一新してみたのですが、どないでしょうか。

でも、やっぱり付属のテーマはおまけでしかないですね。細かいところがどうもしっくりきません。で、カスタマイズするにはスタイルシートに手を入れたりテンプレートをいじったりしなきゃいけないのは以前と変わらず。せっかく有りもので楽しようと思ったのに、ちょっと残念。

それと、しばらく見ないうちに記事を書くエディタがリッチテキスト対応になっていて、便利なんだか使いづらいんだか。たとえばこんなこととかこんなこととかもWYSIWYG的に書けたりするんですけど、どうなんでしょうね。普段そんなにHTML使って書いたりしないもんだから、持ち腐れで終わっちゃうかも。

ま、ともかくこれからゆるゆると手を入れていこうかと思ってます。まずはフォントだなー。

さくらのVPS CentOS6: IPv6の無効化

んーと、いろいろ調べてみたところ、本家CentOSのFAQにやり方が書いてありました。
5. How do I disable IPv6?
検索とかしてみると、/etc/modprobe.confに追記してモジュールを無効化する方法がよく見られますが、それをやるとSELinux他の関係で不具合が起きる可能性があるとか。
なので、FAQではsysctlを使った方法を紹介しています。
/etc/sysctl.confに

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

の2行を追加して、sysctl -p でシステムに反映させます。
ifconfig -a を実行すると、IPv6の表示が出てこなくなるのが確認できます。
それにしても、なかなか普及しませんね、IPv6。

さくらのVPSでiptablesの設定

契約して環境整備して、ようやくVPSが安定稼働に入りました。
備忘録として、いろいろやった設定周りのことをメモしていきます。
今日はiptablesの設定について。
「さくらのVPS」「iptables」とかで検索するといろいろなケースがヒットしますが、不必要とも思える設定がさもデフォルトのように語り継がれていたりするので、ここではその辺についても軽く突っ込んでみたいと思います。

:RH-Firewall-1-INPUT – [0:0]

たいていの方がこの名前でチェーンを定義していますが、これははっきり言っていりません。よほど複雑なことをしない限りチェーンは1本で済みますから、わざわざ定義する必要はないと考えます。

-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT

50番、51番ともIPsecのプロトコルで用いられるポートです。VPSでIPsecを使わない限り、この定義はいりません。

-A RH-Firewall-1-INPUT -p udp –dport 5353 -d 224.0.0.251 -j ACCEPT

マルチキャストDNSを通す場合の設定ですが、グローバルIPアドレスを1つしか持たない1台の仮想サーバに対してマルチキャストする必要があるのかどうか。正直、ないと思います。

-A RH-Firewall-1-INPUT -p udp -m udp –dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp –dport 631 -j ACCEPT

631番はInternet Printing Protocol、つまりインターネット越しにプリンタを使うためのポートです。VPSにプリンタは……ついてないですよね? これもいりません。
とまあ、まずは不要な設定から説明してみました。
続いては、これは設定しといた方がいいんじゃないか、という設定について。

-A INPUT -i eth0 -p all -s 127.0.0.1 -j DROP
-A INPUT -i eth0 -p all -s 10.0.0.0/8 -j DROP
-A INPUT -i eth0 -p all -d 10.0.0.0/8 -j DROP
-A INPUT -i eth0 -p all -s 172.16.0.0/12 -j DROP
-A INPUT -i eth0 -p all -d 172.16.0.0/12 -j DROP
-A INPUT -i eth0 -p all -s 192.168.0.0/16 -j DROP
-A INPUT -i eth0 -p all -d 192.168.0.0/16 -j DROP

普通なら外部の送信元からローカルアドレスを名乗るパケットがやってくるなんてことはないのですが、きちんと閉じておかないとIP Spoofingなどによって思わぬ穴が開いてしまうこともあり得ます。なので、閉じます。

-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -d 224.0.0.1 -j DROP

ブロードキャストアドレス、マルチキャストアドレス向けのパケットを拒否します。仮想サーバにそんなものを送りつけられても困りますので。

-A INPUT -p tcp –dport 113 -j REJECT –reject-with tcp-reset

113番(IDENT)へのリクエストに対して即座にお断りを出します。これを明確に拒否しておかないと、一部のメールサーバ等がIDENTを要求してきた時に相手を待たせてしまう→サーバのレスポンス低下に繋がります。

-A INPUT -i eth0 -f -j DROP

フラグメントパケットを拒否します。この辺はお好みかもしれませんが、何となく気持ち悪いので。

-A INPUT -i eth0 -p tcp ! –syn -m state –state NEW -j DROP

ログに残らないポートスキャン、いわゆる「ステルススキャン」を拒否します。そんなこと仕掛けてくる輩はあからさまに怪しいですから。

-A INPUT -i eth0 -p tcp –dport (SSHのポート) -m state –state NEW -m recent –set –name SSH
-A INPUT -i eth0 -p tcp –dport (SSHのポート) -m state –state NEW -m recent –update –seconds 60 –hitcount 8 –rttl –name SSH -j DROP

ちょっと複雑なんですが、ざっくり説明すると60秒間に8回SSHのポートに接続してきたら拒否する、というものです。要するに、SSHに対して総当たり攻撃されるのを防ぐわけです。最近総当たりは流行ってますから、ここはひとつ用心のために。
というわけで、まとめると以下のとおりです。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p all -s 127.0.0.1 -j DROP
-A INPUT -i eth0 -p all -s 10.0.0.0/8 -j DROP
-A INPUT -i eth0 -p all -d 10.0.0.0/8 -j DROP
-A INPUT -i eth0 -p all -s 172.16.0.0/12 -j DROP
-A INPUT -i eth0 -p all -d 172.16.0.0/12 -j DROP
-A INPUT -i eth0 -p all -s 192.168.0.0/16 -j DROP
-A INPUT -i eth0 -p all -d 192.168.0.0/16 -j DROP
-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -d 224.0.0.1 -j DROP
-A INPUT -p tcp –dport 113 -j REJECT –reject-with tcp-reset
-A INPUT -i eth0 -f -j DROP
-A INPUT -i eth0 -p tcp ! –syn -m state –state NEW -j DROP
-A INPUT -i eth0 -p tcp –dport (SSHのポート) -m state –state NEW -m recent –set –name SSH
-A INPUT -i eth0 -p tcp –dport (SSHのポート) -m state –state NEW -m recent –update –seconds 60 –hitcount 8 –rttl –name SSH -j DROP
-A INPUT -m state –state NEW -m tcp -p tcp –dport (SSHのポート) -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 25 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 110 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 143 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 587 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

開けてあるポートについてはお好みで増やすなり減らすなりして下さい。とりあえず、メールとWebをやるのであればこれで充分かと思います。
iptablesについては、こんなところで。

お引っ越し全部完了。

MovableTypeのお引越しも終わって、これでサーバの引越しは全て完了。さらば、自宅サーバの日々。
ちなみに引越し先は、さくらのVPS。メモリ1GBの一番安いコースですけど、個人の趣味で運用するならこれで充分です。メモリが少ないんで、データベースのパフォーマンスがやや落ちるかな、ってくらいで。
で、今回の引越しでは
・DNSサーバ
・メールサーバ
・Webサーバ
をまとめて移動させました。まあ、DNSサーバはさくらのDNSに移行したのでnamedとかは動かしていませんが。
一番気を遣ったのは、メールサーバ。自宅から離れた場所に建てるんで、セキュリティ周りにとにかく気を遣いました。その甲斐あって今は送受信ともSTARTTLS対応&暗号化パスワードでがっちりです。しかも今回はせっかくなんでIMAPにも対応してみました。これで出先からでも自宅のメールをチェックできます。便利便利。
Webサーバの引越しは、主にMTの移動とデータベースの移動。データベースはともかく、MTの設定をほとんど忘れていたのでやや難航しましたが、今やすっかり元通り。こうやって記事も書けてます。
今回の引越し、なんだかんだ言って下準備には1週間くらいかけました。ほとんどはメールサーバの設定にかけてましたけど。PostfixやdovecotについてはWebで検索しても古い情報しかなくて、今の(比較的新しい)バージョンの情報を手に入れるにはほとんど英語のドキュメントを当たるしかありませんでした。その辺はちょっとキツかったですね。
でも、今回のサーバ移行は楽しかったです。元の環境がうまく復元できたり、サーバの機能をアップさせたりする作業は、何のかんの言って楽しいものです。この辺がサーバ屋さんなんだろうな、自分。
というわけで、以後今回の引越しでいろいろ勉強したこととかをこのブログに書いていきたいと思います。どうぞよしなに。

MovableType4.25の謎

はまりました。
そもそもの発端は、前の記事に試しにコメントつけてみようとしたところ、

テンプレート「Comment Preview Template」の再構築中にエラーが発生しました: テンプレートタグMTIfCommentsAllowedでエラーが発生しました: テンプレートタグMTCommentFieldsでエラーが発生しました: MTCommentFieldsタグは利用できません。代わりにテンプレートモジュール「コメント入力フォーム」をインクルードしてください。

というエラーが出たこと。

続きを読む “MovableType4.25の謎”