アレコレ・ティプス

これ便利だな〜と思ったことなど

 firewall-cmd ポート番号 指定 と サービス名 指定。 挙動の違いについてまとめてみたら 少し危ないことが見えてきた。

気になったので、 動作を確認して、まとめておく。
 
○ この世界の中では、ポート番号指定 | サービス指定 、それぞれ少し別な動き。
 
○ filrewall-cmd --reload しなくても、 反映されたもの。reload しないといけないもの。  
「Firewalld Centos7」の画像検索結果
 

 
< 環境 >
CentOS Linux release 7.5.1804 (Core)
firewall-cmd --version  0.4.4.4
 

 
Q、 この世界( firewalld )の中での、ポート番号 指定 サービス指定、って それぞれなんであるの?
 
 サービスによっては、複数のポートを使っているため、サービス名で定義した方が、設定の「やり方」は  簡潔。
( ただし、ポート番号 指定による定義 と サービス名 指定による定義 を混在させてしまった場合は、設定確認が 煩雑になる。詳細は以下 )
 

 
Q、 サービス と ポート 両方 許可しないとダメか? ポートだけではダメか?
  
  -> どうやら、 同じ 80/tcp ないし http にしても、 厳密には、サービス名指定とポート番号指定 で 挙動に違いがあるようだ。
 
ざっくり動きを観た結果、80ポートを閉じても、http サービスが許可されている状態だと webサービスに接続することができた。
また逆に、 httpサービスを閉じて 80ポートを解放しても、 webサービスに接続することができた。
 
つまり OR条件 で 開放 された。
 
サービス名での指定 、ポート番号での指定 により、両方開けた場合は、両方 とも閉じることで、遮断された。
 
「Firewalld Centos7」の画像検索結果
 
 注記 :  " webサービス " とは 内部 tcp/80 でリッスン状態にある nodejs で たてた、 簡素なwebサーバー。アクセスされると、  適当なログを出させて確認した 。
 

 
ポート番号指定 ( --permanent オプションあり ) で firewall 設定時の疑問
 
Q、  " firewall-cmd --reload " コマンドって 意味あるの? reload しなくても反映されてるような。。
 
- - -
 
ポート番号 での 指定  --zone=public --remove-port=80/tcp では、  reload しなくても 反映された。
 
しかし、 サービス名 での指定の場合は、 reload  しないと、反映されていない部分が見受けられた。
( # firewall-cmd --list-all の結果に違いが出る  )
 
ただ  ポート番号の指定であっても、 reload する方が 確実で無難そう。冗長な気はするが、、
 

 
 
Q、サービスと ポート 両方 許可しないとダメか? ポートだけではダメか?
 
- - - 
 
-> ざっくり挙動 を 観た感じ では、片方で良いはず。
 
ただ、個人的には、 ポート番号指定 か サービス名指定  どちらかに統一すべき。
 
ポート番号 で指定した場合、コマンドで 確認しやすい。
# firewall-cmd --list-ports 
443/tcp 22/tcp
 
 
 両方の定義方法を混ぜた場合、煩雑であり、閉じたつもりが、認識違いで 片方空いていたら、目も当てられない。
 
 ただし、使い分けたい場合、もしくは、設定を2重で確実にしたい (?) などの場合は、両方の定義を使う ということになるかと思います。
 
「Firewalld Centos7」の画像検索結果
 
 

 < 余談 >
 
22/tcp 以外で ssh  させたい場合。
例えば 41451/tcp でやりたい場合は、Firewall の設定を以下のようにする。
 
# firewall-cmd --zone=public --remove-service=ssh --permanent
# firewall-cmd --zone=public --remove-port=22 --permanent
firewall-cmd --zone=public --add-port=41451/tcp --permanent
# firewall-cmd --reload
 
上から順に、
- 念のため ssh サービス を 閉じる ( 恒久的に )
- 22番ポート を 閉じる ( 恒久的に )
41451番ポート を開放する ( 恒久的に )
- 設定をリロード
 

 
< まとめ >
 
○ 本件、指定方法の違いにより、挙動が 微妙に違っていたので、その記録 が主旨です。
 
○ 例えば 普通の webサーバー が 80 番で 稼働中の時、firewalld 的に、 80/tcp が空いている状態 or httpサービスが 開放 状態の時、アクセス される。
 
○ サービス 名 指定 と ポート番号 指定、 どちらも 行なっている人は ここを特に気をつける。
意図せず、ポート or サービスが 空いていた、、なんてことがないようにしましょう。
 
○ また、 firewall-cmd は、 まだ version  が 0.4.4.4 ( 2018/10月 初旬現在 ) ということもあり、個人的には この仕様のままかどうかが懐疑的。
 仕様変更がないかどうか、 将来わからないので、大事なシステム導入の際には、今回のように挙動の確認 を 取っておくのがベター なのではないかと個人的には思った🤔
 

pm2 の ログ が 心配 ( logrotate を使う )

nodejs を pm2 でサービス・デーモン化した際に、 ログの肥大化が心配。
 
そんな時は、pm2-logrotate が手っ取り早い と思った。
 
自分なりに簡易的な検証はできたので、しばらく使って行くべく、ここに示す。
 
 
 
 

 
 
< 前提条件 >  検証してみていい感じだった環境
CentOS Linux release 7.5.1804 (Core)
• nodejs v8.12.0
• pm2 3.2.1 
• root権限 で pm2 、 nodejs を 起動して問題ない環境 ( Firewall と HAproxy をフロントに立たせて ACL させるなど )
 
 

 
 
< ひとこと結論 >
 
・ pm2 ログの肥大化が怖いなら、この2つを設定すべし。
    pm2-logrotate の 最大ログサイズ と、retain 数( ローテーションさせるログファイル数 ) である。
 
 

 
 
< 導入 >    pm2-logrotate ツールをインストール
 
○ 一応 pm2 の 全てのデーモン・ サービス を停止  しておく。
# pm2 stop all
 
○ インストール
# pm2 install pm2-logrotate
 
○ 起動する。例 root ユーザーで起動する場合。
 
# pm2 logrotate -u root
 
○ 1つのログの最大サイズを決める。
例: 10KB 
# pm2 set pm2-logrotate:max_size 10K
 
○ logの容量が 気になる人は、retain の設定もする。
 
# pm2 set pm2-logrotate:retain 7
 
こうすると 10K のlog 7つ でグルグル回すようになる。
総容量は、10K x 7 となる。
 
ローテートすると 古いログは消される。
 
( / 起動ユーザー /.pm2/logs/pm2-logrotate-out.log )
 
-> retain の数と 最大ログサイズ(単体)を 正確に指定できていれば、
   容量オーバーとなる心配がない。
 
目的のサービスを起動する。
(例)
# pm2 start node-red
 
そうすると、 ここに設定ファイルができて、
/etc/logrotate.d/pm2-(ユーザー名)
 
ここで  ログがローテーション管理されている ファイル パスも記載されている。
 
/ 起動ユーザーのホームディレクトリ /.pm2/logs/*.log
 
 

 
 
○ pm2 dashboard コマンドで、2つのサービスが起動していることを確認
 
< Node-RED のデーモン化と、ログローテーション >
 
 
 

 
 補足 :
・" 起動ユーザー " とは、pm2 を 起動させたユーザー
 
修正 : 2018/10/8
・前提条件の一部修正
 

 

QNAP の FileStation を HTTP API で使う ことはじめ

• 目的 •
 
QNAP の FileStaion へ HTTP API 経由でアクセスする。
「QNAP File Station」の画像検索結果
 
• QNAP とは •
 
「QNAP」の画像検索結果
本筋とは異なるのでざっくりと、、
 
お家や会社でクラウド的な機能を実現する高機能なNAS(ストレージ)です。
 
Fog Computing なマシン。 Fog とは 霧。 
 
クラウドの機能を手元に持ってきて使いやすくしたもの。
 
クラウドの機能を使って実現したいけど、機密情報が、、個人情報が、、データ容量代が高い、、 そういった場合の救世主。
 
ブラウザ上のGUIボタン操作で、ぽちぽちと、、VM できる。Docker も使える。VPNも使える。リモートワークに便利。Node-RED サーバーをQNAP上にたてて、VPNで繋がりあって圧倒的なスピードでの共同開発など、いつもお世話になってます。
「QNAP File Station」の画像検索結果
 
• 前提条件 •
 
( QNAP QTS File Station API v4.1 )
 
まず、QNAP (サーバー側) で API アクセスを許可する設定をしなくてOKか?
 
デフォルト設定では API アクセス許可している模様。
ただし、セキュリティID - sid を取得 しなければ HTTP API で FileStation へアクセスできない。
 
 

 
 
○ アクセストークンを取得するには?
 
1. GUI で QTS へログインしているユーザーで API アクセス権限がある設定ならば、そのユーザーで セキュリティID - sid を取得できる。取得するには、まず、そのユーザーのパスワードをエンコードし、その文字列を取得する。
 
javaScript 動作環境なら、簡単にエンコードできる。( 例: nodejs )
 
 
2. エンコードしたパスワードを使って、 QNAP HTTP API ヘ sid 要求する。
 
http://IPアドレス:8080/cgi-bin/filemanager/wfm2Login.cgi?user=ログインしたいユーザー名&pwd=エンコードしたパスワード文字列
 
成功すれば、"authPassed": 1 を含む以下、リターンがくる。
 
{
"status": 1,
"sid": "ここに目的となるsid文字列がくる",
"servername": "TVS-682など 型番 ",
"username": " ログインユーザー名 ",
"admingroup": *,
"supportACL": 1,
"enableACL": 0,
"dateFormat": 1,
"timeFormat": 24,
"genericModel": 0,
"2sv_type": 0,
"need_2sv": 0,
"send_mail_status": 0,
"authSid": "ここに目的となるsid文字列がくる",
"lost_phone": 0,
"emergency_try_count": *****,
"emergency_try_limit": 5,
"security_question_no": *,
"security_question_text": "***",
"cuid": "********************************",
"authPassed": 1,
"version": "5.1.0",
"build": "20180830"
}
 
 

 
以上より、QNAP FileStation の HTTP API 利用が開始できる。
 
( QNAP Virtualization Station 内の VM からは 取得できなかった。仮想のゲストから仮想ホストの重要なデータにアクセスできないようになっている可能性あり。 )
 

 
お試しに ・・・
 
「QNAP File Station」の画像検索結果
 
以下 GETリクエスト で QNAP の Multimedia フォルダ  のリストを取得できた。
• Get Folder List メソッド •
 
GET http://IPアドレス:8080/cgi-bin/filemanager/utilRequest.cgi?func=get_tree&sid=先ほど取得したsid&node=Multimedia
 
 
[
  {
"id": "Multimedia/@Recently-Snapshot",
"cls": "7",
"text": "@Recently-Snapshot",
"no_setup": 0,
"draggable": 1,
"iconCls": "folder",
"max_item_limit": ***,
"real_total": 2
},
  {
"id": "Multimedia/@Recycle",
"cls": "7",
"text": "@Recycle",
"no_setup": 0,
"draggable": 1,
"iconCls": "folder",
"max_item_limit": ***,
"real_total": 2
}
],
 
 
 

 

Chrony で 自動 強制 時刻 同期 設定  for 仮想OS VM ( CentOS7 )

chrony の一部設定において 日本語 サイト では 以下対策の情報が とてもヒットしづらかったので 書き起こします。

 

https://chrony.tuxfamily.org 

f:id:asuki_y:20180908120247p:plain

 

自身は 仮想OS を扱いますが、その仮想OS は、夜中の間、仮想サスペンド状態 になります。
 
そして、朝 特定の時間になると、 サスペンド から復帰した時に、時刻が 夜中のまま盛大に毎回ずれるという仕様です。( QNAP Virtulization Station の VM - CentOS7 上で )
 
そのとき、どうやって chrony の設定ファイルを使って 毎朝 強制時刻同期させるか? というテーマです。

 

f:id:asuki_y:20180421214033p:plain

 


 

[ 結論 ]

 
/etc/chrony.conf  の makestep 指定において、最後の引数を -1 に する。
 
例) 10秒以上 ずれてたら 毎回 stepモードで 強制的に時間を設定する。
 
makestep 10 -1

 


 
通常 makestep は、このような設定などが 例としてあげられています。
リアルマシン向け にも妥当な設定かと思います。

 


 
makestep 3 
 
1秒以上の 時刻ズレ があったら、3回まで ntpサーバーに同期する " 設定です。

 


 

 

しかし、 回数 無制限 の指定はどうするのか、わからなかった。
 
アシタリスク * を使ってもNGだったし🤔むむむ
 
「 回数指定を -1  にするんだよ 」
 
あ、なるほどね。。

 


 
こちら を参照しました。
 
参考1  
" 3.3. Is chronyd allowed to step the system clock?  "  の段落
 
参考2
" makestep "  の 段落
 (マイナス値を使うと、制限を無効にできます)。

Node-RED  グローバル変数

フロー外 変数を共有する。
フローを またいで変数を共有する。
フローを 横断する変数の設定。
 
いろんな言い方があるかと思いますが、
ともかく、
 
Node-Redグローバル変数 を使う。
 
 
 
1、変数の設定書き出し側のフロー内に以下内容んの function ノードを設置。
var text = " グローバル変数を設定するよ";
 
global.set("global_temp",26);
msg.payload = text;
return msg;
 
例えばこんな感じで、 timeStamp でもtrue でもいいので、
とりあえず ボタンを押して イベント発火して グローバル変数の " Set " を 行って テストをすると 使い方を 体感しやすいかと思います。
 
 
2、読み側 の フロー内に 以下内容の function ノードを設置。
 
var temp = global.get("global_temp");
msg.payload = "グローバル変数を、読み出すよ : " + temp;
return msg;
 
 
以上です。
 

iPhone iOS11 の AirDrop " すべての人 " からの通信を許可するには

 最近 弟からの相談で、昔の iPhone に入っていたデータを、 新しい iPhone に入れたい けど windowsiTunes が微妙な動きをしていてできない。 といったことだったので、 古いiPhone から 新しいiPhone へ 直接画像データを転送する方法 をアドバイスした。 どうもそれで解決しそうだ。
 
その時 AirDrop の設定変更は iOS11 で どのようにやるのか 気になったので、まとめてみた。
 
< iOS11 における AirDrop の設定変更 >
 
 メインのアプリを選択する画面 を開く。
 
下から、メニューを出す。
 
 

 
この 一番左上の部分を長押しする。( iPhone SE でした )
 
するとこのような画面に。

 
ここで AirDrop を選択する。
 
" すべての人 " を選べば、 他の iPhone から Bluetooth - AirDrop経由での画像送信を 受け付けやすくなります。
 
 
 

iPhone を simロック解除 して MNP 作業完了できた記録

GWは 朝4:30 に起きたり、GoogleMapを駆使したりして 苦戦しながら 都会の渋滞を抜けて、大自然の空気に触れてきました。
 
 写真は 5/3 軽井沢 雲場池 にある CAFE R's POND にて、景色撮影に夢中になっていたら、、

f:id:asuki_y:20180515163225p:plain

 
5/4 長野の戸隠 で 雪に降られてびっくりした。 
 
さて今回は、手持ちの iPhone SE の SIM ロック を解除して、電話番号ポータビリティー制度 MNP で電話番号を持ち運び、LINE アカウントの引き継ぎまで うまくいったので、備忘録として 大切そうなポイントと  大まかな流れ、 フロー を記録しておこうと思います。
 
 
 

iPhoneのバックアップをとっておく

iTunes を使う。
 

Sim ロック解除 申請

事前に 契約していたキャリアのアカウントで Sim ロック解除 申請処理を済ませておく
 
マイソフトバ○ク など
 

iPhoneを探す」 機能を必ず オフ にする

( アクティベーションロック を解除 )
 
 

LINEアカウント 引き継ぎ を オン にしておく

( 自分の場合は 個人的なセキュリティ〜ポリシー上 LINEに電話番号を渡さずにFacebookアカウントで利用していたので、LINEに必要な作業はなかったのかも。)
 
LINE の設定画面から アカウント引き継ぎ 設定 にいけます。

 

MNP 申請

 
これまで使用していたキャリアで MNP 申請
( ここで電話番号が法人アカウントだとBIGLOBE側でNGになる💦BIGLOBE側では、個人アカウントのみMNPに対応している? )
 
今回は、BIGLOBE のsimを使うため、一旦 MNP申請の前に 法人アカウントから 個人アカウントにする必要があった。法人アカウントから 個人アカウントに切り替えは、1日かかるので、切り替え申請の翌日から MNP申請ができた。
 

電源オフ

iPhone 電源OFF 
 

Sim入れ替え

BIGLOBEの店頭 で sim入れ替え作業 を店員さんにやってもらえた。
 

電源オン

 iPhone 電源ON
 
 

プロビジョニングプロファイルのインストール

 
まず、店舗で wifi 回線 などを借りて iPhoneから インターネットに接続。
 
指定の アドレスにアクセスして、新しいsim、BIGLOBE用の プロビジョニングプロファイルのインストール。
 
これの設定がうまくいと、 iPhone 単体で インターネットができたり、電話できるようになる。
 
うまくいかない場合は、sim Lock が解除されているか、アクティベーションロックが解除されているか、よく確認しよう。
 
だめなら、とっておいたバックアップを  使ってなんとかやる方法がある と思う。
 
自分は、今回は、すんなりいけたので、 バックアップファイルは使わずにすみました。
( でも 念のため一応 バックアップ はしておこう。)

動作確認 

電話、インターネット通信、LINE アカウントの動作確認
 
 
以上。
 
家族割引も手伝って 電話と通信データで、月額 2000円くらいになった(゚o゚)