カテゴリー別アーカイブ: コンピュータ

Ubuntu 16.04で/etc/default/bind9に設定したOPTIONSが有効にならない

 bindをIPv4オンリーで動かしたいときは/etc/default/bind9に
OPTIONS="-u bind -4"
なんて書いたりするのが常道で、これをしないと延々syslogに
network unreachable resolving 'k.gtld-servers.net/AAAA/IN': 2001:503:231d::2:30#53
とかといった類の警告が出続ける。ところがsystemd化された後のUbuntuだとこの設定が効いてくれない。
 治し方だが、
# systemctl edit bind9
で開いたエディタで以下のように書いて保存。
[Service]
EnvironmentFile=-/etc/default/bind9
ExecStart=
ExecStart=/usr/sbin/named -f $OPTIONS

 EnvironmentFile=のあとのマイナスは間違いではなく、そのあとに書いてあるファイルがなければ無視するという意味。また、ExecStart=が2回出てくるのも間違いではなく、一つ目の空のExecStart=は設定の内容をクリアするという意味
 こんなの、どこかに書いておかないと自分でもわからなくなるに違いない。systemdはどうもあまりフレンドリーじゃないね。

Googleのrefererが変更?

 7月15日頃から、Googleのhttpsサイトの検索結果から飛んでくるときのreferer文字列が、それまでの”https://www.google.co.jp/”から”https://www.google.co.jp”に変更になった模様。Google側の仕様変更か、ブラウザ側かは不明。
 これまでホスト名以降にスラッシュを一つも含まないrefererを送ってくるのはSPAM用のbot以外になかったため、当サイトではそういうアクセスを弾く設定にしていた。このため、しばらくGoogleから当サイトにアクセス不可能な状態になっていた。

 時かけのTV放送前に気づいてよかった…

 なお、最近時かけ関係は更新していないけれど、細田守のトリロジーBD Boxだけ商品ページに追加。

Googleウェブマスターツールで少数のDNSエラーが報告される

 このブログはコンピュータ系の記事と映画系のとがごちゃまぜですが、数少ない読者の方々はどちらを期待されているのでしょうか…
 今回はネットワークネタを。

症状

 Googleのウェブマスターツールで少数のDNSエラーが報告される。しかし手元でホスト名を引いてみてもほとんど若しくは全くエラーは起こらない。

原因(の一例)

 当該ドメインを受け持つ公式(authoritative)サーバが、DNS Amplification攻撃(DNS Amp・DNS reflecton)のための大量のリクエストを受けていたために、DNSへの応答が遅れていたため。
 このことは、例えばLinux + BINDの場合、syslogに次のようなメッセージが大量に出力されていることで確認できる。
named[1528]: client 24.13.152.253#12767: query (cache) 'a.packetdevil.com/A/IN' denied
 なお、open resolverになってしまっている場合は、このようなメッセージも確認できない可能性がある。

対処策(の一例)

 まず、当該DNSサーバがopen resolverの場合、他のホストへの攻撃に利用されてしまっているので、外部からの再帰クエリを禁止するなどして早急にopen resolverでないようにする。
 その上で、当該DNSサーバ上でパケットフィルタを実施する。Linuxのiptablesの場合、GitHubにDNS Amp用フィルタを自動的にとってきて適用するためのスクリプトが上がっているので、これを利用するのが便利。

参考文献

DNSキャッシュサーバを使用した「DNSアンプ」攻撃が発生中……再帰的な問い合わせを悪用
DNS Ampの脅威
分散サービス拒否(DDoS)攻撃を仕掛けるDNS ampとは?
オープンリゾルバ(Open Resolver)に対する注意喚起
DNS Amplification Attacks Observer

Ubuntu 12.04にperlモジュールXMLRPC::Liteをインストールする

 久しぶりにperlでゴニョゴニョしようとして、XMLRPC::Liteを入れようとしたが、CPANやcpanmでサクっとインストールというわけにはいかなかった。ビルドでボロボロエラーが出る。
 暫定的な結論としては、CPANでのインストールの前に、aptの方で以下のようにインストールしておくとうまくいくようだ。
sudo apt-get install libexpat1-dev libnet-ssleay-perl libcrypt-ssleay-perl libxml-parser-perl libsoap-lite-perl
 また、DIME::Toolsはどうしてもtestが失敗するので
cpanm --force DIME::Tools
として強制的にインストールした。

 いきなりCPANだとうまくいかないのはたぶんCライブラリが足りていないからで、上のインストールでそれが満たされるのだろう。
 CPANとaptの使い分けの基準がよくわからないが、aptの方のパッケージ名はlib+< 小文字にしたパッケージ名、::は-に置き換える>-perlという形式になっているので、まずそちらを試して、なければCPAN、ビルドエラーが出たら前提モジュールについてaptを再度試すといったところか。

おまけ:
 perlのモジュールを一括でアップグレードするには、
# perl -MCPAN -e shell
でCPANシェルに入ってから
upgrade
でOK。
# cpan -r
でできるという記事も見かけたが誤り。これではリコンパイルされるだけ。

サーバ移転

 これまで自宅で10年物サーバにて運用してきた当サイトですが、今年も初夏を迎えてついにサーバの電源が異常を来したため、さくらクラウド(石狩DC)での運用に切り替えました。まだ問題点があるかもしれませんので、お気づきの節はぜひお知らせください。
 今までの回線は上りの遅いADSLでしたし(1Mbps弱)、サーバも10年分の時をまたいだことになりますので、予想していたことではありますが、最低グレードのプランでも高速に感じられ快適です。特にブログの反応は目に見えて早くなりました。ディスクもSSDですがこれは今までと同じです。
 昔のレンタルサーバと違って、今の仮想サーバはサーバの再起動やコンソールでの操作もすべてブラウザでできて便利です。申し込んで即日使えますし。さくらのクラウドは昨年大規模障害続きで話題になっていましたが、今は特に問題なく使えるようです。

 現時点で気付いたさくらクラウドの問題点は次の通りです。

  1. マニュアルが大変貧弱。ただ画面と画面項目を並べただけ。独自用語を定義せずに断りなく使っている。
  2. 東京からだと国内のわりにホップ数が多め。そのことと、物理的に北海道にあることが関係しているのかも知れないが、pingしたときのRTTが普通の国内サイトの倍くらい(30~40ms)かかる。
  3. 仮想NICを停止して再開すると、IPアドレスが変わってしまう。普段はしない操作だが、構成変更が必要になったときは問題になるかも。
  4. セカンダリネームサーバのサービスを依頼すると月1050円もかかる。なぜこんなに高い?
  5. IPv6未対応。今すぐ必要というわけじゃないけど、IPv4アドレスが既に枯渇してるのに、ちょっと意識低いかな。

追記: 4つ目の問題が致命傷で解約することにしました。次はどれにするかな……

The C++ Programming Language (4th Edition)


 予約注文していたこの本、10日に発売だったのですが、アメリカから1週間弱かかってやっと届きました。国内ではあまり注目されてませんが、C++11に対応した待望の改訂4版です。第3版はC++98ベースでしたから、ドラスティックに機能が追加されています。Stroustrup氏いわく「C++ feels like a new language.」(Prefaceより)。
 中は上質紙に2色刷りで、旧版の邦訳よりリッチな感じ。ただ価格もそれなりです。しかもこのところの円安でますます値上がりしています。Amazon.co.jpでの価格ははじめ7700円弱だったのが8001円になり、8051円になりました。
 しかもAmazonだと発売が10日遅れの20日ですが、とはいえ、それでもいまから注文するならAmazon.co.jpが一番早いでしょう。
 邦訳はいつになるでしょうか、まあ結構早いような気もしますが、C++14に間に合うかどうかは微妙なところです。

Firefox 20でどうしても消えない履歴がある

現象

Firefox 20にて、[ツール]-[最近の履歴を消去]などをしても、履歴表示で[表示回数順で並べる][最後に表示した日時順で並べる]を選択したときだけどうしても消えずに残っている履歴がある。

解決方法

SQLite managerにて、places.sqliteを選択し、[SQL実行]タブの[SQLを入力]に
update moz_places set last_visit_date = null where last_visit_date is not null
を入力して[SQLを実行]。

補足

このドキュメントは無保証です。当方ではうまくいきましたが、これで損害を被ることがあっても責めは負いかねます。

last_visit_dateはbugzilla #488966を見る限りではキャッシュ的に使われているカラムのようだが、何かの拍子に消えないで残ってしまうのだろうか。