きりのブログ

パソコン、開発関係の思いつきと作業記録

amavisd-newとSophos Antivirus for Linuxでメールチェックにてハマったのでメモ

Ubuntu 16.04 LTSにPostfixでメールサーバー建ててます。amavisd-newをコンテンツフィルターとして使い、配下で定番のclamavspamassassinを動かしてました。

しかしながら、clamavの検出力が残念な感じだったので、Sophos Antivirus for Linuxを試してみることにしました。無料版ということでsweepによるオンデマンドスキャンしかできませんが、検出力は満足いくものでした。(セカンダリの位置付けなので、プライマリのclamavを停止して検証など行いました。)

問題なく数ヶ月たった11月中頃、パッタリと検出しなくなりました。時々思い出したように原因を探ってたんですが、ようやく対処方法が分かったのでメモしておきます。

※覚えてないだけで、色々設定を弄っていた可能性もあるため、万人に通用する対処ではないかもしれません。よって、自分用のメモの位置付けとします。まとまっていませんがご容赦ください。

 

まずはログの調査。

# /opt/sophos-av/bin/savlog --today

→エラーなど見当たらず、定期的な更新もされているように見える

マルウェアのzipファイルをWindows機からscpして、sweepを手で叩いて検出するか確認してみる。

# sweep hogehoge.zip

→ちゃんと検出した

一応、ウィルス定義ファイルがちゃんと更新されているか確認。

# ls -lrt /opt/sophos-av/lib/sav

→新しいファイルが存在する

# /opt/sophos-av/bin/savdstatus --version

Copyright 1989-2016 Sophos Limited. All rights reserved.
Sophos Anti-Virus = 9.12.3
ビルドのリビジョン = 2629392
脅威検出エンジン = 3.65.2
脅威データ = 5.34
検出脅威数 = 12413311
脅威データリリース日 = 2016年11月29日 00時00分00秒
前回アップデートを確認した日時 = 2016年12月13日 12時25分39秒

→脅威データリリース日が古いのが気になるけど、バージョンは問題無さそう

# ps aux | grep amavis

amavis 56768 0.0 6.2 259336 126976 ? Ss 18:34 0:01 /usr/sbin/amavisd-new (master)
amavis 58661 0.3 6.5 267272 134352 ? S 19:18 0:02 /usr/sbin/amavisd-new (ch5-avail)
amavis 58684 0.3 6.6 266712 135012 ? S 19:19 0:02 /usr/sbin/amavisd-new (ch5-58684-05)
postfix 58816 0.0 0.4 100864 10140 ? S 19:23 0:00 smtpd -n xxx.xxx.xxx.xxx:smtp -t inet -u -o stress= -o content_filter=smtp-amavis:[127.0.0.1]:10024 -o receive_override_options=no_address_mappings
postfix 59154 0.0 0.2 83136 5956 ? S 19:29 0:00 smtp -n smtp-amavis -t unix -u -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20
sophosav 59178 1.0 0.2 75632 4360 ? S 19:30 0:00 /usr/local/bin/sweep -nb -f -all -rec -ss -sc -archive -cab -mime -oe -tnef --no-reset-atime /var/lib/amavis/tmp/amavis-20161213T192054-58684-12pnURVQ/parts
amavis 59181 79.0 4.3 162584 88128 ? Sl 19:30 0:02 savscan -nb -f -all -rec ss -sc -archive -cab -mime -oe -tnef --no-reset-atime /var/lib/amavis/tmp/amavis-20161213T192054-58684-12pnURVQ/parts
root 59184 0.0 0.0 16216 932 pts/1 S+ 19:30 0:00 grep --color=auto amavis

→sweepがsophosavユーザーで動いてる。savscanはamavisユーザーで動いてる。よく分からん。sophosavユーザーだと対象のファイルを読めないので、とりあえずそれぞれのグループにユーザーを追加してみる。

# gpasswd -a sophosav amavis

# gpasswd -a amavis sophosav

→結果変わらず。

※上のps結果で、savscanの方、なぜかssオプション前のハイフンが消えている。気になって調べたけど原因不明。ナニコレ?

savのログではスキャンしたことになっているけど実際のところどうなんだ、ということで、テンポラリに作られるファイルをタイミングよくコピーして手動スキャンしてみたらちゃんと検出された。ログにも残る。謎が深まる。

Postfixのコンテンツフィルターは外から来たメールしか通していなかったので、ローカルからテストできるようにmaster.cfを編集し、10026ポートでの待受けを追加。

# vi /etc/postfix/master.cf

(下記追加。環境に合わせて読み替え必要かも)

192.168.0.1:10026 inet n - - - - smtpd
 -o content_filter=smtp-amavis:[127.0.0.1]:10024
 -o receive_override_options=no_address_mappings
 -o smtpd_client_restrictions=permit_mynetworks,reject

再起動して、メーラーの設定を10026ポートを使うよう変更。これでガシガシ試せる。早速マルウェア付きメールを送信してみる。

→見事にスルーされる。だめじゃん。

ローカルから送ったメールはコンテンツフィルター内でスルーしているのかも、と思いamavisの設定を弄くりつつ試行錯誤したが、そういう問題ではなさそう。(@bypass_virus_checks_maps、@whitelist_sender_aclを変更してみたり)

最終的に辿り着いた対処はコレ。

# vi /etc/amavis/conf.d/20-debian_default

@keep_decoded_original_maps = (new_RE(
# qr'^MAIL$', # retain full original message for virus checking (can be slow)
   qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains undecipherables
   qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
# qr'^Zip archive data', # don't trust Archive::Zip
));

→Zipの行のコメント外して有効に。

これでちゃんと検出するようになりました。(これデフォルトのはずなんだけども。)

未検証ですが、sweepに渡しているmimeオプションを無効にしても同様の結果になるかもしれません。というか、むしろそっちのほうが良い気がします。これだとZIPは生で渡してますが、その他の形式の場合デコードして渡しちゃうし、他のアンチウィルスソフトとの共存も考えなくちゃならないし。他形式のサンプルないので検証出来ませんけど、対応出来たので良しとしておきます。

Ubuntuのセキュリティアップデートで更新されたパッケージとか影響してるのかなぁ。mime-supportとか。(適当))

iPhone5のフロントパネルを交換してみた

DoCoMoiモード携帯の出荷を終了するそうで。私は使っていませんが、安い維持費と家族間通話無料なので家族が重宝してます。残るspモード携帯ですが、10月に安い新料金プランが出たことで、そこまで買い替えを急ぐ必要はなさそうです。(多少は値上がりしますけど)

しかし、今のガラケーはボロボロでそろそろ買い替えを検討する時期。次もガラケーか、それともスマホか、悩ましいところでした。さらに追い打ちで、家族がゲーム兼LINE端末として使っていたお古のiPhone4(WiFi運用)のバッテリーが気温の低下とともに限界に達しました。常に充電しながら使えばいいのですが流石に不便。

いずれ買い替えるにしてもまずは現状復帰、ということで家で寝ていたガラスバキバキのiPhone5を修理して使ってもらうことにしました。

業者修理だと6000円~1万円ぐらいが相場のようです。一方、部品のみだと2000円~3000円が相場と半額以下で済みそう。このまま廃棄するぐらいなら、失敗しても諦めがつく値段と思い自分で修理してみることにしました。ちょっと楽しそうだし。

購入したのはコレ。

開腹のための吸盤やペンタロープドライバ(星型のやつ)、精密ドライバもセットになっています。手順は公開されている情報がたくさんあるのでそちらを参考にしました。

躓いた点

  • 吸盤でフロントパネルを持ち上げるのですが、ガラスバキバキだと無理なのでドライバで無理やり開けました。怪我注意(怪我しました)。
  • ホームボタンを固定している金具のネジが固く、また同梱の精密ドライバは精度が甘く柔いので舐めそうになりました。別途、ネジすべり止め液と精密ドライバを調達しました。今後も使えるので必要経費ということで。
     
  • カメラ付近に小さな黒い樹脂製部品があるのですが、元の位置(と思われるところ)に戻すと他の部品が固定できなくなりました。しょうがなく戻さずに組み上げましたが、今のところ支障は出ていません。(アバウト)
  • プラスチックの透明部品2点(カメラとセンサーの固定用?)は、旧フロントパネルから剥がして移植する必要がありますが、公開されている手順では抜けていることが多いので注意。
  • フロントパネルと本体を接続するフレキシブルケーブルですが、接続がものすごく難しいです。特にデジタイザのケーブルは嵌めても固定されませんでした。液晶画面のケーブルも固定されなかったので不良品として交換してもらいました。新しいものは液晶画面のケーブルだけは固定できたので、デジタイザのケーブルを押さえ込む形で接続することができました。この接続だけで10日間ほど深夜から明け方まで試行錯誤しました。ここの精度は個体差があるのかもしれません。(不器用なだけという可能性も濃厚)

問題なく使えるようになりました。表示もタッチも音もカメラも正常に使えています。あと、久しぶりにiPhone5触ったけど、なんとも言えない「チョウドイイ」サイズ感がたまりませんでした。次に買い換える時はこのサイズのがいいなぁ、と思った次第。

作業してみて思ったこと

急いではいなかったものの、追加の工具手配や交換などで3週間ほどかかりました。また、接続できずに何度も諦めかけました。値段だけで自分で修理はするもんじゃないと思いました。
業者すげえ。2度と自分でやらない。

postfix-policyd-spf-pythonでハマった話 - Ubuntu 16.04 LTS

Ubuntuのサーバー環境を作っています。最新の16.04 LTSです。

お題のSPF以外にもdovecotのメジャーバージョンが上がっていたため、設定方法がガラリと変わってて泣きそうになりました。

公開メールサーバーの設定はやっぱり時間取られます。何かあったら多方面に迷惑かかるので。

Postfixの認証周りですが、てっきりsaslauthd使うもんだと勘違いしてたんですがSASL認証する時は使う必要ないんですね。どうして動いているのか分からなくなって後追いで調べて時間取られました。

スパム対策としては、とりあえずtargreyとspf対応を行いました。amavisd-newを噛ませたspamassassinとかウィルスチェックは後々対応しようと思っています。

targreyで使うpostgreyは、公開されてるパッチの対象バージョンより新しかったため手動でマージしましたが、多分手順通りパッチ当てちゃえば問題なかったように思えます。(未検証)

postgreyのpidファイルのデフォルトパスは/var/run直下ですが、問題出るのでディレクトリ掘って対応しました。

さて、本題です。

spf対応でpostfix-policyd-spf-pythonを入れたんですがなぜか落ちる。下記を直接叩くと、インポートするモジュールが見つからずに終了してしまいます。

# /usr/bin/python /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf

apt-getで入れてるから、こういう問題は普通起きないし、以前のバージョンのUbuntuでは問題なかったと思うんだけど、と不思議に思いつつ足りないモジュールのソースをいくつか落として手動でインストールしましたが埒が明きません。さすがにおかしいので、インポート対象のモジュールを探したところ、

/usr/lib/python3/

あたりが怪しそう。が、同じ階層にpython2.7、python3.5もある。あれ・・・?

# python --version
Python 2.7.11+

# python3 --version
Python 3.5.1+

# python3.5 --version
Python 3.5.1+

あー・・・

# python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

ということは・・・

# python3
Python 3.5.1+ (default, Mar 30 2016, 22:46:26)
[GCC 5.3.1 20160330] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

と、いうことで、master.cfはこうなりました。

policyd-spf unix - n n - 0 spawn
   user=nobody argv=/usr/bin/python3 /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf

そのうち/usr/bin/pythonのリンク先がpython3.5に変わる日が来るのかなぁ。

 

端末変更 Xperia Z Ultra → Nenus 5X

Z Ultraに続いて2度目のExpansysで購入。たまにチェックして値崩れしているものがないかチェックするのオススメ。

ガラスフィルムとUSBケーブルがセットのものを注文したけど、注文後にUSBケーブルの白色が品切れとのことで黒色に変更してもらうなど、予定外の時間がかかった。

 

3月25日 注文

3月29日 USBケーブル品切れで再入荷に時間かかるので色変更の提案メール。OK

3月30日 変更したとのメール受信

3月30日 発送メール受信(香港で荷物受付)

3月31日 国際宅急便輸入手続き完了のメール受信

3月31日 国際宅急便お届けのご案内のメール受信

4月1日  受け取り。関税1,600円支払い。

 

結構時間かかったけど急ぎじゃなかったので問題なし。受け取り時に関税1,600円かかるので注意。

IIJmio(BIC SIM)でSIMカードサイズ変更をした記録

端末買い替えに伴い、SIMカードをmicroSIMからnanoSIMへサイズ変更する必要があったので、どれぐらい時間がかかったのかメモしておく。

使っているのは、BIC SIM 音声通話パックのミニマムスタートプラン。中身はIIJmioの同プラン。

ちょうど「SIMカード変更手数料1,000円OFFキャンペーン」(2016/3/31~2016/4/30)をやっていたのでお得だった。(通常2,000円が1,000円に)

 

2016年4月1日(金)14:00 IIJmioのサイトから申し込み。確認メール受信

2016年4月2日(土)10:00オフライン(通話/データ通信共に不可)

2016年4月2日(土)18:30クロネコヤマトで荷物受付の記録あり

2016年4月3日(日) 6:30 発送準備完了のメール受信

2016年4月3日(日)12:00新しいSIMが到着

 

申し込み前はオフラインの期間を2日間と見積もっていたが1日間で済んだ。土日も対応進めてくれるのは助かった。オフライン期間があっては困る人はBIC SIMカウンターで即日発行可能。ただし、即日発行手数料1,000円が余計にかかる。

サイトからの申し込み時間帯やクロネコヤマトの荷物受付以降にかかる時間は各自異なると思うので参考までに。

NamecheapでjpドメインのRapidSSLが購入できなくなってた話

ここ数年、SSLは価格の安さからnamecheap.comでRapidSSLを買っていました。

今年も30日前の期限到来通知のメールが来たので例年通り購入しアクティベートの手続きを進めていたのですが、最後のDCV確認(Domain control validation: ドメイン所有者検証?)で「Valid contract not found」と表示され先に進めなくなりました。

CSRを作りなおしてみたりDCVの方法をemailからDNSに変えてみたりと試行錯誤してみたのですが変わりません。サポート掲示板も漁ってみましたがこれといった情報なし。

最終的に、Live Chatサービスでヘルプを求めたところ、Symantec(GeoTrust)のポリシー変更とかでjpドメインが扱えなくなったとのこと。多分これと同件。

海外の格安SSL事業者経由で購入したRapidSSLが".jp"ドメインのみサポートしなくなっていた - simple blog

情報収集の中で見つけてはいたのですが、汎用jpドメインのことだと思ってスルーしてました。トップレベルドメインとなると影響でかくね?なんで情報少ないんだろ。

ただ、上のサイトにあるように、海外の格安SSL事業者で扱えなくなっただけで、国内の事業者からはこれまで通り購入出来るみたい。(多分)

 

結局、契約キャンセルで返金してもらいました。(といっても、Billing情報のBalanceに戻っただけで完全な返金ではないですが。)

チャット内でオススメされたのが、ComodoのPositiveSSLでした。チョビっとだけ高いけど、まぁいいか。

<追記>関連情報

【格安SSL】海外で購入したRapidSSLの証明書が .jpドメインで使えない at softelメモ

RapidSSL、QuickSSL 販売終了のお知らせ | 親切サポートと信頼性のグランパワー

ComodoのPositiveSSLってどうよ - PSLブログ

PushBulletとXperia Z Ultra

PushBulletには通知ミラーリングという機能があって、Android端末に表示された通知をPCにも通知する機能があります。(iOS版は現時点で未対応)

これが通知される時とされない時があって頭を捻っていたのですが、Z Ultraのグローバル版に搭載されているスタミナモードが原因じゃないかと思いあたったので、待受中も動作するように設定を変更してみました。

グローバル版のスタミナモードはホワイトリスト方式なので、待受中も実行したいアプリは明示的に指定してあげないといけません。

しばらく試してみましたが、ちゃんと通知されるようになりました。