Windows XPで一部のサイトにつながらない

うちにはWindows XPがある。
それどころか、実はWindows 98SEもあったりするのだが、こちらのXPはゲートウェイ接続で、実質、携帯万能が32bit Windowsのみの対応、しかもWindows 8は非対応ということから使われている。

しかし、この携帯万能が曲者で、まともに動かない上にバグっている。

送信メールがまともに取り込めないというトラブルに見舞われたのだが、トリスターは「特殊文字を使用したメールのせいなので、OSを初期化せよ」とか無茶なことを言ってきた。
絵文字すら使わない私が送信メールで一体どんな特殊文字を使うというのか。

だいたい、その場合にその後機能しなくなることを仕様として開き直るんじゃない、と思う。

まぁ、仕方がないので今回は応じて初期化しよう、というわけだ。

だが、いきなり問題が発生。いくつかのウェブサイトに接続できない。まず、Googleに接続できない。
接続できるサイトのほうが多いが、Amazonに関しては一見まともに接続できたかのように見えるが、結局おかしな画面になってしまう。CSSや画像が読めない感じか。

このために、携帯万能はAmazonで入手したのだが、ソフトウェアダウンローダは入手できるが、ソフト自体がダウンロードできない。

一見DNSの問題に見えるが、

> nslookup google.co.jp

では値は取れている。
随分と悩んだのだが、やがて「どうもSSLが原因ではないか」というところに思い当たった。
SSLの脆弱性への対応として旧SSLを受け付けないサイトが増えているので、接続できないのだろう。

じゃあ、プロキシ経由ならいけるのだろうか?と思い、

$ ssh -f -N -D 0.0.0.0:1080 localhost

としてWindows XPでSocksを設定してアクセスしてみたが、結果は変わらない。
そこでLinuxでIron PortableをダウンロードしてUSBメモリ経由で導入してみると、Googleにもアクセスすることができ、無事Google Chromeを入手することができた。

SSLの問題ということは分かったが、回避策はなかなか厄介。
Windows XP SP3での修正が期待されるが、そもそもWindowsUpdateをしようとするとIEでMicrosoftのサイトにアクセスするのだが、その時点で接続がはじかれてWindowsUpdate不能。

これでダメなら、ということでLinux経由でMicrosoftからWindows XP SP3アップデータを入手した。

そしてUSBメモリ経由で受け渡し(別にChromeが使える状態になっているので、SSHやFTP経由でも構わないのだが)適用すると、IE7のままではあるが無事にアクセス可能になり、解決した。

なかなか厄介な状態だが、これは一般のWindowserには厳しいのではなかろうか?
既にSP3の状態で使っている人は大丈夫だが、リカバリした瞬間に詰む可能性もある。
SSL問題がWindows XPに止めをさした形か。いや、それで世の中のWindows XPが滅びてくれるなら実に喜ばしいが。

しかし、フィーチャーフォンまわりはかなり厳しい状況だ…

ちなみに、同様の問題はLinuxにおけるPresto版Operaでも生じる。

某コンテストの投票方式の問題点

先日まで某サイトでwebコンテストが実施されていた。だが、これにかなりの技術的問題点があったので、言及しておく。

会員に対する投票と、一般の投票は、票の重さが違う、という仕様で、一般投票は1日に1票、ということだった。しかし、この重複票排除というのは、現実にはまず不可能である、とされている。

重複票排除については1995年頃から議論されていた。1人1票、と設定しても、どうやってその人が既に投票したかを確認するか?ということだ。方法としては、IP, IP+UA, Cookie, 登録制が一般的だった。

IPはゲートウェイホストによって個々のインターネットホストに与えられるため、同一IPの投票を重複とみなす、という方式だ。だが、この方式は、インターネットカフェやケータイ(これは2000年以降)で問題が生じることと、NATを用いるために同一世帯の家族を「重複票とみなしてしまう」という問題があった。一方、PPPならば「電話をかけ直す」ことでIPアドレスは振られ直すことが多く、この重複を排除できない。

IP+UAは、IPとUAの両方が一致する場合重複とみなす、というもので、会社、ネットカフェなど共有回線がまるごと重複とみなされる問題を回避しようとした。しかし、UAは当時は特にバリエーションがそれほど多くなかった上に、詐称することも可能だったため、会社などそれなりの規模になるとかなりの確率で、環境を揃えているネカフェではほぼ確実に重複とみなされ、一方重複投票したい人は容易に回避できた。

Cookie方式はブラウザに「投票した」という情報をもたせることで管理しようというものだ。比較的単純で効果があったが、手元に複数の、Cookieを共有しないブラウザがあれば回避されてしまうし、単にCookieを削除するだけでいくらでも投票できてしまう。

登録制は、重複登録をいかにして防ぐかが問題となる。また、登録制にすることでハードルが上がり、投票数は劇的に低下する。重複票を防ぐ効果は低く、それでいてむしろ避けられることになるため、よほど自信のある(中身にというよりも、popularityにおいて)プロバイダでなければ採用は逆効果だった。

これらの問題の難しさを諦めて、逆手にとったのがAKB方式といえる。つまり、重複投票はしても構わないが、その票数は買わなければならない口数方式だ。

例えば住基カードを使えば1人1票は実現可能だが、厳密性を求めるならなりすましの対策という非常に困難な問題にぶつかることになる。それに、選挙でもなければ同定に住基カードなど使えない。

携帯電話に限る、という方式はお手軽であり、普及している。電話番号を使うことで同定できるためだ。だが、そのような理由でコンテンツを携帯電話に限ることは、アクセシビリティの観点から言っても好ましくないし、やはりアクセスはかなり減少する。それに、そのような目的で電話番号を取得するのはいかがなものか?ということもある。

このほか、TwitterやFacebook, Google+のようなopenIDを使って認証する、という方式もある。電話番号よりはいくらかソフトなやり方だが、その分効果は低下する。

このように非常に難しい重複投票の制限だが、そのコンテストでは、単純にCookieを使う方式だった。CSRF対策か、セッションクッキーを使うようになっていたが、その場合、単純にブラウザのプライベートウィンドウを開いてアクセスし、投票して閉じれば無限投票が可能だ。

もっとあげつないやり方としては、curlなどでセッションクッキーを保存するようにして投票ページを取得したあと、投票するという2回のコネクションを張るだけで投票できる。この間0.1-3.0sec程度なので(私の環境で)、ループすれば1時間で1500票は入れられる。

これはさすがに中止になるか無効になるかするように思う。

もう少し考えて作ってもよかったのではないだろうか。

インターネットは既に死んでいる

私はインターネットは1992年(商用インターネット開始より以前)からやっている。自宅インターネットは2000年からで、それ以降は本格的にやってきた。また、単に部分的に使うというよりも、文化・人事的側面に強い関心を持ち、それに関わってきた。

しばらく触れない間もあったが、それでもネットがどう移り変わってきたのか、どういう文化が形成されていたかということは知っている。そこで、現状について定点観測的見地から述べたい。主張が入っているし、多分に主観的な批判を含むことをご了承頂きたい。

まず重要になるのは、インターネットとはそもそも何か、ということだ。軍事目的であり、今も米軍の支配下にある、という陰謀説的神話を持ち出したがる人は多く、この都市伝説は未だに広く信じられているが、これは事実ではない。そもそも出発点からして、軍事目的とは言えなかった。きっかけはスプートニクであり、ソ連に対抗するためであったが、政治目的と軍事目的と科学者と科学好きが混沌を繰り広げた結果、the Internetプロジェクトは早々にARPAのすみっこにあるだけの「居候」へと追いやられている。結局、研究をはじめるためのきっかけと環境整備を国が(政治または軍事を目的として)やった、というだけのことになった。

origin達の考える「インターネット」はまとめると次のようなものだ。

  • 自由
  • より民主的
  • 対等
  • 政治・国家に対して独立

だからインターネットは非常にUNIX的であり、またHacker的なものだ。もともと、Origin達はhacerであり、さらにthe Internetが発展する過程では多くのUNIXサイトがつながっていくことでネットワークが形成されてきた。つまり、インターネット文化の根底はUNIX文化でありhacker文化だと言って差し支えない。

インターネットの中で重要なのは何か?といえば、結局のところこれらがひとつのことを指していることからも分かるだろう。個人が主体性を持ち、すべてが対等である自由だ。何かを決定する「偉い人」などなく、マイノリティが差別されることもない、そういう世界の構築だった。事実、インターネットの規格であるRFC(近年はRFCが新しいインターネット技術の標準となる例は聞かないが)は誰でも投稿はできるし、合意が形成されれば採用される。NWGは、寝ることも忘れてしまう科学者たちが、肩書やしがらみに関係なく、自分の好きなことを大いに語り、議論をかわし、そして合意が得られたものは形になる、というものだった。

もともとインターネットは「一般のもの」ではない。アメリカで商用インターネットが始まったのは1992年、日本では1993年だ。この時にようやく「金を払えばインターネットに接続できる」時代がやってきた。それまでは大学、研究者、インフラを構成しているサイトによって成り立っていた。ちなみに、大学ではインターネットよりもUSENETが先行していた。今や公共ネットワーク=インターネットだが、もとよりそうだったわけではなく、もっと色々あった。しかしいずれにせよ、当時コンピュータネットワーキングをやっているというのは、技術者でもなければ好き者(エッジユーザー)に決まっていたので、その文化はかなりの共通性が見られたのは言うまでもない。

つまり、Real Worldにおける地位や立場、あるいは権力や国家といった上下や強制とは無縁の、独立した民主的な世界(ここで「民主的」というあたりがアメリカ的だと思う。ただし、実際は共和主義に近い)が、地理とは別の世界を構築することで実現できる、そんなひとつのユートピアだった。科学者的な夢想でもある。

だが、近年は極めて政治や司法の介入、制御をしたがる。根本的に地理で区切られるReal Worldとは構造が違うにもかかわらず、同じことを無理矢理にあてはめようとしている。それだけでもインターネットは死んだといえるのだが、それだけでなく人々が現実における立場や地位や権力を振りかざしたがるようになり、ネットの独立性を尊重しなくなったことによっても死んでいる。

the Internetは今や全くおもしろくない。かつての居心地の良い、侵害されない空間とは異なる。Real Worldにおける侵害、迫害がそのまま持ち込まれ、例えば貧乏で地位もないという人が対等な条件で勝負できる環境であってインターネットは、既にそのReal Worldにおけるディスアドバンテージを継承することを強要するものとなっている。

私が「インターネットの様子がおかしい」と言い出したのは2002年だが、やはり急速に死に向かっていたことを確かめざるを得ない。

そうしたこととは別に感じるのが3点

  • よそよそしくなった
  • 民度が下がった
  • リテラシーが下がった

最後のリテラシーが下がった、ということについては、コモディティ化と同一の現象であると考えていいだろう。分からないから調べる、分からないから考えるでなく、わかろうとも思わないし、自分の都合のいいように理解し、それと異なるものは排除する、という傾向はコモディティ化にともなって浅識なカジュアル層が増えることによって避けられないことだ。the Internetやその文化について知らないという問題よりも、そもそも頭を使わないという問題があるが(例えば、インターネットが公共の場である、ということを一切無視し、自分の知り合いでない人に見られることに対してキレたりする、などだ)、それは必ずしもコモディティ化が理由ではない。だが、敷居が下がって、思考を持たない人で入ってくれるようになってしまったというのはあるだろう。人々が「考えなくなった」というのはインターネットとは別の次元で感じるが。

しかし、前2つは理解しがたい。1つ目について、「事件が多いから」などと言いたがる人は多そうだが、それはあまり関係ない。チャットやSNSでも「暇」「暇つぶし」という言葉ばかり並び、会話することに対して極めて消極的だ。以前は、インターネット上では多くの人々が会話に対して貪欲だった。ビジュアルがない分、相手の人間性に食い込もうとするのが普通だったし、人間性から入る分、パソ婚の持続性は高かった。だが、現在は極めて淡白であり、会話する意思自体が希薄だ。「事件があるからインターネットをコニュニケーションツールとして使っているにも関わらずコミュニケーションを求めない」というのは理由になっていないので成立しない。例えば、Twitterは一方的な発信であり、内容もspam率(内容のない発言)が高い。「Twitterに慣れたのが原因だ」という言い方もできる事象だが、実際はそのような精神性に対してTwitterの希薄さ、一方的である部分というのがマッチしたから流行ったということではないかと思う。Twitterのコミュニケーションはチャットと比べ著しく密度が低い。ちなみに、SNSはコミュニティ系のものほとんどマイルール的儀礼の押し付け合いしかみられない。これは、Mixiの当初からあったことなので、もはやSNSの宿命なのかもしれないが。

もちろん、ひとつの見方として、Mixiが流行りだして世の若いOLさんもカフェでおしゃれなランチを食べながらMixiをするのがオシャレ、というようなよくわからない風潮になり、そそもインターネットが何でどう使うのかという意識がないまま使い出した(そういう人はチャット全盛よりもあとの時代に入ってきた人なので、意識がないまま使っていたとしても、それは発信ではなく一方的に受け取るだけだったろう)ということも問題なのかもしれない。インターネットでコミュニケーションをとる意思があるわけではないのだが、皆やっているからという理由でコミュニケーションツールを使うために、実のあるコミュニケーションにならない、というわけだ。

だが、これは答えをくれない憶測だ。なぜならば、LINEは多くの場合ある程度の目的意識を持って使われるのだが、LINEのログで出ているものをみても、多くの場合希薄だ。もちろん、Twitterなどのように「ほとんどの場合内容がない」ということはないし、現在のチャットのように「たいてい会話も成立していない」ということもないのだが、それでもかなり双方向性が乏しいと感じる。以前のチャットならばもっとがっつくようにコミュニケーションを求めていた。結局のところ、人々は積極的かつ濃密なコミュニケーションを求めなくなった、という精神性に答えを求めざるをえない。

民度が下がった、ということについては、以前はインターネットで罵詈雑言を並べ立てるようなことはなかったし、差別的な発言というのもあまり見なかった。もともとキャラクタベースのコミュニケーションで、語られることの何が真実か検証することはまずできないという中だったので、差別のしようがなく、そのためにUSENETであれコンピュータネットワークコミュニケーションに慣れると差別しなくなる、というのがあったため差別意識の低下という現象が見られたというのはあるのだが、ともかく(対等であるために馴れ馴れしいというのは別として)基本的には礼儀正しかった。けなす言葉もまず見なかったし、そのようなことをするにしても、嫌味を言うなど遠回しな方法が使われることが多かった。2ちゃんねるはかなり異質で例外的な存在だった。だが、現在はYouTubeのコメント欄にせよ、Twitterにせよ、とにかく差別的・排除的な罵詈雑言が並ぶ。自分こそ絶対善で、異物は排除されるべしという発言があまりにも多いし、死ね、一生刑務所に閉じ込めておけ、といった人のことをまるで考えない排除の言葉が並ぶ。そのための威力行使も度々みられるようになったし、排除する、叩く口実がある相手を見つけると嬉々として人格や人権を否定して大勢で騒ぎ立てるのが当たり前になっている。複数のケースにおいて騒いでいる人が同一という可能性は多いにあるが、それでも一部の少数の人だけとは考えられないだろう。今はそれほど対象となるものは少なくない。かつては人格攻撃は最も恥ずべき行為として指弾されていたのだが、今はたしなめる言葉もまず聞かれない。

これに関しても、例えば2ちゃんねるがコモディティ化したことそのような文化にネチズンがなれ、そのような生態を持ったのだ…と解説することはできるが、これもやはりそうではないだろう。なぜなら、ネットだけでの現象でもないからだ。やはり、これも精神性に対して答えを求めざるをえない。

そして不思議なのは、変化の過程においても度々言及してきた通り、「同じ空間における定点観測」のみならず「同じ人物に対する観測」においてもその傾向が顕著に見られる、ということだ。その場合、通常は何かに染まったとかんがえるべきで、それが広く見られる以上はネット空間のような(あるいはもう少し限定して「Twitterの普及」のような)普及しているツール、環境の変化である、とかんがえるべきだが、それでは卵が先か鶏が先かという問題になってしまう。私がわからないものとしてはTVがあるが(私はTVを持っていない)、たとえTVの業界や関係者がそうした傾向を持ったのだとしても、それは人がやることなのであり、なぜその人たちがそのように染まったか?という点を問題にすればやはり同様である。

「なぜ」という部分は推測はできるが確定はできないのだが、ともかく随分と息苦しく殺伐とした世の中になったものだと思う。かつては例えReal Worldが腐っても、インターネットには私達が作る理想郷(未完成)があり、そしてそれはReal Worldを変える力を持っていたが、今やすっかりReal Worldに侵略され、滅ぼされ、占領されてしまった。

私達が知るインターネットは既にない。今インターネットと呼ばれているものは、Real Worldで地位や権利をもった人々が侵略し、占領した世界だ。

ある場所を見ると、かつてそこにいた人々はいなくなっている。彼らがどこに行ったのかはわからない。だが、そこでのコミュニケーションが嫌になって離れたということは想像に難くない。今はインターネットなしでは生活できないはずだが、コミュニケーションは避けているということだろうか。

心ある人々はどこへ行ったのだろう。

DeleGateでHTTPSリバースプロキシ

私のサイトはずっとhttpsで接続できなかったのだけれど、ようやく手を入れることにした。

HTTPSによる接続自体はできるのでサーバーは動いているし、ファイアウォールも阻害していない。証明書関連の問題だと判断できる。

DeleGate + SSLについての情報は大概が古く、SSLwayについてしか言及されていない。DeleGateの最新マニュアルを見ると、STLSというビルトインTLSフィルタを持ち、またビルトイン匿名証明書を持つため証明書も不要であるように思える。ではどう使うのか??

jfuruyaのブログに答があった。DelegateのパラメータとしてSTLS=”fcl,fsv:https”を渡す必要があるのだ。しかしこれだとHTTPでアクセスするとはじかれる。ちなみに、SERVER=httpではhttpsで接続しろと言われる。マニュアルを確認、どうもSTLS=”-fcl,-fsv:https”であるべきであるということが分かった。

しかしそのままでいくとスタイルシートが表示されない。どうやら、httpsでページを表示しているのにhttpでスタイルシートをロードしているのが問題らしい。つまり、リンクはhref=”http://…”ではなく、一般には説明されない書式でスキームを維持するhref=”//…”形式にしなくてはいけないようだ。

とりあえずこのような特殊な接続をする人はいないと思うので、全体は修正していないが、ビルド時にテンプレートを変更するので、サイト全体をビルドする時には直る、はずである。

Microsoft迷走中?

windows 10が発表された。Windows 8から9をとばして10にしたらしい。

おもなトピックスは、スタートメニューの復活、タイルをスタートメニューに統合、UIの統一をやめた、恐ろしく原始的だったコマンドプロンプトを多少改善した、というあたりだ。

だが、このちぐはぐ感がすごい。まず、タイルを使うタブレットスタイルがこれからの標準であり、これからはタッチデバイスの時代だとしてWindows8は従来型のUIを切り捨て、今後フェードアウトさせていくことを示した。今回はタイルやWindows StoreといったWindows 8で導入されたフィーチャーの主従関係が逆転しており、Windows 8で打ち出した価値観の誤りを認識し、軌道修正した形だろう。

Windows 8の使いにくさは尋常でないのでそれは正しいと歓迎するとする。しかし、タイルというのは、全面に機能を大きく表示するからタッチ端末にとって有意なのであり、スタートメニューの中に組み込んでも表示にスタートメニューをおさねばならないのではありがたみが全くない。ウィジットの代わりをさせようという部分もあったはずだが、内容をみるにはスタートメニューを開いたまま操作できないのではやはり意味がない。Windows 8の失敗をばっさり切るのではなく、中途半端にそれっぽく残した結果、ものすごくちぐはぐなものができあがっている。

そもそもタイルはシングルウィンドウを前提とした構造であり、全画面表示を標準とするなどシングルウィンドウ設計を推し進めてきたWindowsだが、マルチウィンドウ型の能率的インターフェイス(シングルウィンドウはいわば簡便型といえる)に戻すのであれば、わざわざスタートメニューを開いてまでタイルを欲するということはない、ということになぜ気がつかないのだろう?

また、WPSに続いてコマンドプロンプトの強化でパワーユーザーに応える、ということなのかもしれない。けれど、それが尋常じゃなく貧弱なものを非常識な程度に貧弱にしたというもので、あまりにも謎の改修だ。見捨てているのでなければいちから作り直して然るべきしろものなのにだ。

どこからどう見ても「これは使いにくそうだ!」としか思わないWindows 10。Windows Vistaあたりから「UIがちょっと不自由すぎないか」という感じになっていたが(内部的にはWindows XPはひどかったので、もちろんその意味では歓迎すべきところなのだが)、Windows 8から「見方によってはよくなった」要素を見出せなくなっている。パソコン離れはどう考えてもWindowsが使いにくい、という理由がかなりの部分を占めるように思えてならない。実際、AndroidもそのUIは相当に使いにくいと思うが、Windowsと比べたらだいぶマシだ。

また、「モバイルファースト、クラウドファースト」というスローガンをみると、Windows 8で示したタッチデバイス重視の設計を推し進めたかのように見える。だが、実際はそこに特化した設計には見えない、というよりもむしろ「どのデバイスでも扱いにくいようにした」ようにしか見えない。UIの統一をやめたのだから、モバイルデバイスならば従来のタイルUIを使う、ということだろうか?もしそうだとしたら、「Windows 8が不評だったからとりあえず前っぽくしとくね」という極めて雑なやり方に見える。そもそも、モバイルやクラウドが万能でないこと、わざわざPCを使うユーザーはもっとパワフルな環境を求めていることが理解できないあたりが、Microsoftは一体何をみているのだろう?と思う。

これであればLinuxデスクトップの使いやすさ、なじみやすさ、能率は圧倒的なものがあると思うのだが、やはり一般の人が触れることがあまりにないこと、導入部分の困難さ、情報の雑さや風潮などが邪魔をするのだろう。機能的なLinuxの圧倒的優位が反映されないのはなんとももどかしい。というよりも、Microsoftに、独占的地位における責任(パワーユーザーやデスクトップユーザーを切り捨てて強制的にコモディティ化を進めることの誤り)を理解させるためにも、LinuxがWindowsを明確に侵食する状況は起こるべきであると思う。

Microsoftはまた、Internet Explorerを改名する計画であるという。そもそもInternet Explorerが不人気なのは、標準に準拠しておらず開発側に余計な負担ばかりを強いて低機能であることや、ユーザーからみてもそのことがもたらすレンダリングの不備、機能の不完全性なのであり、私のもとにこのブログが以前のテーマではIEで見られないという意見が寄せられた。その実態のダメさを覆い隠すために「改名してごまかそう」というのは、Microsoftは一体何を見ているのかと思う。もはやまっとうな製品を作る力がないのだろうか?

Linuxで最新のFlash player pluginを使う

LinuxのFlash PlayerはAdobeがサポートを終了し、11.2が最終バージョンになっている。もうだいぶ古くなって、最近は様々なサイトで動画が見られないなどの不具合がでている。いや、動画のようなコンテンツだけならいい。保険サイトのようなところが見られない、という事態すらある。

Flash PlayerはGoogleのメンテナンスに移行し、案の定、Googleが抱え込んでChromeに同梱している。そう、Flash Player単体のリリースはしていないのだ。当然ながら、Chromiumや、その派生であるSRWare ironにはFLash Player pluginが含まれていない。

MozillaはChromeが利用するPepperプラグインには「興味がない」と言っているため、このままいくとFirefoxでFlash Playerは利用できなくなる。既に11.2までしか利用できずに様々なサイトが見られなくなってきている。だが、chromiumやironはPepperプラグインが利用できるため、術はある。

どうしてもGoogle Chromeが受け入れられなかったため、Chrome x84_64 rpmをダウンロードし、それをarkでPepperFlashのみ展開。あとは

iron --ppapi-flash-path=/opt/google/chrome/PepperFlash/libpepflashplayer.so --ppapi-flash-version=15.0.0.152

のようにすればよい。バージョンはmanifest.jsonファイルを参照する。

のだが、これでうまくいかずに随分悩んでしまった。理由は、自分で書いたiron起動用スクリプトが引数を渡すようになっていなかった、という実にくだらない理由。スクリプトを書き換え、デフォルトでプラグインをロードするようにするとともに引数を渡すようにした。

Mikutter

Mikutterが2.0.6になったのでアップデートするついでにプラグインを導入してみた。

Mikutterのプラグインは原則~/.mikutter/plugin/pluginnameディレクトリに導入する。このpluginnamepluginname.rbを読む仕様のため、これに合わせなくてはいけない。

ほとんどのプラグインはGitHubで管理されており、git clone URI.git ~/.mikutter/plugin/pluginnameで大体はいける。そうでなくてもそのような形式のディレクトリに一式ぶちまければいける。

しかし、当然ながらそれによって依存関係の欠如が生じる。例によってMikutterリポジトリでbundle installすればいいのだが、いくつかのGemファイルがエラー終了してしまう。少しハマったがよくよく調べてみるとruby-develが入っていないということだった。

プラグインを利用していないのでまだその効果のほどは分からないが、Userconfig Accessorはロードするとクラッシュしてしまう。

操作系プラグインはごく単純なものが多いが、これを見ると自分で書くのも難しくはなさそうだ。ただし、「何にアクセスするか」という問題は出るだろう。

しかし、個人的にはRubyスクリプトであることが非常に助かる。ローカルな対応のためにソースを読んだり、挙動を確認するためにソースを読んだりできるからだ。

Mail Virtual Alias @ CentOS 6

メールサーバーの本運用は通常virtualであるはずだ。メールアカウントの数だけユーザーアカウントがあるというのは考えられない。

ただし、私の場合はサブドメインをバーチャルエイリアスにするため、バーチャルドメインが必要になる。

新しいDovecotに関する情報がなく苦労したが、http://vogel.at.webry.info/201312/article_10.htmlの通りにやってみた。大体これでうまくいったのだが、私の場合はいくつかひっかかった点があった。

まず、hown -R mailuser ~mailuserをちゃんと実行しておかなくてはいけないこと。vmailboxファイルは最後に/をつけ忘れるとmbox形式になってしまうこと。

しかしこれではPOPの認証がfailedとなる。調べてみると、このサイトにはデフォルトでコメントアウトしているauth-passwdfile.conf.extのロードをしていない。

[root@server ~]# grep -R auth-passwd /etc/dovecot
/etc/dovecot/conf.d/10-auth.conf:#!include auth-passwdfile.conf.ext

さらに、パスワードファイル認証も無効化されている。

[root@server ~]# grep disable /etc/dovecot/conf.d/10-auth.conf
#disable_plaintext_auth = no
# Authentication cache size (e.g. 10M). 0 means it’s disabled. Note that
# 0 disables caching them completely.
# NOTE: See also disable_plaintext_auth setting.

この2点を修正したが、それでもエラーになる。原因はパスワードファイルのファイル名(設定ではなくファイル自体)が間違っていたためのNo such file or directoryだった。

さらにPostfixからのDovecot認証の利用は情報が錯綜してよくわからない状態だったが、結局のところ/etc/dovecot/conf.d/10-master.confのPostfixから利用するコメントアウトをはずすだけでエラーは出なくなった。しかしながら、認証自体がうまくいかない。userとgroupの設定を追加したが、元々666なのだから、効果はなかった。明らかに問題はPostfixにあり、Dovecotはこれでいいだろう。

telnetを打ってみると25番ポートが反応しない。ここでOP25Bによるものだと気付いた。

submissionの設定を探してみると、master.cfにsubmissionの項目があり、このコメントアウトをはずせばsubmissionは機能する。しかしながら

submission inet n – n – – smtpd
# -o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

TLSを強制するとTLSが機能しない。とりあえず、TLSは要求しないことにした(encryptでなくmayにしておく)。

しかし、それでも544 host access deniedという応答で送ることができない。調べてみると、さらに別のパラメータを設定する必要があるようだ。main.cfに記述する。

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restricions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes

さらにスペルミスにもひっかかってしまったが、これでうまく通った。TLSが上手く動かない以外は正常だ。

TLSについて調べてみると、どうも鍵にパスフレーズがかかっていると使えない、ということだ。そこで、次のようにして問題の解決を図る。

[root@sesrver]# openssl genrsa -aes128 1024 server.key
Generating RSA private key, 1024 bit long modulus
.++++++
…………………….++++++
e is 65537 (0x10001)
Enter pass phrase: #ここでは普通にパスフレーズを入力する
Verifying – Enter pass phrase:
[root@dti-vps-srv71 certs]# openssl rsa -in server.key -out server.key #これによってパスフレーズを消滅させる
Enter pass phrase for server.key:
writing RSA key
[root@dti-vps-srv71 certs]# openssl req -new -x509 -key server.key -days 3650 -out server.crt # certファイルを作る
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:JP #カントリーコード
State or Province Name (full name) []:Kanagawa #神奈川
Locality Name (eg, city) [Default City]:Yokohama #横浜
p {[
“さらにスペルミスにもひっかかってしまったが、これでうまく通った。TLSが上手く動かない以外は正常だ。”,
“TLSについて調べてみると、どうも鍵にパスフレーズがかかっていると使えない、ということだ。そこで、次のようにして問題の解決を図る。”
]}

sb { -END
[root@sesrver]# openssl genrsa -aes128 1024 server.key
Organization Name (eg, company) [Default Company Ltd]:HarukaSound #組織名
Organizational Unit Name (eg, section) []: #部署はない
Common Name (eg, your name or your server’s hostname) []:reasonset.net #FQDN
Email Address []:master@reasonset.net #メールアドレス
[root@dti-vps-srv71 certs]# openssl x509 -in server.crt -outform der -out server.der # derファイルの生成

これで鍵の生成は完了。ファイル名が若干変わったので、main.cfを修正。さらに、DovecotのSSLが設定されていなかったので、/etc/dovecot/conf.d/10-ssl.confを修正(ssl = yesのコメントアウトをはずし、ファイル名を修正)。

そしてmaster.cfencryptに戻して完了。STARTTLSが正しく働くようになった。

PostfixでTLSをサポートさせる

relay testでTLSがサポートされていないことには気付いていたのだが、なかなか検証できずにいた。ようやく今日やった。

証明書を作った記憶はあったのだが、なぜサポートされていないのだろうか、と調べてみた。すると、TLSまわりがごっそりコメントアウトされている。なぜコメントアウトしたのだろう?

まず、main.cfに追加されていたのがこの部分。

#SSL setting
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.pem
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_schache

これがコメントアウトされていた。わざわざ書いたのに。さらに、master.cfのこのセクションもコメントアウトされていた。

smtps inet n – n – – smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes

これはもともと存在した部分で、単純にコメントアウトされていたのだろう。恐らくはSASL authを無効にしたままでTLSを有効にすると起動せず、それで無効にした、というところではないかとは思うのだが。

これでrelay testするとTLSサポートが確認された。

簡易的なOP25B対応

様々な仕事が滞っている中なので、先行してメールを送れるようにだけはしておいた。

OP25Bとは、SMTPサーバーポートである25をISPが中継しない、というものだ。スパム対策だというのだが、実際は自由にメールを使わせない、メールをISPで一元化するものとなっている。

メールアカウントが提供するサーバーをそのまま使っていれば特に不自由は感じないという人もいるだろうが、近年のSMTPサーバーサービスはかなり複雑に認証され、フィルタされることもあって使い勝手は著しくよくない。以前ならそれに対する対応としてローカルなメールサーバーを使えばよかったのだが、今度はそれがISPによって蓋をされた格好になる。

各家庭でMTAから出す、ということそのものが特殊な要求と見るのかもしれないが、今はそもそもSMTPサーバーを提供しないメールアカウントも珍しくないので、やはりの必要だし、自宅でのメールサーバー公開もできない。

とりあえずシンプルな方法として、セキュアで確実にリレーしてくれるMTAが欲しい、ということで工夫してみた。

まず、VPSにPostfixを導入する。そして、次のように設定する。

inet_interfaces = localhost
mynetworks_style = host

これ以外についても適切に設定するが、これで外部からメールを受けとらないためセキュアな設定となる。もちろん、外部からメールを受けとるように設定する場合には、より広く適切な設定が求められる。

この状態ではSMTPを用いてメールを送信することができるのはVPS自身だけだ。しかし、VPSのループバックインターフェイス経由ならば送信できるため、SSHのポートフォワーディングを用いることで他のホストからのメールを中継してもらうことができる。

これには次のコマンドを使用する。

$ ssh -x -L 2500:localhost:25 remorthost.example.com

「ローカルの1024以下のポートを転送する場合、ローカルのroot権限が必要」なのであり、ここでは2500番ポートをリモートの25番ポートに転送することでroot権限なしに実現している。なお、リモートホストの名前はlocalhostにしないと、loインターフェイス経由での接続にならないので注意が必要。インターフェイスを気にしなければFQDNで指定しても接続できてしまうことがあるから、理解していないことがある。

-Lオプションのまんなかのargは、後で指定するhostが名前解決をし、接続するための名前だ。つまり、localhostを解決するのは、リモートホストで、リモートホストにとっての::1/127.0.0.1に接続される。

-nオプションを使えばバックグラウンド接続が可能なはずだが、ServerMans@VPSではそれができなかった。接続そのものが切られてしまう。タイムアウトして接続は切られてしまうし、不要なターミナルセッションが生まれてしまうが、通常通りのログインとした。

あとはMUAのSMTPサーバーとしてlocalhost:2500を指定すれば、MUAはVPSのPostfixとやりとりをしてメールを送信することになる。通信はssh(通常は22番ポート)を経由するため、25番ポートをブロックするOP25Bにはひっかからない。

VPSの活用方法としては一般ユーザーでも意味のある方法になるのではなかろうか。もっとも、セキュリティ管理などを考えれば一般ユーザーに進められる方法ではないが。