Ubuntu 12.04でmaxlogins.pl

外出先からSSHで自宅のサーバに接続できる環境にしたい。でもSSHを空けると不正ログインしてこようとしてくる輩がわんさか。まったくインターネットは地獄だぜ!というわけで不正ログインの成功率を思いっきり下げてあげましょう。スティーブ(誰?w)がPerlでいいスクリプトを作ってくれてます。設定した回数ログインに失敗したIPアドレスは、hosts.denyによって設定した時間の間アクセスを拒否されるのです。ざまああああああw 自分の接続元IPアドレスが決まっているならおとなしくファイアウォールなりiptablesなりで絞り込めばいいのですが、それじゃあなんとなくつまらないでしょ。w

まずここのDownloadから、スクリプトをコピってきます。1行目 #!/usr/local/bin/perl -w から DOCUMENTATION の手前までね。1行目のPerlのパスはUbuntuの環境、/usr/bin/perlに直して、/usr/local/bin/あたりにmaxlogins.plという名前ででも放り込んでパーミッション等を設定。

# chown root.root /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl

SSHログイン失敗のログを使って動作する仕組みのこのスクリプト。スクリプトにログを食わせる設定をしていきます。

# vi /etc/rsyslog.d/50-default.conf
  auth,authpriv.*                 /var/log/auth.log
 の行の下に
  auth,authpriv.*                 | /var/log/maxloginpipe 
 と追加して保存

rsyslogではパイプは名前つきパイプとなるので、名前つきパイプを作りそこにログを流し込みます。そしてそれを maxlogins.pl に流し込む maxlogins.sh というスクリプトを作成します。maxlogins.pl の引数 -a 5 -e 24h は、5回ログインに失敗したらそのIPアドレスからのログインは24時間ポートの入り口で門前払い、ということになります。同じIPアドレスで誰か自分以外に規定回ログインに失敗したらどうすんの?という突っ込みは無しでお願いします。(笑)他にも色々オプションがありますのでドキュメントを見て適宜設定しましょう。

# mkfifo /var/log/maxloginpipe
# vi /usr/local/bin/maxlogins.sh

  #!/bin/sh
  while read line ; do
    echo $line | /usr/local/bin/maxlogins.pl -a 5 -24h
  done < /var/log/maxloginpipe

# chmod 750 /usr/local/bin/maxlogins.sh

このmaxlogins.plはデフォルトで /var/log/maxlogins というhosts.denyで使えるファイルを生成するので、/etc/hosts.denyに以下のエントリを追加します。

# vi /etc/hosts.deny
 
  sshd: /var/log/maxlogins

rsyslogの設定変更を有効にし、maxlogins.shをバックグラウンドで実行します。起動スクリプトから実行などはお好みで設定してください。(手抜き)
なお、rsyslogがreloadやrestartされるとmaxlogins.shが落ち、reloadの場合その後にmaxloginsが正常に動かなくなるので、/etc/logrotate.d/rsyslogを以下のように変更します。

# service rsyslog restart
# /usr/local/bin/maxlogins.sh &
# vi /etc/logrotate.d/rsyslog
  postrotateとendscriptの間を以下のように変更する。(2箇所)
  /usr/local/bin/rsyslog.sh

最後にlogrotateから呼び出されるスクリプトを用意します。

# vi /usr/local/bin/rsyslog.sh

  !#/bin/bash
  kill `ps -ef | grep maxlogins | grep -v grep | tr -s " " | cut -d" " -f2`
  restart rsyslog >/dev/null 2>&1 || true
  /usr/local/bin/maxlogins.sh

# chmod 755 /usr/local/bin/rsyslog.sh

GIGABYTE J1800N-D2H

ひさしぶりにPC更改熱が沸々と湧き上がってきたので、WWW/ファイルサーバ用PCのマザーボードをIntelの D510MO からGIGABYTEの J1800N-D2H にしてみました。D510MOくん、4年間お疲れ様でした。4年の間には電源が焦げ臭くなって逝ったなんてこともありましたがw、マザーボードは大安定でした。

で、このJ1800N、当初は Windows8.1 Pro の Hyper-V 上に Ubuntu 12.04 を入れたのですが、どうにもネットワークが不安定(頻繁にセッションが切れる・スピードも10MB/s程度しか出ない)すぎて改善も出来なかったため、仮想環境にはせずに普通にリアルの Ubuntu だけを入れました。常時電源ONのネットサーフィン用Win8.1マシンとしても利用したかったので残念無念。ただちょっともっさりはしてましたが…我慢は出来るレベルだと思いました。

さて、常時電源ONのサーバだとやはり気になるのは消費電力!ということでワットチェッカーで計測。

D510MO (メモリ1GB、SSD64GB、HDD1TB)
アイドル時 22W

J1800N-D2H (メモリ4GB、SSD64GB、HDD1TB)
アイドル時 19W

うーん、もう一声!という感じですが、CPUの性能はかなり上がっているのでまあいいんじゃないでしょうか。SSDオンリーなら16~17Wくらいにはなりそうですね。

簡単にベンチマーク結果も紹介しておきますと、スーパーπ104万桁(@Win8.1)は34秒。Sambaサーバ(@Ubuntu12.04)でのCIFSのシーケンシャルリードは120MB/s弱と、ギガビットイーサネットがボトルネックになっていそうな値まで出ました。え?どうしてカニとIntelのベンチ結果があるかって?それはHyper-Vでぜんぜんネットワークのスピードが出ないときに絶対オンボのカニチップのせいだと思ってIntelのNICを速攻でポチったからですよ。w

ファイルサーバ単独利用としては、若干オーバースペックで消費電力も高いような気もしますが、X Windowも普通に動いたので私のように常時起動Linux(またはWin8、Win7)デスクトップPC兼ファイルサーバ、みたいな使用用途には好適なマザーボードではないでしょうか。

TxBENCH

J1800N-D2H

ELECOM TK-FBP052

最近私のおうちでは7インチタブレットの稼働率が非常に高く、タブレット端末で文字入力をすることが多くなってきました。7インチ程度の大きさがあるとソフトウェアキーボードでもそれなりに速く入力することが出来ますが、やはり物理キーボードには適わない。というわけでBluetoothキーボード、TK-FBP052を購入しました。

数あるBluetoothキーボードの中からどれを選ぶのか?製品の選択にあたって考えた要件は以下の通り。


・ テンキーなしでコンパクトサイズ
・ パンタグラフタイプでキーピッチは17mm以上
・ 出来るだけ特殊な配列でない
・ 乾電池駆動で出来る限り使用期間が長めであること
・ 幅広い機種(iOS、Android、Windows)で使えること

TK-FBP052は上記の中で、特殊な配列でないという要件だけはやや満たしませんでしたが、上記要件をすべて満たすキーボードを見つけられなかったため、妥協しました。2列目と3列目の位置関係が一般的な配列と異なり縦に揃っている、カーソルキーが横一列、というところに起因してタイプミスをしてしまいます。ただキーピッチは17.4mmで必要十分な大きさが確保されており、タイピングの感触は概ね良好です。幅広いOSに対応しているわりにはマルチペアリングに対応していないのはちょっと残念。あとちょっと配列を頑張っててマルチペアリング対応だったら、実売2000円程度というリーズナブルな価格なこともあり、+1000円程度でも神機だったと思います。満足度は5段階評価で4。

なお、Kindle Fire HDXで使用していますが、特に問題なく動作しております。モード1とモード2のどちらでも使え(モードによりマルチファンクションキーの使用可能なものがやや異なる)、日本語入力と英語入力の切り替えはSHIFT+SPACEで出来ます。

TK-FBP052