IMAPサーバに接続できない

dovecotを2.2.10にバージョンアップしたところ、下記エラーメッセージが /var/log/dovecot.log に記録されてログインできなくなった。

May 16 22:40:29 imap(usename): Error: user username: Initialization failed: namespace configuration error: inbox=yes namespace missing

centos 7 の dovecot 2.2.10 でログイン出来なくなった場合の対策

に記載があったが、/etc/dovecot/conf.d/15-mailboxes.conf をバックアップ取得したうえで、削除するとログインできるようになった。

バージョンアップ時に /etc/dovecot/conf.d/15-mailboxes.conf.original が作られており、15-mailboxes.conf と同じ状態になっていたので、15-mailboxes.conf だけ削除すればよい状態だった。

15-mailboxes.conf が何をしているのかは調べておくこととする。

 

クライアント証明書

クライアント証明書は、ID+パスワードによる認証などと並んだ認証方法の一つで、SSL通信が必須である認証方式。(Basic認証はSSL通信は必須ではないが、パスフレーズが暗号化されない点では、盗聴リスクがあることに留意しなければならない。)
クライアント証明書を使用した認証の流れについては、Apacheでのクライアント認証の仕組みに記載されているが、通信相手を信頼する方法は、公開鍵暗号方式を利用する点では、サーバ証明書と同一だが、下記の点で異なる。

  1. 公開鍵暗号方式で共有した共通鍵によって通信の暗号化を保証する方法がクライアント証明書には含まれていない点
  2. と秘密鍵を保持している端末が異なる。(サーバ(サーバ証明書の場合)とクライアント(クライアント証明書の場合))が

クライアント証明書は、秘密鍵を保持しているだけに、サーバ証明書と同様に正しく管理さえされていればなりすましによる認証の可能性が限りなく減らせる。ID+パスワードによる認証とあわせて、多要素認証とすることが出来れば、さらになりすましの可能性を減らせる一方で、証明書の配布と管理が煩雑である面を持つ。

気軽にクライアント証明書を試すには、下記2ステップとなる。
1.自己証明局を作成する。
オレオレ認証局の作り方~SSL証明書を無料で作る方法 on CentOS 5
2.認証方法の変更とクライアント証明書の作成方法
オレオレ認証局でクライアント認証 ~ ウェブの Basic 認証をリプレース
なお、上記では、Webサーバの設定にSSLVerifyClientオプションが登場してくるが、この意味合いについては、ApacheでIP制限とクライアント認証をor条件で運用するに記載されている。

メールサーバのSPF(Sender Policy Framework)対応化

送信元アドレスを偽称した迷惑メール、フィッシングサイトへの誘導メールなどの被害を軽減できる仕組み。

【送信側の設定】
送信側がSPFに対応するメリットは、自分の管理ドメインになりすまされたメールの送信をSPFチェックによって判定できるようになる。(受信側が対応されていれば、自分の管理ドメインによるなりすましメール被害を軽減できる)

DNSサーバにSPFレコード(TXTレコード)を登録しておく
IN TXT v=spf1 +ip4:(送信元IPv4アドレス) -all”

MyDNSの場合には自動的にSPFレコードが追加される。
SPFレコードの詳細は送信ドメインを認証するためのSPFレコードに詳しくなろうが詳しい。

併せて、DMARCレコードにも対応しておくことが望ましい
_dmarc IN TXT v=DMARC1; p=none; rua=mailto:(集計レポートの送付先)
DMARCレコードは、MyDNSを使っている場合には、個別にレコード定義する必要がある。

【受信側】
受信側がSPFに対応するメリットは、SPFレコードが登録されたドメインにてなりすましされたメールを受信しないようにできることで、なりすましメールの被害を軽減できる。

Postfixの場合には、「備忘録」 Postfix(CentOS)でSPF対応しちゃう。に従って実装するとSPF対応できるようになる。

SPF対応するとメールヘッダに
Received-SPF: Pass (sender SPF authorized) …
のようなヘッダが付加されるようになる。

また、
$sudo grep ‘policyd-spf’ /var/log/maillog
とすることで正常に動作していることを確認することが出来る。

また、SPFチェックに引っかかる場合には、
Received-SPF: Permerror (SPF Permanent Error: Void lookup limit of 2 exceeded)
Received-SPF: Softfail (domain owner discourages use of this host)
Received-SPF: Neutral (access neither permitted nor denied)
Received-SPF: Fail (SPF fail – not authorized)
のようなヘッダが記録される。

SPFレコードが登録されていないドメインからのメールを受信した場合には、
Received-SPF: None (no SPF record)
のようなヘッダが記録される。

Received-SPF の内容については、postfix で postfix-policyd-spf-python ( or postfix-policyd-spf-perl ) を使ってSPF認証する(CentOS/ScientificLinux編)に詳しく記載されているので、参考になる。

Zabbixで拡張MIB情報を取得する

Zabbixを使ってSNMP情報を取得するとき、OIDを指定することになる。

標準MIBを例にすれば、

インタフェースで受信したパケットの総バイト数

を取得しようとする場合、OIDは、.1.3.6.1.2.1.2.2.1.10 となるが、代わりに IF-MIB::ifInOctets と指定することが出来る。

なぜこんなことが出来るかというと、

/usr/share/snmp/mibs/IF-MIB.txt

の中に

IF-MIB DEFINITIONS ::= BEGIN

(省略)

ifInOctets OBJECT-TYPE
 SYNTAX Counter32
 MAX-ACCESS read-only
 STATUS current
 DESCRIPTION
 "The total number of octets received on the interface,
 including framing characters.

Discontinuities in the value of this counter can occur at
 re-initialization of the management system, and at other
 times as indicated by the value of
 ifCounterDiscontinuityTime."
 ::= { ifEntry 10 }

の記述があるからである。下記コマンドにて検証することが出来る。

$ snmptranslate -On IF-MIB::ifInOctets
.1.3.6.1.2.1.2.2.1.1

監視対象とするネットワーク機器の拡張MIB情報を監視対象とする場合、MIBファイルを入手し、Zabbixサーバ上の /usr/share/snmp/mibs/ にMIBファイルをコピーしておけば、OIDを調べなくても上記のように設定することが出来る。

下記にYAMAHA RTX1210の例を示す。

RTXシリーズのMIBは、http://www.rtpro.yamaha.co.jp/RT/docs/mib/ よりダウンロードできる。yamaha-private-mib.tar.gz 等を入手し、解凍の上、

/usr/share/snmp/mibs/ へコピーする。

$ snmptranslate -On YAMAHA-RT-HARDWARE::yrhInboxTemperature
.1.3.6.1.4.1.1182.2.1.15

と変換されるようであれば、Zabbix上でSNMP OID指定する際には、

.1.3.6.1.4.1.1182.2.1.15 の代わりに YAMAHA-RT-HARDWARE::yrhInboxTemperature が利用できるということになる。

参考サイト)
追加Mibを読み取らせる方法(Ver3.0)
第5回 図解で知るSNMP――MIB情報のすべて
【NET-SNMP】ベンダーMIBファイル追加設定
ネットワーク機器のSNMP MIB/OIDまとめ

FortigateVM

FortigateVMは、Fortigate製品の仮想アプライアンスになっているのだが、ちょっと構成が分かりにくい。

技術仕様によれば、モデルによって性能差異が記述されており、製品機能一覧の4ページ目によれば、ハイパバイザーによって利用できる機能は制限されるが、原則的には、FortiOSの機能をすべて利用でき、期待しているスループットが出るかどうかは別として、割と何でもできる万能型のUTMとして使えるように見える。

ところが、下記のようにライセンス形態が構成されており、オプションになっているものがあり、本体(ベース)ライセンスでは、利用できる機能が制限されている。

  • 本体
  • アンチウィルス(オプション)
  • UTMバンドル(オプション)
  • Enterpriseバンドル(オプション)
  • NGFW(オプション)
  • Webフィルタリング(オプション)

本体ライセンスで使用できる範囲がよくわからないので、FortiVMを採用する場合には、よく気をつけた方がよさそうだ。Amazon EC2でも15日間お試しできる(ただし、仮想マシン費用は掛かり、無料枠の対象にはならない)ので、ちょっと調査をしてみようと思う。

参考)株式会社データコントロール社での販売価格表

SOAPとRESTの違いについて

PI のプロトコルの選択

SOAPは最近はやってないね。でも個人的に分かっていない。おそらく実装もした経験もないし、メリットが見出しづらいから?SOAPといえば、発想がCORBAに近いのかな?

かといって、CORBAをちゃんとわかっているのか!と先輩方からお小言を頂けそうで。。。。

こんなのが最近の記事ですかね?3年前の記事からすれば、API連携においては、もはやSOAPは重たすぎるプロトコルなのかもしれないですね。

今さら聞けないWebAPIの実装方式RESTとSOAPの違い

ZabbixでHDDのS.M.A.R.T.を監視

ZabbixでHDDのS.M.A.R.T.を監視してみるを参考に設定してみた。
ハードウエアRAIDでミラーリングされているディスクは監視できなかったが、SATAで接続しているディスクは監視できた。
4.Zabbixエージェントにユーザパラメータを設定する の箇所は、
UserParameter=hdd.smart[*],smartctl -A /dev/$1 | grep $2 | awk ‘{print $$10}’
ではなく
UserParameter=hdd.smart[*],sudo smartctl -A /dev/$1 | grep $2 | awk ‘{print $$10}’
とすることで値を取得できるようになる。
ただ、1点気になる点がある。zabbix_agentd.confには、

### Option: UnsafeUserParameters
# Allow all characters to be passed in arguments to user-defined parameters.
# The following characters are not allowed:
# \ ‘ ” ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
# Additionally, newline characters are not allowed.
# 0 – do not allow
# 1 – allow
#
# Mandatory: no
# Range: 0-1
# Default:
# UnsafeUserParameters=0

があり、*を使うなら、UnsafeUserParameters=1にしないといけない記述があるが、0でも動作している。
バグなのか、英語の語学力が足りないかのどちらかかなぁ?

ZabbixでIPMIを使用したハードウエア監視について

DELLのサーバと言えば、iDRAC (デルリモートアクセスコントローラ)というもので昔はload averageが高くなりすぎてサーバが制御できなくなったの再起動に使用したり、ハードウエア情報を監視したりしていたが、今ではIntelligent Platform Management Interface (IPMI) という、標準化されたメッセージ・ベースのハードウェア管理インターフェースがあることを最近知った。
BMCという方式で実現されており、サーバ本体のIPアドレスとは別のアドレスを設定することで、iDRACがなくても、ipmitoolを使うことでサーバの再起動やハードウエアリソースを取得することが出来る。
「標準化された」というところがポイントで、サーバのメーカーが違っていても対応できるところが最大のメリットで、昔の記事ではYahoo JapanでもIPMIでの大規模サーバー管理をしていることが掲載されている。
ZabbixでIPMIアイテムを取得する方法は、Zabbix2.0.4でIPMIアイテムを収集する。 #Zabbix #自宅ラック勉強会が大変参考になる。
SoftLayer上でZabbixを動かしエージェントの自動登録やAuto Scaleとの連携を行うもハードコピーが多く非常に分かりやすい。
単位がdiscrete のセンサーの値はZabbixで非対応 という点がポイントで、ほとんどの値が取れないのはZabbixのバージョンアップを期待するしかない。
Zabbixを使ってIPMI監視(HP iLO編)で紹介されているように、ipmitoolを駆使して外部チェックすればほかの値も監視できるのかとは思うが、やっていない。。。。
ところで、ipmitoolでZabbixからハードウエア監視をしようと試してみたところハマったポイントがあったので紹介しておく。
ハマったこと1)Destination Host Unreachableで切り分けに手こずる
ローカル(-I lan -U -H オプションを指定しない)からは取得できるのに、BMCに設定しているIPアドレス宛では
No response from remote controller
Get Auth Capabilities command failed
Error: Unable to establish LAN session
と表示されてしまうという事象だ。
結論としては、Zabbix監視サーバ(ipmitoolで監視対象となっているサーバとは別)からは通信ができるので問題なく、
切り分けしようとしてハマったというオチなのだが、ipmitoolを実行しているサーバと同一サーバで設定しているIPアドレスは同一セグメントなのに
Destination Host Unreachable
となる。。。
これは仕様なのかもしれない。
ハマったこと2)IPフィルタリングで手こずる
623/udpなのだが、UDPパケットだけに戻りパケットをちゃんと通してあげる必要がある。
戻りパケットはdestination portが631ではなくsource portが631なので注意!
destination portが631だと勘違いしてこれまた手こずりました。。。。
参考)
BMC: 業界標準のシステム管理コントローラ
ipmitool のリモート操作に必要な設定
ホストOSのLinux側で、筐体のBMC(IPMI)に設定されているIPアドレスを調べる
ZABBIX Forums IPMI監視のセンサーについて
ZABBIX Forums IPMI Discrete Sensors

ApacheとTomcatを連携するにはどのモジュールを使うのがよいか???

案1)mod_proxy_http
案2)mod_proxy_ajp
案3)mod_jk?

Apache-Tomcat連携モジュールmod_jk/mod_proxy_ajp/mod_proxy_httpそれぞれについて接続が切れた時の挙動を比較・調査してみた

また、IISとTomcatを連携するには、ajp通信する場合には、ISAPIフィルタしかないみたい。

ところで、WebサーバとAPサーバを別マシンで稼働させる場合の優位性は何だろうか?

1.APサーバは重要なデータを保持しているため、APサーバとの通信は、Webサーバにのみ行うことで、セキュリティを担保しやすい。一方Webサーバはフロントエンドになるため、不特定多数と通信する。

2.Webサーバをロードバランサ(SSL通信を行う場合には、SSLオフロード)の役割を担わせることによって、APサーバをスケールアウトできる。

3.APサーバで処理する必要のない静的コンテンツをWebサーバ側で処理させることによって、オフロードできる。

DNSラウンドロビンについて考える

最近DNSラウンドロビンの構成になっているWebサーバを見かけなくなったのは、ロードバランサが仮想化されて稼働率が限りなく100%に近づいているからということなのか?
とあるサービスにて、複数のロードバランサをDNSラウンドロビンする方法があったのだが、ロードバランサに障害発生した場合に、DNSラウンドロビン登録しているAレコードのキャッシュ有効時間を限りなく短くしたうえで、ロードバランサ障害時にDNSレコードを動的に変更できる運用体制がないと可用性を下げる要因にしかならないのではないか?と思ってみた。
DNSラウンドロビンにおいては、
WindowsでDNSのラウンドロビン機能を利用するの文中にあるように
クライアント側の再試行機能(アクセスできない場合は、別のサーバIPアドレスへの接続を試行する)に”期待”したりする(アプリケーションによっては、アクセスできない場合は自動的に別IPアドレスへ再試行する機能を持っている)
とあり、アプリケーションの実装によっては、アクセスできない場合には別のAレコードの値を参照して再試行するというものがあるらしいが、アプリケーションが直接複数のレコードを使い分けるような実装をしているものがあるとは個人的には考えにくい。
参考)
Load Balancing
Azure Load Balancer の概要