2017/11/29

迷惑メール対策

最近、自宅に届く迷惑メールの量が急増しているのでドメイン単位で受信を拒否するスクリプトを作成した。
自宅メールサーバ環境では mh (1) を利用しているので、迷惑メールは spam フォルダに格納する事を想定している。
メールの自動振り分け処理も mh に付属の slocal (1) コマンドを利用しているので、 迷惑メイルの送信元ドメインを ${HOME}/.maildelivery に格納する様にしている。

  1domains=/etc/postfix/generics-domains                   # 自分のドメインを格納しているファイル
  2spamdir=$HOME/.Mail/spam                                # 迷惑メールを格納しているディレクトリ (1メール1ファイル)
  3delivery=$HOME/.maildelivery                            # maildelivery ファイル
  4tmpdir=/tmp/spam.$$                                     # 一時ファイル
  5reject="/etc/postfix/reject"                            # postfix リジェクトファイル
  6count=0
  7
  8if [ $(ls -1 ${spamdir} | wc -l) -gt 0 ]
  9then
 10    # spam ディレクトリのメールファイルから From を取得
 11    for i in $(sed -n '/^From/ s/.*<.*@\(.*\)>.*/\1/gp' ${spamdir}/* | sort | uniq)
 12    do
 13        # From が自分のドメインに詐称されていない送信ドメインを maildelivery ファイルに "destroy" として追加
 14        grep -q ${i} ${domains} || grep -q "\"@${i}\"" ${delivery} || { printf "from\t\"@%s\"\t\t\tdestroy\tA\t-\n" $i; count=$((count + 1)); }
 15    done >> ${delivery}
 16
 17    # 迷惑メールがある場合
 18    if [ ${count} -gt 0 ]
 19    then
 20        # 迷惑メールの学習
 21        mkdir -p ${tmpdir}
 22        cp -r ${spamdir} ${tmpdir}
 23        sa-learn --spam ${tmpdir}
 24        rm -r ${tmpdir}
 25    fi
 26
 27    # 迷惑メール削除
 28    rmm all +spam
 29
 30    # reject ファイル作成
 31    awk '{
 32        if($1 == "from" && $3 == "destroy" && $2 !~ "@\"$"){
 33            gsub("[\"@]", "", $2)
 34            if ($2 ~ /.+\..+/)
 35                printf "%s DISCARD\n", $2;
 36        }
 37    }' ${delivery} > ${reject}
 38    # HASH 形式に変換
 39    postmap ${reject}
 40    # 再読み込み
 41    service postfix reload
 42fi
    

メールを処理する時に迷惑メールは spam フォルダに仕分ける必要はあるが、このスクリプトを crontab に仕込んでおけば mh (1) の spam フォルダに格納されているメールの送信元ドメインからのメールは拒否出来る様になる。
reject ファイルが肥大してしまうのが難点なのだが迷惑メールは目に見えて減ったので重宝している。

2017/11/15

PETZL ACTIK CORE

『登山じゃないんだから』と敬遠していたヘッドランプなのだが遂に導入した。
ヘッドランプでは Black Diamond 社が一番メジャーだが、今回選んだのは PETZL 社の ACTIK CORE という機種。

Image: 20170912_093826099_iOS.jpg

PETZL ACTIK CORE

スイッチはシンプルに 1 個のみで、クリックする回数により明るさを変更できる。 スイッチオンから 30 秒以内に再度スイッチをクリックすると明るさが調整でき、それ以上経過した後のクリックは電源オフになる。 文字にすると煩雑そうだが実際に操作するとシンプルで判りやすく戸惑う事はないと思う。
スイッチオンの状態でスイッチを長押しすると赤いライトになる。 この赤いライトは何のためにあるのかと不思議だったのだが、山小屋やテントの中で横で寝ている人を起こさない様にするためらしい。

Image: 20170912_093855051_iOS.jpg

赤いライトモード

CORE と呼ばれる小型の充電式の電池を利用するタイプなのだが、単 4 電池 3 本でも利用可能なので出先で充電が切れた場合も安心。 しかも CORE は Micro USB から直接単体で充電可能なのでモバイルバッテリー等を持っていれば充電できるのも便利。 明るさは 3 段階に調節でき、最大だと 350lm と十分に実用になる (キャンプだと明るすぎる可能性もある程)。

Image: 20170912_093948475_iOS.jpg

単体で充電可能な充電池 CORE

使ってみるととっても便利だという事を実感。
暗くなってからのトイレや手洗いには勿論、料理する時や細かな作業をする時も便利さを十分に味わったので今後は活用しようと思う。

2017/11/10

MAXPEDITION Mini Pocket Organizer

MAXPEDITION の Mini Pocket Organizer を入手したので EDC ツール類を格納してみた。
格納したのは以下の品々で、キャンプに行く際やオートバイに乗る時に常に携行する様にしている。

Image: 20171102_160713779_iOS.jpg

MAXPEDITION Mini Pocket Organizer

現在収納しているもの。

LETHERMAN Juice S2
本格的なプライヤーを備えたマルチツールの LETHERMAN 製品の中で、コンパクトかつハサミを含めた必要十分なツールを備えた Juice S2。
OLIGHT S30 Ti BATON
OLIGHT 製で、最大 1,000 ルーメンの明るさを誇る LED 懐中電灯。チタン合金製のボディーが落ち着いた雰囲気。
CR123A 型電池 2 本、もしくは 18650 型電池 1 本を使用するので、充電式のリチウムイオンの 18650 型電池を利用している。
BAHCO Adjustable Wrench
BAHCO 社のモンキーレンチ。ナットに良くないのでモンキーレンチの利用はお勧めできないが、緊急時に 1 本持っていると頼りになる。
コールマン社の製品はインチ規格のボルト・ナットを使っているので重宝する。
新富士バーナー スライドガストーチ
タバコをやめてからライターを持ち歩かない様になったのでスライドガストーチを携行している。
強風の中でも安定して着火でき 1,300 度まで加熱できるので便利。
裁縫セット
100円均一で購入した簡易的な裁縫セット。針と糸があると何かと便利。

2017/11/09

シェラカップ

アウトドアやキャンプなどを趣味としている人なら『必ず持っている』と言っても過言ではないと思う程メジャーなシェラカップ。

Image: 20171102_160852230_iOS.jpg

UNIFLAME のシェラカップ

自分がシェラカップを購入した時は

  • チタン製である事
  • 計量できる事
を条件に最終的に Snowpeak か UNIFLAME かに絞り込んだのだが、1合が計量できるので UNIFLAME のシェラカップを購入した。

Image: 20171102_160955920_iOS.jpg

家族 3 人分

チタン製品は軽量かつ丈夫なのは勿論の事、金属臭が極めて少なく錆びづらいので食器などには最適だと思う。

2017/11/06

SSL 証明書の更新チェック

最近は Let's Encrypt を利用する機会が多くなっているので SSL 証明書の更新は基本的に自動で実行しているが、 通常の SSL 証明書の場合は有効期間のチェックが必要なので定期的にチェックするスクリプトを作成した。
このスクリプトは SSL 証明書から有効期限を取得し現在の日付と比較してチェックを行い、

  • 有効期間が 30 日以内の場合は 1 日に 1 度
  • 有効期間が 10 日以内の場合は実行するたび
slack にメッセージを投稿する。
ubuntu サーバでの動作を前提としたスクリプトなので SSL 証明書ファイルは /etc/apache2/sites-enables/0000-default-ssl.conf から取得しているが、 SSL 証明書ファイルを直接指定する事で汎用的に動作させる事が可能となっている。
slack に投稿するためには予め slack にアクセスし Webhook URL を取得する必要がある。

  1#!/bin/sh
  2# SSL 証明書の有効期限をチェックして slack に通知する
  3# 1日数回の実施 (10:00 / 13:00 / 16:00 / 18:00) を想定している
  4
  5host=${1:-`hostname`}
  6cert=$(awk '{ gsub(/#.*/, ""); if($1 == "SSLCertificateFile") print $2; }' /etc/apache2/sites-enabled/000-default-ssl.conf)
  7check=/tmp/sslcheck-send
  8
  9# slack の API フック指定
 10target='https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
 11user="${host} SSLチェック"
 12
 13# リミット
 14soft=$((30 * 24 * 60 * 60))
 15hard=$((10 * 24 * 60 * 60))
 16
 17send_slack()
 18{
 19
 20    icon=${1}
 21    shift
 22
 23    curl -X POST -H 'Content-type: application/json' --data '{"text": "'"${*}"'", "icon_emoji": "'"${icon}"'", "username": "'"${user}"'" }' ${target} > /dev/null 2>&1
 24
 25}
 26
 27# 証明書から有効日を取得
 28limit=$(date -d "$(openssl x509 -noout -text -in ${cert} | sed -n '/Not After/s/.* : \(.*\).*/\1/p')" '+%Y/%m/%d %H:%M:%S')
 29limit_s=$(date -d "${limit}" '+%s')
 30today=$(date -d "00:00:00" '+%Y/%m/%d %H:%M:%S')
 31today_s=$(date -d "${today}" '+%s')
 32
 33current_s=$((${limit_s} - ${today_s}))
 34current=$((current_s / (24 * 60 * 60)))
 35
 36if [ ${current_s} -lt 0 ]
 37then
 38    # 証明書期限切れ
 39    send_slack ":red_circle:" "*ホスト${host}のSSL証明書の期限が${limit}で終了しています。大至急更新作業をして下さい。*"
 40    echo ${update} > ${check}
 41elif [ ${current_s} -le ${hard} ]
 42then
 43    # 証明書期限まで残り 10 日以内
 44    send_slack ":bangbang:" "_ホスト${host}のSSL証明書の期限が${limit}までです (残り${current}日)。至急更新作業をして下さい。_"
 45elif [ ${current_s} -le ${soft} ]
 46then
 47    # 証明書期限まで残り 30 日以内 (1日1回通知)
 48    update=$(date '+%m%d')
 49    if [ -f ${check} -a "$(cat ${check})" -eq ${update} ]
 50    then
 51        :
 52    else
 53        send_slack ":warning:" "ホスト${host}のSSL証明書の期限が${limit}まです (残り${current}日)。更新作業をして下さい。"
 54        echo ${update} > ${check}
 55    fi
 56fi
    

このスクリプトを crontab などで一日数回自動的に実行する様に設定すると、定期的に SSL 証明書の有効期限が確認できる。
slack を利用していない場合、send_slack の部分を変更する事でメール送信などに変更する事ができる。

メール送信する場合のサンプルも以下に示す。
この例では POSIX 準拠のコマンド以外に nkf(1) と base64(1) が必要となっている。

  1send_mail()
  2{
  3
  4    sendmail="/usr/sbin/sendmail -i -t"
  5    from="送信元メイルアドレス"
  6    to="受信先メイルアドレス"
  7    subject=$(echo "サブジェクト" | nkf -WM)
  8    body=$(echo ${*} | sed -e "s/;/\n/g" -e "/^\$/s/\$/\r/" -e "/[^\r]\$/s/\$/\r/" | base64)
  9
 10    cat << EOF | ${sendmail}
 11From: ${from}
 12To: ${to}
 13Subject: ${subject}
 14
 15${body}
 16EOF
 17
 18}
    

2017/11/03

バウアーハウス

例年であれば我が家のキャンプシーズンは 10 月までで、11 月は冬眠期に入っているのだが、今年は 11 月に入ってもキャンプをしている。

Image: 20171103_032644718_iOS.jpg

バウアーハウス

丹沢のバウアーハウスはとても綺麗でよく管理されている高規格のキャンプ場なのでお気に入りなのだが、 最近は何故か訪れる機会がなく、実に 2 年ぶりの訪問となってしまった。
近所だという事もあって、いつもより遅い時間にゆっくりと出発。 途中の高速道路で多少渋滞に巻き込まれたり、丹沢湖で昼食を食べたりの時間を挟んでも 2 時間程度で到着。

3 連休だと言うのに割と空いているのはこの時期のせいなのか? 元々広いサイトなのだが、割り当てられたサイトの両隣が開いていたので開放感とプライバシーは最高で、 天気も良かったのでテントとタープを離してスペースを広く活用する構成として設営してみた。
ここのキャンプ場は細かな砂利サイトなのでペグを打つのが結構大変なのだが、 今回も Weather Master T.P. Crest を持ち込んだので 30 本以上のペグを打つのが一苦労。 昼間で暖かかった事もあり設営が完了する頃には汗だくになってしまっていた。

Image: 20171103_053529761_iOS.jpg

タープとテント

設営の後はハンモックで寛いだりバトミントンに興じたりと家族それぞれが自由な時間を過ごす。 ちなみに娘のバトミントンの腕前がとても上達していて驚いた。 日々成長しているんだなぁとしみじみ

1日目の夕食はダッジオーブンのレシピ本に載っていたすき焼き風の鍋を作ってみた (残念ながら写真はなし)。 昼間は割と暖かくて快適なのだが夜になると流石に結構冷え込むので鍋料理は身体が温まって最高!
テーブルを使わずに家族で焚き火を囲んでの夕食だったけど、こういうのは寒い時期のキャンプならではの楽しみか。

Image: 20171103_073846217_iOS.jpg

バースデーランタンとランタン型オーナメントライト

朝食は焚き火でお湯をわかしながらのホットサンド作り。
実は最近までキャンプでホットサンドを作る習慣がなかったのだが、初めてみると簡単で美味しいので確かにお勧め。

Image: 20171104_223302112_iOS.jpg

焚き火で湯沸かしとホットサンド作り

朝食の後は少し休んでから買い出しに出かける。 バウアーハウスは結構な山の中にあるので近所にスーパーマーケットなどがなく、車で片道1時間程度かかってしまうのが不便と言えば不便な所か。
昼食は市販のピザをダッジオーブンで焼いたのだが、クラストがとってもカリッと焼けてとーっても美味しかった。

Image: 20171104_040914027_iOS.jpg

ダッジオーブンでピザ
Image: 20171104_042730034_iOS.jpg

美味しそうに焼けました

ピザを焼くのに炭火を熾したので夕食用のパン作りからメインディッシュのビーフシチューの仕込みまで一気に終わらせる。
あとは焚き火でコトコトと煮込めばとーても美味しいビーフシチューの完成。

Image: 20171104_073849803_iOS.jpg

ビーフシチューをコトコト煮込む

2日目の夜は突然雨に降られてしまったが、最近キャンプで雨に降られる事が多い我が家では、 突然の雨も殆ど気にしないで平然と過ごせる程度にはキャンプ力が上がってきている (気がする)。
折角なので前室部分にレジャーシートとローテーブルを設置してそこで夕食を食べてみたのだが、 ランタンと小型ストーブで暖かくとても快適な空間でゆっくり食事を食べる事ができた。

Image: 20171104_092443902_iOS.jpg

ビーフシチューと自家製のパン

翌日は朝からとても良い天気に恵まれたのでタープやテントを干してからノンビリと帰宅。 普段のキャンプでは割と早い時間に行動しているので、昼 12 時過ぎてからの出発は初めてかも?
帰りの東名高速もそれほど渋滞はしておらず、ノンビリ走っても 2 時間弱で無事帰宅!

2017/11/01

オイル交換

前回のオイル交換から 4,000Km 走行して 24,009Km になったのでオイル交換。
今回も NUTEC のオイルを選択。前回同様、粘度 5W-30 の NC-40 と粘度 10W-50 の NC-41 を 1 対 1 の割合でブレンドし、エンジンオイル添加剤 NC-82 を今回は 100cc ほど添加した。

すこしエンジンをかけてオイルを温めた後でドレーンボルトを緩めて古いオイルを排出。 古いオイルを出し切ったらドレンボルトパッキンを新品に交換して規定のトルクで締めたらフィラーキャップを開けて新しいエンジンオイルを入れる。 フィラーキャップをしっかり閉めたら、エンジンをかけて暫く放置した後エンジンを停止しオイル点検窓のオイル量ゲージを確認する。 ドレンボルトとフィラーキャップからのオイル漏れの確認をしたら作業完了。


Copyright © 2008-2020 Mitzyuki IMAIZUMI. All rights reserved.