このブログを検索

2024/11/07

postfix + dovecot (TLS有効)のメールクライアント設定

メールサーバのfqdnが mail.example.com
ユーザー名が taro
メールアドレスが taro@example.com
とする
サーバにtaroというユーザがあること
(Maildirが必要?調べればすぐわかるはず)

thunderbird

サーバ設定
 サーバの種類:IMAPメールサーバー
 サーバー名:mail.example.com
 ポート:993
 ユーザー名:taro

セキュリティ設定
 接続の保護:SSL/TLS
 認証方式:通常のパスワード認証
 送信(SMTP)サーバー
 サーバー名:mail.example.com
 ポート番号:465

セキュリティと認証
 接続の保護:SSL/TLS
 認証方式:通常のパスワード認証
 ユーザー名:taro
 
Thunderbirdの設定
 プライバシーとセキュリティ→証明書→証明書を管理→インポートをクリックして
 CA証明書をインポートする
 ※windowsにインストールしてもダメみたい


iPhone(英語)

Settings > Apps > Mail > Mail Accounts > Add Account > other > Add Mail Account 
 Name: (表示名)
 Email: taro@example.com
 Description: (説明)

INCOMING MAIL SERVER
 Host Name: mail.example.com
 User Name: taro
 Password: (パスワード)

OUTGOING MAIL SERVER > SMTP > mail.example.com
 PRIMARY SERVER: mail.example.com   が On
 > Server が有効
 Host Name: mail.example.com
 User Name: taro
 Password: (パスワード)
 Use SSLが有効
 Authentication: Password
 Server Port: 587

Advanced > INCOMING SETTINGS
 Use SSLが有効
 Authentication: Password
 IMAP Path Prefix /
 Server Port: 993

あれ、thunderbirdとiphoneでSMTPのポート番号が違うな?
どっちでもいいのか?

証明書について
postfixとdovecotでそれぞれサーバー証明書とサーバーの秘密鍵が必要。
同じものを使う。
サーバー証明書はCA証明書とチェーンになったものを使用する。
CA証明書はクライアントにインポートし、信頼する


その他
以前、DKIMとかSPFを設定したが、とくになくてもgmailとかに送れる。
(gmailと自分のサーバしか試してないが)

dovecotでsslv3エラーが出るときの証明書

postfix & dovecotでSSL化していたメールサーバーの証明書の期限が切れていたため、更新したのだが下記のエラーが表示される。

2024-11-07T04:35:55.635061+09:00 jesus dovecot: imap-login: Disconnected: Connection closed: SSL_accept() failed: error:0A000412:SSL routines::sslv3 alert bad certificate: SSL alert number 42 (no auth attempts in 0 secs): user=<>, rip=xxx.xxx.xx.xxx, lip=xxx.xxx.xxx.xxx, TLS handshaking: SSL_accept() 


以前は送受信できていて変えたのは証明書だけだから証明書の問題かなと思い、何度も証明書を作り直したのだがなおらない。

ログをみると sslv3 と書いてあるが、sslv3はもう使用されない、使用すべきでない古いプロトコルである。

postfix&dovecot でプロトコルバージョンの設定をしたが変わらない。

ログの内容でググると、「証明書が中間証明書を含んだチェーンんになっていない」という情報が出てくるのだが、チェーン証明書など使わないでも以前は送受信できていたので関係ないと思っていた。

DovecotのSSLエラー - GentooやIoTの覚え書きブログ

しかしどうしてもなおらないので、下記を参考にチェーン証明書を作って置き換えてみたらうまくいった....

OpenSSLでチェーン証明書を作成する方法 #OpenSSL - Qiita

しかしなんでチェーン証明書でないとsslv3のエラーになるのか... 納得いかない...

チェーン証明書の作り方なんて知らなかったから、間違いなく以前は普通のサーバー証明書で動いていたはず。


ちなみに証明書はopensslを使って作った自己CA(?)で署名したヤツである。


2024/11/06

CA構築 2024

ubuntu 
サーバはj***、digital oceanのvps
Ubuntu

opensslのconfigは /etc/ssl/openssl.cnf

/etc/pki/CA に移動する。
ここで全部やる。

openssl.cnfを /etc/pki/CAにコピーする。

openssl.cnfを編集

[ CA_default ]
dir             = .            # Where everything is kept
private_key     = $dir/cakey.pem # The private key

[ req_distinguished_name ]
国とかcityとかのデフォルト値を入れておく


v3_ca
というファイルを作って下記を記載し、署名時に使う
(opnessl.cnfの[v3_ca]セクションに書いたら行けると思ったがだめだったので)
 
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier=hash


#これをやっておく

touch index.txt
echo 00 > serial

#ca証明書のcsr発行

 openssl req -new -key ./cakey.pem -out ./ca.csr

※openssl.cnfにkeyの場所を書いたつもりだが効かないので指定した
なぜ効かないとわかったかというとパスワードを聞かれたから


#CA証明書のCSRにサイン

openssl ca -in ca.csr -selfsign \
-notext -config openssl.cnf -outdir . \
-extfile v3_ca -out cacert.pem\
-startdate 241101000000Z -enddate 251031235959Z

いつもつけていなかったが、-notextを指定すると読める情報が書かれない(あっても問題ない)

-extfile v3_ca がさっきのCA情報

これもいつもやらないが、-startdate -enddateを明示的に指定。
指定しないと作った時間になって切りが悪いのでこっちの方がいい。

openssl x509 -in cacert.pem -text

中身を確認

 Version: 3 であること

下記があること

 X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign

※この後別のcentos9のサーバでCA証明書を作ったが上記オプションがなくても問題なく使えた。

#iPhoneにCA証明書をインストール

証明書をテキストにコピーし、拡張子.crt (.pemでもいいはず)にして
メールでiPhoneに送る。

証明書をiPhoneにダウンロードして開き、インストールする。
(私はapple watchを使っているので、iphoneとapplewatchのどちらにインストールするかと聞かれた)

※私はiPhoneの言語を英語に設定している

すると、Settings > General > VPN & Device Management の、
DOWNLOADED PROFILE に表示されるのでタップして開くと、Not Verified と表示されている。
中身を見て、「Certificate Authority」がYesになっていること
Versionが3であること
を確認

最初に戻って、右上のInstallをタップ

ここで終わりではない。

General > About > Certificate Trust Settings > ENABLE FULL TRUST FOR ROOT CETIFICATES
で、インストールした証明書を信頼する。


2024/11/05

Raspberry Pi zeroのライブカメラの首振り

pi zeroにカメラをつけてケースに収めたものにサーボモーター(SG92R)をくっつけて、本体ごと回転させてカメラを首振りさせてみた。

pythonのソース

#!/usr/bin/python
import pigpio
import time
gpio_pwm = 18
pig = pigpio.pi()
pig.set_mode(gpio_pwm, pigpio.OUTPUT)

para_max = 110000
para_min = 70000
para = para_min
interval=20
delta=10000

try:
  while True:
    if para >= para_max:
        flag=-1
    elif para <= para_min:
        flag=1
    para = para + (delta*flag)
    pig.hardware_PWM(gpio_pwm, 50, para)
    time.sleep(interval)
except KeyboardInterrupt:
  pig.set_mode(gpio_pwm, pigpio.INPUT)
  pig.stop()



Piとの接続は、SG924Rの茶→GND、赤→5V、オレンジ→GPIO18

これを実行するためには pi gpio daemonが起動している必要がある。

sudo pigpiod

そして、motionをバックグラウンドで動かしておく。

libcamerify motion -b


このやり方はPWM制御といってduty比というものを指定する。

hardware_PWM に3つの引数を渡しているが順にGPIOのピン番号(今回は18を使用)、動作周波数(50Hz)、duty比である。

動作周波数はモータによるようだ。SG92RのデータシートがみつからないのだがSG90Rはあって、そこに50Hzと書いてあった。

duty比が大きいと大きく回転することはわかったがどこが基準でどれだけ大きくするとどれだけ回転するのかがいまいちよくわからない。

誰かのソースを動かしてみて、値を変えながら確認していった。

モーターをpi zeroのケースの下にくっつけたのだがその時の角度はテキトーである。

duty比は70000~110000の範囲で変えると、正確に測っていないが大体120度くらいの範囲で首振りできた。

初期値を70000にして、大きくしていくと半時計周りに回転する。そして11000を超えたら、こんどは小さくしていくと時計回りに回転する。70000を下回ったらまた大きくする。これを繰り返して「首振り」動作が実現できた。

モータを回してsleepする時間と、duty比の変化量を変えることでゆっくり首振りしたり、なめらかにさせたり、ガクンガクンと大幅に首振りさせることができる。


電源ケーブルやgpioと接続しているケーブルが邪魔にならないように余裕をもたせてたるみをもたせつつ固定しておく。ある程度重みのある台となるものにモーターを固定しpi zeroのケースをつけた。

仮なので両面テープやビニールテープを使っている。




2024/11/04

びんぼうでいいの nano

よくみるyoutuberが、電子工作ではarduino nanoを使う、UNOは使わない、と言っていた。

私はUNOやraspberry piを使っていたがnanoは持っていない。raspberry pi picoは最近買った。

じゃあarduino nanoを買っておこうかと思ったが、arduinoはびんぼうでいいので問題なく動くので、nanoも互換機でいいだろうと思った。

aitendoで NN328CH340A という名前で600円で売っている。ピンヘッダが付属しているがはんだ付けが必要。「びんぼうでいいの」とは書いていない。

秋月電子でピンヘッダ実装済みのものは3560円だ。


ピンヘッダをはんだ付けして使ってみる。USB-Cケーブルを挿すと L というLEDがチカチカ点滅する。「故障か?半田ミスか?」と思ったが、デフォルトで本体のLEDを点滅させるスケッチが有効になっているとのことだった。

自分でスケッチを書いて外付けのLED+抵抗につなぐと動いた。



----------------------
void setup()
{
  pinMode(2, OUTPUT);
}

void loop()
{
   digitalWrite(2, HIGH);
   delay(1000);
   digitalWrite(2, LOW);
   delay(1000);
}
-----------------------

本体のLEDがまぶしいのでビニールテープを貼って隠した。

2024/11/01

Raspberry Pi Zero 2 WH で カメラモジュールv3

スイッチサイエンスで本体とカメラ(広角)とケースとカメラ用ケーブル(zero用短め)を買った。

普通のカメラでよかったのだが売り切れていて広角しかなかった。


OSは、imagerでrecommendされた 64-bitのデスクトップこみのBookwormである。

imagerでOSをインストールするときにwifiとsshを有効にしておく。

起動したらdhcpサーバーで割り当てられたIPアドレスを確認しsshする。

raspberry piでのdhcpのIPアドレス固定設定はもう dhcpcd.confでやらなくなったようだ。

面倒くさいのでdhcpサーバの方でアドレスを固定した。


いったんshutdownしてカメラをつないで起動し、apt update/upgradeして再起動した。

libcamera-hello を実行する。sshなのでプレビュー画面は表示されないがカメラは認識されている。

motionをインストールする。

いつもの設定をして

libcamerify motionを実行

pi5のときと同じエラーになったので

同じように

apt install libcamera-v4l2

を実行すると、motionが動いた。

IPA moduleのエラーが出るのも同じだが無視。


zeroだから非力かなと思ったが、2048x1536でも大丈夫だった。


2024/10/31

Raspberry Pi camera module v3 で motion

camera module v3を入手した。

普段motionを動かしているpi3とpi5の2台があるのだが、まずpi3にv3 cameraをつけてみた。

認識はして、コマンドで静止画も撮影できるのだがmotionで動かない。

いろいろ調べたのだがうまくいかず、いったんあきらめる。


pi5で試す。

OSはこれ。


root@goro:/home/admin# lsb_release -a

No LSB modules are available.

Distributor ID: Debian

Description:    Debian GNU/Linux 12 (bookworm)

Release:        12

Codename:       bookworm


root@goro:/home/admin# uname -a

Linux goro 6.6.51+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08) aarch64 GNU/Linux


カメラを接続するインターフェースが小さくなっている。さいわいv3カメラにそれ用のケーブルが付属していた。

pi5の公式(?)ケースを使っていてカメラをはめるところがない。さらにケーブルを出すところもない。

が、ethernetポートの上の隙間からちょうどいい感じに出せた。まるでそこから出すように設計されているかのようだ。

丸裸なのもいやなので厚紙で簡易的なケースを作って、セロテープでケースにとめた。



vcgencmd get_cameraコマンドは使えない。(legacy cameraがdisableだから?)


v3カメラをpi5の新しいOS(bullseye以降?正確なことはわからない)で使う場合、
libcameraというライブラリを使うのだが、たぶん最初から入っている。

32bit OSとか古いバージョンだと、aptで追加インストールする必要がある。

私の場合、最近いろんなPiをいじったのでどうしたかよく覚えていないが、Pi5に関してはその時(確か今年の夏ごろ)の最新のOSを入れて、最近(2024年10月ごろ)apt update+upgradeで新しくしただけだったと思う。

結論を言うとv3カメラをmotionで使うには

libcamerify motion

というコマンドを使う。

まずやってみたらエラーになった。

root@goro:/home/admin# libcamerify motion
ERROR: ld.so: object '/usr/lib/aarch64-linux-gnu/libcamera/v4l2-compat.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
[0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
[0:motion] [NTC] [ALL] motion_startup: Logging to file (/var/log/motion/motion.log)



root@goro:/home/admin# apt install libcamera-v4l2

をやったら今度は違うエラーが出たがとりあえずmotionは動いた。

root@goro:/home/admin# libcamerify motion
[0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
[0:motion] [NTC] [ALL] motion_startup: Logging to file (/var/log/motion/motion.log)
[0:07:09.296345338] [2655] ERROR IPAModule ipa_module.cpp:171 Symbol ipaModuleInfo not found
[0:07:09.296383856] [2655] ERROR IPAModule ipa_module.cpp:291 v4l2-compat.so: IPA module has no valid info
[0:07:09.296399078] [2655]  INFO Camera camera_manager.cpp:325 libcamera v0.3.2+27-7330f29b
[0:07:09.305047271] [2656]  INFO RPI pisp.cpp:695 libpisp version v1.0.7 28196ed6edcf 29-08-2024 (16:33:32)
[0:07:09.529782577] [2656]  INFO RPI pisp.cpp:1154 Registered camera /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a to CFE device /dev/media2 and ISP device /dev/media0 using PiSP variant BCM2712_C0
[0:07:09.530605706] [2655]  INFO Camera camera.cpp:1197 configuring streams: (0) 1024x768-YUV420
[0:07:09.530722002] [2656]  INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected CFE format: 1536x864-PC1B
[0:07:09.531933297] [2655]  INFO Camera camera.cpp:1197 configuring streams: (0) 1024x768-YUV420
[0:07:09.532014593] [2656]  INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected CFE format: 1536x864-PC1B


v2と画質が全然違う。v2は800万画素でv3は1200万らしい。

motionの画像のサイズを2048x1536にしてもきれいに見える。framerateを上げるとグニャグニャと波打つようになる。5だとほとんど気にならないがかすかにグニャグニャしている。

Piのメモリは8GBである。