HTTPSをリバースプロキシ

会社のほうのサイトがあまりに閑散としているので、ロボットさん達だけは大勢来てくれる delegate9.org サイトから誘致しようと考えました。既にリンクは貼ってありましたが、ロボットはほとんどそれを辿ってくれません。別のサイトはターゲットじゃないからでしょうか。

それで、会社のサイトのコンテンツを http://delegate9.org の一部であるように見せればどうだろう?ということで、リバースプロキシしてみることにしました。

会社のサイトは、設立時や銀行の審査などもあり、今後公告にも使う予定なので、HTTPSにしてあります。なのでこれをマウントするのは、HTTPよりは、ちょっと難しいのでは。そう思ったので、まず実験的に会社のサイトのSSLを外してみることにしました。

やろうとすると、XSOnamaeの管理コンソールが、それをやると何が起きても知らんぞみたいな警告してくるのですが、だってSSLを外すだけじゃん。だったらHTTPからHTTPSに切り替える時だって警告しろよな。余計なお世話だわいと、やってしまいまいたところ… こんな事になっちゃいました↓

重大インシデント発生 / 業務継続性・レビュテーションの危機

こ、これはまずい。会社の信用に関わる(笑)。会社のサイトで遊んだ、いや実験したのはまずかったと反省しつつ、急いでSSLに戻す処置をしたのですが、これがまた反映されるのに数分以上かかるわけです。一体何をやっているのやらXSOnamae… 遅延でもかませてるんでしょうか?

それで心を改め、DeleGateでHTTPSサーバをマウントする方法を思い出そうとしたり、マニュアルを読んだりしたのですが、どうもよくわかりません。マウントポイントごとに設定できたような記憶があるのですが… 単なる MOUNT=”/xxx/* https://xxx/*” という設定だけではダメなのです(そう出来てしかるべきなのに…)

そういえば、ターゲットがhttpsの時はSSLフィルターを噛ませる、という明示的な設定が必要でした。ですが、やり方を思い出せません(確かCMAPとかなんとか…)。仕方なく、ローカルに HTTP → HTTPS 変換をやるプロキシを立てて一段噛ませることにしました。

さてどうかな、と思ってブラウザから見てみたところ、つながらない。なんでだと思ってログを見ると、SSLプロトコルのレベルで却下されているようです。そういやこいつが使ってるOpenSSLライブラリは古いしなと思い、わざわざ足下に置いておいた古いライブラリを消し、もともとUbuntuに備え付けのデフォのライブラリを探し当てるようにしたら… つながりました↓

httpsサーバ(WordPress/nginx)のリバースプロキシ(マウント)成功

おー、なんだかシュール(笑)。ブログやら検索やらのリンクもつついて見ましたが、問題ないようです。まあ、スクリプトでURLを合成されたりしなければ、URLの変換は難しいことではないですからね。少なくとも私の使っているWordPressのテーマやウィジェットはすごく素朴なので、そんな芸当をしそうにないです。

ということもあり、サーバのSSLの有り無しで影響をうけるような話では無いと思うので、XSOnamaeのサーバで何を問題にしているのかピンと来ません。まあアンカーにフル表記のURLを使っているからということなのかなとは思いますが。

delegate.org では長い間、HTTPSサーバをHTTPクライアントにリバースプロキシする事はずっとやってて問題なかったと思います。まあ、オレオレ証明書で怒られてはいますが。最近はhttpsでないとブラウザにひどいレッテルを貼られるのにも気付きました。ほぼ万能証明書は買ってあるので、活用しないと…

2020-0502 sato@izmoh


コストカッター

夢はトランクに潜んで国外逃亡することです(笑)

delegate.org のAzure仮想マシンは月1万円ほどかかっていましたが、delegate9.orgでは月3,000円、つまり1日100円を目標とします。単純計算上はそれでイケるはず。以下は、昨日までの移転作業に伴う日別従量料金の遷移です↓

引っ越しに費用がかかるのは仕方がありません。その間、新旧のマシンを並行して動かしてもいます。しかしこの小豆色の部分は何?とグラフの凡例を見たところ、新しい仮想マシンを作る時に付けた、1TBのプレミアムSSDとやらでした。全く使ってないのに(そもそもマウントすらしていなのに)1日555円かかるようです。合わせて1,000円以上無駄にしました。

仮想マシンを作る時には、(実はオプションであり、無くても動くという)データ用のディスクにいくらかかるのか、MSは表示してこないのです。仮想マシンの構成情報入力後「検証」とやらをして、しれっと(仮想マシン代は)月1,200円くらいですと見積もりを表示してくるから、つい気を許して(仮想マシンの)「作成」ボタンを押してしまう。やはりMSには油断なりません。

引っ越し終えてやれやれと思っていたところで、この棒を見てぎょっとして、ディスクを外そうとしたのですが「ディスクの増量はできるけど減量はできません」と来た。減量じゃ無くて削除したいんだけど…可不可も不明。しかたが無いからまた新たに仮想マシンを作って、引っ越しのやり直しでた。既に準備はできていましたから単純なやり直し作業とは言え、データの転送などに2〜3時間はかかってしまうのです。その上新マシンのIPアドレスをDNSに設定し直すと、これが伝わり終えるのにも時間がかかる。

引っ越しをやり直して、やれやれ、さあどうなるかなと息を詰めてAzureのコスト分析を眺めていたのですが、どうしたことか、新しく追加した仮想マシン(と付随リソース)の料金がいっこうに表示されません。リソース名を指名して表示させようとしても「この期間の使用状況は報告されていません」と来る(誰だか知らないけどとっとと報告しろよ!笑)

妙な話です。それ以前に作った仮想マシン等のリソースについては、5月1日の分も表示されるのですから。1日の途中でも頻繁に更新されていたのに。新仮想マシンの5月1日の料金を早く知りたいのですが…まさかこのまま65円てわけじゃあ無いでしょう。どうも月末のシメ?か何かでか、料金が不自然なことになる現象が3月末に見られましたが、今回は私にとってはタイミングが悪すぎる…

あの1TB SSDの息の根を止められたのか、いまいち確信が無いのです。

上のグラフの右側の薄緑の棒は、MSに都合のよさそうな「予測」ですが、これを大きく裏切って鼻をあかしてやりたいものです。

2020-0501 sato@izmoh


本日引っ越し決行

無駄な出費を一刻も早く止めるべく、delegate.org の旧サーバを停止しました。新ドメイン delegate9.org への引っ越し案内が Google と Yahoo の検索でヒットするようになったので、もういいかなと。Google のキャッシュでは以下のように表示されます。よい卒業記念写真になりました。

すでにかなり昔からGoogleしか使わないので、Yahooでもキャッシュのサービスをしているというのは知りませんでしたが、こんな感じでした↓。まがまがしく「キャッシュ」と書いているのは対抗心でしょうか(笑)。いつキャッシュしたのか表示しないのは、何かの配慮なのでしょうか??

Goolgleのキャッシュではカエルのインラインイメージが表示されていますが、これはただ私のブラウザが、まだそれをキャッシュしているためです。ではなぜYahooのほうではそれが表示されず壊れているでしょう?両者ともキャッシュの説明に、「http://www.delegate.org/のキャッシュです」と言っていますが、実はそのURLは http://www.delegate.org/delegate/ へのリダイレクションになっています。その index.shtml の中のソースにはカエルのインラインイメージをこう書いています。

IMG ALT=DeleGateIcon SRC=DeleGateLogoTrans.gif

Googleではこれがきちんと、/delegate/DeleGateLogo… となりますが、Yahoo では /DeleGateLogo… になってしまっているわけです。そんなリソースはありませんから、表示できなくて壊れる。つまり、Yahoo のキャッシュは、/ が /delegate/ にリダイレクション(302 Moved)される前のベースURLを使ってしまっている。バグですよね。

まあ、こういうこともあるので、小さなインラインイメージは data:img URLで埋め込みたいところです。

なんで後追いなのに、こういう基本的なところで先駆者に劣るのか、わかりません。キャッシュ日付の件だけでなく、Google では案内の中に「フルバージョン|テキストのみのバージョン|ソースを表示」とリンクがあり、簡潔にして完備しています。こういう機能を使いそうなユーザ層を考えれば妥当な機能提供だと思います。

ところで、こういう魚拓は感傷的な記念写真に留まらず、「その時にはその文書が存在した」という証明として有益です。ただし、Googleはそれに責任も持たないでしょうし、キャッシュ保存期間もあまり長くないようです。(3月末まで存在した旧「公式サイト」delegate.hpcc.jpのGoogleキャッシュも、今はほぼ消えました。)

まあ、プライバシーの問題とかで速く消したい人のほうが多いでしょう。でも、どこだったか忘れましたが、海外ですごい古い版の魚拓まで保持しているサイトを見たことがありますから、利用できるかも知れません。まじめに存在証明をしたかったら、タイムスタンプ付き電子署名をしなくてはいけません。電子署名付きでどこかに永久保存されてれば完璧ですね。まあ、証明できるのは、ベースになる静的テキスト部分だけでしょうけど。

それで気になったので、Googleの画像検索を見に行ったのですが、やはり画像の「キャッシュ」機能は無いようでした。

ウェブロボットがHTTPのリダイレクションを追うか否かは、ロボットの気性や目的を表していると思います。私自身も全文検索エンジン用のロボットを作った時に、「そのサイト以外まで追うか」というところで少し考えましたが、どこまで追うかという段数を指定できるようにしました。これは、その文書と関連するページをあぶりだすシンプルな方法だと思っています。

それで、今回引っ越しの際に数時間行った移転先へのリダイレクションを、ロボットが追うかどうか、観察すると興味深い状況が見られました。「ドメイン名が逆引きできないところから来るロボットはリダイレクションを追わない」というものです。そういった素性の知れないロボットの来訪目的は、クロールした結果を検索サイトに載せるとかではなく、ターゲットとしたサイトの中身を探るというような事なんだろうなと思いました。

今回の引っ越しのおかげで、出来の悪い荒らしロボットはしばらく来ないと期待されます。おかげで、大変静かになり(笑)、アクセスログを見る気になりました。久しぶりに sed ‘s/ .*//’ | sort | uniq -c | sort です。原始的ですねぇ。すると、大変懐かしいロボットさんたちばかり来てました。googlebot.com, msn.com, yandex.com、おひさしぶりでした。ちっ、your-server.de も来てやがる… 一方、ほとんど人間は来てないようでした(笑)

やくざなロボットには来て欲しくないですが、立派なロボットさんは歓迎です。主に検索サイトのロボットですが、もはや検索サイトのシェアはGoogleとYahooを合わせると90%以上、日本に限れば99%以上になっているそうです[日本・世界の検索エンジンシェア]。そういう意味では、もうこの両社、とMSN以外のロボットはお断りしても良い。

人間様に迷惑をかけずにロボットだけを撃退しようと、過去、いろんな工夫をしましたが、結局そのためにかなりの労力も、コンピュータのコストもかかりました。人間様がめったに来なくなった今としては、優良ロボットだけを顔パスでお通しして、あとは「私はロボットではありません」ボタンで撃退すれば良いかなと思います。

アドレス出自で優良かどうかをスクリーニングする(ホワイト国って言いましたっけ)のは簡単ですが、もしまじめな無名ロボットさんが来た時に門前払いして良いものか。どうやら、振る舞いを追跡観察することで、多少そのあたりを推定できるような気がしています。

あとは、この検問のためにアプリケーションレベルで判定していると、結局コンピュータに負担をかけ、それなりの費用がかかってしまいます。なにせ従量課金なんで。とすれば、ネットワークインタフェースレベルで、IPアドレスレベルで塞いでしまうことです。できればドメイン名でも塞ぎたいところですが、IPルータとはレイヤが違うので無理。

こいつウザいから門前い払いしよう、という判断はDeleGateでもやっています。その結果(IPアドレスとマスク)をルータなりに、機械的に設定すれば良いわけです。Azureでそれをやる場合、「ネットワークインタフェース」というリソースの設定用APIをAzureが公開しているかということが問題になりますが、まあ人間もウェブブラウザからやってるんで、HTTPでできることは確かです。あとは料金。まさか、フィルターのテーブルサイズに従量課金とかしてないよねAzure…

とは言え、そういう明らかに必要で金になりそうなところをMSが放っておくはずはありません。きっと、それに相当する頭のよいリソースを提供している事でしょう。従量課金で X-D

2020-0501 sato@izmoh


delegate9.org にお引っ越し

サーバ用の仮想マシンの準備もできたので、さっそくdelegate.orgをこちらへ引っ越そうとしたのですが、いくつかの困難(^ー^;に遭遇しました。

まず、delegate.orgのネームサーバををお任せしているN. Sol. でDNSサーバの設定を変えようと思ったのですが、自分のアカウントからそれが見えない。そんな… ドメイン更新・料金請求のページにはちゃんとあるのに。メールではあれほど熱心にSPAMは送ってくるのに…

なにせ N. Sol. とは20年来のお付き合いです。1998年に初めてドメインを取った時、印刷されたドメイン名交付書みたいのが届いた時にはすごくうれしかったのを覚えています。多分あの頃ドメイン名は、今より一桁くらい高価だったようにも思いますから、とても有難いものでした。

Whoisにはこうあります。

Domain Name: DELEGATE.ORG
Registry Server: whois.networksolutions.com
Creation Date: 1998-07-07T04:00:00Z
Registrar: Network Solutions, LLC
Registrar IANA ID: 2

なんってたって「IANA ID: 2」ですから、ついリスペクトしちゃいますね。個人的思い入れもありました。

まあその後身売りしたり、競合他社に押されまくったんでしょうけど、時代に取り残され遅れ、今のサービスレベルや管理サイトの出来は惨憺たるものです。

問合せフォームやメールで連絡しても、機械応答だけ、なしのつぶてです。以前からそうでしたが、今回は待ってられません。腹がたったのでボロクソ書いたページを作って、そのURLを送りつけてやりました(笑)。バイバイ Network Solutions.

delegate.org ドメインのコントロールはいずれ取り返すとして、せっかく建てた Azure 新サーバへの引っ越しは急ぎたい。でないと、Azure から無駄な出費がドクドク流れ出てしまう。

というわけで、delegate9.org というドメインを作って移行することにしました。ぺけぺけ9というのは、トンプソンの plan 9 とか 巨人の v9 とかを想起させるので、良いイメージです。AISTで開発されたDeleGateも ver.9 が最後となりました。動態保存が主目的のサイトにふさわしい。

それで早速 xsonamae.コムで delegate9.org をゲット。登録作業から支払いまで2分程度で完了です。この支払い¥1,496 が、我が社の法人口座からの初めての送金となりました。

それで、アドレスを登録してDNSが開通するのを待っていたのですが、何分、何十分待ってもホスト名が解決できない。xsonamae はドメインを登録すると速攻でアドレスを自社の宣伝ページに向けますし、どうやらそのTTLがかなり長いらしい。キャッシュされてしばらく消えないわけで、それを「数時間かかることもあります」とかうそぶいている。誰のせいだっちゅううの。

最初、URLリダイレクションとして登録してしまったのもまずかったかも知れません。またあとで考えると、こっちの手元のルータかMacのリゾルバのキャッシュのせいかも知れません。結局実際、貫通するまで数時間かかりました。

一方、Azure上の仮想マシンからはサクッと正しいアドレスが引けるようになっていたので、とりあえずそこにプロキシを立ててしのぎました。DeleGateをプロキシとして使ったのは数年ぶりです。

それで残る問題はDeleGateのHTTPサーバです。とりあえず普通に見れますが、HTMLの中にフルのURLで http://www.delegate.org/… などと書いてあるのがあるわけです。自分自身や検索エンジンから生成しているURLなどもそれです。

対処法は、HTTP応答メッセージの中に含まれるURL相当部分の .delegate.org を .delegate9.org に書き換えることです。それだけです。特に応答がHTTPヘッダとHTMLのタグだけあれば簡単な事です。そしてまさにこういう時の移行を簡単にできるのをDeleGateのウリにしてたはずなのですが、やり方を忘れてしまいました。

それで、自分で書いたマニュアルを読んだり、記憶を辿ったりしながら、設定ファイルに数行加えて、なんとかそれらしく動くようになりました。まだ不完全ですが… ユーザとして欲しいのは「ドメインを引っ越した時にはこう設定をすれば良い」というそのものズバリのドキュメントなのでした。

たぶん、リバースプロキシとして一段かませれば一行書くだけで簡単なのですが、無駄に負荷をかけたくないので、オリジンHTTPサーバとして動かしたく、そういう場合には若干面倒なようです。

ドメイン名も変えたし、旧サーバからHTTPを全部リダイレクトするのが簡単なのですが、ちょっと危険なので、とりあえずリンクを貼るだけにしました。まあ、そうすると早速おいでになるのがロボットさんなわけですが… てか、誰にも存在を教えなくても、マシンをネットに繋いだらすぐにやって来ますしね。http://IPアドレス/ で来たりさえする…

素性の知れたロボット以外は「私はロボットではありません」的な工夫で門前払いするのが良いと思うのですが、それをアプリケーションレベルでやると、それ自体が結構重くなってしまいます。Azureのネットワークインタフェースでそういうことをやってくれると良いのですが。あれ?なんかそういう賢いリソースもあったような。お金取られるでしょうけど。

2020-0430 sato@izmoh


安値Azure一への挑戦

現行 delegate.org で現在使っているサーバのクラウド仮想マシンはパワーが有り余っていることがわかっていますので、経費節減のためダウングレードすることにしました。

昨日はまず、常識的な線としてRAM 1GBのものを作って実験しました。昨今の普通のパソコンでも8GBは積んでますから、かなり小さく感じますが、手元の仮想マシンでの利用経験から、1GBあればDeleGateサーバ用途のUbuntuが問題なく動くことはわかっていました。

実際、この仮想マシンにDeleGateサーバをインストールして負荷テストを行ったところ、さっくさくで問題ありませんでした。コンパイルも早くて快適なので、開発環境としても使えそうです。

この仮想マシン(B1s)の費用は約¥1,200/月で、Azureが提供している安マシンの下から2番目、現行の仮想マシン(A1、1.75GB RAM、約¥4100/月)の 1/3 以下になると見積もられます。約3,000円/月の節約。

さてそれでは、Azureで最も安い仮想マシン(B1ls)ではどうだろうということで、興味津々試してみました。これは 0.5GB RAMで、約¥600/月、という代物です↓

Azure仮想マシンお値段表

今どきのAzureでは管理コンソールからサクッとCPUサイズを変更できるので、昨日インストールした仮想マシンでやってみました。作業的には、上のようなお値段表の中から仮想マシンを選んでクリックするだけ。ただし待つこと数分…

結論としては「これは使い物にならない」でした。まずUbuntuのブート時の負荷にすら絶えず平均負荷が10以上の状態が数分間続き、その間ユーザのコマンドもまともに受け付けません。そしてDeleGateですが、www.delegate.org のフロントページを表示するのに数秒かかったり、途中でお休みしたりする有り様です。そんな時、ロードアベレージは5以上に上がっています。

プロセスイメージが実メモリに入りきってないんじゃないかと思います。OS系のプロセスを削るとか工面すれば収まる可能性はありますが、面倒だしデフォから変えたくはないし、維持・保守の観点からも危険です。しかも、ランダムアクセスが実メモリに入りきらないと、やたらとディスクI/O(これが非常に単価が高い)が発生して、逆に総合的にはコスト増となる危険もあります。

この危険は、月600円の節約に全く見合いません。単なるTCP中継サーバとして使用することも検討していますが、それすらきついかも知れません。まあ、使うとしてもDNSサーバくらいです。固定IPアドレスが月600円で手にはいるという考え方はあるかとは思います。

それにしてもAzureは、しばらく見ないうちにかなり面白いことになっていました。いろいろ遊べるし、もちろん仕事に使えるし、費用的にも他社の安かろうレンタルサーバとコンペティティブなレベルです。そして、何しろ、提供している機能が圧倒的です。AWSとか、しょぼくて話にならない。まあ、決め打ちのお仕着せサーバであれば別なのですが。

従量課金は単価が少し高めだし、従量爆発の怖さはあります。ですが、これまで8年間使いましたが、多い月でも平均から30%増程度のものでした。なにより、作っては壊すが簡単で、使うとき以外は眠らせて置くなら料金が発生しない。開発などの仕事に使うのであれば、自動スリープ機能をつけて、使うときに起こせば良いですね。

大きな問題だと思っていた管理コンソールの使いにくさも、まあ今回の作業をしているうちに慣れて贔屓目になってしまいましたが、かなり改善され、我慢できる程度になりました。

ですが、もっと超シンプル・バカチョン・軽量インタフェースを別途に提供すれば、一般ユーザも増えるんじゃないかなーとは思います(ただ、MSはまともな日本語感を持った人材を確保する必要がある)。いや、現状でも一般ユーザは多いのかも知れません。まあ、そういうケチなユーザが増えてもMS的にはうれしく無いかもですけど(笑)

2020-0430 sato@izumoh


MacでFTPサーバをFinder

MacOSXでは10数年前から、FTPサーバをマウントしてFinderで見られるようになっていましたが、なにかがイマイチだったような記憶があります。リードオンリーだったからかも知れません。今も(少なくともデフォルトでは)そのようですが。

で、久しぶりにやってみたら、実に気持ち良く、こんな感じ↓(接続先はDeleGateのFTPサーバです)

Mac Finder で FTP サーバを開いた画面

比較のために、Chromeで見た場合↓

Chrome で FTP サーバを開いたウィンドウ

生きているのが嫌になるほどダサいですね。まあ、親ディレクトリが見えるのが、まあ便利っちゃあ便利。

もちろんMac Finder ですから、こんな風に階層も表示できる↓

ZIP も tar.gz も、普通にフォルダとして開けます↓

ZIP と tar.gz を開くとこうなる

Windowsではtarが(デフォルトでは)開けなくて不便な思いをしたものです。ちまたでは、FTP を Windows の仮想ドライブに見せるソフトが売られてたりしますが、Macには不要です。初めからその機能があるのですから。

以下は、Mac使いじゃ無い人のために。FTPサーバをFinderで開くには、ただ Finder から接続先サーバとして、ftp://host と指定するだけです。

FTPサーバへの繋ぎ方

私は現在、Windows から Mac への復帰プログラム実践中ですが、これもまた、帰ってきて良かったと思うことのひとつです。今更FTP(FTPS?)と思ってましたが、なかなかのものです。


Ubuntu18.04でDeleGate

delegate.org のサーバを引っ越すことにしました。現状の仮想マシンの課金(MS Azure)が納得できないので、新しく作り直してみよう、というのがきっかけでした。

新しい仮想マシンのOSは Linux 18.04.4 LTE にしました。まあ、今時の一択ですね。それで DeleGateを動かそうとしたところ、コンパイルを通らない、また、一部動きがおかしい、という症状にぶつかりました。

ソースプログラムを直して、コンパイルを通し、動作の異常の原因を掴んで修正しました。どうやらうまく動いているようなので、delegate.org をこの新しい仮想マシンに移行しようと思います。

2020-0429 sato@izmoh


やっぱ OneNote 最高っス!

デビューしてしばらくのOffice 365はとっても面白くて野心的に感じましたが、中でも野心的すぎてファンキーな感じさえしたのがOneNote。特に、複数人が同時に書き込めるホワイトボードとしての使い途が魅力的で、職場のみんなにプッシュしまくりましたっけ。流行らなかったけど…

インタフェース的にはOfficeアプリ的なものの統合というか、パワポとワードとエクセルをそれぞれ超シンプルにして足して3で割った上に、日付や作成者の属性がついた付箋をぺたぺた貼り付けられる、しかも階層的にノートを整理してくれる(これがパワポなどには無い魅力)、といった感じ。

当時感じた問題は、ウェブアプリでO365のためと思いますが、非常に(起動が)重かったこと。まちがってO365の左サイドバーでこいつをクリックしてしまうと、ひどい目にあいましたっけ。あとは、印刷機能がダメダメだったような。

今日Macで使えるアプリをごそごそしていたら、拡張機能としてOneNoteが入ってたので、懐かしくて使ってみました。あいかわらず見た目はしょぼい(笑)。でもサクサク起動。

それで、まずはノートを貼ってみたのですが、画像もドラッグ&ドロップで貼れるので(あれ?前からそうだったっけか?)、スクリーンショットを貼ってみました↓

ばっちりですね。その上、Office的なカンタンな図形は挿入できるので、まる書いて矢印。なんてカンタンなんだろう!

Windowsではこういった作業を、手近にあったSnipとパワポでやっていましたが、面倒臭いしパワポの起動は遅いしで、ウツでした。MacのGrabとOneNoteで、そういう作業の生産性が5倍くらいアップです(^ー^) ノートの作成や付箋の追加の日付が自動的に入るのもとっても良い。

ただし印刷機能は、あいからずアレのようです。まあ、原理的に合わないというか適して無いところはあるんでしょうけど。きっととんでもなく広大なノートだって作れるでしょうし。

2020-0427 sato@izmoh