確定申告

そろそろ、確定申告の時期だ。
復興特別所得税の入ったexcelを作ったので、公開しておく。
ただし、あんまし自分に関係ないとこは、検算できないので実装してない。
平成25年版確定申告計算表
マクロにつけたオレオレ署名の証明書の拇印:
‎5d 3c 8e ab 83 95 20 c4 f6 f9 0f 25 03 f4 03 7d 9a 2b 87 0b

総収入vs.所得税額等(2500万円以下)
総収入vs.所得税額等(2500万円以下)

総収入vs.所得税額等(1000万円以下)
総収入vs.所得税額等(1000万円以下)

あと付録に、右のような総収入と所得税額の傾きを計算したグラフをつけている。
また簡略化のため、

  • 健康保険料率は協会けんぽの値を会社が1/2だけ負担したものを使用
  • 厚生年金保険料率は第一種を会社が1/2だけ負担したものを使用
  • 社会保険料は標準報酬月額での階段関数にはせず、年収に料率を乗じて計算(総報酬制が導入されたため、これでもだいたい金額は合う)
  • 雇用保険料率は一般の事業の率を使用
  • 減免系の制度は無視
  • 被扶養者は1名の場合

という設定で計算した。

こうしてみると、所得税計算までの途中式の累進課税度は結果にはほとんど寄与していなくて、この設定での課税対象の所得金額(赤線)は、ほぼ線形。
結局、所得税の計算式で累進課税になっているのだから、途中計算なんて単純な係数かけるだけにしたらいいのに。

apache のエラーログを真面目に読んでみた

最近、サイト運営の時間がとれず、放置していたので、たまにはログをチェックしようかと三が日からログを読んでいた。
ログは error.log (うちのサーバの場合、ログファイルはvhost毎に変えてるので、標準のログファイル名で書いておく。以下同様。) を眺めて、サイトのコンテンツ絡みの場合は、man もしくは google 先生、明らかにアタックの場合は該当アクセスの IP アドレスを /var/log 内全検索するなどして、分析した。
分かったのは、思ったより脆弱性の入ったサーバやスクリプトが巷には溢れていて、下に列挙していない file does not exist に、大量にそのキーワードが含まれているということ。
自分が入れているツールへのアタックかも、と感じたら、その IP でログの全検索をかけることと、そのツールが最新版か確認することはした方がよさそうだ。

んでわ、さっそく。

PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
PHP Fatal error: Unknown: Failed opening required 'FILEPATH' (include_path='.:FILEPATHES') in Unknown on line 0
2行でセット。
旧サイトの投稿スクリプトのパーミッションを 000 にしていたために、出ていた。
パーミッションを変更したら(投稿フォームを無効化してから)、直った。
Directory index forbidden by Options directive: FILEPATH
index ファイルを設置してなくて、Indexes をセットしてないディレクトリへのアクセスがあったログ。
index.htm を置けば OK。
no acceptable variant: FILEPATH
コンテンツネゴシエーションに失敗。具体的には、MultiView の設定に絡むファイルしかなかった。
だが、telnet アクセスで再現しなかったので、切り分けはこれ以上はできなかった。うーむ…
アクセスログによれば、Majestic-12 とかいうプロジェクトの bot らしい。
File does not exist シリーズ
ほとんどが、旧コンテンツのメタタグとかで読み込む設定にしていた旧faviconなど。
あといくつかが、色々な脆弱性へのアタック。目についたのだけ、ピックアップする。
File does not exist: FILEPATH/w00tw00t.at.blackhats.romanian.anti-sec:)
phpMyAdmin の脆弱性アタック。
この辺りが詳しい → phpMyAdminを狙った攻撃観察 - ろば電子が詰まっている
そんな軟派なものは入れていないので、関係なし。
w00tw00t.at.hogehoge 自体は、他にも色んな種類があるらしいので、他のアクセスが出てきたらそれはそれで注意が必要ぽい。
File does not exist: FILEPATH/notify-NotifyUser_NONE_071217
なんか日本語サイトだと、楽天とか伊藤忠のイントラネットから web アクセスする時に、業務と関係ないサイトにアクセスする時に使う proxy が notify-NotifyUser1 だってネタがひっかかる。
ただ、web サーバにそんなファイルアクセスを起こす意味が分からないので、なんか違うんじゃないかという気がしている。
なおうちへのアクセスでは、AhrefsBot/5.0 という bot によるものらしい。ポートスキャンという説もあるが、うちのサイトでは、web クローラとしての動作のみが記録されていた。外側の FW で落ちているだけかも知れない。
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
これは DFind のアタックを受けた痕跡らしい。
DFind については、この辺を見たらいいのかな… → Hacktool.DFind | シマンテック 日本
んで、対策は色々と書かれているんだけど、だいたい多いのは iptables の string モジュールで文字列マッチをしてパケットをドロップさせろ、というもの。
(参照: Blocking w00tw00t scans - Myatu's, GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1)
日本語のサイトでは、400 が返ってたら心配ないよ、って書かれてて、多分その元ネタは後者の参照ページあたりだと思うのだけど、なんで you should not worry about it なのかが、見付けられなかった。
少なくとも Hacktool.DFind が正しいのであれば、apache と関係ない SQL サーバへのアタックも含まれているのだから、apache のログだけ見て心配しなくて良い理由が不明。
いちおう、サーバの外側の FW で弾いた上で、サーバ内のソフトウェア FW でも弾くようにしているので、apache 以外のログには残っていないのだと信じたい。
script not found or unable to stat シリーズ
4割が、過去に google calendar に登録していたが現在ではもう登録していない URL へのもの。
他は、色々な php システムのバグへのアタックくさい。
Invalid URI in request GET HTTP/1.1 HTTP/1.1
なんか、アタックの最初に "GET HTTP/1.1 HTTP/1.1" をつけてくるツールがあるっぽい。
google の連文節検索(という名前は私が勝手につけたが、よーはハイフンで単語を繋げる検索)で、http-1.1-http-1.1 として検索すれば、大量のログが出てくるので、自分のログと類似のものを探せばよい。
このログが理解できなくて、telnet してたら自鯖の設定ミス(ServerTokens を設定していない)のために HTTP ヘッダに OS と apache のバージョンが流れていることに気付いたので、修正した。
ServerSignature を未設定または Off にすると、エラーレスポンスの末尾の OS や apache バージョンが入ったシグネチャが消えるので安心していたら、HTTP レスポンスで返していたとは…
ちゃんとヘッダまで確認していなかった自分の甘さに反省。
PHP Notice:
Undefined variable: comment_field_name in FILEPATH/comment_form.tpl.php on line 64
多分、P_BLOG のバグ。reply.php の中で、エラーメッセージ内の .tpl.php を呼ぶ前に、add.php とかみたく $comment_field_name をセットしていないのが原因。

SKKFEP

記事を書いたつもりが、なんか残ってなかったので改めて書いておく。
バイナリは、ここから DL → co Programs
skk-fepとも.

  1. setup.js を起動
  2. IE の窓から「インストール」をクリック
  3. 何度か出る UAC を全部 OK
  4. (個人的にはなくても良い気がしてきている)「カタカナ辞書」にチェックを入れてアップデート
  5. skkuser.txt をユーザ辞書フォルダに入れて「辞書の更新」
  6. 「設定>詳細」を次のように編集して上書き保存。(設定名がころころ変わるので、注意)
    • 配列 → 0 (英語キーボード)
    • 区切 → 1 (コロン、セミコロンの全角入力,なくてもいいかな…)
    • 句点 → 2 (ピリオド)
    • 読点 → 2 (カンマ)
    • 改行 → 1 (Enter入力で決定+改行)
    • 疑似 → 1 (入力モードをカーソルの色で表示する機能をエミュレート)
    • cy → ち
  7. 「コマンド」からコマンドプロンプトを上げて、> rule r
  8. puttyとかでサーバーサイドに uim-fep+uim-skk とか準備している場合,ローカルのskk-fepを殺さないといけなので,> rule putty.exe m5
  9. 「閉じる」で完了だが、IME 全部置き換えるためにログオフ→ログオンを推奨。

MS Office PowerPoint 2010 でフォント設定のダイアログを表示

PPT2007 までは、プレースホルダのダイアログを開いて、欧文フォントと和文フォントを個別に変更するなどの操作ができた。
PPT2010 では、スライドマスタの編集画面でプレースホルダを右クリックしても「フォント」というメニューが出てこない。
その場合、リボンの「ホーム」にある「フォント」の右下(下図の赤○の部分)をクリックすると表示できる。

PPT 2010 フォントダイアログ
PPT 2010 フォントダイアログ

HDDが飛んだ

debian から USB3.0 経由でマウントして使っている HDD が飛んだ。
最近、smartctl から無理くり S.M.A.R.T. 情報を引いていたことの祟りではないかという気もするが、ともかくバックアップ用 HDD が飛んで心配なので、すぐに新しい HDD を手配する。

で、どうせアクセスできないので、この HDD は遊んでみることにする。

mount しながら kern.log を見ると、たまにエラーを吐く。毎回じゃないのが謎。
最初に出たエラーはこれ。
warning: mounting fs with errors, running e2fsck is recommended
言われるがまま、e2fsck するも no error だった。
んじゃスキャンするか、と思って

dd if=/dev/sdb1 of=/dev/null bs=64k

するが、たまに飛ばしていた kill -USR1 への応答がなくなり、9GB 目前で突然、停止。
その時に出たのがこの2種類のエラー。
end_request: critical target error, dev sdb, sector 1598034432
と、
end_request: I/O error, dev sdb, sector 1598034448
なおエラーセクタの番号は、アクセスする度に違う数が出る。

次に、S.M.A.R.T. 情報はこんな感じ。
笑える。

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       10260
  3 Spin_Up_Time            0x0027   163   144   021    Pre-fail  Always       -       8833
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       978
  5 Reallocated_Sector_Ct   0x0033   109   109   140    Pre-fail  Always   FAILING_NOW 726
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   086   086   000    Old_age   Always       -       10447
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       438
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       19
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       943
194 Temperature_Celsius     0x0022   113   093   000    Old_age   Always       -       39
196 Reallocated_Event_Count 0x0032   001   001   000    Old_age   Always       -       715
197 Current_Pending_Sector  0x0032   199   197   000    Old_age   Always       -       539
198 Offline_Uncorrectable   0x0030   200   199   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       1
200 Multi_Zone_Error_Rate   0x0008   156   001   000    Old_age   Offline      -       8920

これでも、5回に1回くらいはアクセスが成功するから不思議なものだ。
なお今回は旧バックアップを最近とっているうえ、オリジナルの HDD が無事だからこんなテキトーなことしているが、普通は最初にデータ救出しましょう。

SMART 情報が引けない

USB 3.0 対応 HDD ケース『GW3.5AX2-SU3』と Renesas の USB 3.0 オンボードコントローラの組で WD の HDD を接続している。
windows では smart 情報を引けたのだが、ubuntu でも debian でも smartmontools で smart 情報を引けずに苦労していた。
USB ドライバまわりや、smartctl -d で指定するドライバに usb まわりを指定していたのだが…

# smartctl -a -d sat /dev/sdX

で引けることが分かった。
そーなのかー

これで外出先から HDD の温度を観測できるぜ。

zsh カスタマイズ

zsh で引数つきの alias を設定するには、
function で関数を定義するほかない。

function rmCR() {
    if test $# -ne 2; then
        return 1
    fi
    if test $1 = $2; then
        return 1
    fi
    tr -d \\r <$1 >$2
}

例えばこんな感じ。

(ついでに、特殊変数のメモ。)

$#
引数の数
$1 .. $n
n 番目の引数
$@, $*
引数全部をスペース区切りで列挙。@ と * の違いは不明。
$$
そのコマンドが実行された時の PID。

(その他)

set -o
setopt で設定されるオプションの一覧と現在の設定状況。アンダーバーを入れても無視される。(例: setopt vi = setopt v_i )
setopt no...
setopt で on に設定したオプションの打ち消し。でも、setopt novi しても、vi モードは完全には解除されなかった。
setopt transientrprompt
コマンド実行後、右プロンプトを消す。コピペしたい時に便利。

イーサネットコンバータ

WLI-UTX-AG300/C というイーサネットコンバータを買った。けっこう前に。
このイーサネットコンバータで、電話線から離れた部屋にPCを置いている。
親機が11n未対応なので、せっかくの 11n 対応による 300Mbps の効果は全く感じられないが、普通の USB 無線子機では届かない入り組んだ部屋の奥へ、無線+有線で LAN を届かせることができ、おおむね満足な性能である。
なにより、安い。

しかし…無線区間を 300Mbps のくせに、「USBは電源供給のみ」かつ「有線 I/F は 1 ポートのみ」かつ「有線 I/F は Fastether (最大 100Mbps)」とか、設計ミスとしか思えん。
有線ポートがボトルネックとか、11n 対応に期待していたら怒りまくっているところだ。

AWSについてメモ書くよ

ここに追記していく。まとまったら、またapacheの時みたく整理して記事にし直すかも。

Apache の設定 その1

/home/hoge/public_html を DocumentRoot とする時、/home/hoge が標準で 700 のため、403 が返る。
vhost を使う場合、httpd.conf の NameVirtualHost *:80 を生かして VirtualHost ディレクティブを書けば動く。
未指定の vhost を殺すには、ServerName any でデフォルト設定が書けるので、Order deny,allow かつ deny from all とする。
不要モジュール等については後日。

Amazon Linux の設定とか

sudo がパスワード無しで動いてしまう。そもそも、visudo で権限付与を見てもデフォルトユーザの ec2-user に sudo 権限ついてないしおかしい…
と思ったら、/etc/sudoers.d/cloud-init に記載されていたよ。
NOPASSWD: というのを消せば、パスワードを要求されるようになる。

httpd がサーバの OS とか apache のバージョンとか垂れ流してしまう。
ServerTokens OS の行をコメントアウトし、ServerSignature は Off とする。

まずは使い始め

AWS で Amazon Linux のインスタンスを作ってみる。
yum でパッケージ管理してるし CentOS チックだなーって思いながら apache の設定とか調べ中。
なんだこれ…

  • /etc/httpd 配下かよ
  • a2enmod とか a2ensite とかないの?どうやって有効化するの?

とか初見殺しの山。
なんか調べてみると、とにかく httpd.conf に書きまくっている感じ。debian も昔はこんな感じだった記憶があるなぁ。CentOS は今でもこうなのか。
いらん設定を消していかなければいかんらしい。

モジュールはともかく、vhost のディレクティブはまっさらから綺麗に書きたい衝動にかられる。
DocumentRoot とかベタに書くのやーめーてー