postfixのサーバ間暗号化
DKIM, DMARC などの設定をしていたが、gmail 宛のメールの状態を確認していたら、DMARC p=quarantine に変更したのを確認できたけど、サーバ間のメール転送で暗号化がされていない様子。
この手の暗号化はデフォルトで行われているものと思っていたが甘かった。
postfix に以下の設定を追加する。
(((/etc/postfix/main.cf ))) smtp_tls_security_level = may
上記の状態の確認をしていたけど、外部サイトと25番ポートで繋がるんだな。プロバイダのファイアウォールで OP25 などの対策で、smtp(25番ポート)って接続禁止で、starttls(587) とか、smtps(over SSL:465) とかを優先的に使うと思っていたけど、google さんの smtp と 25 番ポートと繋がるな…。
DNSにDMARCを設定
SPF, DKIM の設定がうまく動いているようなので、DMARC も設定してみよう。
DMARC は、SPF, DKIM にてメールの送信者認証で問題が発生した際にそのメールをどう扱ってほしいかを受け取り側に伝えるための設定。なりすましを受けたら報告してもらえるという意味でも便利かも。
DMARCの設定
ひとまず、なりすましは無いと思うけど、DMARCの設定ミスでメールが消えても困るから、p=none を設定し、問題が起こっても特になにもしてもらわないことにする。メール受信時の成功などの統計用情報が送られてくるメールアドレスと、失敗(なりすまりが発生?やばい!?)のメールアドレスを設定。
mydns.jp の自宅ドメインの設定で、以下のような情報を返すように設定を行う。
_dmarc.tsaitoh.net IN TXT “v=DMARC1; p=none; rua=mailto:report-a@tsaitoh.net; ruf=mailto:report-f@tsaitoh.net”
p=none(なにもしない)でなく、p=quarantine(隔離), p=reject(廃棄), に設定すると、レポートメールが送られるようになる。
DMARCの状態レポートの受信設定
上で設定した、統計用メール、失敗用メールの受取先を実際に配送できるように、/etc/aliases に登録。
$ sudo vi /etc/aliases # 以下を追加 report-a: root report-f: root $ sudo newaliases
試しに Google のメールアドレスにメールを送ったら、dmarc=pass が表示されるようになった。(現時点では、p=none なので report-a 宛などのメールは送られてこない)
Authentication-Results: mx.google.com; dkim=pass header.i=@tsaitoh... dkim=pass header.i=@tsaitoh... spf=pass (google.com: domain of ... dmarc=pass (p=NONE sp=NONE dis=NONE) ...
DMARCレポート
自宅メールサーバをDKIM対応へ
Yahoo のメールアカウントに、迷惑メール対策のため「DMARC」導入を開始しますとのメールが届いている。送信側ドメイン認証のひとつで、なりすましだった場合の取り扱いを設定することができるらしい。
しかし、自宅メールサーバは、mydns.jp を用いたダイナミックDNSを用いたサイト。このため、メールサーバを立ち上げても spam 送信元と誤認(なりすましと誤認)される可能性も高く、自宅サーバからのメールは、受け取り側で迷惑メールフォルダに落ちないか心配したり、すぐに相手に届くか不安であった。
ということで、DMARC の前に、DKIM にて信用してもらえるように設定を行う。DKIMは受信したメールが正しいメールサーバから送られ改ざんされていないか確認する方式。SPFは以前に導入済みだけど、正しいメールサーバから発信されたか確認する方式なので、DKIM ほどの信頼はない。
opendkim のインストール
Debian では、opendkim のパッケージが配布されているので必要なパッケージをインストールする。設定のために セレクタ名 を postfix としてプライベートキーを生成する。/etc/dkimkeys/postfix.txt には、DNS に登録する “IN TXT” の設定が生成される。
$ sudo aptitude install opendkim opendkim-tools $ cd /etc/dkimkeys $ sudo opendkim-genkey -D /etc/dkimkeys -b 1024 -d tsaitoh.net -s postfix $ sudo chown opendkim:opendkim /etc/dkimkeys/*
opendkim の設定として、上記処理で作られたプライベートキーを登録し、DKIM キーを付加する処理のためのサーバと接続するためのソケットを定義する。
((( 以下のファイルを編集 ))) $ sudo vi /etc/opendkim.conf Domain tsaitoh.net KeyFile /etc/dkimkeys/postfix.private Selector postfix Socket inet:8892@localhost
DKIM 電子署名を付加するための postifix の設定
postfix でメールを送信する時に opendkim に接続し DKIM の電子署名を付加するために、前述のソケットに対応する設定を以下の様に記載する。
((( /etc/postfix/main.cf ))) $ sudo vi /etc/postfix/main.cf smtpd_milters = inet:127.0.0.1:8892
DKIM のための DNS の設定
DNSに、公開鍵などの設定を行う。mydns.jp を使っているので、mydns.jp にログインし、DOMAIN INFO にて、以下の設定を加える。
_adsp._domainkey IN TXT dkim=unknown postfix._domainkey IN TXT v=DKIM1; h=sha256; k=rsa; p=XXX...XXX
DNS設定が正しく反映されているか確認。
$ nslookup -query=TXT _adsp._domainkey.tsaitoh.net 8.8.8.8 _adsp._domainkey.tsaitoh.net text = "dkim=unknown" $ nslookup -query=TXT postfix._domainkey.tsaitoh.net 8.8.8.8 postfix._domainkey.tsaitoh.net text = "v=DKIM1; h=sha256; k=rsa; p=XXX...XXX
サーバの再起動とDKIMの確認
$ sudo service opendkim start $ sudo service postfix restart
試しに Google のアカウントにメールを送ったら、メールヘッダに以下が表示されるようになった。SPF は、以前に設定済みなので、自宅サーバからのメールは、確実に相手に届くようになったと思われる。
ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@tsaitoh.net .... spf=pass (google.com: domain of ....
ラズパイのインタフェース名
自宅の raspberry-pi の設定を触っていて、何気に raspi-config を起動して設定を確認していたら、適当にポチポチさわってて、Network Options, N3 Network Interface Names の設定を触ったようで、再起動がかかったらネットワークがつながらない。
しかたがないので USBキーボードとHDMI のモニタつなげて、直接設定を触ろうとするものの、HDMI に信号が出てこない。
これでは、設定を触ろうにも何もできない。
raspi-config を使わないで設定を変更
もう raspberry-pi 単独では触りようがないので、micro-SD を外して、母艦のサーバで 起動時の設定を触ることとした。
間違って触った Network Interface Names は、古い eth0 などのインタフェース名でなく、enx112233aabbcc みたいな MAC アドレス を交えた新しいインタフェース名を使うような設定(predictable interface naming)。この機能が動き出したおかげで、インタフェースの初期化に失敗している。この設定を戻さないと。
$ sudo bash ((( raspberry-piの/bootフォルダをマウント ))) # mount -t vfat /dev/sdd1 /mnt デバイス名/sddの部分は要変更 ((( predictable interface naming を無効化 ))) # vi /mnt/cmdline.txt net.ifnames=0 ファイル末尾に追加 ((( sshサーバ機能を有効化 ))) # touch /mnt/ssh ((( HDMI の出力を有効化 ))) # vi /mnt/config.txt hdmi_safe=1 先頭の方のこの行をコメントアウト 低解像度のsafeモードでHDMIを設定 # umount /mnt ((( raspberry-piのrootをマウント ))) # mount -t ext4 /dev/sdd2 /mnt ((( ネットワークの設定ファイルを変更 ))) # vi /mnt/etc/dhcpcd.conf ...
んで、母艦で編集していた micro-SD を raspberry-pi に差し戻して起動。
Raspberry-Pi のファーム壊れた
Raspberry-Pi、ネットワーク越しに rpi-update してた途中でWiFi中継器のネットワークが切れてしまった。おかげでファームウェアの更新に失敗。どうもファームウェアがぶっ飛んだようで、起動しなくなった。タイミング最悪。
その RPi は、ITオンチな1F両親向けに、家族の予定をLED掲示板に表示させてるために使ってた。でも、買い替えるといっても RPi4 買うほどの処理じゃないしな。
難しい話抜きで、Google Nest 買った方が便利かな。でも、OK,Google、使いこなせないだろうしなぁ…
サーバの電源トラブル
朝、UPS がピーピー鳴って、サーバの電源が落ちた。
電子レンジにコーヒーサーバが重なると、ブレーカーが落ちる前に UPS が反応することがある。
我が家では、サーバが DHCP サーバとなっているから、ルータなどが生きていても、ネットワークが一切使えなくなる。
UPS の劣化などを疑うけど、更新は2017年1月なので、バッテリー状態も最悪なほどでもないはず。
apcupsdによる電源停止は正しく動作
UPS が再び正常に通電できるまで、少し手間取ったけど、復旧後に状態を確認。サーバが死ぬ前にシャットダウンを開始し、正常に電源停止が出来ている。
# grep apcupsd /var/log/syslog Jan 11 08:59:30 perrine apcupsd[823]: Power failure. Jan 11 08:59:36 perrine apcupsd[823]: Running on UPS batteries. Jan 11 08:59:42 perrine apcupsd[823]: Reached run time limit on batteries. Jan 11 08:59:42 perrine apcupsd[823]: Initiating system shutdown! Jan 11 08:59:42 perrine apcupsd[823]: apcupsd exiting, signal 15
apcupsd-cgi をインストール
UPS の状態を確認するが、電源電圧が朝の起床に合わせて95[V]を下回っている。
しかし、munin では、サンプリング感覚が5分なので、落ちる瞬間にどういう状態になっているのか確認したい。ひとまず、apcupsd を CGI から表示するパッケージが出ているので、それをインストール。
apcupsd/apccontrol
apcupsd の設定ファイルを見ていると、/etc/apcupsd/apccontrol というスクリプトから、状態に応じて様々な警告が出ている。電源が UPS の電源に切り替わる時には onbattery スクリプトから、管理者宛にメールを出している。改めてメールを確認すると、
perrine UPS perrine Power Failure !!! DATE : 2020-01-11 08:59:35 +0900 HOSTNAME : perrine VERSION : 3.14.14 (31 May 2016) debian UPSNAME : perrine CABLE : USB Cable DRIVER : USB UPS Driver UPSMODE : Stand Alone STARTTIME: 2019-12-30 16:18:32 +0900 MODEL : APC ES 550G STATUS : ONBATT LINEV : 88.0 Volts LOADPCT : 23.0 Percent BCHARGE : 100.0 Percent TIMELEFT : 19.7 Minutes MBATTCHG : 5 Percent MINTIMEL : 3 Minutes MAXTIME : 5 Seconds SENSE : Low
落ちる瞬間の電圧は、88[V] 。ちょうど、ママの朝トーストとバリスタのスイッチを入れていたあたりだな。
どちらにしろ、onbattery スクリプト起動から、killpower 開始まで若干の15秒ほどの時間があるし、メールだけでなく google-home-notifier を使って、電源異常を喋らせるようにしてみた。
我が家のWiFi機器の登録
子どもに「ネットワーク機器」が新たに届く。そろそろ、専門用語も通じる様になってきたので、セットアップ方法を伝授。
普通の家なら、WiFiルータのAOSSのボタンを押して…と言うところだろうが、我が家はネットワークの登録は手作業。
(1) ルータの設定画面 http://192.168.11.1 に接続し、login: admin , password: ●●●
(2) 詳細設定→無線設定→MACアクセス制限
(3) 登録リストの編集で、登録リストの新規追加
普通の家なら、WiFiルータで DHCP サーバ機能(プライベートアドレスの貸し出し機能)が動いているので、これで終わり。
ただし、我が家では、ネットワーク機器の稼働状況を管理するために、
(4) 固定IPアドレスを割り振るために DHCP サーバへの登録、/etc/dhcp/dhcpd.conf の編集
(5) IPアドレスを名前で呼び出せるようにするための DNS サーバへの登録 /etc/db.xxxx の編集
(6) 登録されていない MAC アドレス機器を監視するために、監視対象から外すための /etc/arpalert/maclist.allow への追記
(7) その他にも hosts への追記、Samba のための lmhosts への追記
と、面倒な設定が必要。これを全部管理するのは大変なので、これらの管理の自動化を行うプログラムが作ってあるので、その設定ファイルに、機器の ホスト名・IPアドレス・MACアドレスを記載すればいい。
詳細は、各設定ファイル内のテンプレート部に併記してあるコメントを参照。
zsh の設定調整
macOSの標準シェルがzshになって、Linux環境にもzshを入れて使い始めたけど、時々予想外の動きをしてくれた。
リモートのファイルをscpでコピーしようと “scp remote:*.c .”みたいなことをしたら、no match*.c みたいなエラー。ワイルドカード展開のタイミングが bash などと違うみたい。
逆に、リモートホスト名が書いてある状態だと、ファイル名補完でリモートに接続しようとして待ちが発生して使い勝手も悪くなるといった情報もある。
そこで、上記2つの問題に対応するために、.zshrc に以下の内容を追加。
PROMPT="%F{cyan}[%n@%m %1~]%(#.#.$)%f " setopt nonomatch zstyle ':completion:*:complete:scp:*:files' command command -
macOS Catalina と zsh
macOS Catalina(10.15)
基本ファイルシステムがリードオンリーになるとか、システムの変更がいつもになく危険そうでアップデートを躊躇っていた、macOS Catalina だけど、人柱の方々の撃沈のネタもなく、ようやく Catalina を入れてみた。
でも、心配だった割には、特に重大なトラブルもなく、インストールは終わった。
この後、Macports なども更新を行った。一部、ossp-uuid のパッケージが不具合を発生して、”sudo port clean ossp-uuid” を実行した程度。
Debian環境も zsh に移行
インストールも無事に終わったけど、Catalina からは標準 shell が zsh に変更になった。そこで、身の回りの Debian の環境でも zsh を入れてみた。
ただ、インストールしようとすると、zsh-static という動的リンクをしないパッケージもある。
システムの動的リンクライブラリが異常になっても動くようにということだろう。そこで admin では、zsh-static を使うようにしておいた。
$ sudo aptitude install zsh zsh-static $ chsh -s /bin/zsh $ sudo chsh -s /bin/zsh-static root