Raspberry Pi 3 に Zabbix をインストールする

Raspberry Pi 3 Model B
OS: Raspbian Buster Lite

先ずは Download and install Zabbix へアクセスしてインストールしたいZabbixのバージョンやOSなどを選択する。そうすると其れに合わせたインストール手順が示されるから此れに従う。データベースにはMySQLを選択した。

$ sudo wget https://repo.zabbix.com/zabbix/4.0/raspbian/pool/main/z/zabbix-release/zabbix-release_4.0-3+buster_all.deb
$ sudo dpkg -i zabbix-release_4.0-3+buster_all.deb
$ sudo apt update
$ sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent

OSインストール直後の状態からZabbixパッケージのインストールを実施すると81にも及ぶパッケージの導入が始まる。

インストールが一段落したら、一先ずrootユーザでMySQLにログインする。パスワードは空っぽうだから何も入力せずにEnterを押下する。そうしてデータベースとユーザを作成する。データベースを作成する際にうっかりして character set utf8 collate utf8_binを忘れたら、データをインポートする段になって ERROR 1071 (42000) at line 165: Specified key was too long; max key length is 767 bytes などとエラーが発生して処理が進まなくなった。

デフォルトでセットされる文字コードのutf8mb4であると1文字あたり最大で4バイトも使用してテーブルのカラムに収まりきらないサイズになるから、此れを抑えるために1文字3バイトのutf8を態々指定する模様である。指示されたとおりにコピー&ペーストすることの肝要さを思い知ったものである。

$ sudo mysql -uroot -p
Enter password:

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'password';
MariaDB [(none)]> quit;

次はZabbixサーバがデータベースに接続するためにユーザのパスワードを記載しておく。

$ sudo vi /etc/zabbix/zabbix_server.conf
DBPassword=password

それからApacheの設定ファイルにあるPHPのdate.timezoneを編集するのであるが、PHP5とPHP7の場合でそれぞれ場合分けをして設定が記載されているから知らずPHP5のほうだけを編集して満足していると、この後にある作業で Time zone for PHP is not set (configuration parameter "date.timezone"). となって立ち往生する。公式の手順に沿うとPHP7がインストールされるからそちら側を弄う必要がある。

$ sudo vi /etc/zabbix/apache.conf
    <IfModule mod_php7.c>
(snip)
        # php_value date.timezone Europe/Riga
        php_value date.timezone Asia/Tokyo
    </IfModule>

$ php -v
PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
$ sudo systemctl restart zabbix-server zabbix-agent apache2
$ sudo systemctl enable zabbix-server zabbix-agent apache2
(snip)
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /lib/systemd/system/zabbix-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /lib/systemd/system/zabbix-agent.service.

そうしたらブラウザでZabbixのページにアクセスしてウィザードに従いながら設定をする。

インストール直後の初期状態ではユーザ名:Admin、パスワード:zabbixでサインインする。

さっそくZabbixがサーバのグラフ制作に取り掛かってくれているのであるが、如何せん文字が豆腐状態であるから困る。之を解消せねばならない。Notoを導入してZabbixが採用するフォントとして設定してやれば終いである。

$ sudo apt install fonts-noto-cjk
$ cd /etc/alternatives/
$ sudo ln -sf /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc zabbix-frontend-font

仮想化ベースのセキュリティが有効であるとVMware Workstationの仮想マシンが起動できない

Windows 10 Pro Version 1909
VMware Workstation 15 Pro 15.5.1
CPU: Intel Core i7-3520M

自端末へ VMware Workstation 15 Pro をインストールして幾ばくかの時間を隔てたのちに改めて仮想マシンの起動を試みたところ、見慣れぬエラーメッセージに見舞われて面食らった。曰く、

VMware Workstation と Device/Credential Guard には互換性がありません。VMware Workstation は Device/Credential Guard を無効にした後で実行することができます。詳細については、 http://www.vmware.com/go/turnoff_CG_DG を参照してください。

とのことである。調べてみるとWindows Defender Application GuardやWindows サンドボックスを導入すると仮想化ベースのセキュリティが有効になって、此れがVMware Workstationと相容れない情勢であるBIOSでIntel VT-xを有効にしてあっても無効であるものと判断されている。

何もしていないのに壊れたと憤慨したものであるが、Windows サンドボックスを有効にした覚えがある。何もしていないのに壊れたという申し立ては必ず嘘である。

こういう事では困るから慌ててWindows サンドボックスを無効にしたのであるけれども此れがちっとも効果が無い。コマンドプロンプトからmsinfo32を立ち上げて「システムの要約」→「仮想化ベースのセキュリティ」項目を確認すると値は「実行中」である。はてな、此は如何にと思案に暮れているとどうも無効にする手順が別に在る模様である。

先ずはローカルグループポリシーエディターを起動して、「コンピューターの構成」→「管理用テンプレート」→「システム」→「Device Guard」と辿る。そうして二つの設定「Windows Defender アプリケーション制御を展開する」「仮想化ベースのセキュリティを有効にする」を無効とする。

次いで幾つかのレジストリキーを削除する。

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\LsaCfgFlags
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\LsaCfgFlags
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\EnableVirtualizationBasedSecurity
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\RequirePlatformSecurityFeatures

自端末には EnableVirtualizationBasedSecurity しか見当たらなかったから此れのみ削除した。続いてコマンドプロンプトを管理者として実行して以下のコマンドを放り込む。全体どういう了見でこのUUIDが世に出たか知れないけれども兎に角、効く。

mountvol X: /s
copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y
bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"
bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
mountvol X: /d

ここまでこなしたら端末を再起動する。起動中に Credential Guard を無効にするか否かを問われ、無効にするならWindowsキーもしくはF3キーを押下する。時間制限があるからもたついていると何もせぬままに起動が進行してしまう。

あらためてmsinfo32を実行すると無事、仮想化ベースのセキュリティが無効になり仮想マシンの起動も恙無く済んだ。VMware Workstation ProとWindows サンドボックスの両立はむつかしいようであるから欲を張らずに、仮想化ベースのセキュリティを都度、有効か無効に切り替えてどちらかを選ぶしかないようである。

参考:
Windows Defender Credential Guard の管理
“VMware Workstation and Device/Credential Guard are not compatible” error in VMware Workstation on Windows 10 host (2146361)

ownCloudのインストール時にMySQLのエラーが表示されて処理がちっとも進まない

ownCloud: 10.3.2
MySQL: 8.0.18

ownCloudをインストールしようとするとこういうエラーメッセージを受け取るようになった。

Error while trying to create admin user: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

どうもMySQL8系からは認証プラグインにcaching_sha2_passwordが標準で採用されるようになり、従来からのmysql_native_passwordから置き換わった模様である。ownCloud 10.3.2はこの流れに未だ対応していない為にエラーとなっているのである。これを避けるために一先ずMySQL接続ユーザの認証プラグインをかつてのmysql_native_passwordへと設定した。

mysql> create user 'ocadmin'@'localhost' identified by 'p@ssw0rd';
mysql> grant all on owncloud.* to 'ocadmin'@'localhost' with grant option;
mysql> select user, plugin from mysql.user where user = 'ocadmin';
+---------+-----------------------+
| user    | plugin                |
+---------+-----------------------+
| ocadmin | caching_sha2_password |
+---------+-----------------------+

mysql> alter user 'ocadmin'@'localhost' identified with mysql_native_password by 'p@ssw0rd' ;
mysql> select user, plugin from mysql.user where user = 'ocadmin';
+---------+-----------------------+
| user    | plugin                |
+---------+-----------------------+
| ocadmin | mysql_native_password |
+---------+-----------------------+

mysql> create database owncloud;

そうして改めてownCloudのインストールを試みると恙無く完了したのでよかった。

参考:
6.4.1.2 Caching SHA-2 Pluggable Authentication

Squidをソースから導入してSSL Bumpを設定する

サーバOS: Ubuntu 18.04 Server
クライアントOS: Windows 10 Pro version 1903
Squid 4.9

まずはソースコードを取得するところから始める。

$ wget -c http://www.squid-cache.org/Versions/v4/squid-4.9.tar.bz2
$ wget -c http://www.squid-cache.org/Versions/v4/squid-4.9.tar.bz2.asc
$ gpg --recv-keys B06884EDB779C89B044E64E3CD6DBF8EF3B17D3E
$ gpg --verify squid-4.9.tar.bz2.asc
(snip)
gpg: Good signature from "Amos Jeffries (Squid Signing Key) <squid3@treenet.co.nz>" [unknown]

libssl-dev パッケージが不足していると configure: error: library 'crypto' is required for OpenSSL というエラーメッセージが突き付けられるから予めの導入を要する。

$ sudo apt install libssl-dev
$ sudo useradd -s /bin/false squid
$ tar jxvf squid-4.9.tar.bz2
$ cd squid-4.9/
$ ./configure --prefix=/usr/local/squid --enable-ssl-crtd --with-openssl --with-default-user=squid
$ make all
$ sudo make install

次いで自己署名証明書を生成する。これはルート証明書として取り扱うことになる。証明書のセキュリティが侵害されるとMITM攻撃に晒される恐れがあるというから十分に注意を払わねばならない。

$ cd /usr/local/squid/etc/
$ sudo openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
$ sudo openssl x509 -in myCA.pem -outform DER -out myCA.der

作成した自己署名証明書をクライアントの端末へコピーしてインストールする。

証明書を右クリックしてコンテキストメニューから「証明書のインストール」を選択
「証明書をすべて次のストアに配置する」を選択して「参照」
「信頼されたルート証明期間」を選択して「OK」を押下す
「次へ」をクリック
「完了」をクリック
インストールを許すなら「はい」をクリック

実際に証明書がインストールされたか否かを詳らかにするため inetcpl.cpl を実行してインターネットのプロパティを開く。

「コンテンツ」タブを開いて「証明書」ボタンをクリック
インストールされたことを確認

squidサーバの設定へ戻り、証明書の所有者とパーミッションを変更してsquidユーザだけが読み取れるようにしておく。

$ sudo chown squid:squid myCA.pem
$ sudo chmod 400 myCA.pem
$ ls -l myCA.pem
-r-------- 1 squid squid 3095 Nov 24 00:05 myCA.pem

設定ファイル squid.conf の編集に移る。動的に生成された証明書をキャッシュできるメモリやディスクの容量を指定する箇所があるけれども、どの程度が適当かとんと検討がつかぬから思い切って公式サイトの手引きの4倍をセットした。

あと sslcrtd_program の項目に ssl_crtd コマンドを指定しているサイトが其処此処に見られたけれども、此れがどうしても見当たらなくてこまった。リリースノートを過去へ遡ってゆくとバージョン4.0.5からは名称が security_file_certgen へと移り変わった模様である。

$ sudo vi /usr/local/squid/etc/squid.conf
#http_port 3128
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/usr/local/squid/etc/myCA.pem
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/cache/squid/ssl_db -M 16MB
sslcrtd_children 20
sslproxy_cert_error deny all
ssl_bump stare all

動的に生成される証明書をキャッシュしておくディレクトリを用意する為に次のコマンドを実施する。

$ sudo /usr/local/squid/libexec/security_file_certgen -c -s /usr/local/squid/var/cache/squid/ssl_db -M 16MB
Initialization SSL db...
Done

これで一通りの下拵へは済んだから愈々Squidを起動するとパーミッションにまつわるエラーメッセージでまったく起動できない。/usr/local/squid/var/ 以下の所有者を一斉に squid へと差し替えて事なきを得た。

$ sudo /usr/local/squid/sbin/squid
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied
         messages will be sent to 'stderr'.

$ sudo chown -R squid:squid /usr/local/squid/var/
$ sudo /usr/local/squid/sbin/squid

あとはクライアント端末のProxy設定をよしなに整えてやれば終いである。

ログを流しながらGoogle Chromeで多数のサイトを閲覧したけれどもちっともキャッシュにヒットせずTCP_MISSばかり発生するから此は如何にと思っていたらどうも先んじてGoogle ChromeのキャッシュにヒットするせいでSquidの出番がなかった模様である。

Google Chromeの起動オプションに --disk-cache-size=1 を指定して実質的にキャッシュを無効にしてから改めて試験を実施するとキャッシュにヒットした証のTCP_MEM_HITが現れるようになった。

–disk-cache-sizeを指定する。0は際限なくキャッシュするようであるから1とした
TCP_MEM_HITがたくさん見られて喜ばしいログ

参考:
Dynamic SSL Certificate Generation
Compiling Squid

Tera Termで以ってtelnetで25番ポートへ接続してSMTPコマンドを打ち込むための設定

Tera Term 4.104

メールサーバの移行作業後にtelnetで以ってメール送信のテストをおこないたかったけれどもWindows10はデフォルトでTelnetクライアントが無効になっているようである。さりとて有効化は都合が許さなかった為に代わりにTera Termを用いるよう助言をいただいたものである。

ところがTera TermのTelnetで25番ポートへ接続するとSMTPバナーは表示されるもののキー入力をしても何ら反応がないので誠に困った。tcpdumpで様子を窺うと入力内容は送信されているようであるからエコーバックがなされていないような風情である。

調べると次のようにTERATERM.INIの設定を変更せねばならぬ模様である。

Telnet プロトコルに対応していないホスト(通常 23 以外のポート番号を使用)に TCP/IP 接続する場合、ローカルエコーを on に、送信する改行コードを CR+LF にする必要がある場合があります。

TCPLocalEcho=on
TCPCRSend=CRLF

TCPLocalEcho をonに、TCPCRSend をCRLFにセットすることで23番以外のポートへTelnetで接続した途端にローカルエコーが有効にされ、送信改行コードがCR+LFに変更されるというのである。

そうすると無事、操作を受け付けるようになった。

参考:
非 telnet TCP/IP 接続用の端末設定