ChatGPT/Gemini API

・GeminiAPI

https://console.cloud.google.com/
にアクセスし、プロジェクト作成

APIとサービス>ライブラリ
geminiと検索し、Gemini APIを有効化する

認証情報>認証情報を作成>APIキー
表示されたAPIキーを保存する

・ChatGPT

https://auth.openai.com/log-in

Billing>Payment methods>Add payment method
からクレジットカード登録

Billing>Add to credit balance
からチャージ

Manage Projects>API Keys
からシークレットキー取得

https://platform.openai.com/settings/organization/usage
から料金確認

GPT5のAPI利用ではVerify Organizationが必要
General>Verify Organization>Start ID Check
QRコードでスマホを開いて運転免許撮影+顔写真撮影といった流れ。

 

 

XserverVPS+Ubuntu+Docker Samba-DC

Samba DC

今回は検証目的で、通常はVPSで直接Dockerを公開するような運用はNGで、VMを経由する。

●●●=利用環境のグローバルIPアドレス

・ufw

ufw allow from ●●● to any port 9922,3306,53,88,135,139,389,445,464,636,3268,3269,49152:49252 proto tcp
ufw allow from ●●● to any port 53,88,123,137:138,389,464 proto udp

・フォルダ作成

cd /home
mkdir samba
cd samba
mkdir data
mkdir config

chmod 700 data
chmod 700 config

Docker

vim docker-compose.yml

・もし再実行で既にコンテナがあるようだったら

docker ps -a
docker compose down
※カレントディレクトリにdocker-compose.ymlがある状態で実行

・通常終了しない場合
docker ps -a
docker rm -f コンテナID

・バインドボリューム削除
rm -rf ./data/* && rm -rf ./config/*

※再起動の場合
docker restart samba-dc

※一時停止の場合
docker pause samba-dc
docker unpause samba-dc

・起動

docker compose up -d
※カレントディレクトリにdocker-compose.ymlがある状態で実行
※dはバックグランド実行

・停止
※もし自動で再起動を繰り返している場合止める
docker stop samba-dc

・初回のみエラー

53ポートが使用中とのことでエラー。

lsof -i :53

vim /etc/systemd/resolved.conf
DNSStubListener
>no
に変更する。
systemctl restart systemd-resolved

SambaRPCポート変更

※直接変更する方法
docker exec -it samba-dc vi /etc/samba/smb.conf

rpc server dynamic port range = 49152-49172

rpc server dynamic port range = 49152-49252
に変更。

docker exec -it samba-dc supervisorctl restart samba

※ポートが多すぎるコンテナ生成で失敗する。(タイムアウトしてしまう)
ポートが少なすぎるとADの同期で問題が発生する。

エラー確認

journalctl -u docker
docker logs -f samba-dc
docker exec -it samba-dc tail -f /var/log/samba/log.smbd
docker exec -it samba-dc tail -f /var/log/ntp

NTP変更

docker logs samba-dc | grep ntp
でntp系のエラー確認

・ntpサーバー確認
docker exec -it samba-dc ntpq -p
現在のntpサーバー(*)を確認しping
docker exec -it samba-dc sntp xxx.xxx.xxx.xxx

/etc/ntp.conf or /etc/ntpd.conf
使用されている方の調べ方(ps aux | grep ntpd)
を編集する。

docker exec -it samba-dc vi /etc/ntpd.conf

server ntp.nict.jp iburst prefer
を追加し、
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/

ntpsigndsocket /var/lib/samba/ntp_signd/
に変更する

docker exec -it samba-dc supervisorctl restart ntpd

・ntp.drift作成

docker exec -it samba-dc mkdir -p /var/lib/ntp
docker exec -it samba-dc touch /var/lib/ntp/ntp.drift
docker exec -it samba-dc chown ntp:ntp /var/lib/ntp
docker exec -it samba-dc chown ntp:ntp /var/lib/ntp/ntp.drift
docker exec -it samba-dc chmod 755 /var/lib/ntp
docker exec -it samba-dc chmod 664 /var/lib/ntp/ntp.drift

docker exec -it samba-dc supervisorctl restart ntpd

・一応確認

アクセス権限
cd /var/lib/ && ls -la
chown ntp:ntp /var/lib/ntp
chmod 755 /var/lib/ntp
になっていればOK。

ntpユーザがいるかどうか
id ntp

・usersharesフォルダ作成
docker exec -it samba-dc mkdir -p /var/lib/samba/usershares

SambaTool(DNS逆引き)

VPSアドレス[AAA.BBB.CCC.DDD]
から
samba-dc.xxx.local
を取得する方法

docker exec -it samba-dc samba-tool dns zonecreate localhost CCC.BBB.AAA.in-addr.arpa –username=administrator –password=xxx

docker exec -it samba-dc samba-tool dns add localhost CCC.BBB.AAA.in-addr.arpa DDD PTR samba-dc.xxx.local –username=administrator –password=xxx

docker exec -it samba-dc supervisorctl restart samba

Windowクライアント設定

Win11でNASにアクセスできなくなる対策と同じ設定。
(安全でないゲスト ログオン等)

ncpa.cpl
利用しているNICのDNSをVPSのIPアドレスにする。

sysdm.cpl
コンピュータ名タブ>変更
ドメインを選択しドメイン名を入力する。

ユーザーはadministrator
パスワードはdocker-compose
で指定したパスワードを入力する。

再起動したらログイン画面で
ドメイン名\administrator
のように入力しログインできる。初回ログイン時はかなり時間がかかる。

※アカウントもADに参加しないと以下コマンドは使えないが、このタイミングでローカルorMSアカウントを入力して、端末だけAD参加という状態も可能。

・Windows RSAT 有効化(ユーザー参加必須)

システム>オプション機能>機能表示>使用可能な機能を表示する
RSAT: ActiveDirectoryDomainServices およびライトウェイトディレクトリサービスツール
をチェックし追加すると、
Active Directory サイトとサービス
Active Directory ドメインと信頼関係
Active Directory ユーザーとコンピュータ
Active Directory 管理センター(Samba-DCでは利用不可)
が有効化される。

RSAT: グループポリシー管理ツール
をチェックし追加すると、
gpmc.msc
が有効化される。

・DNSが問題ないか確認する。

nslookup ドメイン
これでVPSのIPアドレスが返ってくればOK。

nslookup VPSのIPアドレス
これでドメイン名が返ってくればOK。

・接続状況(信頼関係)確認※管理者

nltest /sc_verify:ドメイン名
nltest /dsgetdc:ドメイン名

・時刻関係※管理者

w32tm /config /syncfromflags:domhier /update
※DCから取得に変更

w32tm /query /status
ソースを確認

w32tm /resync
同期実行

・gpupdate・

※コンピュータのみ更新場合
gpupdate /target:computer /force

エラーが発生した場合
eventvwr>アプリケーションとサービスログ>Microsoft>Windows>GroupPolicy
で確認する。

・\\xxx.local\sysvolアクセス時、このファイルは他のコンピュータから取得したものです。とついてしまう場合。

Win+R>inetcpl.cpl>セキュリティ>信頼済みサイト

\\xxx.local
を登録する。

・ドメインコントローラーへのポートテスト
Test-NetConnection “xxx.local” -Port 389

・接続テスト(ユーザダイアログ表示させる)

Test-ComputerSecureChannel -Repair -Verbose -Credential (Get-Credential)
※ドメイン\ユーザー名で入力する

・端末パスワードの更新
Reset-ComputerMachinePassword -Credential (Get-Credential)
※Smaba-DC内では、ユーザーと、端末、それぞれパスワードが存在するが端末のパスワードは自動で管理されユーザーが意識する必要はない。

※接続がうまくいかない場合sysdm.cplから一度抜けて再度登録すると直ることが多い。

・Win11ユーザープロファイルの削除

テストしているとプロファイルが多くできてしまう。
sysdm.cpl>詳細設定>ユーザープロファイル>設定
ここで不要なプロファイルを削除できる。

メモ:コンテナエントリポイントを調べて
スクリプトを追加する方法

※この方法だとinit.sh後の処理ができないので不採用。

・エントリポイントのスクリプトを調べる
docker exec -it samba-dc bash
cat /proc/1/cmdline

・作成

vim setup.sh

#!/bin/sh
sed -i ‘s|xxx|xxx|’ /etc/samba/smb.conf
sed -i ‘s|xxx|xxx|’ /etc/ntpd.conf

docker-composeで呼び出す。

volumes:
– ./setup.sh:/setup.sh
command: sh -c “/setup.sh && exec /init.sh”

メモ:シンボリックリンク

バインドしているexternalに保存
上記と同じように、エントリスクリプト内でcpできないエラーになる。

#!/bin/sh
ln -sf /etc/samba/external/smb.conf /etc/samba/smb.conf
ln -sf /etc/samba/external/ntpd.conf /etc/ntpd.conf

※lnコマンド
ln -sf [実体] [リンク]

ls -laの見え方
ntpd.conf(リンク) -> /etc/samba/external/my_ntpd.conf(実体)

メモ:Docker Network

docker network ls

・基本
xxx bridge bridge local
xxx host host local
xxx none null local

・削除方法
docker network rm samba_default

・種類
bridge
host:portsの設定は意味ない
macvlan:VPSだと難しい

メモ:SambaTool(DNSレコード)

・DBチェック
docker exec -it samba-dc samba-tool dbcheck –cross-ncs –fix –username=administrator –password=xxx

・ADに登録されている端末取得
docker exec -it samba-dc samba-tool computer list
docker exec -it samba-dc samba-tool computer show xxx

・ADに登録されているユーザー/PCリスト取得
docker exec -it samba-dc samba-tool user list
docker exec -it samba-dc samba-tool computer list

・PC追加

docker exec -it samba-dc samba-tool computer create PCNAME –user=administrator –password=xxx

・ゾーン一覧取得
docker exec -it samba-dc samba-tool dns zonelist localhost –username=administrator –password=xxx

xxx.localと_msdcs.xxxlocalが返ってくる。

・xxx.localのレコード一覧取得
docker exec -it samba-dc samba-tool dns query localhost xxx.local @ ALL –username=administrator –password=xxx

・_msdcs.xxx.localのレコード一覧取得
docker exec -it samba-dc samba-tool dns query localhost _msdcs.xxx.local @ ALL –username=administrator –password=xxx

・下位レコード取得
docker exec -it samba-dc samba-tool dns query localhost _msdcs.xxx.local gc ALL –username=administrator –password=xxx

・Aレコード削除
docker exec samba-dc samba-tool dns delete localhost xxx.local samba-dc A 172.19.0.2 -UAdministrator%xxx

・Aレコード登録
docker exec samba-dc samba-tool dns add localhost xxx.local samba-dc A サーバーIPアドレス -UAdministrator%xxx

メモ:アクセス制御リスト(ACL)

docker exec -it samba-dc samba-tool ntacl sysvolreset –username=administrator –password=xxx

docker exec -it samba-dc samba-tool ntacl sysvolcheck –username=administrator –password=xxx

docker exec -it samba-dc supervisorctl restart samba

・ACL権限関連リセット

samba-tool ntacl sysvolreset
samba-tool ntacl sysvolcheck

GoogleWorkspace SPF/DKIM/DMARC

●SPF
ドメイン所有者がドメインからメールを送信することを許可するIPアドレスを
DNSのSPFレコードとして登録する。

タイプ:TXT
ホスト名:@
値:v=spf1 include:_spf.google.com ~all

●DKIM
送信サーバーが秘密鍵の電子署名を付与、
受信サーバーは送信元ドメインのDNSに公開鍵を問い合わせて署名を検証する。

管理コンソール>アプリ>Google Workspace>Gmail>メールの認証(DKIM)
新しいレコードを生成

タイプ:TXT
ホスト名:google._domainkey
値:v=DKIM1; k=rsa; p=●●●

●DMARC
ドメイン所有者がDMARCレコードをDNSに設定し、
認証に失敗したメールの扱いをポリシーとして指定する。

タイプ:TXT
ホスト名:_dmarc
値:v=DMARC1; p=none; rua=mailto:●●●

VPSで稼働しているサービス整理(XserverVPS)

安価なプランのIndigoVPSで色々なOSS運用していたが、1つにまとめることにした。今回はXserverVPS。すでにOSSは稼働状態なので、新しい環境と並行稼働してから切り替えることにした。

ssh

sudo vim /etc/ssh/sshd_config
Port
>9922

PasswordAuthentication
ChallengeResponseAuthentication
GSSAPIAuthentication
>no

sudo service ssh restart

ufw

※Xserverにもパケットフィルタがあるので要設定。

sudo vim /etc/default/ufw
>IPV6=no

sudo ufw allow from ●●●.●●●.●●●.●●● to any port 9922 proto tcp

sudo ufw enable
sudo ufw status

・メモ

削除
sudo ufw status numbered
sudo ufw delete [番号]

Docker

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo “$VERSION_CODENAME”) stable” | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

MySQL

このMySQLは外部接続用で単独で使用。
今までは直接インストールしていたが今回はDocker。

sudo mkdir project_management
cd project_management

sudo mkdir data
sudo chown -R 999:999 ./data
sudo chmod 700 ./data

sudo mkdir conf.d
sudo chown -R 999:999 ./conf.d
sudo chmod 700 ./conf.d

sudo vim docker-compose.yml

sudo docker compose up d

cd conf.d
sudo touch external.cnf
sudo chown 999:999 external.cnf
sudo chmod 644 external.cnf

sudo vim external.cnf
[mysqld]
bind-address = 0.0.0.0
require_secure_transport = ON

sudo docker restart production_management

sudo ufw allow from ●●●.●●●.●●●.●●● to any port 3306 proto tcp
※Xserverのパケットフィルタも要設定。

dataフォルダの
client-cert.pem
client-key.pem
ca.pem
をダウンロード。

・pfx作成

pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13);openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.pfx -passout pass:${pass};echo $pass;

メモ

コンテナ一覧
sudo docker ps

コンテナに入る
docker exec -it production_management bash

コンテナ再起動
sudo docker restart production_management

コンテナ削除
sudo docker rm -f production_management

MySQL設定ファイル
/etc/my.cnf

MySQL Workbench

Standard TCP/IPを選択。

・Parametersタブ
Hostname:IPアドレス
Port:3306
Username:DBユーザー
パスワード:DBパスワード

・SSLタブ
Use SSL:Require and Verify CA
SSL Key File:client-key.pem
SSL CERT File:client-cert.pem
SSL CA File:ca.pem
ダウンロードしたファイルを選択。登録後ファイルの移動はできない。

これでVPS上のDockerのMySQLに外部から接続することが可能。

MySQLバックアップ

cd /home/project_management
sudo mkdir backup
sudo chmod 700 backup

sudo vim backup.sh

weekday=date +%w
f=/home/project_management/backup/dump_${weekday}.sql
docker exec production_management mysqldump –single-transaction -u root -p●●● project_management > $f

sudo chmod 700 backup.sh

・cron

cd /etc/cron.d
sudo vim /etc/cron.d/mysql_backup

0 2 * * * root /home/project_management/backup.sh

sudo chmod 600 mysql_backup

sudo systemctl status cron

VLAN メモ

ステップ

入ってきたフレームは、フレーム本体、どのポートから来たのか、VIDを持っており、スイッチ内部で以下の処理される。

● 1. Ingress Rules(入力)

・1-1 Acceptable Types
・1-2 PVID
・1-3 Ingress Filtering(memberのみ利用して判断)

● 2. Forwarding Process(転送)

・2-1 MACテーブル
・2-2 MemberSet

● 3. Egress Rules(出口)

・3-1 MemberSet(2で絞られた結果という意味)
・3-2 UntaggedSet

MemberSet / UntaggedSet

これらはVLANごとのデータセット。(VLANデータセット)

Port

Member

Untagged

のような構造になっている。

・MemberSet
そのVLANのフレームを通すポート

・UntaggeedSet
そのVLANフレームをタグ無しで出すポートの集合

※分かりづらいのでVID、Portの複合キーのテーブルと考える。

VID

Port

Member

Untagged

Acceptable Types / PVID / Ingress Filtering

これらはポートをキーとしたデータセット。(PORTデータセット)

Port

Acceptable Types

PVID

Ingress Filtering

こちらも実態は表だが、ポートをキーとしている表なので、ポートに属しているイメージでOK

・Acceptable Types

タグなしタグあり、どちらを受け入れるかのパラメータ
admit all / tagged only / untagged and priority-tagged onlyなど

・PVID

VIDがついてないフレームの場合、VLAN番号をフレームに書き込む。

・Ingress Filtering

これがONなら、ここで初めてVLANデータセットのmember列のみ使う。
フレームが持っている、入ったきたポート、VIDがの値が、VLANデータセット上でのmemberの値でどうなっているか判断し、falseなら捨てる。

アクセス / トランクポート

アクセス / トランクポートはパラメータのプリセットと理解する。

・アクセス

IN/OUTにタグなし、VLAN指定は1つだけ。

・トランク

IN/OUTにタグあり、VLAN指定は複数指定できる。
(原則タグあり、ネイティブVLANだけタグなし)

・ネイティブVLAN

トランクポートに指示するもの。
自身が持つVLAN番号をフレームに書き込む(デフォルトではVLAN1)
※ネイティブVLAN=トランクポートにおけるPVIDの呼び名

パラメータプリセット

アクセス/トランクのプリセット定義

アクセス(port1.1) トランク(port1.2)
member=true の数 1つ(VLAN10のみ) 複数(VLAN1,10,20)
untagged=true の数 1つ(VLAN10) 1つ(VLAN1=ネイティブ)
Acceptable Types untagged only admit all
PVID 10(=そのアクセスVLAN) 1(=ネイティブVLAN)
Ingress Filtering 有効 有効

ポートキーの表(1枚だけ存在)

ポート Acceptable Types PVID Ingress Filtering
port1.1 untagged only 10 有効
port1.2 admit all 1 有効

VLANキーの表(VLANの数だけ存在)

VLAN 1

ポート member untagged
port1.1 false false
port1.2 true true

VLAN 10

ポート member untagged
port1.1 true true
port1.2 true false

VLAN 20

ポート member untagged
port1.1 false false
port1.2 true false

iPhone移行(同一AppleID)

●転送電話

設定>アプリ>電話>自動電話転送

●ウォレット

設定>ウォレットとApplePay>カードを追加
以前ご利用のカードから追加
※交通系は複数端末不可

●LINE

・LINE>設定>トークのバックアップ
バックアップ用のPINを設定

・設定>名前>iCloud>iCloud Drive
・設定>名前>iCloud>LINE
をオン

・LINE>設定>トークのバックアップ>今すぐバクアップ

・LINE>設定>簡単引き継ぎQRコード
を表示させ、新しい端末で読み取る。

※旧端末では使えなくなる。

●PayPay

yahooでログインし、旧端末に表示されるQRコードをスキャンする。

●Authenticator

旧端末

・設定>名前>iCloud>Authenticator
をオン

・Authenticator>このデバイスのバックアップ

新端末

※新しくインストールした状態のみ復元可能
バックアップから復元を選択

ワンタイムパスワードの生成は引き継げる。
MS365はQRコードが必要になる。

●セブン銀行

旧端末

メニュー>アプリの設定>引継設定
をオンにする

新端末

引継設定がお済みの方を選択し設定する。

※旧端末では使えなくなる。

Windows Live Mailエクスポート

古い環境で利用されていたWindows Live Mailのメールデータを、Outlookから閲覧できるようにする。

プロファイル(pstファイル)を準備しないで進めると、既存のプロファイル(pstファイル)にデータを追加してしまうので注意。

control>Mail>プロファイル作成
メールの設定は不要。プロファイルだけあればOK。

Windows Live Mail>ファイル>電子メールのエクスポート>電子メールメッセージ
形式はMicrosoft Exchange、対象は全てのフォルダー、
上記で作成したプロファイル(pstファイル)を選択してエクスポート。

control>Mail
Outlook>ファイル>オプション>アカウント設定>プロファイル管理
上記どちらかで設定画面を開き、データファイル>追加で、作成したプロファイル(pstファイル)を追加する。

エクスポートが失敗する場合

全てのフォルダを対象としても特定のフォルダがエクスポートされないことがあった。破損したファイルが原因のようで、一度エクスポート、インポートをすると直った。

・Liveメール形式でエクスポート

ファイル>電子メールのエクスポート>電子メールメッセージ>Microsoft Windows Live メール

・エクスポート先のフォルダで不要な空フォルダなど削除

・Liveメール形式でインポート

ファイル>メッセージのインポート>Windows Live メール

・受信トレイ、送信済みアイテムなどのアイテムを全て削除し、保存フォルダー内のインポートされたフォルダから、受信トレイ、送信済みアイテムへコピーする。

 

AutoHotkey モニター情報取得

モニターの情報取得