iptables,ip6tablesの設定

これもすぐに設定の仕方を忘れるので覚書。

まずは、iptables-persistentをインストールしておく。設定ファイルは、/etc/iptables/rules.v4と/etc/iptables/rules.v6。もちろん環境に合わせて書き換える。私の場合はipv4が

# Generated by iptables-save v1.4.21 on Fri Feb 12 17:18:19 2016
*nat
:PREROUTING ACCEPT [2:104]
:INPUT ACCEPT [1:64]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Fri Feb 12 17:18:19 2016
# Generated by iptables-save v1.4.21 on Fri Feb 12 17:18:19 2016
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [3:349]
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport hogehoge -j ACCEPT
-A INPUT -p tcp -m tcp --dport hogehoge -j ACCEPT
-A INPUT -p udp --dport 500 -j ACCEPT
-A INPUT -p udp --dport 4500 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT
# Completed on Fri Feb 12 17:18:19 2016

ipv6が

# Generated by ip6tables-save v1.4.21 on Fri Feb 12 17:18:19 2016
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport hogehoge -j ACCEPT
-A INPUT -p tcp -m tcp --dport hogehoge -j ACCEPT
COMMIT
# Completed on Fri Feb 12 17:18:19 2016

こんな感じ。

あとは、以下のコマンドです。

netfilter-persistent reload

munin-node-configure でsquid追加

すぐに忘れてしまうので覚書

muninで監視項目を新しく追加するときnode-munin-configureコマンドを使う

munin-node-configure

オプション無しで使うと現在の状態が表示される

munin-node-configure --suggest

suggestオプションを使うと追加できるかどうかとその理由がわかる。今回、squidを追加しようとしたのだが、「[could not connect: Connection refused]」と言われてしまったので原因を探ると、squidのポート番号を変えていることが原因。なので、/etc/muinn/plugin-conf.d/munin-nodeに以下の行を追加。

[squid_*]
env.squidport ポート番号

これで、追加できるようになるので以下のコマンドで、プラグインのリンクができるようになっているのを確認して

#munin-node-configure --shell squid_
ln -s '/usr/share/munin/plugins/squid_cache' '/etc/munin/plugins/squid_cache'
ln -s '/usr/share/munin/plugins/squid_objectsize' '/etc/munin/plugins/squid_objectsize'
ln -s '/usr/share/munin/plugins/squid_requests' '/etc/munin/plugins/squid_requests'
ln -s '/usr/share/munin/plugins/squid_traffic' '/etc/munin/plugins/squid_traffic'
#その他のエラーが表示されるかも

問題ないようなら、以下のようにシェルに渡してあげて登録。

munin-node-configure --shell squid_ | sh

サービスを再起動して終了

service munin-node restart

sslhによるtcp/443でのsshd,httpdの両まちうけ

最近はネットワークのフィルタリングが厳密すぎて、tcp/22ポートにおけるsshの接続ができなくなってきました。sshはsshd_configで簡単にポート番号を変えられれますので、どのネットワークでもまず閉じられていないtcp/443(SSL)に変えてしまうという手があります。しかしながら、webサーバを立ち上げているサーバでは当然443は占拠されているので、今回のsslhを使ってクライアントのリクエストに応じて適切なサービスに割り振ることをします。

インストール

Debianではパッケージがありましたので、そこからインストールします。

# apt install sslh

最初に、inetdで起動するか、standaloneで起動するか聞いてきます。sshもhttpdもstandaloneで動いているわけですし、sslhも素直にstandaloneにしておきます。

既存サービスのポート変更

httpd

私はApacheを使っていますので、/etc/apache2/ports.confを書き換えました。

Listen 80

<IfModule ssl_module>
 Listen localhost:443
</IfModule>

<IfModule mod_gnutls.c>
 Listen localhost:443
</IfModule>

ポート番号はそのままに、待ち受けるアドレスをlocalhostにしています。編集後にapacheの再起動。

ssh

/etc/ssh/sshd_configを編集します。

#Port 22
Port 12345
Port 23456

もともとの22番はコメントアウトしています。22番ポートへの攻撃は多いのであえて閉じています。そのあとにある12345,23456が待ち受けポートです(本当は違う値ですけど)。編集後にsshdの再起動。

sslhの設定

sslhの設定は/etc/default/sslhです。

RUN=yes
DAEMON_OPTS="--user sslh --listen xxx.xxx.xx.x:443 --listen xxxx:xxx:xx:x:x:x:x:x:443 --ssh 127.0.0.1:12345 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

変更箇所は2行です。–listenでまちうけのアドレスとポートを指定します。–sshでsshのポート番号を、–sslでhttpdのポート番号を指定しています。編集後にsslhの再起動をします。

まちうけにはIPv4もIPv6の両方共いけました。転送先のアドレス(127.0.0.1)がIPv4しか書いてないのに、IPv6でsshのコネクションが張れていまいち謎な感じですけど、できてしまいました。一種のIPv6トランスレーター的な動きをしているのかもしれません。

確認

httpdの確認は通常のブラウザから出来ます。sshはポート番号を変えましたので以下のようにつなぎます。

$ ssh -p 12345 サーバのアドレスなど

毎回ポート番号を書くのが面倒であればconfigに書くのがいいでしょう。

注意

リモートのサーバを編集するときは注意しましょう。設定を間違えると2度と繋がらなくなる可能性があります。sshなどは設定を変更してサービス再起動しても、今あるセッションはそのまま残りますので、設定が完全に出来上がって問題なくなるまで、作業中は切断しないようにするといいと思います。

 

おうちハックで二酸化炭素モニター

NetAtmoという製品があります。フランスのメーカーで、簡易的な気象観測ができるセンサーとクラウドでデータを参照できるサービスを売っています。普通に日本のアマゾンとかで買えます。 URL(AA)

室外ユニットと室内ユニットセットになっていて、測定できる値は、室外が気温と湿度、室内が気温と湿度に加えて、気圧と騒音(デシベル)と二酸化炭素濃度です。この手の製品で気温、湿度、気圧はよくあるのですが、騒音と二酸化炭素はちょっとめずらしいです。
二酸化炭素は実は測定が難しいのです。二酸化炭素が赤外線を吸収する性質を利用して、赤外線光源と赤外線センサーの組み合わせで吸光度を測るようなのですが、キャリブレーションが大変なようで精度があまり出ません。おまけにセンサーとしての価格が高い。それを1万そこそこで売っているのはなかなかお買い得な感じです。キャリブレーションは室外ユニットにもセンサーが入っていて、大気の二酸化炭素濃度を400ppmとしてキャリブレーションしているのではないかと思われます。

これで室内の二酸化炭素をモニターしているのですが、ちょっとしたことで二酸化炭素はすぐに上がります。石油ストーブであっという間に数千ppmに、調理するだけでもすぐに上がるし、なんなら締め切った部屋で寝てるだけでも1000ppm超えたりします。
1000ppm以下ががきれいな空気の目安らしく、高くなればなるほど、眠くなったり気分が悪くなったりいいことがないので、1000ppmを超えないように気をつけます。

二酸化炭素濃度の数値はwebやスマホで見られるのですが、一手間かかるので電光表示板を作ることにしました。NetAtmoはAPIを公開していて、(一定の範囲内なら)好きなだけインターネット経由で測定値を取ってこれます。これをRaspberry Pi なんかで取得して7セグLEDで表示させています。
Raspberry Pi を使ったついでに、1000ppmを超えたときは警告をTwitterで通知するようにしています。さらに、うちで昼間は常時起動しているPCに読み上げソフトをインストールして、音声で警告も出してくれるようにしました。

おかげさまで、二酸化炭素濃度にはかなり敏感なお家になりました。

Let’s Encryptの本格運用

Let’s Encryptのベータが始まった時にも投稿したのだけれど、証明書の有効期限が迫ってきたので、本格運用に移らないといけない。
ベータの時から情報も増えて手探り感はなくなりました。新規に始める人は公式サイトを見るのが良いかと思います。
今回はベータからの上書きになるので心配でしたがそこら辺もサポートされているようです。

クライアントのインストール

公式通り

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

ただし、今回からcronで自動更新させるつもりなので、rootで行うようにしました。また、letsencrypのディレクトリもユーザホームではなく、/usr/localでやり直しました。

手動での証明書インストール

案の定というか、DebianでApacheを使っている時の動作がおかしかったようで、公式でもDebianだけやり方が違う旨の記述がありました。

./letsencrypt-auto --apache

これでインタラクティブに質問に答えていくと、証明書の発行からインストール、apacheのreloadまでやってくれました。
ベータの証明書が入っていたけど、そのへんもうまい具合に解決してくれました。

証明書の自動更新

証明書の有効期限は90日なので、毎回上のコマンドを叩いてもいいのですが、crontabに対話式でないコマンドを書いておくと自動更新してくれます。

40 23 02 * * /usr/local/letsencrypt/letsencrypt-auto certonly --webroot -w /var/www -d beth.mirahouse.jp --renew-by-default && /usr/sbin/service apache2 reload

ここでハマったんですが、http(80)のDocumentRootとhttps(443)のDocumentRootが違うと、認証に失敗します。DocumentRootに.well-knownというディレクトリを作って、認証の鍵を置くんですが、これの確認にhttpを使うみたいで、httpsのDocumentRootを指定しておくと見に行ってくれないようです。逆にhttpのDocumentRootを書いてもダメでした。
いまいち納得いきませんが、httpとhttpsのDocumentRootを一致させることで解決しましたが、なんとかならないものでしょうか。

apt-transport-https

覚え書き

Dockerをインストールするために、https://docs.docker.com/engine/installation/debian/ このページを参考にして /etc/apt/source.list.d/docker.listに

deb https://apt.dockerproject.org/repo debian-jessie main

を追加してアップデートかけたら

E: The method driver /usr/lib/apt/methods/https could not be found.

というエラー。どうやらaptコマンドはhttpsに対応していないようです。
これを解決するには、タイトルのapt-transport-httpsをインストールすればいいようです。

Let’s Encrypt のベータ開始

Let’s Encrypt は誰でもTLS(SSL)を無料で使えるようにしようと言うプロジェクト。個人でもhttpsで簡単に暗号化できるようになります。詳しいことは、プロジェクトのページを見てください。https://letsencrypt.org/

正式公開の前にベータテストが開始されましたので試してみました。

“Let’s Encrypt のベータ開始” の続きを読む

debian 7 (wheezy) に jq をインストール

自分用覚え書き

Debian wheezy にJSONとか整形するjqをインストールしようと思ったのにパッケージで提供されていない。安定版には含まれないようなので、レポジトリを追加しました。
/etc/apt/source.listに以下を追加しました

deb http://ftp.jp.debian.org/debian wheezy-backports main contrib non-free

あとはいつもどおり、updateして、インストールです。

debianでexim4の設定

debianはインストール直後はexim4が動いていて、localhost内のメールだけ読み書きできるようになっています。外部から受け取る必要がなくても、内部のサービスや、各種ログなどを外に送りたいことは有ります。自前のMTAはいらないので外部のMTAにまかせてメールを送る設定をしてみたいと思います。今回はGoogle Appsにメールを送る方法を備忘録として残しておきます。

exim4の再設定

rootでdpkg-reconfigure exim4-configを実行します。以下のように設定しました。

General type of mail configuration: mail sent by smarthost; received via SMTP or fetchmail
System mail name:サーバのFQDN
IP-addresses to listen on for incoming SMTP connections:127.0.0.1 ; ::1
Other destinations for which mail is accepted:サーバのFQDN
Machines to relay mail for:(blank)
IP address or host name of the outgoing smarthost:smtp.gmail.com::587
Hide local mail name in outgoing mail? <Yes>
Visible domain name for local users:サーバのFQDN
Keep number of DNS-queries minimal (Dial-on-Demand)? <No>
Delivery method for local mail:mbox format in /var/mail/
Split configuration into small files? <No>

転送先アカウントの設定

今回はGoogle Appsのアカウントを使っているので、Google Account のユーザ名とパスワードを設定します。2段階認証を使っている場合は事前にアプリケーション固有のパスワードを取得しておきます。/etc/exim4/passwd.clientに以下を記述。

*.google.com:(メールアドレス):(パスワード)

このファイルはパスワードが含まれるので、owner rootでgroup Debian-exim、パーミッションは640です。

また内部のメール転送のために/etc/email-addressesも設定しておきます。

設定の反映

update-exim4.confを実行して終わりです。

MDR-10RBTのレビュー

思い立ってヘッドホンを買うことにしました。

長らくイヤホン派で、ヘッドホンは5.1chの映画などを見るために買ったSONYのMDR-DS7000というワイヤレスイヤホンぐらいしか使ったことがありません。音楽を聞くためではなく、5.1chのために買ったので、普段使うことはありません。親機?が光入力かRCAなので、通常使いは無理でアンプにつないでいます。

気楽に使えるのはステレオミニプラグか、最近かなり普及したBluetoothです。イヤホンもいいんですけど、家にいるなら耳の中になにかねじ込むよりもヘッドホンがいいかと思いまして、 MDR-10RBT(AA)というSONY製のヘッドホンを買いました。

いきなりレビューですけど、とても癖のないヘッドホンです。

まずは形状から。耳をすっぽり覆うタイプのヘッドホンで、耳に押し付けるタイプではないです。これの何がいいって、メガネをしている人には耳が痛くならない。これ重要です。ぱっと見左右がわかりにくい以外は文句ありません。イヤーパッド部分が90度曲がって収納ケースに収められるのもいいです。付属のケースはぴったりすぎてちょっと入れにくいですが。

肝心の音の方は、本当に癖がなく、高温も低音もまんべんなく出ていてフラットな感じです。特定の周波数をブーストしているような感じもないので、逆に低音量だと少し物足りないかもしれません。これは最近のイヤホンが妙に高音、低音のバイアスをかけているせいかもしません。Bluetoothの場合は音質が落ちると思ったのですが、以外に落ちていません。このへんは主観も大きいので話半分に聞いてもらえればいいかと思います。個人的には圧縮音源(mp3 128kbps 256kbps,aac 128kbps 256kbps)程度では有線と、無線(Bluetooth)では差が出ないんではないかと思います。手元にいわゆるHD音源のアルバムがあったので聞いてみましたが、さすがに違います。このヘッドホンもHD対応を歌っているので素晴らしい音質です。が、比較するものがないのでよくわかりません。同じようなスペックのヘッドホンがあればいいのですが、あいにくイヤホン(それも低音ブーストのSUHRE)しかないので。。。

Bluetoothは上でも書いたように、音質的に不満はありません。ただ、ペアリングがいろいろと面倒です。つながってしまえばいいのですが、そこに至るまでに検出や電源オンのタイミングを間違えるとなかなかつながりません。再度電源オフや、Bluetoothオフをしてから順番(どうやらヘッドホンが後がいいみたい)やタイミングに気をつけてやる必要があります。ちょっと面倒。接続実績は、Macbook、iPhone、PS Vitaといったところです。

グダグダ書いているうちに新機種が出てしまいましたが、折角なので残しておきます。