アレコレ・ティプス

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

HAproxy  BASIC認証 REST API 用 と ブラウザ GUI 認証で 処理を切り分ける

HAproxy の BASIC 認証で、REST API 用 に適した処理の 記述 と ブラウザから ユーザー パスワードを手入力させるBASIC 認証では、適した書き方が違うようなので、処理を書き分けた。
 

 
 

( 動作環境メモ )
 
Ubuntu 18.04.4 LTS
HA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22
 

 
 
 
## ( 上段 global のコンフィグ等は 略します。 )
## -------------------------------------------------------
## userlist
## -------------------------------------------------------
userlist 管理者_user
  user   管理者     password   ハッシュ化したパスワード
userlist panpy_user
  user   一般usr   insecure-password   パスワード平文    
 
# ---------------------------------------------------------------
# フロントエンドを定義
# port : 80  で待ち受け
# ---------------------------------------------------------------
frontend http-in
 
        bind    *:80
 
        # forntend 内に BASIC認証を記述しない。
        # backendの定義で記述し、BASIC認証の処理を用途で分ける。
 
        # DashBoard GUI
        acl url_gui        path_beg    /gui
        use_backend        gui_servers    if    url_gui
 
        # API SERVER 
        acl url_api        path_beg    /api
        use_backend        api_servers    if    url_api
 
        default_backend        get_away
 
# -------------------------------------------
# バックエンドを定義
# -------------------------------------------
backend gui_servers
 
#       GUI用のBASIC認証処理
        acl auth_一般_ok http_auth(panpy_user)
        http-request     auth if !auth_一般_ok
        server        gui-app        127.0.0.1:1880 check
 
backend api_servers
 
#       REST API用のBASIC認証処理
        acl auth_管理者_ok http_auth(管理者_user)
        http-request    deny unless auth_管理者_ok
        server        api-svr        127.0.0.1:1881 check
 
# -------------------------------------------
# Good-bye
# -------------------------------------------
backend get_away
    http-request deny
 
# -----------------------------------------------
# 上記、漢字のところは適宜 半角英数に修正すると使えるかと思います。
 
 
ーーー
 
ポイントは、
 
・フロントエンド定義のところで BASIC認証を記述しない。
・バックエンド定義のところで、BASIC認証を記述する。
 
こうすることで、 それぞれに意図したBASIC認証が動作してくれるようになりました。
 
HAproxy は、フロントに立たせると、 NodeRED のセキュリティを高めてくれたり相性いいと思うので、どんどん積極的に組み合わせて 使っていきたい!
 
 

 
参考:
 
 

iOS13 に アップデートしたら、無駄通信が異常に増え、通信制限くらう 問題

iOS12 から iOS13 にアップデートしたら、しばらくして通信制限をくらいました。

アプリで通信状況を調べると、明らかに、異常に無駄な通信が増えました。

結構、問題解析が地道で大変だったので、誰かの助けになれれば、、

ここに共有します。

nsdev.jp/img/iOS13.png

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

( 環境メモ )

・ iOS12.x.x から iOS13.1あたりにアップデートして 生じた問題

・iPhone SE2

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

OSが最新でも改善しない。。

 

どのアプリだ?

 

本気になってiOS13端末内通信状況と、ひとつひとつアプリをwifi以外通信禁止設定にして調べたところ、 iOS13 の音楽アプリ が勝手に何かをダウンロードしてしまうような挙動を観測。

 

iOS 13 の音楽アプリの通信に制限をかけたところ、問題は改善されました。

通信は、3G 4G 回線を使わないようにさせて、wifi のみに。

 

> 設定アプリ起動

> "設定"

> "ミュージック"

> "モバイルデータ通信"    <= これをOFFに!

 

-> 無駄な通信が大幅に改善しました。

 

自分は、よく楽曲を単体で購入するので、そのバックグラウンドダウンロードが iOS13から 勝手に多く働くようになってしまったのだろうか。という 気がする。

 

ギガ残量 通信量チェッカー

ギガ残量 通信量チェッカー

  • Rigato, inc.
  • ユーティリティ
  • 無料

apps.apple.com

 

このアプリは 見やすいし、めちゃくちゃ助かりました。

用途は違うとは思いますが、また、通信過多な問題が出たらこれで解析しようと思います☺️

 

 

 

HAproxy で Basic 認証を使う際の パスワード文字列 エンコード

 
HAproxy における Basic認証のパスワード設定で、” insecure-password “ オプション を使いたくないとき。
パスワード を ハッシュ化する必要がある。
 
その手順 を書き留めておく。
 
 

 
環境:
 
Ubuntu "18.04.4 LTS (Bionic Beaver)"
HA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22
 

 
生成手順
 
 
$ sudo apt-get install whois
 
これで ハッシュ化されたパスワードを生成できます。
 

 
 DESを使った 例
 
$ printf  "password12345" | mkpasswd --stdin --method=des
MX0tC7Y9TYWEk
 
他にも  MD5, SHA-256 or SHA-512 に HAproxy は、対応しているようです。
 

 
 
上記で エンコードした パスワード は  HAproxy の 設定 cfg ファイル の Basic 認証 用 で使用できます。
 
エンコードしない場合は、 insecure-password  オプションを使うことで 対応可能です。
 
haproxy.cfg 内の ユーザーリスト部 ( なければ自分で 記述してOK )
 
以下では is-admin という グループ定義もしています。
 
  userlist basic-auth-list
  group is-admin
 
  user admin  password MX0tC7Y9TYWEk             groups is-admin
  user guest  insecure-password guestpassword
 
 
参考:こちら より詳細に紹介されています。英文です。

ラズパイ MJPG streamer サービスデーモン化

Webカメラ として ラズパイ & MJPG streamer の組み合わせは AIカメラとしても使いやすいし、超便利。
 
そんな中、サービス化・デーモン化 で Permission denied ( パーミッション エラー ) 。
少し躓いた。
UNIT ファイル の挙動、整理のため、メモ。
 
 

f:id:asuki_y:20200514173655p:plain

MJPG-streamer
 

 
 

< 動作前提環境メモ >

 
Raspberry Pi 3 Model B Plus Rev 1.3
・Raspbian GNU/Linux 10 (buster)
・mjpg-streamer が通常動作する環境
・( v4l2-ctl コマンドが 普通に使える状況 )
・普通に使えるUSBカメラ
vim を使っています。 適宜 お好みの テキストエディタで。
 
 

 

手順

 

接続したUSBカメラデバイスIDを取得 
v4l2-ctl --list-devices
 
USB2.0 PC CAMERA (usb-3f980000.usb-1.2):
    /dev/video0
    /dev/video1
 
 
" usb-3f980000.usb-1.2 "
 
これを記録しておく
 
sudo systemctl list-units -t device
 
 
以上の結果より  USBアドレス に該当する行から デバイスID を取得
 
以下  1行、カメラのデバイスID を メモっておいた。
 
sys-devices-*****usb-3f980000.usb-****
 
 
vim /etc/systemd/system/mjpgStreamer.service
 
 

 
UNIT ファイル編集内容
 
[Unit]
# たてるサービスの説明
Description=MJPEG-Streamer
 
After=udev.target
After=sound.target
After=syslog.target
 
# 上記で取得したカメラのデバイスIDをこちらへ反映する
BindsTo=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
After=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
 
[Service]
type=simple
# mjpg ストリーマー 起動コマンド。パスワードなど オプションはお好みで変更
ExecStart=/usr/local/bin/mjpg_streamer -i 'input_uvc.so -f 20 -d /dev/video0 -r 640x480 -n -y' -o 'output_http.so -w /var/www -p 18880'
 
[Install]
WantedBy=multi-user.target
WantedBy=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
# 末尾のこの項目も一応 デバイスIDを反映しておく
 
 

 
(今日の つまずき ポイント)
ただし、service UNITファイルにたいして root権限のままでは、動作できないので注意。(状況によって)
 
生成した UNITファイルの 権限変更を行う。
たとえば mstuser に 権限を与えたければ、
 
sudo chown mstuser:mstuser /etc/systemd/system/mjpgStreamer.service
 
 
( pi ユーザーがよければ、上記 ユーザー名 グループ名は適宜修正してください )
 
 
最後に サービスデーモン化
 
systemctl enable mjpgStreamer.service
 
これで sudo しなくても  MJPG - streamer サーバー が起動・ 実行できた!
 
 

 

参考

 
 
Raspberry PiでUSB Web CAMの動画を配信する ~mjpg-streamer自動化編~
 
 
 
 
 

ラズパイ chromium  を自動起動する

 
目的
 
Raspberry Pi 起動時 chromium自動起動させたい。
 
目次

メインメニュー

Raspberry Pi の設定 "
“ システム "タブ

f:id:asuki_y:20200423123313p:plain

ラズパイ設定
 
“ 自動ログイン “ の ところで  “ 現在のユーザーとしてログインする”  にチェック     しておけば 

f:id:asuki_y:20200423123407p:plain

自動ログイン設定
 

crontab に 1行 追記

起動時に 不要 となるファイルを消しておきます。
 

f:id:asuki_y:20200423123504p:plain

crontab に起動時コマンドを追記
 
 

autostart の 設定・登録

 
$ vi /etc/xdg/lxsession/LXDE-pi/autostart
 
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
 
# 以下追記 #
 
@xset s off
@xset -dpms
@xset s noblank
@chromium-browser --noerrdialogs --kiosk  --incognito  
 
 
 

あとがき: autostart の 場所が変わった

 
昔は ここにあったファイル
vi ~/.config/lxssion/LXDE-pi/autostart
 
こちらに引っ越しになったそう ようですね。
 /etc/xdg/lxsession/LXDE-pi/autostart
 

 
 
詳細は以下参照です。
 
参考  自動 chromum 起動
 
ここ autostart 引っ越し先 について
 
参考:  crontab 起動時 自動 実行
 

Docker 使っていて タブ補完 が不十分だったので 補完機能を強化

 
 
 
docker inspect コンテナ名
 
 
って 入力したいときなどに、OSの環境によっては、 コンテナ名 まで Tab キーで 補完 されません。
 
 
bash-completion  をインストールしているのに、、
 
いまいち 補完 が 不十分 、、
 
というとき、以下で 補完機能を強化できます。
 
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
 
 
これで docker コマンドが快適になった!
 
docker タブ
docker  補完 
 
bash complete , completion で検索してもなかなか 欲しい情報にたどり着かなかったのでメモ。
 

 
 
環境メモ
 
Ubuntu 18.04.4 LTS (Bionic Beaver)
Docker version 19.03.8, build afacb8b7f0
docker-compose version 1.25.4, build 8d51620a
 
参照 : 公式
 
 

Docker インストール ubuntu 18

☐ 目的

サクっと ubuntu 18 に Docker ( CE ) をインストールしたい。
 

☐ 動作環境 確認

 
Ubuntu 18.04.4 LTS (Bionic Beaver)
 
x86_64 / amd64
 
目次
 
 
 

 
まず いつもの。
新しいパッケージ情報にリーチできるようにします。
 
sudo apt-get update
 

☐ リポジトリ 設定

 
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
 
Docker 公式 GPG キー 追加。
 
 
必要に応じてフィンガープリントチェック
 
sudo apt-key fingerprint 0EBFCD88
 
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]
 
sudo add-apt-repository \
   $(lsb_release -cs) \
   stable"
 
x86_64 / amd64 の ケース
 
その他は公式を要チェック
 
 
Docker エンジンをインストール
 
sudo apt-get install docker-ce docker-ce-cli containerd.io
 
細かくバージョン 指定してインストールしたい場合も公式をチェックしてから install だ:
 
 
sudo apt-get install docker-ce docker-ce-cli containerd.io
 
インストール完了しました。
 
 
sudo docker --version
 

Docker version 19.03.8, build afacb8b7f0

 

 ☐ 簡易動作確認

sudo docker run hello-world
 
1b930d010525: Pull complete 
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest
 
 
sudo docker ps -a
 

 
 
 
このように hello-world イメージができていれば インストール  OK だと思います。
 
Docker バージョン 17 みたいに 一部 Volume 動作でバグが。。。 とか まではさすが にこれで確認できないですね🤔
 
ーー
 
参照:公式 インストール方法
 
 

 
余談:
 
 昨今 windows OS 管理が面倒で Mac ユーザーになって久しい 今日この頃 ですが、 WSL2 の登場により、
 windows 関連のニュースで最も衝撃 を受けて、Windows 10 Pro が欲しくなりました。 サンドボックス めちゃくちゃいいな。。 サンドボックスに保存機能がついたら Windows 最強では、、、
Windows で 煩わしいと思ってたこと の多くが ふっ飛ぶ 勢い。