NETWORK ENGINEER BLOG
Tips and Reviews for Engineers
2021-05-16T17:01:35+09:00
FriendsNow
Hatena::Blog
hatenablog://blog/12704346814673877430
WordPress をはじめました
hatenablog://entry/26006613764418932
2021-05-16T17:01:35+09:00
2021-05-16T21:42:22+09:00 WordPress をはじめました。 はてなブログも引き続き書いていきたいと思いますが、更新頻度は落ちてしまうかもです。 落ち着いたら、はてなブログと WordPress の比較なども書きたいと思います。 過去の記事の一部は WordPress に移行予定です。mytech-blog.comまだ始めたばかりですが個人的な所感としては、以下の点ではてなブログのメリットは大きいなと感じています。 はてなブロガーの皆さんと交流できる 個人的にはこれが一番大きいです。スターを1つつけてもらうたびにモチベーションが高まりますし、記事を書くのが楽しくなります。 記事に集中できる 便利な機能が実装されていて…
<p>WordPress をはじめました。<br />
はてなブログも引き続き書いていきたいと思いますが、更新頻度は落ちてしまうかもです。<br />
落ち着いたら、はてなブログと WordPress の比較なども書きたいと思います。<br />
<i>過去の記事の一部は WordPress に移行予定です。</i></p><p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmytech-blog.com%2F" title="MY TECH BLOG" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://mytech-blog.com/">mytech-blog.com</a></cite></p><p>まだ始めたばかりですが個人的な所感としては、以下の点ではてなブログのメリットは大きいなと感じています。</p>
<div class="section">
<h5>はてなブロガーの皆さんと交流できる</h5>
<p>個人的にはこれが一番大きいです。スターを1つつけてもらうたびに<i>モチベーションが高まりますし、記事を書くのが楽しくなります。</i><br />
</p>
</div>
<div class="section">
<h5>記事に集中できる</h5>
<p>便利な機能が実装されていてメンテナンスもはてなさんが対応してくれるため、<i>記事を書くことに集中できます。</i><br />
WordPress はプラグインをいれたり、それらをアップデート・管理する必要があるため結構大変です。</p>
</div>
<div class="section">
<h5>SEO に強い</h5>
<p>WordPress の方が強いという記事もちらほら見かけますが、サーチコンソールやアナリティクスで解析してみても<i>はてなブログの SEO はかなり高いです。</i><br />
まだ、WordPress をはじめて間もないのであくまで所感ですが、<i>同じ品質の記事ならはてなブログの方が強いような気もします。</i></p><p>以上、今後は WordPress の良い点についても共有できればなと思います。<br />
最後までお読み頂きありがとうございました。</p>
</div>
FriendsNow
Windows Defender をおすすめする理由
hatenablog://entry/26006613723465273
2021-05-03T19:00:00+09:00
2021-05-03T22:32:09+09:00 Windows 10 におけるウィルス対策ソフトは色々とありますが、個人的には費用対効果の観点から Windows Defender がおすすめです。理由は無料で十分な防御力があるからです。 以前はそれほどでもなかったのですが、最近はかなり改善されているように見えます。 AV-Comparatives*1 の最新の Real-World Protection Test の結果を見ても、市販の製品と比較して大差はないように思います。 Real-World Protection Test とは ウイルス対策ソフトがどの程度ウィルスから保護できるか近似環境で確認するテストです。 以下は 2021年2…
<p>Windows 10 におけるウィルス対策ソフトは色々とありますが、個人的には費用対効果の観点から Windows Defender がおすすめです。理由は<i>無料で十分な防御力がある</i>からです。<br />
以前はそれほどでもなかったのですが、最近はかなり改善されているように見えます。<br />
<a href="https://www.av-comparatives.org/">AV-Comparatives</a><a href="#f-80a96ef4" name="fn-80a96ef4" title="ウイルス対策ソフトウェアをテストおよび評価するオーストリアの独立組織">*1</a> の最新の <a href="https://www.av-comparatives.org/tests/real-world-protection-test-feb-mar-2021-factsheet/">Real-World Protection Test</a> の結果を見ても、市販の製品と比較して大差はないように思います。</p>
<div class="section">
<h5>Real-World Protection Test とは</h5>
<p>ウイルス対策ソフトがどの程度ウィルスから保護できるか近似環境で確認するテストです。<br />
以下は <i>2021年2月~3月のテスト結果</i>で AV-Comparatives 様の許可のもとに掲載しています。</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210502/20210502141957.png" alt="f:id:FriendsNow:20210502141957p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
出典:<a href="https://www.av-comparatives.org/">AV-Comparatives</a> </p>
</blockquote>
<ul>
<li>Compromised:攻撃を防げなかった割合</li>
<li>User dependent:攻撃を防げなかったが設定で防げる割合</li>
<li>Blocked:攻撃を防いだ割合</li>
<li>False Positive:誤検知(正常なファイルをウィルスと判断した)割合</li>
</ul><p>「Micorosoft」が Windows Defender になります。攻撃を防いだ割合は 95% 以上あり、誤検知も少ないため十分に利用できる性能と考えます。<br />
なお、<i>コストを考慮せず防御力を重視する場合</i>は、個人的には Trend Micro 社の「<a href="//af.moshimo.com/af/c/click?a_id=2404697&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB011QXEVWM" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">ウイルスバスター</a><img src="//i.moshimo.com/af/i/impression?a_id=2404697&p_id=170&pc_id=185&pl_id=4062" width="1" height="1" style="border:none;">」がおすすめです。</p>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"ウイルスバスター クラウド(最新)| 1年 3台版 | オンラインコード版 | Win\/Mac\/iOS\/Android対応【PC\/スマホ対応】","b":"トレンドマイクロ","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51sqIFqZWCL._SL500_.jpg","\/51PlWXbKOpL._SL500_.jpg","\/51Y3PP5pkHL._SL500_.jpg","\/511+zbt218L._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B011QXEVWM","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B011QXEVWM","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%82%A6%E3%82%A4%E3%83%AB%E3%82%B9%E3%83%90%E3%82%B9%E3%82%BF%E3%83%BC%20%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89(%E6%9C%80%E6%96%B0)%7C%201%E5%B9%B4%203%E5%8F%B0%E7%89%88%20%7C%20%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E7%89%88%20%7C%20Win%2FMac%2FiOS%2FAndroid%E5%AF%BE%E5%BF%9C%E3%80%90PC%2F%E3%82%B9%E3%83%9E%E3%83%9B%E5%AF%BE%E5%BF%9C%E3%80%91\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E3%82%A6%E3%82%A4%E3%83%AB%E3%82%B9%E3%83%90%E3%82%B9%E3%82%BF%E3%83%BC%20%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89(%E6%9C%80%E6%96%B0)%7C%201%E5%B9%B4%203%E5%8F%B0%E7%89%88%20%7C%20%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E7%89%88%20%7C%20Win%2FMac%2FiOS%2FAndroid%E5%AF%BE%E5%BF%9C%E3%80%90PC%2F%E3%82%B9%E3%83%9E%E3%83%9B%E5%AF%BE%E5%BF%9C%E3%80%91","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"RRkpz","s":"s"});</script><div id="msmaflink-RRkpz">リンク</div></p><p>セキュリティに100%はなく多層防御が基本となることから、ウィルス対策ソフト(無料・有料)に関わらず<i>定期的な Windows Update</i> 実施や、<i>不審なファイルを実行しない</i>ことが重要です。</p><p>以上</p>
</div><div class="footnote">
<p class="footnote"><a href="#fn-80a96ef4" name="f-80a96ef4" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">ウイルス対策ソフトウェアをテストおよび評価するオーストリアの独立組織</span></p>
</div>
FriendsNow
HP ENVY(AMD)でプチフリーズ
hatenablog://entry/26006613723354578
2021-05-02T19:00:00+09:00
2021-05-02T21:19:42+09:00 HP ENVY x360 15-ee(AMD)で、操作中にプチフリーズする事象がありました。マウスやキーボード操作中に一瞬(1秒~5秒程度)画面が固まって操作不可となります。 原因はわかりませんが、私の場合、以下を実施することで解決しました。 McAfee LiveSafe のアンインストール McAfee が悪さをしているという情報がちらほらあったので、試してみました。 McAfee の代わりになるアンチウィルスソフトですが、個人的には Windows Defender が推奨です。 McAfee LiveSafe のアンインストール方法はこちら Radeon ドライバーの更新 Window…
<p><a href="https://jp.ext.hp.com/notebooks/personal/envy_15_x360_ee0000/?jumpid=st_cn_p_sh_gg_bra_dsa_note-1">HP ENVY x360 15-ee(AMD)</a>で、操作中にプチフリーズする事象がありました。<i>マウスやキーボード操作中に一瞬(1秒~5秒程度)画面が固まって操作不可</i>となります。<br />
原因はわかりませんが、私の場合、以下を実施することで解決しました。</p>
<div class="section">
<h5>McAfee LiveSafe のアンインストール</h5>
<p>McAfee が悪さをしているという情報がちらほらあったので、試してみました。<br />
McAfee の代わりになるアンチウィルスソフトですが、個人的には Windows Defender が推奨です。<br />
McAfee LiveSafe のアンインストール方法は<a href="https://service.mcafee.com/webcenter/portal/oracle/webcenter/page/scopedMD/s55728c97_466d_4ddb_952d_05484ea932c6/Page29.jspx?wc.contextURL=%2Fspaces%2Fcp&locale=ja-JP&articleId=TS101634&_afrLoop=163994537780043&leftWidth=0%25&showFooter=false&showHeader=false&rightWidth=0%25¢erWidth=100%25#!%40%40%3FshowFooter%3Dfalse%26locale%3Dja-JP%26_afrLoop%3D163994537780043%26articleId%3DTS101634%26leftWidth%3D0%2525%26showHeader%3Dfalse%26wc.contextURL%3D%252Fspaces%252Fcp%26rightWidth%3D0%2525%26centerWidth%3D100%2525%26_adf.ctrl-state%3Dlu8pjl8lt_125">こちら</a><br />
</p>
</div>
<div class="section">
<h5>Radeon ドライバーの更新</h5>
<p>Windows 用の Radeon グラフィックスおよび Ryzen チップセットドライバーを<a href="https://www.amd.com/ja/support">こちら</a>からダウンロードしてすべて更新します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210502/20210502135823.png" alt="f:id:FriendsNow:20210502135823p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以上</p>
</div>
FriendsNow
CCNA の勉強方法
hatenablog://entry/26006613717267529
2021-04-18T12:00:00+09:00
2021-04-18T22:35:23+09:00 ネットワークエンジニアが最初に目指す資格として有名な CCNA を勉強する際、参考になりそうなサイトや書籍等を紹介します。 CCNA イージス CCNA イージスとは CCNA イージスとは、CCNA の Web 教科書のことです。CCNA イージスには CCNA(200-301)の試験範囲の全ての技術解説があり、CCNA イージスだけで CCNA に合格するためのネットワーク技術力が身につけることができます。また、NW エンジニアの仕事で必要な技術を体系的に解説しており資格試験だけでなく実際の仕事でも役立ちます。 出典:CCNA イージス おすすめのポイント 市販の CCNA 教科書と同レベ…
<p>ネットワークエンジニアが最初に目指す資格として有名な CCNA を勉強する際、参考になりそうなサイトや書籍等を紹介します。</p>
<div class="section">
<h3>CCNA イージス</h3>
<div class="section">
<h5>CCNA イージスとは</h5>
<blockquote>
<p>CCNA イージスとは、CCNA の Web 教科書のことです。CCNA イージスには CCNA(200-301)の試験範囲の全ての技術解説があり、CCNA イージスだけで CCNA に合格するためのネットワーク技術力が身につけることができます。また、NW エンジニアの仕事で必要な技術を体系的に解説しており資格試験だけでなく実際の仕事でも役立ちます。<br />
出典:<a href="https://www.infraexpert.com/info/ccnaz7.html">CCNA イージス</a></p>
</blockquote>
</div>
<div class="section">
<h5>おすすめのポイント</h5>
<p><i>市販の CCNA 教科書と同レベルの内容を無料</i>で提供してくれています。こちらと市販の問題集を併用すれば、合格率はかなり高くなると思われます。<br />
市販の問題集でおすすめは以下になりますが、「Ping-t」の無料問題集でもある程度カバーできると思います。</p>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"Cisco試験対策 Cisco CCNA問題集 [200-301 CCNA]対応","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51H47M0b4GL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B08F26LG18","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B08F26LG18","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Cisco%E8%A9%A6%E9%A8%93%E5%AF%BE%E7%AD%96%20Cisco%20CCNA%E5%95%8F%E9%A1%8C%E9%9B%86%20%EF%BC%BB200-301%20CCNA%EF%BC%BD%E5%AF%BE%E5%BF%9C\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=Cisco%E8%A9%A6%E9%A8%93%E5%AF%BE%E7%AD%96%20Cisco%20CCNA%E5%95%8F%E9%A1%8C%E9%9B%86%20%EF%BC%BB200-301%20CCNA%EF%BC%BD%E5%AF%BE%E5%BF%9C","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"bn5eE","s":"s"});</script><div id="msmaflink-bn5eE">リンク</div></p>
</div>
</div>
<div class="section">
<h3>Ping-t</h3>
<div class="section">
<h5>Ping-t とは</h5>
<blockquote>
<p>CCNA/CCNP、LinuC、LPIC、HTML5プロフェッショナル認定資格、OSS-DB、オラクルマスター、ITパスポート、 ITILファンデーション試験の合格を目指す人を応援する学習サイトです。(登録ユーザ数25万人超)<br />
出典:<a href="https://ping-t.com/">Ping-t</a></p>
</blockquote>
</div>
<div class="section">
<h5>おすすめのポイント</h5>
<p>ユーザー登録をすると<i>無料で問題集「CCNA(200-301)(400問)」をもらえます。</i>また、「助け合いフォーラム」で質問もできます。市販の問題集を使わない場合の選択肢にはいると思います。</p>
</div>
</div>
<div class="section">
<h3>その他</h3>
<p>ネットワークの基礎技術の習得および CCNA 取得には基本的には上記で十分<a href="#f-35825416" name="fn-35825416" title="あくまで個人の感想なのでご参考まででお願いします。">*1</a>だと思いますが、短期間で体系的に学びつつ、手厚いサポートが受けられる手段として IT スクールという選択肢もあります。<br />
有名な IT スクールとしては「<a href="//af.moshimo.com/af/c/click?a_id=2469170&p_id=3249&pc_id=7671&pl_id=42375&url=https%3A%2F%2Fuzuz-college.jp%2Fref%2Fc%2Fmoshimo_ccna-ccna%2Fccna%2F%3Futm_source%3Dmoshimo%26utm_medium%3Daffiliate%26utm_campaign%3Duzcol" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">ウズウズカレッジ CCNA コース</a><img src="//i.moshimo.com/af/i/impression?a_id=2469170&p_id=3249&pc_id=7671&pl_id=42375" width="1" height="1" style="border:none;">」があり、以下のような方におすすめです。</p>
<ul>
<li><i>短期間(1カ月)でネットワーク 基礎技術の習得および CCNA を取得したい。</i></li>
<li><i>個別にしっかりと丁寧に指導してほしい。</i></li>
<li><i>CCNA 取得後の就職(転職)のサポートをしてほしい。</i></li>
</ul><p>以下、注意点です。</p>
<ul>
<li><i>受講費用 165,000円(税込)・3ヶ月分の料金がかかります。</i>他の IT スクールと比較してリーズナブルではありますが、それなりの費用がかかるため、事前にしっかりと確認することをおすすめします。</li>
<li><i>無料体験はありません。</i>ただし、無料説明会があるので雰囲気や様子などは質問できると思います。</li>
</ul><p><a href="//af.moshimo.com/af/c/click?a_id=2469170&p_id=3249&pc_id=7671&pl_id=42363&guid=ON" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img src="//image.moshimo.com/af-img/2596/000000042363.jpg" width="300" height="250" style="border:none;"></a><img src="//i.moshimo.com/af/i/impression?a_id=2469170&p_id=3249&pc_id=7671&pl_id=42363" width="1" height="1" style="border:none;"></p><p>以上</p>
</div><div class="footnote">
<p class="footnote"><a href="#fn-35825416" name="f-35825416" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">あくまで個人の感想なのでご参考まででお願いします。</span></p>
</div>
FriendsNow
STP の概要
hatenablog://entry/26006613695434788
2021-03-03T19:00:00+09:00
2021-04-18T12:41:42+09:00 STP とは STP(Spanning Tree)は、 冗長経路によるループを検出し、フレームの送受信を停止させることにより、ループフリーのネットワークを形成する機能です。 IEEE 802.1d として標準化 Configuration BPDU と呼ばれるフレームを使用して、Topology 情報を共有する。 Root Bridge を起点とする Active Topology と呼ばれる Tree Topology を構成する。 詳細が知りたい場合は、「スパニングツリーの概要 | ネットワークエンジニアの小学校」がわかりやすく、おすすめです。 Active Topology の形成と維持…
<div class="section">
<h3>STP とは</h3>
<p>STP(Spanning Tree)は、 <i>冗長経路によるループを検出し、フレームの送受信を停止させることにより、ループフリーのネットワークを形成する機能</i>です。</p>
<ul>
<li>IEEE 802.1d として標準化</li>
<li>Configuration BPDU と呼ばれるフレームを使用して、Topology 情報を共有する。</li>
<li>Root Bridge を起点とする Active Topology と呼ばれる Tree Topology を構成する。</li>
</ul><p>詳細が知りたい場合は、<a href="http://kazunetproject.site/category/network/layer2/41_stp%ef%bc%88spanning-tree-protocol%ef%bc%89/">「スパニングツリーの概要 | ネットワークエンジニアの小学校」</a>がわかりやすく、おすすめです。</p>
<div class="section">
<h4>Active Topology の形成と維持</h4>
<ul>
<li>BPDU の優劣に応じて、Root Bridge / Forwarding / Blocking ポート等を決定する。</li>
<li>機器及び、リンク故障時の切替えには、約30~50秒要する。</li>
</ul>
<div class="section">
<h5>正常時</h5>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210223/20210223180611.png" alt="f:id:FriendsNow:20210223180611p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h5>故障時</h5>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210223/20210223180842.png" alt="f:id:FriendsNow:20210223180842p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
</div>
<div class="section">
<h4>BPDU について</h4>
<p>BPDU(Bridge Protocol Data Unit)は、Active Topology の作成、維持、管理を行うためのフレームで以下の特徴があります。</p>
<ul>
<li>スイッチ間でデフォルトでは、2秒間隔で送信、交換</li>
<li>BPDU には 「Configuration BPDU」 と「Topology Change Notification BPDU」の 2 種類が存在</li>
</ul>
<div class="section">
<h5>BPDU のフォーマット</h5>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210223/20210223181532.png" alt="f:id:FriendsNow:20210223181532p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
</div>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"徹底攻略Cisco CCENT\/CCNA Routing \u0026 Switching教科書ICND1編[100-105J][200-125J]V3.0対応 徹底攻略シリーズ","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51IK6EwjbgL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B01LAH0X7Q","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B01LAH0X7Q","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Cisco%20CCENT%2FCCNA%20Routing%20%26%20Switching%E6%95%99%E7%A7%91%E6%9B%B8ICND1%E7%B7%A8%EF%BC%BB100-105J%EF%BC%BD%EF%BC%BB200-125J%EF%BC%BDV3.0%E5%AF%BE%E5%BF%9C%20%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Cisco%20CCENT%2FCCNA%20Routing%20%26%20Switching%E6%95%99%E7%A7%91%E6%9B%B8ICND1%E7%B7%A8%EF%BC%BB100-105J%EF%BC%BD%EF%BC%BB200-125J%EF%BC%BDV3.0%E5%AF%BE%E5%BF%9C%20%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"NL90a","s":"s"});</script><div id="msmaflink-NL90a">リンク</div></p>
</div>
<div class="section">
<h3>その他参考</h3>
<p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ffriendsnow.hatenablog.com%2Fentry%2F2021%2F04%2F18%2F120000" title="CCNA の勉強方法 - NETWORK ENGINEER BLOG" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p><p>以上</p>
</div>
FriendsNow
VLAN の概要
hatenablog://entry/26006613695353641
2021-03-02T19:00:00+09:00
2021-04-18T12:52:16+09:00 VLAN とは VLAN(Virtual LAN)とは、スイッチ内でブロードキャストドメインを分割する機能で、主な利点は以下の 2つです。 異なる VLAN 間の通信はできなくなり、セキュリティの向上が図れる。 ブロードキャストドメインを狭めることで、帯域を有効活用できる。 図にすると、次のような感じです。 VLAN10 や VLAN20 の「数字」は、VLAN ID と呼ばれる識別番号です。 VLAN10 に設定したポートにはいってきたフレームは、同じく VLAN10 を設定したポートにしか転送されません。 Cisco で GE0/1 を VLAN10 に指定する場合は、次のように設定します…
<div class="section">
<h3>VLAN とは</h3>
<p>VLAN(Virtual LAN)とは、スイッチ内で<i>ブロードキャストドメインを分割する機能</i>で、主な利点は以下の 2つです。</p>
<ul>
<li>異なる VLAN 間の通信はできなくなり、セキュリティの向上が図れる。</li>
<li>ブロードキャストドメインを狭めることで、帯域を有効活用できる。</li>
</ul><p>図にすると、次のような感じです。<br />
VLAN10 や VLAN20 の「数字」は、<i>VLAN ID と呼ばれる識別番号</i>です。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210223/20210223151733.png" alt="f:id:FriendsNow:20210223151733p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>VLAN10 に設定したポートにはいってきたフレームは、同じく VLAN10 を設定したポートにしか転送されません。<br />
Cisco で GE0/1 を VLAN10 に指定する場合は、次のように設定します。</p>
<pre class="code" data-lang="" data-unlink>Switch#configure terminal
Switch(config)#interface gigabitethernet0/1
Switch# (config-if)#switchport mode access
Switch# (config-if)#switchport access vlan 10</pre>
</div>
<div class="section">
<h3>VLAN トランクとは</h3>
<ul>
<li><u>複数の VLAN トラフィックを1つの物理リンク上で伝送する</u>技術</li>
<li>Cisco は、IEEE 標準の「802.1q」と Cisco 独自仕様の 「ISL(Inter-Switch Link)」をサポート</li>
<li>802.1q 及び ISL は、それぞれ、<i>タグと呼ばれる識別子をフレームに挿入</i>し、<u>複数の VLAN データを 1つのリンクで送受信できるようにします。</li>
</ul><p></u><br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210223/20210223164835.png" alt="f:id:FriendsNow:20210223164835p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>Cisco で GE0/24 をトランクポート(VLAN10,20)に指定する場合は、次のように設定します。</p>
<pre class="code" data-lang="" data-unlink>Switch#configure terminal
Switch(config)#interface gigabitethernet0/24
Switch# (config-if)#switchport mode trunk
Switch# (config-if)#switchport trunk allowed vlan 10,20</pre>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"徹底攻略Cisco CCENT\/CCNA Routing \u0026 Switching教科書ICND1編[100-105J][200-125J]V3.0対応 徹底攻略シリーズ","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51IK6EwjbgL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B01LAH0X7Q","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B01LAH0X7Q","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Cisco%20CCENT%2FCCNA%20Routing%20%26%20Switching%E6%95%99%E7%A7%91%E6%9B%B8ICND1%E7%B7%A8%EF%BC%BB100-105J%EF%BC%BD%EF%BC%BB200-125J%EF%BC%BDV3.0%E5%AF%BE%E5%BF%9C%20%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Cisco%20CCENT%2FCCNA%20Routing%20%26%20Switching%E6%95%99%E7%A7%91%E6%9B%B8ICND1%E7%B7%A8%EF%BC%BB100-105J%EF%BC%BD%EF%BC%BB200-125J%EF%BC%BDV3.0%E5%AF%BE%E5%BF%9C%20%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"NL90a","s":"s"});</script><div id="msmaflink-NL90a">リンク</div></p>
</div>
<div class="section">
<h3>その他参考</h3>
<p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ffriendsnow.hatenablog.com%2Fentry%2F2021%2F04%2F18%2F120000" title="CCNA の勉強方法 - NETWORK ENGINEER BLOG" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p><p>以上</p>
</div>
FriendsNow
はてなブログでよく使うシンタックスハイライト
hatenablog://entry/26006613695218688
2021-03-01T19:00:00+09:00
2021-04-28T17:30:00+09:00 ブログを書く時に使っているシンタックスハイライトの覚書です。 シンタックスハイライトとは 可読性を上げるため、ソースコードを色付けして表示する機能です。 はてな記法とシンタックスハイライト はてなブログでシンタックスハイライトを使用するためには、スーパー pre 記法で先頭の >|| の 2本のパイプ(||)の間に指定します。 シンタックスハイライトの使用例 で書かれたソースコードの場合、以下のように html と書きます。 >|html| <html> <head> <title>NETWORK ENGINEER BLOG</title> </head>次のようにハイライトされます。 <ht…
<p>ブログを書く時に使っているシンタックスハイライトの覚書です。</p>
<div class="section">
<h3>シンタックスハイライトとは</h3>
<p>可読性を上げるため、<i>ソースコードを色付けして表示</i>する機能です。</p>
</div>
<div class="section">
<h3>はてな記法とシンタックスハイライト</h3>
<p>はてなブログでシンタックスハイライトを使用するためには、<i>スーパー pre 記法</i>で先頭の <code>>||</code> の 2本のパイプ(<code>||</code>)の間に指定します。</p>
<div class="section">
<h5>シンタックスハイライトの使用例</h5>
<p>で書かれたソースコードの場合、以下のように <code>html</code> と書きます。</p>
<pre class="code" data-lang="" data-unlink>>|html|
<html>
<head>
<title>NETWORK ENGINEER BLOG</title>
</head></pre><p>次のようにハイライトされます。</p>
<pre class="code lang-html" data-lang="html" data-unlink><span class="synIdentifier"><</span><span class="synStatement">html</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">head</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">title</span><span class="synIdentifier">></span>NETWORK ENGINEER BLOG<span class="synIdentifier"></</span><span class="synStatement">title</span><span class="synIdentifier">></span>
<span class="synIdentifier"></</span><span class="synStatement">head</span><span class="synIdentifier">></span>
</pre>
</div>
</div>
<div class="section">
<h3>よく使うハイライト</h3>
<ul>
<li><code>config</code> :Cisco などの Config 関連</li>
<li><code>sh</code> :Linux などの Shell 関連</li>
<li><code>ps1</code> :PowerShell 関連</li>
<li><code>python</code> :Python 関連</li>
<li><code>yaml</code> :YAML 関連</li>
<li><code>html</code> :HTML 関連</li>
<li><code>sql</code> :SQL 関連</li>
</ul>
</div>
<div class="section">
<h3>おまけ</h3>
<p>余談ですが、はてなブログでソースコードの一部(<code>config</code>など) を表示する場合は、以下のようにHTML の code タグを使用しています。</p>
<pre class="code lang-html" data-lang="html" data-unlink>-<span class="synIdentifier"><</span><span class="synStatement">code</span><span class="synIdentifier">></span>config<span class="synIdentifier"></</span><span class="synStatement">code</span><span class="synIdentifier">></span>
</pre><p>すごくめんどくさいので、簡単にかける方法があれば教えてください。。</p>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"はてなブログ Perfect GuideBook [改訂第2版]","b":"ソーテック社","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51DZs63BTNL._SL500_.jpg","\/51vgfkvJdRL._SL500_.jpg","\/516lCElK3WL._SL500_.jpg","\/51+aU7UMSTL._SL500_.jpg","\/51tdfe9FR2L._SL500_.jpg","\/51vVFpppQtL._SL500_.jpg","\/519s19uCDLL._SL500_.jpg","\/51q43rC-LGL._SL500_.jpg","\/51V2LqM4QZL._SL500_.jpg","\/51QvzSlSDYL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4800712696","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4800712696","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%20Perfect%20GuideBook%20%5B%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88%5D\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%20Perfect%20GuideBook%20%5B%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88%5D","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"I5uFQ","s":"s"});</script><div id="msmaflink-I5uFQ">リンク</div></p><p>以上</p>
</div>
FriendsNow
HTML の基本について
hatenablog://entry/26006613693865824
2021-02-24T09:00:00+09:00
2021-04-18T14:27:25+09:00 HTML とは HyperText Markup Language(ハイパーテキスト マークアップ ランゲージ)は、ハイパーテキストを記述するためのマークアップ言語の 1 つ。略して HTML(エイチティーエムエル)と呼ばれることが多い。…(中略)…フォントや文字色の指定などの見た目の指定、などといった機能がある。 出典:フリー百科事典『ウィキペディア(Wikipedia)』 ちょっと何言ってるか分からない。「ハイパーテキスト」って何だろう。 ハイパーテキストとは ハイパーテキスト (hypertext) とは、複数の文書(テキスト)を相互に関連付け、結び付ける仕組みである。「テキストを超える…
<div class="section">
<h3>HTML とは</h3>
<blockquote>
<p>HyperText Markup Language(ハイパーテキスト マークアップ ランゲージ)は、ハイパーテキストを記述するためのマークアップ言語の 1 つ。略して HTML(エイチティーエムエル)と呼ばれることが多い。…(中略)…フォントや文字色の指定などの見た目の指定、などといった機能がある。<br />
出典:<a href="https://ja.wikipedia.org/wiki/HyperText_Markup_Language">フリー百科事典『ウィキペディア(Wikipedia)』</a></p>
</blockquote>
<p><u>ちょっと何言ってるか分からない。</u>「<u>ハイパーテキスト</u>」って何だろう。</p>
</div>
<div class="section">
<h3>ハイパーテキストとは</h3>
<blockquote>
<p>ハイパーテキスト (hypertext) とは、複数の文書(テキスト)を相互に関連付け、結び付ける仕組みである。「テキストを超える」という意味から"hyper-"(~を超えた) "text"(文書)と名付けられた。テキスト間を結びつける参照のことをハイパーリンクと言う。…(中略)…最も有名なハイパーテキストの実装は World Wide Web である。<br />
出典:<a href="https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88">フリー百科事典『ウィキペディア(Wikipedia)』</a></p>
</blockquote>
<p>一言でいうと <i>HTML は Web ページを書くための言語</i>ということみたいです。</p>
</div>
<div class="section">
<h3>HTML の書き方</h3>
<p>文章を「タグ」と呼ばれるもので囲って(マークアップ=目印をつけて)書いていきます。<br />
<a href="https://nandemo-nobiru.com/web-5214">なんでものびる WEB</a> さんの説明がわかりやすかったので、引用させて頂きます。</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210221/20210221060219.png" alt="f:id:FriendsNow:20210221060219p:plain:w600" title="" class="hatena-fotolife" style="width:600px" itemprop="image"></span><br />
出典:<a href="https://nandemo-nobiru.com/web-5214">なんでものびる WEB</a></p>
</blockquote>
<p>上記のように、開始タグ <code><></code>と 終了タグ <code></></code> で囲って書いていきます。<br />
囲まれた文章は、「<タグの名前>要素」と呼ばれます。</p>
<div class="section">
<h4>主な HTML タグについて</h4>
<p><code><html></code><code></html></code>:HTML 文書であることを宣言<br />
<code><head></code><code></head></code>:文書のヘッダを指定<br />
<code><title></code><code></title></code>:文書のタイトルを指定<br />
<code><body></code><code></body></code>:文書の本文を指定<br />
<code><p></code><code></p></code>:段落を指定<br />
<code><h1~6></code><code></h1~6></code>:文書の見出しを指定(h1 が最も大きく、h6 が最も小さい)</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210221/20210221062855.png" alt="f:id:FriendsNow:20210221062855p:plain:w400" title="" class="hatena-fotolife" style="width:400px" itemprop="image"></span><br />
出典:<a href="https://nandemo-nobiru.com/web-5214">なんでものびる WEB</a></p>
</blockquote>
<p>他にも様々なタグがあります。以下は HTML5 のタグの一例です。詳細は<a href="http://www.shurey.com/html/maintags5.html">こちら</a><br />
<code><img></code><code></img></code>:画像からファイルを読み込む<br />
<code><strong></code><code></strong></code>:文字を太字にする。<br />
<code><a></code><code></a></code>:ハイパーリンクを指定※<br />
※アンカータグとよばれ、以下のように記述します。</p>
<pre class="code lang-html" data-lang="html" data-unlink><span class="synIdentifier"><</span><span class="synStatement">a</span><span class="synIdentifier"> </span><span class="synType">href</span><span class="synIdentifier">=</span><span class="synConstant">"sample.html"</span><span class="synIdentifier"> </span><span class="synType">title</span><span class="synIdentifier">=</span><span class="synConstant">"これはリンクです"</span><span class="synIdentifier"> </span><span class="synType">target</span><span class="synIdentifier">=</span><span class="synConstant">"_blank"</span><span class="synIdentifier">></span>
</pre>
</div>
<div class="section">
<h4>HTML の例</h4>
<p>上記の HTML タグを使った例です。</p>
<pre class="code lang-html" data-lang="html" data-unlink><span class="synIdentifier"><</span><span class="synStatement">html</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">head</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">title</span><span class="synIdentifier">></span>NETWORK ENGINEER BLOG<span class="synIdentifier"></</span><span class="synStatement">title</span><span class="synIdentifier">></span>
<span class="synIdentifier"></</span><span class="synStatement">head</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">body</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">h1</span><span class="synIdentifier">></span>HTML の書き方<span class="synIdentifier"></</span><span class="synStatement">h1</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">h2</span><span class="synIdentifier">></span>主な HTML タグについて<span class="synIdentifier"></</span><span class="synStatement">h2</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">p</span><span class="synIdentifier">></span>HTML タグには、たくさん種類があります。<span class="synIdentifier"></</span><span class="synStatement">p</span><span class="synIdentifier">></span>
<span class="synIdentifier"><</span><span class="synStatement">p</span><span class="synIdentifier">></span>アンカータグを使えば、<span class="synIdentifier"><</span><span class="synStatement">a</span><span class="synIdentifier"> </span><span class="synType">href</span><span class="synIdentifier">=</span><span class="synConstant">https://friendsnow.hatenablog.com/</span><span class="synIdentifier"> </span><span class="synType">target</span><span class="synIdentifier">=</span><span class="synConstant">”_blank”</span><span class="synIdentifier">></span><span class="synUnderlined">リンク</span><span class="synIdentifier"></</span><span class="synStatement">a</span><span class="synIdentifier">></span>を挿入することもできます。
<span class="synIdentifier"></</span><span class="synStatement">body</span><span class="synIdentifier">></span>
<span class="synIdentifier"></</span><span class="synStatement">html</span><span class="synIdentifier">></span>
</pre><p>上記のソースコードを HTML でみると以下(右側)のように表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210221/20210221073937.png" alt="f:id:FriendsNow:20210221073937p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以上</p>
</div>
</div>
FriendsNow
定期的なパスワード変更が不要になった理由
hatenablog://entry/26006613694394425
2021-02-22T09:00:00+09:00
2021-04-18T13:59:18+09:00 「いまだに、定期的にパスワード変更を求めるサービスが結構あるね。」という話を、CSIRT 業務経験のある妻に話したところ、「(パスワード)盗難対策として、必要だからじゃない?」という回答だったので、結構前に不要になった話をしました。 とても驚いていたので、ドヤ顔で講釈をはじめたのですが、うっとおしがられて聞いてもらえなかったので、こちらに書きます。 総務省の方針転換 過去、パスワードを盗難対策として、「定期的なパスワード変更は必要」とされていたのですが、2018年3月に総務省が「不要」と方針転換を発表しました。 簡単にいうと、「パスワードを定期的に変更すると、単純なものを設定したり、使いまわし…
<p>「いまだに、<i>定期的にパスワード変更を求めるサービス</i>が結構あるね。」という話を、CSIRT 業務経験のある妻に話したところ、「(パスワード)盗難対策として、必要だからじゃない?」という回答だったので、結構前に不要になった話をしました。<br />
とても驚いていたので、<i>ドヤ顔で講釈</i>をはじめたのですが、<u>うっとおしがられて聞いてもらえなかった</u>ので、こちらに書きます。</p>
<div class="section">
<h3>総務省の方針転換</h3>
<p>過去、パスワードを盗難対策として、「定期的なパスワード変更は必要」とされていたのですが、<u>2018年3月に総務省が「不要」と方針転換を発表</u>しました。<br />
簡単にいうと、「パスワードを定期的に変更すると、<i>単純なものを設定したり、使いまわしたりしがちであるから</i>」というのが理由です。</p>
<blockquote>
<p>なお、利用するサービスによっては、パスワードを定期的に変更することを求められることもありますが、実際にパスワードを破られアカウントが乗っ取られたり、サービス側から流出した事実がなければ、パスワードを変更する必要はありません。むしろ定期的な変更をすることで、パスワードの作り方がパターン化し簡単なものになることや、使い回しをするようになることの方が問題となります。定期的に変更するよりも、機器やサービスの間で使い回しのない、固有のパスワードを設定することが求められます。</p><p>これまでは、パスワードの定期的な変更が推奨されていましたが、2017年に、米国国立標準技術研究所(NIST)からガイドラインとして、サービスを提供する側がパスワードの定期的な変更を要求すべきではない旨が示されたところです<a href="#f-a68b9311" name="fn-a68b9311" title="NIST SP800-63B(電子的認証に関するガイドライン)">*1</a>。また、日本においても、内閣サイバーセキュリティセンター(NISC)から、パスワードを定期変更する必要はなく、流出時に速やかに変更する旨が示されています<a href="#f-b4ddabf5" name="fn-b4ddabf5" title="https://www.nisc.go.jp/security-site/handbook/index.html">*2</a>。<br />
出典:<a href="https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/business/staff/01.html">総務省</a></p>
</blockquote>
<p>逆に言えば、複雑なパスワードを使いまわさず設定するなら、「盗まれても利用される期間が短くなる」といった観点で考えても、有効な対策かもしれません。</p>
</div>
<div class="section">
<h3>パスワードは複雑なものを推奨</h3>
<p>定期的に変更するよりも、推測されにい長くて複雑なパスワードの設定が推奨されています。<br />
最近は、コンピューターの処理性能が飛躍的に向上したため、攻撃者は短時間で多くのパスワードを試行できます。<a href="#f-695a0136" name="fn-695a0136" title="いわゆる総当たり攻撃やパスワードリスト攻撃">*3</a><br />
また、どれだけ長くて複雑にしても、今後さらにコンピューターの性能が向上した場合に解析される恐れがあるので、<i>試行回数の制限</i>や、<i>二要素認証</i>はしっかりと実装しておく必要があります。</p>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"もしも社長がセキュリティ対策を聞いてきたら(日経BP Next ICT選書)","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51ZNLsVfvoL.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B010N93AU4","t":"amazon","r_v":""},"b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B010N93AU4","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%82%82%E3%81%97%E3%82%82%E7%A4%BE%E9%95%B7%E3%81%8C%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E5%AF%BE%E7%AD%96%E3%82%92%E8%81%9E%E3%81%84%E3%81%A6%E3%81%8D%E3%81%9F%E3%82%89%EF%BC%88%E6%97%A5%E7%B5%8CBP%20Next%20ICT%E9%81%B8%E6%9B%B8%EF%BC%89\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E3%82%82%E3%81%97%E3%82%82%E7%A4%BE%E9%95%B7%E3%81%8C%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E5%AF%BE%E7%AD%96%E3%82%92%E8%81%9E%E3%81%84%E3%81%A6%E3%81%8D%E3%81%9F%E3%82%89%EF%BC%88%E6%97%A5%E7%B5%8CBP%20Next%20ICT%E9%81%B8%E6%9B%B8%EF%BC%89","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"p5ivu","s":"s"});</script><div id="msmaflink-p5ivu">リンク</div></p><p>以上</p>
</div><div class="footnote">
<p class="footnote"><a href="#fn-a68b9311" name="f-a68b9311" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">NIST SP800-63B(電子的認証に関するガイドライン)</span></p>
<p class="footnote"><a href="#fn-b4ddabf5" name="f-b4ddabf5" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.nisc.go.jp/security-site/handbook/index.html">https://www.nisc.go.jp/security-site/handbook/index.html</a></span></p>
<p class="footnote"><a href="#fn-695a0136" name="f-695a0136" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text">いわゆる総当たり攻撃やパスワードリスト攻撃</span></p>
</div>
FriendsNow
息子の難病と仕事の変化
hatenablog://entry/26006613690125043
2021-02-12T09:00:00+09:00
2021-04-18T14:00:02+09:00 お題「#この1年の変化」振り返りを兼ねて、書いてみます。 息子がクローン病と診断 息子が 3 歳の時、「潰瘍性大腸炎」と診断され、漢方治療で 4 年ほど症状が治まっていましたが、徐々に容体が悪化し、昨年7月に再検査をした結果、「クローン病」と診断されました。 クローン病と潰瘍性大腸炎は、慢性の炎症性腸疾患の一つであり、腹痛や下痢、発熱といった症状を伴います。 大きな違いは、潰瘍性大腸炎は大腸だけに炎症が起こりますが、 クローン病は消化管のどの位置にも炎症を起こす可能性があります。 最初の治療は、エレンタールと呼ばれる総合栄養剤以外は絶食(4週間)という過酷なものでした。 入院中、「食べたい食べ…
<p><a class="keyword" href="https://blog.hatena.ne.jp/-/campaign/the-past-year">お題「#この1年の変化」</a></p><p>振り返りを兼ねて、書いてみます。</p>
<div class="section">
<h3>息子がクローン病と診断</h3>
<p>息子が 3 歳の時、「<i>潰瘍性大腸炎</i>」と診断され、漢方治療で 4 年ほど症状が治まっていましたが、徐々に容体が悪化し、昨年7月に再検査をした結果、「<i>クローン病</i>」と診断されました。<br />
クローン病と潰瘍性大腸炎は、慢性の炎症性腸疾患の一つであり、腹痛や下痢、発熱といった症状を伴います。<br />
大きな違いは、<i>潰瘍性大腸炎は大腸だけに炎症</i>が起こりますが、 <i>クローン病は消化管のどの位置にも炎症</i>を起こす可能性があります。<br />
最初の治療は、<u>エレンタールと呼ばれる総合栄養剤以外は絶食(4週間)</u>という過酷なものでした。<br />
入院中、「食べたい食べたい」と泣きじゃくる息子の姿は、今でも脳裏に鮮明に焼き付いています。<br />
食事再開後も、炎症が再発するなど、しばらく辛い状況が続きましたが、今はレミケードというお薬を定期的に点滴することで、寛解を維持することができています。<br />
先生やスタッフの皆様には、なんとお礼を申し上げてよいのか・・感謝の言葉もありません。<br />
また、食事にはものすごく気をつけなくてはならないため、毎日試行錯誤しながら料理を作ってくれている妻に感謝しています。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210211/20210211173652.jpg" alt="f:id:FriendsNow:20210211173652j:plain" title="" class="hatena-fotolife" itemprop="image"></span></p>
</div>
<div class="section">
<h3>テレワーク中心の生活</h3>
<p>COVID-19 の影響で、テレワークが中心となりました。<br />
コミュニケーションは、ビデオ会議や、チャットツールがメインとなり、<i>意思疎通が図りづらい日々</i>が続いています。<br />
姿が見えないことへの不安はもちろん、表情や言葉で得られる情報は多かったのだと痛感しています。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210211/20210211174851.jpg" alt="f:id:FriendsNow:20210211174851j:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
一方で、通勤時間が減った分、時間を確保できて、<i>ブログを書いたり、子供と遊ぶ時間が増えた</i>という側面もありました。<br />
息子の影響で、<i>ポケモンカードゲーム</i>をはじめたのですが、今では自分が夢中になってしまい、<i>大人の財力で箱買い</i>して、<i>大人げなく全力で</i>戦っています。(でもなぜか負け越しています。奥が深いゲームです。。)</p>
</div>
<div class="section">
<h3>気持ちの変化</h3>
<p>息子の闘病生活において、<u>笑顔を支えてくれたのが、ポケモンカードやニンテンドースイッチなどのエンタメ</u>でした。<br />
以前から興味はありましたが、息子の影響でより強くなり、これまでインフラ一筋の仕事をしてきましたが、今のエンタメ系コンテンツ開発の仕事に踏み出すきっかけとなりました。<br />
自分もできるだけ多くの人へ笑顔を届けられるような、そんなコンテンツを開発できればと思っています。<br />
また、これまで培ったインフラの知識を、少しづつにはなりますが、はてなブログで共有し、恩返しができればと思います。</p><p>以上です。ここまで読んで頂きありがとうございました。</p>
</div>
FriendsNow
openSUSE Tumbleweed の XRDP で画面が真っ黒になる
hatenablog://entry/26006613689522608
2021-02-11T09:00:00+09:00
2021-04-18T21:19:40+09:00 Windows 10 から、openSUSE Tumbleweed に XRDP で接続した際、以下のように、画面が真っ黒になる問題に遭遇しました。 原因は「同じユーザーで、ローカル接続していること」でした。 以下のコマンドで、対象ユーザーの全プロセスを kill すると解決しました。 hostname:~# killall -u USERNAME 参考書籍 (function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.sc…
<p>Windows 10 から、openSUSE Tumbleweed に XRDP で接続した際、以下のように、画面が真っ黒になる問題に遭遇しました。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209230038.png" alt="f:id:FriendsNow:20210209230038p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>原因は「<b>同じユーザーで、ローカル接続していること</b>」でした。<br />
以下のコマンドで、対象ユーザーの全プロセスを kill すると解決しました。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# <span class="synStatement">killall</span> <span class="synSpecial">-u</span> USERNAME
</pre>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"openSUSE 10.3 ビギナーズバイブル","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51asYj1G9YL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4839926069","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4839926069","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/openSUSE%2010.3%20%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=openSUSE%2010.3%20%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"uH6wd","s":"s"});</script><div id="msmaflink-uH6wd">リンク</div></p><p>以上</p>
</div>
FriendsNow
Windows 10 から openSUSE Tumbleweed に XRDP 接続
hatenablog://entry/26006613689518694
2021-02-10T09:00:00+09:00
2021-04-18T21:20:30+09:00 openSUSE ソフトウェアで「XRDP」を検索し、openSUSE Tumbleweed の「1クリックインストール」をクリックしてインストールします。 XRDP 接続設定 XRDP を有効化 hostname:~# sudo systemctl enable xrdp XRDP を起動 hostname:~# sudo systemctl start xrdp Firewall ポート許可 hostname:~# sudo firewall-cmd --add-port=3389/tcp --permanent Firewall 再起動 hostname:~# sudo firewall…
<p><a href="https://software.opensuse.org/package/urlwatch?locale=ja">openSUSE ソフトウェア</a>で「XRDP」を検索し、openSUSE Tumbleweed の「1クリックインストール」をクリックしてインストールします。<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209224315.png" alt="f:id:FriendsNow:20210209224315p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
<div class="section">
<h3>XRDP 接続設定</h3>
<p>XRDP を有効化</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# sudo systemctl <span class="synStatement">enable</span> xrdp
</pre><p>XRDP を起動</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# sudo systemctl <span class="synStatement">start</span> xrdp
</pre><p>Firewall ポート許可</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# sudo firewall-cmd <span class="synSpecial">--add-port=3389/tcp</span> <span class="synSpecial">--permanent</span>
</pre><p>Firewall 再起動</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# sudo firewall-cmd <span class="synSpecial">--reload</span>
</pre>
</div>
<div class="section">
<h3>接続方法</h3>
<p>RDP 接続すると、XRDP が起動するので、Session に「Xvnc」に指定し、 ユーザー名とパスワードを入力後、「OK」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209225307.png" alt="f:id:FriendsNow:20210209225307p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>XRDP で接続可能となります。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209225317.png" alt="f:id:FriendsNow:20210209225317p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"openSUSE 10.3 ビギナーズバイブル","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51asYj1G9YL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4839926069","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4839926069","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/openSUSE%2010.3%20%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=openSUSE%2010.3%20%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"uH6wd","s":"s"});</script><div id="msmaflink-uH6wd">リンク</div></p><p>以上</p>
</div>
FriendsNow
はてなブログに Google アナリティクス 4 プロパティを設定
hatenablog://entry/26006613685596566
2021-02-04T09:00:00+09:00
2021-02-07T22:58:18+09:00 はてなブログに Google アナリティクス 4 プロパティ(GA4)を設定する方法です。 Google アナリティクス 4 プロパティとは Google アナリティクス 4 プロパティ(GA4)はアプリ計測ツール「Google アナリティクス For Firebase」の仕組みを土台として、データ構造から再設計された新しい Google アナリティクスです。2019年に発表された「アプリ+ウェブ プロパティ」が、正式に2020年10月に β 版から名称を「Google アナリティクス 4 プロパティ(GA4)」へ変えてリリースされました。 …(中略)… Google アナリティクス 4 プロ…
<p>はてなブログに Google アナリティクス 4 プロパティ(GA4)を設定する方法です。</p>
<div class="section">
<h3>Google アナリティクス 4 プロパティとは</h3>
<blockquote>
<p>Google アナリティクス 4 プロパティ(GA4)はアプリ計測ツール「Google アナリティクス For Firebase」の仕組みを土台として、データ構造から再設計された新しい Google アナリティクスです。2019年に発表された「アプリ+ウェブ プロパティ」が、正式に2020年10月に β 版から名称を「Google アナリティクス 4 プロパティ(GA4)」へ変えてリリースされました。<br />
…(中略)…<br />
Google アナリティクス 4 プロパティはプロパティの中に「データストリーム」という新しい概念が追加されました。データストリームは「ウェブ」「iOS」「Android」とそれぞれのデータストリームに分かれています。<br />
ウェブは「GTM か gtag.js で新しい計測 ID をウェブサイトへ追加」することでGA4プロパティの「ウェブストリーム」にデータを収集することができ、iOS、Android は「Firebase プロジェクト」と Google アナリティクス 4 プロパティを連携することで「アプリストリーム」にデータを収集することができます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210131/20210131223009.png" alt="f:id:FriendsNow:20210131223009p:plain:w650" title="" class="hatena-fotolife" style="width:650px" itemprop="image"></span><br />
出典:<a href="https://ayudante.jp/column/2020-11-24/11-00/">アユダンテ株式会社</a></p>
</blockquote>
</div>
<div class="section">
<h3>はてなブログ設定方法</h3>
<ul>
<li><a href="https://analytics.google.com/analytics/web/">GA4</a> に接続して、左ペインの「管理」➡「データストリーム」をクリックします。</li>
<li>グローバルサイトタグ(gstag.js)をコピーして、はてなブログの「設定」➡「詳細設定」の「head に要素を追加」に貼り付けます。</li>
</ul><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210116/20210116175124.png" alt="f:id:FriendsNow:20210116175124p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>しばらく経過すると、測定結果が反映されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210131/20210131232301.png" alt="f:id:FriendsNow:20210131232301p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以上</p>
</div>
FriendsNow
デュプレックス(duplex)について
hatenablog://entry/26006613682567047
2021-02-01T09:00:00+09:00
2021-02-27T14:14:30+09:00 全二重(Full-duplex) 半二重(Half-duplex)とは 半二重モードでは、送信と受信を片方向ずつ、時間を分けて通信する。 100BASE-TX の場合、送信と受信あわせて、最大100Mbps の通信が可能。 全二重モードでは、送信と受信を両方向同時に通信する。 100BASE-TX の場合、送信と受信それぞれ最大 100Mbps の通信が可能。 HUB は CSMA/CD 方式である半二重モードのみをサポートしており、送受信を同時に行えない。 オートネゴシエーションについて FLP(Fast Link Pulse)バーストと呼ばれるパルス信号を使用し、互いの通信速度とモードを検…
<div class="section">
<h3>全二重(Full-duplex) 半二重(Half-duplex)とは</h3>
<ul>
<li>半二重モードでは、送信と受信を片方向ずつ、時間を分けて通信する。
<ul>
<li>100BASE-TX の場合、送信と受信あわせて、最大100Mbps の通信が可能。</li>
</ul></li>
<li>全二重モードでは、送信と受信を両方向同時に通信する。
<ul>
<li>100BASE-TX の場合、送信と受信それぞれ最大 100Mbps の通信が可能。</li>
</ul></li>
<li>HUB は CSMA/CD 方式である半二重モードのみをサポートしており、送受信を同時に行えない。</li>
</ul><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210223/20210223132049.png" alt="f:id:FriendsNow:20210223132049p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>オートネゴシエーションについて</h3>
<ul>
<li>FLP(Fast Link Pulse)バーストと呼ばれるパルス信号を使用し、互いの通信速度とモードを検出する。</li>
<li>相互の通信モードによっては、リンクダウンや、半二重通信になってしまう場合があるので、注意すること。</li>
</ul><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210124/20210124221424.png" alt="f:id:FriendsNow:20210124221424p:plain:w550" title="" class="hatena-fotolife" style="width:550px" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>デュプレックスミスマッチについて</h3>
<p>対向でデュプレックスがあっていない場合、デュプレックスミスマッチとなり、通信が正常にできない場合があります。<br />
Cisco の場合は、CDP が有効になっていると、以下のエラーが出力されます。</p>
<pre class="code" data-lang="" data-unlink>%CDP-4-DUPLEX_MISMATCH: duplex mismatch discovered on FastEthernet0/1 (not full duplex), with R1 Ethernet0/0 (full duplex).</pre><p>上記の表の「〇」となるように、対向の設定をあわせることが対策となります。</p><p>以上</p>
</div>
FriendsNow
Amazon RDS のパラメータ変更について
hatenablog://entry/26006613682305367
2021-01-25T09:00:00+09:00
2021-04-18T20:44:38+09:00 Amazon RDS(MySQL)において、パラメータグループを変更する際、以下のエラーが発生しました。 保存中のエラー: Cannot modify a default parameter group. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; Request ID: xxxx-xxxx-xxxx-xxxx; Proxy: null)原因は「デフォルトのパラメータグループの変更しようとしたこと」でした。 仕様上、デフォルトのパラメータグループは、変更不可のようです。 対策は、パラメータグ…
<p>Amazon RDS(MySQL)において、パラメータグループを変更する際、以下のエラーが発生しました。</p>
<pre class="code" data-lang="" data-unlink>保存中のエラー: Cannot modify a default parameter group. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; Request ID: xxxx-xxxx-xxxx-xxxx; Proxy: null)</pre><p>原因は「<u>デフォルトのパラメータグループの変更しようとしたこと</u>」でした。<br />
仕様上、デフォルトのパラメータグループは、変更不可のようです。<br />
対策は、パラメータグループの作成になります。</p>
<div class="section">
<h5>パラメータグループの作成</h5>
<p>パラメータグループを作成します。作成したパラメータグループは、設定変更が可能です。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210124/20210124121740.png" alt="f:id:FriendsNow:20210124121740p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h5>パラメータグループの適用</h5>
<p>パラメータグループをデータベースに割り当てます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210124/20210124121723.png" alt="f:id:FriendsNow:20210124121723p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51Pn9p4qQyL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B08QTQBJKZ","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B08QTQBJKZ","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"FDwZe","s":"s"});</script><div id="msmaflink-FDwZe">リンク</div></p><p>以上</p>
</div>
FriendsNow
Amazon RDS(MySQL)で名前解決を無効化
hatenablog://entry/26006613682165503
2021-01-24T16:01:17+09:00
2021-04-18T20:44:59+09:00 MySQL における名前解決について MySQL において名前解決は、コネクションの確立・認証のフェーズで利用されます。デフォルト(名前解決が有効)な場合のシーケンスはざっくりと以下のようになります。 IPアドレスが MySQL 内の名前解決キャッシュに載っているかどうかを確認する (載っていない場合)IP アドレスからホスト名に逆引きをかける(getnameinfo) 得られたホスト名を正引きし、IP アドレスを得る(getaddrinfo) IP アドレスとホスト名の両方を使って、接続元ホストの検証をする 検証に成功した場合、これ以降の「接続元ホスト」は IP アドレスまたはホスト名の「検…
<div class="section">
<h3>MySQL における名前解決について</h3>
<blockquote>
<p>MySQL において名前解決は、コネクションの確立・認証のフェーズで利用されます。デフォルト(名前解決が有効)な場合のシーケンスはざっくりと以下のようになります。</p>
<ol>
<li>IPアドレスが MySQL 内の名前解決キャッシュに載っているかどうかを確認する</li>
<li>(載っていない場合)IP アドレスからホスト名に逆引きをかける(getnameinfo)</li>
<li>得られたホスト名を正引きし、IP アドレスを得る(getaddrinfo)</li>
<li>IP アドレスとホスト名の両方を使って、接続元ホストの検証をする</li>
<li>検証に成功した場合、これ以降の「接続元ホスト」は IP アドレスまたはホスト名の「検証に成功したどちらか一方」を利用する</li>
<li>ユーザー名、パスワードなどの認証に進む</li>
</ol><p>名前解決が無効(skip-name-resolve オプションが有効)な場合、上記 1、2、3 のフェーズがスキップされ、4 で検証される対象は IP アドレスのみとなります。<br />
出典:<a href="https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0028">gihyo.jp</a></p>
</blockquote>
</div>
<div class="section">
<h3>Amazon RDS の名前解決無効化</h3>
<p>Amazon RDS(MySQL)のデフォルトの設定では、名前解決が有効(skip-name-resolve オプションが無効)となっています。<br />
名前解決を無効化するは、パラメータグループで skip-name-resolve オプションの値を「0」から「1」に変更します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210124/20210124003648.png" alt="f:id:FriendsNow:20210124003648p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51Pn9p4qQyL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B08QTQBJKZ","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B08QTQBJKZ","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"FDwZe","s":"s"});</script><div id="msmaflink-FDwZe">リンク</div></p><p>以上</p>
</div>
FriendsNow
Amazon RDS(MySQL)構築手順について
hatenablog://entry/26006613682008164
2021-01-23T22:49:07+09:00
2021-04-18T20:45:16+09:00 Amazon RDS とは Amazon RDS(Amazon Relational Database Service)とは、その名称のとおり AWS のリレーショナル型のデータベースです。 Amazon RDS では、データベースのインストールやバックアップなどのセットアップをしなくても、データベースが利用できる環境が提供されているため、契約後すぐに AWS 上でデータベースを使用することができます。 出典:NTT 東日本 リレーショナル型データベースとは リレーショナル型データベース(関係性データベース)とは、行と列の2つの軸で表されるデータベースのことです。イメージとしては、高機能な E…
<div class="section">
<h3>Amazon RDS とは</h3>
<blockquote>
<p>Amazon RDS(Amazon Relational Database Service)とは、その名称のとおり AWS のリレーショナル型のデータベースです。<br />
Amazon RDS では、データベースのインストールやバックアップなどのセットアップをしなくても、データベースが利用できる環境が提供されているため、契約後すぐに AWS 上でデータベースを使用することができます。<br />
出典:<a href="https://business.ntt-east.co.jp/content/cloudsolution/column-23.html">NTT 東日本</a></p>
</blockquote>
</div>
<div class="section">
<h3>リレーショナル型データベースとは</h3>
<blockquote>
<p>リレーショナル型データベース(関係性データベース)とは、行と列の2つの軸で表されるデータベースのことです。イメージとしては、高機能な Excel のようなものです。<br />
データベースは、特定の条件に基づいて複数のデータを管理し、必要に応じて目的のデータを検索したり、編集を行ったりするために必須です。なかでもリレーショナル型データベースは、情報の整合性や管理の効率化に優れているという特徴があります。<br />
以上のことからリレーショナル型データベースは、顧客リスト、商品一覧データ、従業員リストなど幅広い種類のデータ管理に適しています。<br />
出典:<a href="https://business.ntt-east.co.jp/content/cloudsolution/column-23.html">NTT 東日本</a></p>
</blockquote>
</div>
<div class="section">
<h3>MySQL 構築例</h3>
<p>本例では、インターネットからの接続を想定した場合に、ポイントとなる部分を抜粋しています。他の設定値はデフォルトを使用しています。<br />
「データベースの作成」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123212407.png" alt="f:id:FriendsNow:20210123212407p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「標準作成」➡「MySQL」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123213321.png" alt="f:id:FriendsNow:20210123213321p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>インターネットから、データーベースに直接接続する場合、「パブリックアクセス可能」を「あり」に設定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123214027.png" alt="f:id:FriendsNow:20210123214027p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「データベースポート」を「3306」に設定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123214114.png" alt="f:id:FriendsNow:20210123214114p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「最初のデータベース名」を設定し、「データベースの作成」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123214157.png" alt="f:id:FriendsNow:20210123214157p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>データーベース作成後、「接続とセキュリティ」➡「VPC セキュリティグループ」をクリックします。<br />
※外部から接続する「エンドポイント」を控えておきます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123215328.png" alt="f:id:FriendsNow:20210123215328p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「インバウンドルールを編集」から、許可するグローバル IP を設定します。本例では、インターネットに接続したテスト端末の IP を設定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123214600.png" alt="f:id:FriendsNow:20210123214600p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
設定は、以上です。</p>
</div>
<div class="section">
<h3>接続テスト</h3>
<p>テスト端末に MySQL Workbench をインストールし、「Hostname」に「エンドポイント」を設定して「OK」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123220140.png" alt="f:id:FriendsNow:20210123220140p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以下のように接続できます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210123/20210123220315.png" alt="f:id:FriendsNow:20210123220315p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>Python の mysql.connector.connect でも接続をテストしてみます。</p>
<pre class="code lang-python" data-lang="python" data-unlink>> vi mysql.py
conn = mysql.connector.connect(
host=<span class="synConstant">'HOSTNAME'</span>,
port=<span class="synConstant">'3306'</span>,
user=<span class="synConstant">'admin'</span>,
password=<span class="synConstant">'PASSWORD'</span>,
database=<span class="synConstant">'labdb'</span>
)
<span class="synIdentifier">print</span>(conn.is_connected())
conn.close()
</pre><p>以下のように接続できます。</p>
<pre class="code lang-python" data-lang="python" data-unlink>> python3 mysql.py
<span class="synIdentifier">True</span>
</pre>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51Pn9p4qQyL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B08QTQBJKZ","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B08QTQBJKZ","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"FDwZe","s":"s"});</script><div id="msmaflink-FDwZe">リンク</div></p><p>以上</p>
</div>
FriendsNow
Web Application に GA4 を実装する
hatenablog://entry/26006613679071567
2021-01-16T17:51:59+09:00
2021-02-26T08:41:27+09:00 Firebase で作成した Web Application に GA4(Google Analytics 4)を適用する手順について、ちょっとハマってしまったのでメモです。 Firebase web code lab で作成した Web アプリケーションに、以下のように、Index.html に SDK を読み込むように設定したのですが、機能しませんでした。*1 <!-- Import and configure the Firebase SDK --> <!-- These scripts are made available when the app is served or deplo…
<p>Firebase で作成した Web Application に GA4(Google Analytics 4)を適用する手順について、ちょっとハマってしまったのでメモです。<br />
<a href="https://friendsnow.hatenablog.com/entry/2021/01/03/000020">Firebase web code lab</a> で作成した Web アプリケーションに、以下のように、Index.html に SDK を読み込むように設定したのですが、機能しませんでした。<a href="#f-b700da22" name="fn-b700da22" title="設定は、[https://firebase.google.com/docs/web/setup?hl=ja:title=こちら]を参考にしました。">*1</a></p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement"><</span>!-- Import and configure the Firebase SDK <span class="synSpecial">--></span>
<span class="synStatement"><</span>!-- These scripts are made available when the app is served or deployed on Firebase Hosting <span class="synSpecial">--></span>
<span class="synStatement"><</span>!-- If you <span class="synStatement">do</span> not want to serve/host your project using Firebase Hosting see https://firebase.google.com/docs/web/setup <span class="synStatement">--></span>
<span class="synStatement"><</span>script <span class="synIdentifier">src</span>=<span class="synStatement">"</span><span class="synConstant">/__/firebase/8.2.1/firebase-analytics.js</span><span class="synStatement">"><</span>/script<span class="synStatement">></span>
<span class="synStatement"><</span>script <span class="synIdentifier">src</span>=<span class="synStatement">"</span><span class="synConstant">/__/firebase/init.js</span><span class="synStatement">"><</span>/script<span class="synStatement">></span>
<span class="synStatement"><</span>script <span class="synIdentifier">src</span>=<span class="synStatement">"</span><span class="synConstant">scripts/main.js</span><span class="synStatement">"><</span>/script<span class="synStatement">></span>
</pre><p>調べたところ、以下の記事に答えがありました。ありがとうございます。</p>
<blockquote>
<p><a href="https://emuemumint.hatenablog.com/entry/2020/10/31/new-analytics">【重要】アップデートされたGoogle Analytics 4にはトラッキングIDが存在しない【2020年10月以降ブログを始める方は要注意】</a><br />
出典:<a href="https://emuemumint.hatenablog.com/entry/2020/10/31/new-analytics">静かに暮らしたい</a></p>
</blockquote>
<p>Google Analytics 4 にイベントデータを送信するための API(<b>gtag.js</b>)を<b> <head> </b>の先頭に埋め込む必要があるようです。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210116/20210116175124.png" alt="f:id:FriendsNow:20210116175124p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>詳細は以下をご参照ください。<br />
<iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdevelopers.google.com%2Fanalytics%2Fdevguides%2Fcollection%2Fgtagjs%3Fhl%3Dja" title="サイトに gtag.js を追加する | ウェブ向けユニバーサル アナリティクス(gtag.js) | Google Developers" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://developers.google.com/analytics/devguides/collection/gtagjs?hl=ja">developers.google.com</a></cite></p><p>以上</p>
<div class="footnote">
<p class="footnote"><a href="#fn-b700da22" name="f-b700da22" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">設定は、<a href="https://firebase.google.com/docs/web/setup?hl=ja">こちら</a>を参考にしました。</span></p>
</div>
FriendsNow
Firebase web codelab について
hatenablog://entry/26006613672586829
2021-01-03T00:00:20+09:00
2021-04-18T20:51:06+09:00 はじめに Firebase でチャットアプリを作成するチュートリアル(Firebase web codelab)を試してみました。 チュートリアルでは、以下のことが学べます。 Cloud Firestore と Cloud Storage のデータ同期 Firebase Authentication のユーザー認証 Web アプリケーションのデプロイ Firebase Cloud Messaging の通知送信 Web アプリケーションのパフォーマンスデータ収集 環境 ・Firebase 8.2.1 ・openSUSE Tumbleweed 20201229 ・Virtual Machine:…
<div class="section">
<h3>はじめに</h3>
<p>Firebase でチャットアプリを作成するチュートリアル(<a href="https://codelabs.developers.google.com/codelabs/firebase-web#0">Firebase web codelab</a>)を試してみました。<br />
チュートリアルでは、以下のことが学べます。</p>
<ul>
<li>Cloud Firestore と Cloud Storage のデータ同期</li>
<li>Firebase Authentication のユーザー認証</li>
<li>Web アプリケーションのデプロイ</li>
<li>Firebase Cloud Messaging の通知送信</li>
<li>Web アプリケーションのパフォーマンスデータ収集</li>
</ul>
</div>
<div class="section">
<h3>環境</h3>
<p>・Firebase 8.2.1<br />
・openSUSE Tumbleweed 20201229<br />
・Virtual Machine:2vCPU, 4GB Memory, 40GB Disk<br />
・VMware(R) Workstation 15 Pro</p>
</div>
<div class="section">
<h3>事前準備</h3>
<p>root ユーザー移行</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>sudo su -
</pre><p>git インストール</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>zypper install git
</pre><p>npm インストール</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>zypper install npm
</pre>
</div>
<div class="section">
<h3>サンプルコードの入手</h3>
<p>codelab のリポジトリを複製</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>git clone https://github.com/firebase/codelab-friendlychat-web
</pre>
</div>
<div class="section">
<h3>Firebase プロジェクト作成</h3>
<p><a href="https://console.firebase.google.com/">Firebase</a> にログインして、プロジェクトを作成します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210101/20210101233700.png" alt="f:id:FriendsNow:20210101233700p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
<div class="section">
<h4>Firebase Authentication の設定</h4>
<p>ウェブアイコン をクリックして、Firebase Web アプリを作成します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210101/20210101233914.png" alt="f:id:FriendsNow:20210101233914p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>左ペインの「Authentication」➡「Sign-in method」で「Google」をクリックして、有効化します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210101/20210101235629.png" alt="f:id:FriendsNow:20210101235629p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p><a href="https://console.developers.google.com/apis/credentials/consent?project=planar-alliance-300217&folder=&organizationId=">Google Cloud Console</a> で OAuth 同意画面を設定します。<a href="#f-8ef6890e" name="fn-8ef6890e" title="ロゴのアップロードが必須なので注意">*1</a><br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102000111.png" alt="f:id:FriendsNow:20210102000111p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h4>Cloud Firestore の設定</h4>
<p>左ペインの「Cloud FIrestore」から「データベース作成」をクリックして「テストモード」を有効化します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102000734.png" alt="f:id:FriendsNow:20210102000734p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
</div>
<div class="section">
<h3>Firebase CLI インストール</h3>
<p>CLI インストール</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>sudo su -
npm <span class="synSpecial">-g</span> install firebase-tools
</pre><p>インストール確認</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">cd</span> /home/hatkobelab/codelab-friendlychat-web/web-start/
firebase <span class="synSpecial">--version</span>
</pre><p>Firebase CLI 承認</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>firebase login
</pre><p>※CLI をインストールした OS 上で実行する必要があります。それ以外の場合は、localhost に接続できずエラーとなります。本例では、以下のように openSUSE で実行しました。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102001319.png" alt="f:id:FriendsNow:20210102001319p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>アプリと Firebase プロジェクトを紐づけ</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>firebase use <span class="synSpecial">--add</span>
? Which project <span class="synStatement">do</span> you want to add? friendlychat-46e4f
? What <span class="synStatement">alias </span><span class="synIdentifier">do</span> you want to use <span class="synStatement">for</span> this project? <span class="synPreProc">(</span>e.g. staging<span class="synPreProc">)</span> default
</pre>
</div>
<div class="section">
<h3>アプリをローカルで実行</h3>
<p>アプリを実行</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>firebase serve <span class="synSpecial">--only</span> hosting
</pre><p>※上述と同様に OS 上で実行します。</p><p>ブラウザから <a href="http://localhost:5000">http://localhost:5000</a> に接続<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102001635.png" alt="f:id:FriendsNow:20210102001635p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
アプリの UI が接続されますが、認証がとおっていないため、まだ機能しません。</p>
</div>
<div class="section">
<h3>ユーザーサインイン設定</h3>
<p>チュートリアルでは、Google サインインでユーザー認証するためのコードが用意されているので、対象の関数を置き換えます。ファイルは<i><b> web-start/public/scripts/main.js </b></i>です。</p><p><u><b>関数:signIn</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Signs-in Friendly Chat.</span>
<span class="synIdentifier">function</span> signIn() <span class="synIdentifier">{</span>
<span class="synComment">// Sign into Firebase using popup auth & Google as the identity provider.</span>
<span class="synIdentifier">var</span> provider = <span class="synStatement">new</span> firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
<span class="synIdentifier">}</span>
</pre><p><u><b>関数:signOut</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Signs-out of Friendly Chat.</span>
<span class="synIdentifier">function</span> signOut() <span class="synIdentifier">{</span>
<span class="synComment">// Sign out of Firebase.</span>
firebase.auth().signOut();
<span class="synIdentifier">}</span>
</pre><p><u><b>関数:initFirebaseAuth</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Initiate Firebase Auth.</span>
<span class="synIdentifier">function</span> initFirebaseAuth() <span class="synIdentifier">{</span>
<span class="synComment">// Listen to auth state changes.</span>
firebase.auth().onAuthStateChanged(authStateObserver);
<span class="synIdentifier">}</span>
</pre><p><u><b>関数:getProfilePicUrl </b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Returns the signed-in user's profile pic URL.</span>
<span class="synIdentifier">function</span> getProfilePicUrl() <span class="synIdentifier">{</span>
<span class="synStatement">return</span> firebase.auth().currentUser.photoURL || <span class="synConstant">'/images/profile_placeholder.png'</span>;
<span class="synIdentifier">}</span>
</pre><p><u><b>関数:getUserName</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Returns the signed-in user's display name.</span>
<span class="synIdentifier">function</span> getUserName() <span class="synIdentifier">{</span>
<span class="synStatement">return</span> firebase.auth().currentUser.displayName;
<span class="synIdentifier">}</span>
</pre><p><u><b>関数:isUserSignedIn</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Returns true if a user is signed-in.</span>
<span class="synIdentifier">function</span> isUserSignedIn() <span class="synIdentifier">{</span>
<span class="synStatement">return</span> !!firebase.auth().currentUser;
<span class="synIdentifier">}</span>
</pre><p>サインインのテストは、上述と同様に OS 上で実行します。</p>
<pre class="code" data-lang="" data-unlink>firebase serve --only hosting</pre><p>以下のように Google でサインインができるようになります。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102002202.png" alt="f:id:FriendsNow:20210102002202p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>メッセージの書き込み設定</h3>
<p>アプリケーションの UI にデータ入力ができるように <a href="https://friendsnow.hatenablog.com/entry/2020/12/31/230543">Cloud Firestore</a> にデータを書き込みます。ユーザーが作成したメッセージは、Cloud Firestore に保存されます。<br />
チュートリアルでは、ユーザーが「Send」ボタンをクリックすると、データベースに保存するコードが用意されているので、対象の関数を置き換えます。ファイルは <i><b>web-start/public/scripts/main.js</b></i> です。</p><p><u><b>関数:saveMessage</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Saves a new message to your Cloud Firestore database.</span>
<span class="synIdentifier">function</span> saveMessage(messageText) <span class="synIdentifier">{</span>
<span class="synComment">// Add a new message entry to the database.</span>
<span class="synStatement">return</span> firebase.firestore().collection(<span class="synConstant">'messages'</span>).add(<span class="synIdentifier">{</span>
name: getUserName(),
text: messageText,
profilePicUrl: getProfilePicUrl(),
timestamp: firebase.firestore.FieldValue.serverTimestamp()
<span class="synIdentifier">}</span>).<span class="synStatement">catch</span>(<span class="synIdentifier">function</span>(error) <span class="synIdentifier">{</span>
console.error(<span class="synConstant">'Error writing new message to database'</span>, error);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>
</pre><p>ブラウザから <a href="http://localhost:5000">http://localhost:5000</a> に接続し「hello」などのメッセージを入力して「Send」ボタンをクリックすると、Firebase コンソールでメッセージを確認できます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102182214.png" alt="f:id:FriendsNow:20210102182214p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>メッセージの読み取り設定</h3>
<p>アプリケーションでメッセージを読み取り、表示させます。<br />
データベース内のメッセージが更新された際に、新しいメッセージをアプリケーションに表示させるように対象の関数を置き換えます。ファイルは <i><b>web-start/public/scripts/main.js</b></i> です。</p><p><u><b>関数:loadMessages</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Loads chat messages history and listens for upcoming ones.</span>
<span class="synIdentifier">function</span> loadMessages() <span class="synIdentifier">{</span>
<span class="synComment">// Create the query to load the last 12 messages and listen for new ones.</span>
<span class="synIdentifier">var</span> query = firebase.firestore()
.collection(<span class="synConstant">'messages'</span>)
.orderBy(<span class="synConstant">'timestamp'</span>, <span class="synConstant">'desc'</span>)
.limit(12);
<span class="synComment">// Start listening to the query.</span>
query.onSnapshot(<span class="synIdentifier">function</span>(snapshot) <span class="synIdentifier">{</span>
snapshot.docChanges().forEach(<span class="synIdentifier">function</span>(change) <span class="synIdentifier">{</span>
<span class="synStatement">if</span> (change.type === <span class="synConstant">'removed'</span>) <span class="synIdentifier">{</span>
deleteMessage(change.doc.id);
<span class="synIdentifier">}</span> <span class="synStatement">else</span> <span class="synIdentifier">{</span>
<span class="synIdentifier">var</span> message = change.doc.data();
displayMessage(change.doc.id, message.timestamp, message.name,
message.text, message.profilePicUrl, message.imageUrl);
<span class="synIdentifier">}</span>
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>
</pre>
</div>
<div class="section">
<h3>画像送信設定</h3>
<p>画像を共有する機能を追加します。<br />
Cloud Firestore は、構造化データの保存に適していますが、Cloud Storage はファイルの保存に適しています。<br />
ユーザーがアプリケーションを使用して共有する画像を Cloud Storage に保存するように対象の関数を置き換えます。ファイルは <i><b>web-start/public/scripts/main.js</b></i> です。</p><p><u><b>関数:saveImageMessage</b></u></p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Saves a new message containing an image in Firebase.</span>
<span class="synComment">// This first saves the image in Firebase storage.</span>
<span class="synIdentifier">function</span> saveImageMessage(file) <span class="synIdentifier">{</span>
<span class="synComment">// 1 - We add a message with a loading icon that will get updated with the shared image.</span>
firebase.firestore().collection(<span class="synConstant">'messages'</span>).add(<span class="synIdentifier">{</span>
name: getUserName(),
imageUrl: LOADING_IMAGE_URL,
profilePicUrl: getProfilePicUrl(),
timestamp: firebase.firestore.FieldValue.serverTimestamp()
<span class="synIdentifier">}</span>).then(<span class="synIdentifier">function</span>(messageRef) <span class="synIdentifier">{</span>
<span class="synComment">// 2 - Upload the image to Cloud Storage.</span>
<span class="synIdentifier">var</span> filePath = firebase.auth().currentUser.uid + <span class="synConstant">'/'</span> + messageRef.id + <span class="synConstant">'/'</span> + file.name;
<span class="synStatement">return</span> firebase.storage().ref(filePath).put(file).then(<span class="synIdentifier">function</span>(fileSnapshot) <span class="synIdentifier">{</span>
<span class="synComment">// 3 - Generate a public URL for the file.</span>
<span class="synStatement">return</span> fileSnapshot.ref.getDownloadURL().then((url) => <span class="synIdentifier">{</span>
<span class="synComment">// 4 - Update the chat message placeholder with the image's URL.</span>
<span class="synStatement">return</span> messageRef.update(<span class="synIdentifier">{</span>
imageUrl: url,
storageUri: fileSnapshot.metadata.fullPath
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>).<span class="synStatement">catch</span>(<span class="synIdentifier">function</span>(error) <span class="synIdentifier">{</span>
console.error(<span class="synConstant">'There was an error uploading a file to Cloud Storage:'</span>, error);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>
</pre><p>ブラウザから <a href="http://localhost:5000">http://localhost:5000</a> に接続し「hello」などのメッセージを入力して「Send」ボタンをクリックすると、アプリケーションに表示されます。また、画像をアプリケーションにアップロードすることもできます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102221928.png" alt="f:id:FriendsNow:20210102221928p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>パフォーマンスデータ収集</h3>
<p>Performance Monitoring SDK を使用して、アプリケーションからパフォーマンスデータを収集し、Firebase コンソールでデータの確認および分析ができます。</p>
<div class="section">
<h4>自動トレースの設定</h4>
<p>アプリケーション利用時に自動的にパフォーマンスデータ監視を行うためには、<i><b>main.js</b></i> に以下を追加します。</p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// </span><span class="synTodo">TODO</span><span class="synComment">: Initialize Firebase Performance Monitoring.</span>
firebase.performance();
</pre>
</div>
<div class="section">
<h4>パフォーマンスデータの表示</h4>
<p>Firebase コンソールからパフォーマンスデータを確認できます。通常は、この後の手順で実施するデプロイ後、12時間以内に表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102223620.png" alt="f:id:FriendsNow:20210102223620p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
</div>
<div class="section">
<h3>アプリケーションのデプロイ</h3>
<p><a href="https://friendsnow.hatenablog.com/entry/2020/12/31/230543">Firebase Hosting</a> を使用してアプリケーションを Firebase プロジェクトにデプロイします。<br />
コマンドは以下を使用します。</p>
<pre class="code" data-lang="" data-unlink>> cd /home/hatkobelab/codelab-friendlychat-web/web-start/
> firebase deploy --except functions</pre><p>デプロイ後、Firebase Hosting の URL(以下の2つの Firebase 独自サブドメイン)から、ウェブアプリケーションにアクセスできるようになります。</p>
<pre class="code" data-lang="" data-unlink>https://<firebase-projectId>.firebaseapp.com
https://<firebase-projectId>.web.app</pre><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102225510.png" alt="f:id:FriendsNow:20210102225510p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>通知設定</h3>
<p><a href="https://friendsnow.hatenablog.com/entry/2020/12/31/230543">Firebase Cloud Messaging</a> を使用して、ウェブアプリに通知を配信することができます。</p>
<div class="section">
<h4>送信者 ID 許可</h4>
<p>アプリケーション側で、通知を許可する送信 ID を設定する必要があります。<i><b> web-start/public/manifest.json</b></i> の <b><i>gcm_sender_id</i></b> で設定します。※固定値で変更できません。</p>
<pre class="code lang-json" data-lang="json" data-unlink><span class="synSpecial">{</span>
"<span class="synStatement">name</span>": "<span class="synConstant">Friendly Chat</span>",
"<span class="synStatement">short_name</span>": "<span class="synConstant">Friendly Chat</span>",
"<span class="synStatement">start_url</span>": "<span class="synConstant">/index.html</span>",
"<span class="synStatement">display</span>": "<span class="synConstant">standalone</span>",
"<span class="synStatement">orientation</span>": "<span class="synConstant">portrait</span>",
"<span class="synStatement">gcm_sender_id</span>": "<span class="synConstant">103953800507</span>"
<span class="synSpecial">}</span>
</pre>
</div>
<div class="section">
<h4>Service Worker の追加</h4>
<p>通知をアプリケーションに表示させるために必要な Service Worker を追加します。<i><b> web-start/public</b></i> ディレクトリに <b><i>irebase-messaging-sw.js</i></b> という名前のファイルを作成して、以下のコンテンツを追加します。<a href="#f-22b67aa0" name="fn-22b67aa0" title="8.2.1 は Firebase のバージョンで最新化が必要です。最新のバージョンは[https://github.com/firebase/codelab-friendlychat-web/blob/master/web/public/firebase-messaging-sw.js#L4-L9.json=:title=こちら]">*2</a><br />
</p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Import and configure the Firebase SDK</span>
<span class="synComment">// These scripts are made available when the app is served or deployed on Firebase Hosting</span>
<span class="synComment">// If you do not want to serve/host your project using Firebase Hosting see https://firebase.google.com/docs/web/setup</span>
importScripts(<span class="synConstant">'/__/firebase/8.2.1/firebase-app.js'</span>);
importScripts(<span class="synConstant">'/__/firebase/8.2.1/firebase-messaging.js'</span>);
importScripts(<span class="synConstant">'/__/firebase/init.js'</span>);
firebase.messaging();
</pre>
</div>
<div class="section">
<h4>デバイストークンの取得</h4>
<p>デバイスまたはブラウザで通知が有効になると、デバイストークンが提供されます。<br />
ユーザーがサインインすると、ブラウザからデバイストークンを取得し、Cloud Firestore に保存するように設定します。ファイルは<i><b> web-start/public/scripts/main.js </b></i>です。</p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Saves the messaging device token to the datastore.</span>
<span class="synIdentifier">function</span> saveMessagingDeviceToken() <span class="synIdentifier">{</span>
firebase.messaging().getToken().then(<span class="synIdentifier">function</span>(currentToken) <span class="synIdentifier">{</span>
<span class="synStatement">if</span> (currentToken) <span class="synIdentifier">{</span>
console.log(<span class="synConstant">'Got FCM device token:'</span>, currentToken);
<span class="synComment">// Saving the Device Token to the datastore.</span>
firebase.firestore().collection(<span class="synConstant">'fcmTokens'</span>).doc(currentToken)
.set(<span class="synIdentifier">{</span>uid: firebase.auth().currentUser.uid<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span> <span class="synStatement">else</span> <span class="synIdentifier">{</span>
<span class="synComment">// Need to request permissions to show notifications.</span>
requestNotificationsPermissions();
<span class="synIdentifier">}</span>
<span class="synIdentifier">}</span>).<span class="synStatement">catch</span>(<span class="synIdentifier">function</span>(error)<span class="synIdentifier">{</span>
console.error(<span class="synConstant">'Unable to get messaging token.'</span>, error);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>
</pre>
</div>
<div class="section">
<h4>通知権限のリクエスト</h4>
<p>ユーザーに通知許可を求めるダイアログをブラウザに表示させます。ユーザーで許可していない場合、デバイストークンは提供されません。</p>
<pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synComment">// Requests permission to show notifications.</span>
<span class="synIdentifier">function</span> requestNotificationsPermissions() <span class="synIdentifier">{</span>
console.log(<span class="synConstant">'Requesting notifications permission...'</span>);
firebase.messaging().requestPermission().then(<span class="synIdentifier">function</span>() <span class="synIdentifier">{</span>
<span class="synComment">// Notification permission granted.</span>
saveMessagingDeviceToken();
<span class="synIdentifier">}</span>).<span class="synStatement">catch</span>(<span class="synIdentifier">function</span>(error) <span class="synIdentifier">{</span>
console.error(<span class="synConstant">'Unable to get permission to notify.'</span>, error);
<span class="synIdentifier">}</span>);
<span class="synIdentifier">}</span>
</pre><p>サインイン後、通知許可ダイアログが表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102234510.png" alt="f:id:FriendsNow:20210102234510p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
「許可」をクリックすると、ブラウザの JavaScript コンソールに次のメッセージが表示されます。</p>
<pre class="code" data-lang="" data-unlink>Got FCM device token: cWL6w:APA91bHP...4jDPL_A-wPP06GJp1OuekTaTZI5K2Tu</pre>
</div>
<div class="section">
<h4>ブラウザに通知を送信</h4>
<p>デバイストークンと、サーバーキーを設定し、次の cURL コマンドを実行します。<br />
サーバーキーは、Firebase コンソール から「プロジェクトの概要」➡「プロジェクトを設定」➡「Cloud Messaging」 で確認できます。</p>
<pre class="code lang-json" data-lang="json" data-unlink><span class="synError">curl</span> -<span class="synError">H</span> "<span class="synError">Content</span>-<span class="synError">Type</span>: <span class="synError">application</span>/<span class="synError">json</span>" \
-<span class="synError">H</span> "<span class="synError">Authorization</span>: <span class="synError">key</span>=YOUR_SERVER_KEY" \
-<span class="synError">d</span> '<span class="synSpecial">{</span>
"<span class="synStatement">notification</span>": <span class="synSpecial">{</span>
"<span class="synStatement">title</span>": "<span class="synConstant">New chat message!</span>",
"<span class="synStatement">body</span>": "<span class="synConstant">There is a new message in FriendlyChat</span>",
"<span class="synStatement">icon</span>": "<span class="synConstant">/images/profile_placeholder.png</span>",
"<span class="synStatement">click_action</span>": "<span class="synConstant">http://localhost:5000</span>"
<span class="synSpecial">}</span>,
"<span class="synStatement">to</span>": "<span class="synConstant">YOUR_DEVICE_TOKEN</span>"
<span class="synSpecial">}</span>' \
<span class="synError">https</span>:<span class="synError">//fcm.googleapis.com/fcm/send</span>
</pre><p>アプリケーションがバックグラウンドにある場合、次のようにブラウザに通知が表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210102/20210102235944.png" alt="f:id:FriendsNow:20210102235944p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以上</p>
</div>
</div><div class="footnote">
<p class="footnote"><a href="#fn-8ef6890e" name="f-8ef6890e" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">ロゴのアップロードが必須なので注意</span></p>
<p class="footnote"><a href="#fn-22b67aa0" name="f-22b67aa0" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text">8.2.1 は Firebase のバージョンで最新化が必要です。最新のバージョンは<a href="https://github.com/firebase/codelab-friendlychat-web/blob/master/web/public/firebase-messaging-sw.js#L4-L9.json=">こちら</a></span></p>
</div>
FriendsNow
Firebase について
hatenablog://entry/26006613672543580
2020-12-31T23:05:43+09:00
2021-02-06T13:51:14+09:00 Firebase とは Google が提供しているモバイルおよび Web アプリケーションの BaaS(バックエンドサービス) Firebase を使うことで、開発者はアプリケーションの開発に専念でき、バックエンドで動くサービスを作成・管理する必要がありません。 Firebase の機能 Firebase では主に以下の機能が提供されています。(2020年12月31日時点) 参考:株式会社トップゲート Realtime Database オブジェクト型のデータベースで、リアルタイムでクライアント全体の状態を同期します。 出典:Md Munir Hossain – Medium Cloud F…
<div class="section">
<h3>Firebase とは</h3>
<p>Google が提供しているモバイルおよび Web アプリケーションの BaaS(バックエンドサービス)<br />
Firebase を使うことで、開発者はアプリケーションの開発に専念でき、バックエンドで動くサービスを作成・管理する必要がありません。</p>
</div>
<div class="section">
<h3>Firebase の機能</h3>
<p>Firebase では主に以下の機能が提供されています。(2020年12月31日時点)<br />
参考:<a href="https://www.topgate.co.jp/firebase01-what-is-firebase#firebase">株式会社トップゲート</a><br />
</p>
<div class="section">
<h5>Realtime Database</h5>
<p>オブジェクト型のデータベースで、リアルタイムでクライアント全体の状態を同期します。</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20201231/20201231235159.png" alt="f:id:FriendsNow:20201231235159p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
出典:<a href="https://medium.com/@MunirHossain">Md Munir Hossain – Medium</a></p>
</blockquote>
</div>
<div class="section">
<h5>Cloud Firestore</h5>
<p>Realtime Database の性能をさらに向上させたデータベース。 Realtime Database より高速でスケールアウトにも対応しています。Google は Realtime Database より Cloud Firestore を推奨していて、今後の主力となるデータベースのようです。</p>
</div>
<div class="section">
<h5>Cloud Storage for Firebase</h5>
<p>写真や動画などバイナリーデータを保存します。保存先は Cloud Storage となっており、 Firebase と Google Cloud の両方からアクセスできます。</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20201231/20201231235226.jpg" alt="f:id:FriendsNow:20201231235226j:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
出典:<a href="https://medium.com/@MunirHossain">Md Munir Hossain – Medium</a></p>
</blockquote>
</div>
<div class="section">
<h5>Firebase Authentication</h5>
<p>Google のフェデレーション認証で、 Google, Facebook, Twitter などの認証情報を使用してクライアントアプリケーションにログインすることができます。<br />
また、パスワード認証や電話番号認証にも対応しています。</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20201231/20201231235239.png" alt="f:id:FriendsNow:20201231235239p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
出典:<a href="https://medium.com/@MunirHossain">Md Munir Hossain – Medium</a></p>
</blockquote>
</div>
<div class="section">
<h5>Firebase Cloud Messaging(FCM)</h5>
<p>様々なプラットホームで動いているアプリケーションに対してメッセージを送ることができます。</p>
</div>
<div class="section">
<h5>Google Cloud Functions for Firebase</h5>
<p>イベントドリブンなアプリケーションを作成し SMS メッセージの送信処理のような外部サービス連携が可能となります。</p>
</div>
<div class="section">
<h5>Firebase Hosting</h5>
<p>ウェブアプリ、静的コンテンツ、動的コンテンツなど、様々なコンテンツをホストします。</p>
<blockquote>
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20201231/20201231235318.jpg" alt="f:id:FriendsNow:20201231235318j:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
出典:<a href="https://medium.com/@MunirHossain">Md Munir Hossain – Medium</a></p>
</blockquote>
</div>
</div>
<div class="section">
<h3>Firebase SDK</h3>
<p>Firebase の主な機能(Realtime Database, Cloud Firestore, Firebase Hosting など)を使用できる SDK が提供されています。サポートされているプラットフォームには、 Android, iOS, Web, Unity, C++ などがあります。</p><p>以上</p>
</div>
FriendsNow
Google Cloud Shell のリセット手順
hatenablog://entry/26006613672509316
2020-12-31T21:52:02+09:00
2021-04-18T20:51:59+09:00 Cloud Shell とは Google Cloud Shell は、debian ベースのオンライン bash シェルで、Web ブラウザ経由でアクセスできます。 無料利用枠で、$HOME ディレクトリに 5 GB の永続ディスク ストレージが提供されています。 インターネットと Web ブラウザがあれば、いつでもどこでも利用できるため、最近重宝しています。 リセット手順 Cloud Shell のホーム ディレクトリを空の状態に戻すには: 1. ホーム ディレクトリの個人ファイルを確認します。 ls -a $HOME 2. ホーム ディレクトリからすべてのファイルを削除します。 sudo…
<div class="section">
<h3>Cloud Shell とは</h3>
<p>Google Cloud Shell は、debian ベースのオンライン bash シェルで、Web ブラウザ経由でアクセスできます。<br />
無料利用枠で、$HOME ディレクトリに 5 GB の永続ディスク ストレージが提供されています。<br />
インターネットと Web ブラウザがあれば、いつでもどこでも利用できるため、最近重宝しています。</p><p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fcloud.google.com%2Fshell%3Fhl%3Dja" title="Cloud Shell | Google Cloud" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p>
</div>
<div class="section">
<h3>リセット手順</h3>
<p>Cloud Shell のホーム ディレクトリを空の状態に戻すには:<br />
1. ホーム ディレクトリの個人ファイルを確認します。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">ls</span> <span class="synSpecial">-a</span> <span class="synPreProc">$HOME</span>
</pre><p>2. ホーム ディレクトリからすべてのファイルを削除します。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>sudo <span class="synStatement">rm</span> <span class="synSpecial">-rf</span> <span class="synPreProc">$HOME</span>
</pre><p>3. Cloud Shell メニューで、その他メニュー アイコン、「Cloud Shell を再起動」の順にクリックします。</p><p>参考:<a href="https://cloud.google.com/shell/docs/resetting-cloud-shell">Cloud Shell の無効化またはリセット</a></p><p>以上</p>
</div>
FriendsNow
openSUSE Tumbleweed で Cron 実行
hatenablog://entry/26006613671126920
2020-12-28T22:23:19+09:00
2021-04-18T21:20:55+09:00 openSUSE ソフトウェアで「cronie」を検索し、openSUSE Tumbleweed の「1クリックインストール」をクリックしてインストールします。 crontab 設定 hostname:~# crontab -e # 30分毎に起動する */30 * * * * urlwatch crontab 設定確認 hostname:~# crontab -l crontab ステータス確認 hostname:~# systemctl status cron.service crontab 実行確認 hostname:~# tail -f /var/spool/mail/[user_na…
<p><a href="https://software.opensuse.org/package/urlwatch?locale=ja">openSUSE ソフトウェア</a>で「cronie」を検索し、openSUSE Tumbleweed の「1クリックインストール」をクリックしてインストールします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20201228/20201228220810.png" alt="f:id:FriendsNow:20201228220810p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>crontab 設定</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# crontab <span class="synSpecial">-e</span>
<span class="synComment"># 30分毎に起動する</span>
*/<span class="synConstant">30</span> * * * * urlwatch
</pre><p>crontab 設定確認</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# crontab <span class="synSpecial">-l</span>
</pre><p>crontab ステータス確認</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# systemctl <span class="synStatement">status</span> cron.service
</pre><p>crontab 実行確認</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>hostname:~# <span class="synStatement">tail</span> <span class="synSpecial">-f</span> /var/spool/mail/<span class="synStatement">[</span>user_name<span class="synStatement">]</span>
</pre>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"openSUSE 10.3 ビギナーズバイブル","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51asYj1G9YL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4839926069","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4839926069","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/openSUSE%2010.3%20%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=openSUSE%2010.3%20%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"uH6wd","s":"s"});</script><div id="msmaflink-uH6wd">リンク</div></p><p>以上</p>
</div>
FriendsNow
openSUSE Tumbleweed インストール手順
hatenablog://entry/26006613689385720
2020-12-25T09:00:00+09:00
2021-02-11T19:33:58+09:00 2021-02-09openSUSE Tumbleweed 20201229 のざっくりしたインストール手順例です。 公式サイトから、DVD イメージをダウンロードし、イメージをマウント・実行します。 installation を選択します。 言語/キーボード/ライセンスなど、基本的な設定は「次へ」をクリック オンラインリポジトリは、必要なものが明確でなければ、デフォルトで OK です。 システムの役割も特に指定がなければ、デフォルトで OK です。 パーティションも同様です。 タイムゾーンは「日本」で、「ハードウェアの時刻を UTC に設定する」にチェック ユーザーを設定します。 設定内容を…
<p><p><time class="entry-updated updated" datetime="2021-02-09">2021-02-09</time></p></p><p>openSUSE Tumbleweed 20201229 のざっくりしたインストール手順例です。<br />
<a href="https://software.opensuse.org/distributions/tumbleweed?locale=ja">公式サイト</a>から、DVD イメージをダウンロードし、イメージをマウント・実行します。<br />
installation を選択します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209172739.png" alt="f:id:FriendsNow:20210209172739p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>言語/キーボード/ライセンスなど、基本的な設定は「次へ」をクリック<br />
オンラインリポジトリは、必要なものが明確でなければ、デフォルトで OK です。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209172835.png" alt="f:id:FriendsNow:20210209172835p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>システムの役割も特に指定がなければ、デフォルトで OK です。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209172904.png" alt="f:id:FriendsNow:20210209172904p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>パーティションも同様です。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209173121.png" alt="f:id:FriendsNow:20210209173121p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>タイムゾーンは「日本」で、「ハードウェアの時刻を UTC に設定する」にチェック<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209173133.png" alt="f:id:FriendsNow:20210209173133p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>ユーザーを設定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209173203.png" alt="f:id:FriendsNow:20210209173203p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>設定内容を確認して「インストール」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20210209/20210209173240.png" alt="f:id:FriendsNow:20210209173240p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以上</p>
FriendsNow
オープンソースの WAF(ModSecurity)について
hatenablog://entry/26006613542226073
2020-08-08T11:00:00+09:00
2021-07-12T13:38:49+09:00 WAF とは WAF は、ウェブアプリケーションの脆弱性を悪用した攻撃などからウェブアプリケーションを保護するソフトウェア、またはハードウェアです。 WAF を使用することで以下の効果を期待できます。 脆弱性を悪用した攻撃からウェブアプリケーションを防御する。 脆弱性を悪用した攻撃を検出する 複数のウェブアプリケーションへの攻撃をまとめて防御する また WAF は、検出パターンに基づき通信の中身を機械的に検査するため、実際に人の目で見る場合と異なる判定が生じる場合があります。この判定結果により、ウェブアプリケーションの脆弱性を悪用した攻撃などの悪意ある通信を遮断できない場合や、利用者がウェブサ…
<div class="section">
<h3>WAF とは</h3>
<blockquote>
<p>WAF は、ウェブアプリケーションの脆弱性を悪用した攻撃などからウェブアプリケーションを保護するソフトウェア、またはハードウェアです。<br />
WAF を使用することで以下の効果を期待できます。</p>
<ul>
<li>脆弱性を悪用した攻撃からウェブアプリケーションを防御する。</li>
<li>脆弱性を悪用した攻撃を検出する</li>
<li>複数のウェブアプリケーションへの攻撃をまとめて防御する</li>
</ul><p>また WAF は、検出パターンに基づき通信の中身を機械的に検査するため、実際に人の目で見る場合と異なる判定が生じる場合があります。この判定結果により、ウェブアプリケーションの脆弱性を悪用した攻撃などの悪意ある通信を遮断できない場合や、利用者がウェブサイトを閲覧する正常な通信を遮断してしまう場合があるため、導入時に考慮する必要があります。<br />
出典:<a href="https://www.ipa.go.jp/files/000017312.pdf">Web Application Firewall (WAF) 読本 改訂第2</a></p>
</blockquote>
</div>
<div class="section">
<h3>ModSecurity とは</h3>
<blockquote>
<p>TrustWave 社が GPLv2 ライセンスのもと提供しているオープンソースの WAF です。<br />
IPA で導入・運用を継続している実績があります。<br />
出典:<a href="https://www.ipa.go.jp/files/000024357.pdf"> オープンソース WAF「ModSecurity」導入事例 ~ IPA はこう考えた ~</a></p>
</blockquote>
</div>
<div class="section">
<h3>ModSecurity 構築例</h3>
<p>本例では、以下の環境でテストします。</p><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200329/20200329180205.png" alt="f:id:FriendsNow:20200329180205p:plain" width="674" height="120" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p><p>また、本環境で対応する脆弱性は以下の 2 つのみとします。</p>
<ul>
<li>XSS(クロスサイト・スクリプティング)</li>
<li>SQL インジェクション</li>
</ul>
<div class="section">
<h4>Apache リバースプロキシ設定</h4>
<p>以下をコメントアウト</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># vi /etc/httpd/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
</pre><p>以下を最終行に追加</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># vi /etc/httpd/conf/httpd.conf
ProxyRequests Off
ProxyPass /WebGoat http://<span class="synConstant">10</span>.<span class="synConstant">1</span>.<span class="synConstant">23</span>.<span class="synConstant">253</span>/WebGoat
ProxyPassReverse /WebGoat http://<span class="synConstant">10</span>.<span class="synConstant">1</span>.<span class="synConstant">23</span>.<span class="synConstant">253</span>/WebGoat
<span class="synComment"># 上記のように設定すると、例えば、 10.1.12.252/WebGoat のリクエストを http://10.1.23.253/WebGoat へ転送します。</span>
</pre>
</div>
<div class="section">
<h4>ModSecurity インストール事前準備</h4>
<p>EPEL リポジトリ追加</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>yum install epel-release
</pre><p>リポジトリ設定</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># vi /etc/yum.repos.d/epel.repo
<span class="synComment"># コメントイン</span>
<span class="synIdentifier">baseurl</span>=http://download.fedoraproject.org/pub/epel/<span class="synConstant">6</span>/<span class="synPreProc">$basearch</span>
<span class="synComment"># コメントアウト</span>
<span class="synComment">#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch</span>
<span class="synComment"># コメントイン</span>
<span class="synIdentifier">baseurl</span>=http://download.fedoraproject.org/pub/epel/<span class="synConstant">6</span>/<span class="synPreProc">$basearch</span>/debug
<span class="synComment"># コメントアウト</span>
<span class="synComment">#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch</span>
<span class="synComment"># コメントイン</span>
<span class="synIdentifier">baseurl</span>=http://download.fedoraproject.org/pub/epel/<span class="synConstant">6</span>/SRPMS
<span class="synComment"># コメントアウト</span>
<span class="synComment">#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch</span>
</pre>
</div>
<div class="section">
<h4>ModSecurity インストール</h4>
<p>ModSecurity と CRS をインストール</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># yum <span class="synSpecial">--enablerepo=epel</span> install <span class="synSpecial">-y</span> mod_security mod_security_crs
<span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># service httpd <span class="synStatement">restart</span>
</pre><p>XSS と SQL インジェクションのルールのみ適用</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># vi /etc/httpd/conf.d/mod_security.conf
<span class="synComment"># コメントアウト</span>
<span class="synComment"># Include modsecurity.d/activated_rules/*.conf</span>
<span class="synComment"># 10~11 行目追加</span>
Include modsecurity.d/activated_rules/modsecurity_crs_41_xss_attacks.conf
Include modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf
</pre><p>Apache 再起動</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># /etc/rc.d/init.d/httpd <span class="synStatement">restart</span>
</pre>
</div>
</div>
<div class="section">
<h3>WAF のテスト</h3>
<div class="section">
<h4>ModSecurity 無効時</h4>
<p>OWASP ZAP の動的スキャンを行うと、SQL インジェクションの脆弱性が見つかります。<br />
※OWSAP ZAP については、<a href="https://friendsnow.hatenablog.com/entry/2020/03/22/203847">こちら</a>をご参照ください。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200329/20200329182250.png" alt="f:id:FriendsNow:20200329182250p:plain" width="1024" height="768" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h4>ModSecurity 有効時</h4>
<p>SQL インジェクションの脆弱性が検出されなくなりました。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200329/20200329181520.png" alt="f:id:FriendsNow:20200329181520p:plain" width="1024" height="768" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p><p>リアルタイムで診断状況を確認すると、ステータスコードが「Forbidden」となっていることが確認できます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200329/20200329181052.png" alt="f:id:FriendsNow:20200329181052p:plain" width="1024" height="768" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
</div>
<div class="section">
<h3>参考: ModSecurity 無効化</h3>
<p>一時的に無効化した場合は、以下の設定をします。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># vi /etc/httpd/conf.d/mod_security.conf
<span class="synComment"># コメントアウト</span>
<span class="synComment">#SecRuleEngine On</span>
<span class="synComment"># 追加</span>
SecRuleEngine Off
</pre><p>Apache 再起動</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># /etc/rc.d/init.d/httpd <span class="synStatement">restart</span>
</pre>
</div>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"ModSecurity Handbook, Second Edition","b":"Feisty Duck","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/415OjHz5pEL._SL500_.jpg","\/51ERHWkj0qL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/1907117075","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/1907117075","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/ModSecurity%20Handbook%2C%20Second%20Edition\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=ModSecurity%20Handbook%2C%20Second%20Edition","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"A18Rb","s":"s"});</script><div id="msmaflink-A18Rb">リンク</div></p><p>以上</p>
</div>
FriendsNow
Internet Explorer 表示した PDF を保存できない
hatenablog://entry/26006613593636466
2020-07-04T17:03:34+09:00
2021-02-26T09:16:32+09:00 フォルダリダイレクトが有効になっている環境で、Internet Explorer 表示した PDF を保存しようとすると、以下のエラーが発生する場合があります。 保存しようとしたディスクまたは一時ファイルに使用するディスクがいっぱいです。このディスクの容量を空けてもう一度保存しなおすか、別のディスクに保存してください。こちらによると、ディスク容量は問題なくても、Adobe Reader の保護モードの不具合が原因で発生する可能性があり、以下の手順で保護モードを無効にすると回避できるようです。 編集/環境設定を選択します。 左側の「分類」から、「セキュリティ(拡張)」を選択します。 「サンドボッ…
<p>フォルダリダイレクトが有効になっている環境で、Internet Explorer 表示した PDF を保存しようとすると、以下のエラーが発生する場合があります。</p>
<pre class="code" data-lang="" data-unlink>保存しようとしたディスクまたは一時ファイルに使用するディスクがいっぱいです。このディスクの容量を空けてもう一度保存しなおすか、別のディスクに保存してください。</pre><p><a href="https://forums.ivanti.com/s/article/Adobe-Reader-can-not-save-PDF-files-from-internet-browser-with-Folder-Redirection-enabled">こちら</a>によると、ディスク容量は問題なくても、Adobe Reader の保護モードの不具合が原因で発生する可能性があり、以下の手順で保護モードを無効にすると回避できるようです。</p>
<ol>
<li>編集/環境設定を選択します。</li>
<li>左側の「分類」から、「セキュリティ(拡張)」を選択します。</li>
<li>「サンドボックスによる保護」領域で、「起動時に保護モードを有効にする」をオフにします。</li>
</ol><p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fhelpx.adobe.com%2Fjp%2Freader%2F11%2Fusing%2Fprotected-mode-windows.html" title="Acrobat Reader(Windows)の保護モード" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://helpx.adobe.com/jp/reader/11/using/protected-mode-windows.html">helpx.adobe.com</a></cite></p><p>なお、ドメイン管理下の PC は、GPO(レジストリ)を利用して一括で設定することも可能です。</p>
<pre class="code lang-registry" data-lang="registry" data-unlink>キー:<span class="synConstant">HKEY_CURRENT_USER</span><span class="synSpecial">\</span>SOFTWARE<span class="synSpecial">\</span>Adob<200b>e<span class="synSpecial">\</span>Acrobat Reader<span class="synSpecial">\</span>DC<span class="synSpecial">\</span>Privledged
値:bProtectedMode
値のデータ:0
</pre><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200704/20200704170040.png" alt="f:id:FriendsNow:20200704170040p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>以上</p>
FriendsNow
Horizon 7 に物理 PC に登録する方法
hatenablog://entry/26006613590762687
2020-06-27T23:45:55+09:00
2021-02-01T11:43:42+09:00 通常、Horizon に vCenter Server を登録し、vCenter 管理化の仮想 PC に VMware Horizon View Agent をインストールすることで、Horizon に仮想 PC が(自動で)登録されますが、vCenter の管理化にない仮想 PC や、物理 PC を Horizon に登録することも可能です。 簡易検証環境等、vCenter をたてずに Horizon を検証する際に便利です。対象の仮想 PC(または物理 PC)に Horizon View Agent をインストールする際、以下のオプションを付与してインストールします。 /v"VDM_V…
<p>通常、Horizon に vCenter Server を登録し、vCenter 管理化の仮想 PC に VMware Horizon View Agent をインストールすることで、Horizon に仮想 PC が(自動で)登録されますが、vCenter の管理化にない仮想 PC や、物理 PC を Horizon に登録することも可能です。<br />
簡易検証環境等、vCenter をたてずに Horizon を検証する際に便利です。</p><p>対象の仮想 PC(または物理 PC)に Horizon View Agent をインストールする際、以下のオプションを付与してインストールします。</p>
<pre class="code" data-lang="" data-unlink>/v"VDM_VC_MANAGED_AGENT=0"</pre><p>すると Horizon 接続サーバーを登録するボックスが表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200627/20200627234435.png" alt="f:id:FriendsNow:20200627234435p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>インストール完了後、View Administrator から仮想 PC を選択できるようになります。</p><p>以上</p>
FriendsNow
Apache の起動に失敗
hatenablog://entry/26006613542072714
2020-03-29T14:02:37+09:00
2021-04-18T21:23:22+09:00 Apache 2.2.15 でサービスを再起動した際、起動に失敗する事象に遭遇しました。 [root@hostname ~]# service httpd restart httpd を停止中: [ OK ] httpd を起動中: [失敗] /var/log/httpd/error_log を確認すると以下のエラーが出力されていました。 [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "lablog01" Configuration Failed 原因は、hostn…
<p>Apache 2.2.15 でサービスを再起動した際、起動に失敗する事象に遭遇しました。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># service httpd <span class="synStatement">restart</span>
httpd を停止中: <span class="synStatement">[</span> OK <span class="synStatement">]</span>
httpd を起動中: <span class="synStatement">[</span>失敗<span class="synStatement">]</span>
</pre><p>/var/log/httpd/error_log を確認すると以下のエラーが出力されていました。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink> <span class="synStatement">[</span>alert<span class="synStatement">]</span> <span class="synPreProc">(</span><span class="synSpecial">EAI </span><span class="synConstant">2</span><span class="synPreProc">)</span>Name or service not known: mod_unique_id: unable to <span class="synStatement">find</span> IPv4 address of <span class="synStatement">"</span><span class="synConstant">lablog01</span><span class="synStatement">"</span>
Configuration Failed
</pre><p><i>原因は、hostname と /etc/hosts が一致していないことのようです。</i></p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># hostname
lablog01
<span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># cat /etc/hosts
<span class="synConstant">127</span>.<span class="synConstant">0</span>.<span class="synConstant">0</span>.<span class="synConstant">1</span> localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
</pre><p>/etc/hosts に lablog01 を追加すると無事起動できました。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># cat /etc/hosts
<span class="synConstant">127</span>.<span class="synConstant">0</span>.<span class="synConstant">0</span>.<span class="synConstant">1</span> localhost localhost.localdomain localhost4 localhost4.localdomain4 lablog01
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
</pre><p>以上</p>
FriendsNow
CentOS で特定ポートで実行されているプロセスを強制終了する
hatenablog://entry/26006613539286527
2020-03-23T00:00:00+09:00
2021-04-18T21:27:28+09:00 CentOS 6.3 で WebGoat を起動しようとすると以下のエラーが出力されました。 *************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that's listening on port 8080 or configure this application …
<p>CentOS 6.3 で WebGoat を起動しようとすると以下のエラーが出力されました。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>***************************
APPLICATION FAILED TO START
***************************
Description:
Web server failed to <span class="synStatement">start</span>. Port <span class="synConstant">8080</span> was already <span class="synError">in</span> use.
Action:
Identify and <span class="synStatement">stop</span> the process that<span class="synStatement">'</span><span class="synConstant">s listening on port 8080 or configure this application to listen on another port.</span>
</pre><p>ポート 8080 使用されているようです。<br />
使用しているプロセスは以下のコマンドで確認できます。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># lsof <span class="synSpecial">-i</span>:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java <span class="synConstant">16915</span> root 26u IPv6 <span class="synConstant">53443</span> 0t0 TCP *:webcache <span class="synPreProc">(</span><span class="synSpecial">LISTEN</span><span class="synPreProc">)</span>
</pre><p>Java の webcache が使用しているようです。<br />
以下のコマンドで強制終了します。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># <span class="synStatement">kill</span> <span class="synPreProc">$(</span><span class="synSpecial">lsof -t -i:8080</span><span class="synPreProc">)</span>
</pre><p>もしくは、</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># <span class="synStatement">kill</span> <span class="synConstant">-9</span> <span class="synPreProc">$(</span><span class="synSpecial">lsof -t -i:8080</span><span class="synPreProc">)</span>
</pre><p>再度ポート 8080 の使用状況を確認します。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">[</span>root@hostname ~<span class="synStatement">]</span># lsof <span class="synSpecial">-i</span>:8080
</pre><p>正常に終了できていれば、表示されなくなります。</p>
<div class="section">
<h3>参考書籍</h3>
<p><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");msmaflink({"n":"CentOS6で作るネットワークサーバ構築ガイド (Network Server Construction Guide S)","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51tNM10f4xL.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4798032484","t":"amazon","r_v":""},"b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4798032484","a_id":2404697,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/CentOS6%E3%81%A7%E4%BD%9C%E3%82%8B%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%E3%82%AC%E3%82%A4%E3%83%89%20(Network%20Server%20Construction%20Guide%20S)\/","a_id":2404626,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=CentOS6%E3%81%A7%E4%BD%9C%E3%82%8B%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%E3%82%AC%E3%82%A4%E3%83%89%20(Network%20Server%20Construction%20Guide%20S)","a_id":2404698,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"cPCKP","s":"s"});</script><div id="msmaflink-cPCKP">リンク</div></p><p>以上</p>
</div>
FriendsNow
OWASP ZAP による脆弱性診断について
hatenablog://entry/26006613538949477
2020-03-22T20:38:47+09:00
2021-04-10T12:32:53+09:00 2021-02-23 OWAP ZAP とは セキュリティ診断ツール「OWASP ZAP」は、 The Open Web Application Security Project(通称 OWASP、オワスプ)という国際的なコミュニティがつくりました。 OWASP を運営しているのはアメリカの The OWASP Foundation(OWASP財団)という団体で、2001年に設立されています。いまでは世界中に 200 以上の支部を持ちます。日本にも OWASP Japan があります。OWASP 財団の目的は、Web アプリケーションを保護することで、そのために OWASP のメンバーは約 1…
<p><p><time class="entry-updated updated" datetime="2021-02-23">2021-02-23</time></p></p>
<div class="section">
<h3>OWAP ZAP とは</h3>
<blockquote>
<p>セキュリティ診断ツール「OWASP ZAP」は、 The Open Web Application Security Project(通称 OWASP、オワスプ)という国際的なコミュニティがつくりました。<br />
OWASP を運営しているのはアメリカの The OWASP Foundation(OWASP財団)という団体で、2001年に設立されています。いまでは世界中に 200 以上の支部を持ちます。日本にも OWASP Japan があります。OWASP 財団の目的は、Web アプリケーションを保護することで、そのために OWASP のメンバーは約 120 以上のプロジェクトを進行しています。誰でも無料で Web アプリケーションの脆弱性をチェックできる OWASP ZAP も 120 のプロジェクトの1つとして生まれました。<br />
出典:<a href="https://www.shadan-kun.com/blog/vulnerability/2961/">CyberSecurityTIMES</a></p>
</blockquote>
</div>
<div class="section">
<h3>OWASP ZAP インストール</h3>
<div class="section">
<h5>Java のダウンロード・インストール</h5>
<p>OWASP ZAP は Java 1.8 以上が必要なので<a href="https://www.oracle.com/java/technologies/javase-downloads.html">こちら</a>から最新版をダウンロードしてインストールしておきます。</p>
</div>
<div class="section">
<h5>OWASP ZAP のダウンロード・インストール</h5>
<p><a href="https://www.zaproxy.org/download/">こちら</a>からインストーラーをダウンロードして実行します。<br />
本例では、WIndows 64bit 版を使用しています。<br />
インストーラーを実行すると JRE を「配置する」ボタンがでてきますので、事前にインストールした「java.exe」を指定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322171041.png" alt="f:id:FriendsNow:20200322171041p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>あとは、「次へ」ボタンをクリックして完了です。</p>
</div>
</div>
<div class="section">
<h3>OWASP ZAP 設定</h3>
<p>セッションの保持方法を指定します。本例では、「現在のタイムスタンプでファイル名を付けてセッションを保存」を選択します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322171220.png" alt="f:id:FriendsNow:20200322171220p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>必ず「プロテクトモード」を指定します。詳細は後述します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322171233.png" alt="f:id:FriendsNow:20200322171233p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「ツール」➡「オプション」からローカルプロキシを設定します。ポートは本例では「18080」を指定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322171302.png" alt="f:id:FriendsNow:20200322171302p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>次に、対象サイトから各ページの URL 情報を取得するスパイダー機能を設定します。<br />
本例では、以下のとおり設定します。</p>
<ul>
<li>クロールする最大の深さ(対象サイトをどこまで深く検索するか):19</li>
<li>並列スキャンスレッド数(並列処理数):2</li>
<li>新しい URI の SVN のメタデータを解析(診断対象ファイルの指定):ON</li>
<li>新しい UR Iの Git のメタデータを解析(診断対象ファイルの指定):ON</li>
<li>OData 固有のパラメータを処理(診断対象ファイルの指定):ON</li>
</ul><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322201348.png" alt="f:id:FriendsNow:20200322201348p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>次に、対象サイトの診断を行う動的スキャンを設定します。<br />
本例では、以下のとおり設定します。</p>
<ul>
<li>並列スキャンするホスト数:1</li>
<li>並列スキャンスレッド数:1</li>
<li>スキャン中にミリ秒単位の遅延:1000</li>
</ul><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322201406.png" alt="f:id:FriendsNow:20200322201406p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「OK」をクリックします。</p><p>「ポリシー」➡「スキャンポリシー」を選択し、「追加」をクリックします。<br />
任意のポリシー名を設定し、適用を「Off」「低」を選択してから「開始」をそれぞれクリックします。<a href="#f-2e6f57c7" name="fn-2e6f57c7" title="全ての診断を無効化します。">*1</a><br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322201557.png" alt="f:id:FriendsNow:20200322201557p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>左ペインの「インジェクション」を選択し、テストのしきい値と強度を変更します。<br />
本例では、以下のポリシーを設定します。</p>
<ul>
<li>SQL インジェクション-しきい値:低</li>
<li>SQL インジェクション-強度:高</li>
<li>クロスサイト・スクリプティング(反射型)-しきい値:低</li>
<li>クロスサイト・スクリプティング(反射型)-強度:高</li>
</ul><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322201844.png" alt="f:id:FriendsNow:20200322201844p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
しきい値はアラートをあげる判定値で、”Low” ではあいまい、"Hign" では完全に NG の場合にアラートをあげます。強度はテストの精度で、"High" はより細かなテストを行ってくれます。</p>
</div>
<div class="section">
<h3>ブラウザ設定</h3>
<p>ブラウザから OWASP をプロキシとして経由して、対象サイトへアクセスすることで診断します。<br />
本例では、Firefox を使用して OWASP を指定します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322190535.png" alt="f:id:FriendsNow:20200322190535p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h3>WebGoat とは</h3>
<p>ブラウザの設定が終わったら、診断テストが可能となります。<br />
診断テストするために、WebGoat というわざと脆弱性を持たせた Web アプリケーションがありますので、あわせて紹介します。</p>
<div class="section">
<h5>WebGoat ダウンロード・インストール</h5>
<p>本例では、CentOS 6.3(GUI)にインストールします。</p>
</div>
<div class="section">
<h5>Java のインストール</h5>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synComment"># Download JDK 11</span>
<span class="synStatement">cd</span> /tmp && wget https://download.java.net/java/ga/jdk11/openjdk-11_linux-x64_bin.tar.gz
<span class="synComment"># Switch to the root user, type root password</span>
su
<span class="synComment"># Create the folder /usr/lib/jvm</span>
<span class="synStatement">mkdir</span> /usr/lib/jvm
<span class="synComment"># Extract the downloaded archive</span>
tar xzvf /tmp/openjdk-11_linux-x64_bin.tar.gz <span class="synSpecial">--directory</span> /usr/lib/jvm
<span class="synComment"># Create a symlink to the java binary </span>
ln <span class="synSpecial">-s</span> /usr/lib/jvm/jdk-11/bin/java /usr/bin/java
<span class="synComment"># exit from root user</span>
<span class="synStatement">exit</span>
<span class="synComment"># Verify that you have the right version running</span>
java <span class="synSpecial">-version</span>
<span class="synComment"># Remove the downloaded archive</span>
<span class="synStatement">rm</span> /tmp/openjdk-11_linux-x64_bin.tar.gz
</pre>
</div>
<div class="section">
<h5>WebGoat のダウンロードと実行</h5>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synComment"># Download the latest WebGoat release jar</span>
wget https://github.com/WebGoat/WebGoat/releases/download/v8.<span class="synConstant">0</span>.<span class="synConstant">0</span>.M26/webgoat-server-8.<span class="synConstant">0</span>.<span class="synConstant">0</span>.M26.jar
<span class="synComment"># Run WebGoat using java</span>
java <span class="synSpecial">-jar</span> webgoat-server-8.<span class="synConstant">0</span>.<span class="synConstant">0</span>.M26.jar <span class="synSpecial">--server.address=0.0.0.0</span>
</pre><p>参考:<a href="https://thehackerish.com/owasp-top-10-training-how-to-install-owasp-webgoat/">thehackerish</a><br />
</p>
</div>
</div>
<div class="section">
<h3>診断テスト</h3>
<p>本例では、以下の環境でテストします。<br />
リバースプロキシの構築例は後述しますので、興味があればご参照ください。</p><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322190628.png" alt="f:id:FriendsNow:20200322190628p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
<div class="section">
<h5>ブラウザで対象サイトへアクセス</h5>
<p>本例ではリバースプロキシがありますので、以下の URL へアクセスします。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>http://<span class="synConstant">10</span>.<span class="synConstant">1</span>.<span class="synConstant">12</span>.<span class="synConstant">252</span>/WebGoat
</pre><p>アクセスした後、OWASP ZAP の左ペインに対象サイトが追加されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322202428.png" alt="f:id:FriendsNow:20200322202428p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>サイトを右クリックして、「コンテキストに含める」➡「既定のコンテキスト」を選択し、対象サイトを選択します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322204108.png" alt="f:id:FriendsNow:20200322204108p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>「認証」をクリックして、認証方法、およびログインユーザーの情報を入力します。<br />
これは、WebGoat のログイン画面の先へクロールするために必要となります。<br />
本例では、Form-based Auhentication を使用し、以下のパラメータを指定します。</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>http://<span class="synConstant">10</span>.<span class="synConstant">1</span>.<span class="synConstant">12</span>.<span class="synConstant">252</span>/WebGoat
<span class="synIdentifier">username</span>=<span class="synSpecial">{</span>%username%<span class="synSpecial">}</span>&<span class="synIdentifier">password</span>=<span class="synSpecial">{</span>%password%<span class="synSpecial">}</span>
\Q/WebGoat/login\E
</pre><p>「\Q/WebGoat/login\E」は、ログアウト状態を判定するために必要なパラメータです。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322202717.png" alt="f:id:FriendsNow:20200322202717p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>次に「ユーザー」をクリックして、ログイン可能なユーザー登録します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322202734.png" alt="f:id:FriendsNow:20200322202734p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h5>スパイダー実行</h5>
<p>対象サイト内の各ページの URL 情報を収集するためにスパイダーを実行します。<br />
対象サイトを右クリックして、「攻撃」➡「スパイダー」をクリックし、作成した「ユーザー」を選択します。<br />
その後、「スキャンを開始」をクリックします。<br />
※前述の「プロテクトモード」は、対象サイトのみを診断対象とします。<br />
スパイダータブに結果が表示されます。緑は対象、赤は対象外の URL を示します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322203831.png" alt="f:id:FriendsNow:20200322203831p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
<div class="section">
<h5>動的スキャン</h5>
<p>対象サイトに対して、様々なパターンの攻撃コードを仕掛けます。<br />
対象サイトを右クリックして、「攻撃」➡「動的スキャン」をクリックし、「ポリシー」「ユーザー」で作成したユーザーを選択します。その後、「スキャンを開始」をクリックします。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322204021.png" alt="f:id:FriendsNow:20200322204021p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p><p>結果は「アラート」タブに表示されます。<br />
「赤」は危険度高、「オレンジ」は危険度中、「黄色」は危険度低を示します。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/F/FriendsNow/20200322/20200322203839.png" alt="f:id:FriendsNow:20200322203839p:plain" title="" class="hatena-fotolife" itemprop="image"></span><br />
</p>
</div>
</div>
<div class="section">
<h3>参考:リバースプロキシ設定</h3>
<p>squid.conf 設定</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synComment"># 59 行目追記</span>
http_access allow all
<span class="synComment">#60 行目コメントアウト</span>
<span class="synComment"># http_access deny all</span>
<span class="synComment"># 64行目追記(転送元サーバーの IP アドレスを指定)</span>
http_port <span class="synConstant">80</span> accel ignore-cc <span class="synIdentifier">defaultsite</span>=<span class="synConstant">10</span>.<span class="synConstant">1</span>.<span class="synConstant">12</span>.<span class="synConstant">252</span>
<span class="synComment"># 最終行に追記(転送先 Web サーバーの IP アドレスを指定)</span>
cache_peer <span class="synConstant">10</span>.<span class="synConstant">1</span>.<span class="synConstant">23</span>.<span class="synConstant">253</span> parent <span class="synConstant">8080</span> <span class="synConstant">0</span> no-query originserver
<span class="synComment"># 最終行に追記(メモリキャッシュサイズ)</span>
cache_mem <span class="synConstant">256</span> MB
<span class="synComment"># 最終行に追記(ホスト名定義)</span>
visible_hostname prox.srv.world
</pre><p>squid 再起動</p>
<pre class="code lang-sh" data-lang="sh" data-unlink>/etc/rc.d/init.d/squid <span class="synStatement">restart</span>
</pre><p>以上</p>
</div><div class="footnote">
<p class="footnote"><a href="#fn-2e6f57c7" name="f-2e6f57c7" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">全ての診断を無効化します。</span></p>
</div>
FriendsNow
ONTAP 9.4 で各カウンタを取得するコマンド
hatenablog://entry/17680117127213848052
2019-07-05T23:15:59+09:00
2021-02-23T22:35:59+09:00 コントローラ単位 例)コントローラ単位で、CPU、メモリ、IOPS 関連のカウンタを1秒間隔で取得して表示 > set diagnostic *> statistics show-periodic -object system:node -instance cl-01 -interval 1 -counter cpu_busy|memory|read_ops|write_ops|total_ops|system_ops|read_latency|write_latency|total_latency|instance_name cl: system:node.cl-01: 7/5/2019 2…
<div class="section">
<h3>コントローラ単位</h3>
<p>例)コントローラ単位で、CPU、メモリ、IOPS 関連のカウンタを1秒間隔で取得して表示</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">></span> <span class="synStatement">set</span><span class="synIdentifier"> diagnostic</span>
*<span class="synStatement">></span> statistics show-periodic <span class="synSpecial">-object</span> system:node <span class="synSpecial">-instance</span> cl-01 <span class="synSpecial">-interval</span> <span class="synConstant">1</span> <span class="synSpecial">-counter</span> cpu_busy|memory|read_ops|write_ops|total_ops|system_ops|read_latency|write_latency|total_latency|instance_name
cl: system:node.cl-01: <span class="synConstant">7</span>/<span class="synConstant">5</span>/<span class="synConstant">2019</span> 23:07:47
cpu instance <span class="synStatement">read</span> system total total write write Complete Number of
busy name memory latency read_ops ops latency ops latency ops Aggregation Constituents
<span class="synSpecial">----</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">-----------</span> <span class="synSpecial">------------</span>
<span class="synConstant">3</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">2</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
<span class="synConstant">1</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">8</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
<span class="synConstant">2</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">2</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
<span class="synConstant">1</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">2</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
<span class="synConstant">1</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
<span class="synConstant">2</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">2</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
<span class="synConstant">1</span>% cl-01 <span class="synConstant">2160</span> 0us <span class="synConstant">0</span> <span class="synConstant">5</span> 0us <span class="synConstant">0</span> 0us <span class="synConstant">0</span> Yes <span class="synConstant">1</span>
</pre>
</div>
<div class="section">
<h3>ボリューム単位</h3>
<p>例)ボリューム単位で、CPU、メモリ、IOPS 関連のカウンタを1秒間隔で取得して表示</p>
<pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">></span> <span class="synStatement">set</span><span class="synIdentifier"> diagnostic</span>
*<span class="synStatement">></span> statistics show-periodic <span class="synSpecial">-object</span> volume <span class="synSpecial">-instance</span> vol1 <span class="synSpecial">-interval</span> <span class="synConstant">1</span> <span class="synSpecial">-counter</span> avg_latency|instance_name|read_latency|read_ops|total_ops|write_latency|write_ops
cl: volume.vol1: <span class="synConstant">7</span>/<span class="synConstant">5</span>/<span class="synConstant">2019</span> 23:12:21
avg instance <span class="synStatement">read</span> total write write Complete Number of
latency name latency read_ops ops latency ops Aggregation Constituents
<span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">--------</span> <span class="synSpecial">-----------</span> <span class="synSpecial">------------</span>
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
0us vol1 0us <span class="synConstant">0</span> <span class="synConstant">0</span> 0us <span class="synConstant">0</span> n/a n/a
</pre><p>以上</p>
</div>
FriendsNow