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

Sambaサーバをソースからインストールする

OS: Ubuntu Server 18.04
Samba 4.11.2

Sambaサーバの導入時にいつも多数のエラーに見舞われて躓くから、此れを僅かでも楽ちんにする手助けとしてインストールの成功までを記録として記すものである。まずはソースコードを準備して解凍・展開し、configureスクリプトを実行する。

$ wget -c https://download.samba.org/pub/samba/stable/samba-4.11.2.tar.gz
$ wget -c https://download.samba.org/pub/samba/stable/samba-4.11.2.tar.asc
$ gunzip samba-4.11.2.tar.gz

$ gpg --recv-keys 52FBC0B86D954B0843324CDC6F33915B6568B7EA
$ gpg --verify samba-4.11.2.tar.asc
(snip)
gpg: Good signature from "Samba Distribution Verification Key " [unknown]

$ tar xvf samba-4.11.2.tar
$ cd samba-4.11.2/
$ ./configure

そうするといくらもしないうちにエラーメッセージが現れる。一つ解決しても又出る。次々出る。メッセージから容易に解決策が見つかることもあるけれどもどうしても判然としないものもあるから一処に纏めておくのが肝要であろうとおもう。

エラーメッセージ対応策
The distutils module is unusable: install “python-devel”?一見すると libpython3-dev の導入で解決しそうな風情であるけれどもちっとも改善される気配がないから bin/config.log を調べてみると ModuleNotFoundError: No module named 'distutils.sysconfig'というメッセージが残されており、これを解決するには python3-distutils パッケージを導入すると良いようである。
Checking for header Python.h : Distutils not installed? Broken python installation? Get python-config now!一見すると python-config の導入で解決しそうな風情であるけれどもそういったパッケージが見当たらなくて困った。 libpython3-dev パッケージが解決してくれた。
Samba AD DC and –enable-selftest requires lmdb 0.9.16 or laterActive Directory Domain ControllerとしてSambaの構築に取り組む積もりで無ければ --without-ad-dc オプションを付与してconfigureスクリプトを再実行する。取り組むのであれば liblmdb-dev パッケージをインストールすれば宜しい気色であるけれどもaptで探ってもどうしてかパッケージが見当たらないから GitHub – LMDB/lmdb からリポジトリをクローンしてビルドする必要があった。
Checking for program ‘pkg-config’ : not found
Checking for GnuTLS >= 3.2.0 : not found
pkg-configlibgnutls28-dev のパッケージをいっぺんに二つとも導入すればよかった。
Checking for jansson : not found Jansson JSON support not found. Try installing libjansson-dev or jansson-devel. Otherwise, use –without-json to build without JSON support. JSON support is required for the JSON formatted audit log feature, the AD DC, and the JSON printers of the net utilityJSON形式で監査ログを出力したり、Active Directory Domain Controllerをセットアップする場合には libjansson-dev パッケージを導入すれば宜しい。不要であれば --without-json オプションを付与する。
Checking for header archive.h : no libarchive support not found. Try installing libarchive-dev or libarchive-devel. Otherwise, use –without-libarchive to build without libarchive support. libarchive support is required for the smbclient tar-file modesmbclientからtar-fileモードを使用する場合に必要とあるけれども全体どういうものか判然としない。それで不要と判断を下すなら --without-libarchive オプションを付与するだけである。一方、無くてはならない向きには libarchive-dev パッケージを導入する。
Checking for acl_get_fd : not found
ACL support not found. Try installing libacl1-dev or libacl-devel. Otherwise, use –without-acl-support to build without ACL support. ACL support is required to change permissions from Windows clients.
Windowsクライアントからパーミッションを変更する場合は libacl1-dev パッケージが必要になる。そういった機能に出番を求めていないなら --without-acl-support オプションで宜しい。
LDAP support not found. Try installing libldap2-dev or openldap-devel. Otherwise, use –without-ldap to build without LDAP support. LDAP support is required for the LDAP passdb backend, LDAP idmap backends and ADS. ADS support improves communication with Active Directory domain controllers.LDAPのサポートはお呼びでないなら --without-ldap オプションを付与してconfigureスクリプトを再実行する。欠くことの許されない場合は libldap2-dev パッケージの出番となる。
Active Directory support not available: LDAP support is not available. Active Directory support not found. Use –without-ads for building without Active Directory support. ADS support improves communication with Active Directory domain controllers.Active Directoryをサポートせずともよいならば --without-ads の付与で終いである。必需と考えるなら libldap2-dev が入り用である。
PAM support is enabled but prerequisite libraries or headers not found. Use –without-pam to disable PAM support.PAMで以って認証を実施するためには libpam0g-dev が必要となるけれども要らない機能と見るならば --without-pam オプションを付与する。
Checking for gpgme_new : not found GPGME support not found. Try installing libgpgme11-dev or gpgme-devel and python-gpgme. Otherwise, use –without-gpgme to build without GPGME support or –without-ad-dc to build without the Samba AD DC. GPGME support is required for the GPG encrypted password sync feature GPGME(GnuPG Made Easy)の機能はActive Directory Domain Controllerを導入する場合に併せて求められる模様である。libgpgme-dev パッケージの導入で解決できた。--without-gpgme オプションを付加すればGPGMEを使用しない。

configureスクリプトに何らオプションを付け加えないで実施するなら、lmdbを手ずからビルドして次いで必要となるパッケージを一遍にインストールしてやれば宜しい。

$ git clone https://github.com/LMDB/lmdb.git
$ cd lmdb/libraries/liblmdb/
$ make
$ sudo make install

$ sudo apt install python3-distutils libpython3-dev pkg-config libgnutls28-dev libjansson-dev libarchive-dev libacl1-dev libldap2-dev libldap2-dev libpam0g-dev libgpgme-dev

$ ./configure
(snip)
'configure' finished successfully (49.706s)

$ make
$ sudo make instal
$ /usr/local/samba/sbin/smbd -V
Version 4.11.2

参考:
Package Dependencies Required to Build Samba
Samba – Jay Ts, Robert Eckstein, David Collier-Brown – Google ブックス

Postfixをソースから導入しsmtp.gmail.com経由でメールを送信する

OS: Ubuntu Server 18.04
Postfix 3.4.7

Postfixをソースから導入

先ず以てソースコードをダウンロードして展開する。

$ wget -c http://mirror.postfix.jp/postfix-release/official/postfix-3.4.7.tar.gz
$ tar zxvf postfix-3.4.7.tar.gz
$ cd postfix-3.4.7/

続けざまに make を実行してしまうと必要なパッケージが不足している旨、エラーメッセージが通知されるから予め準備をしておく。それからsmtp.gmail.comにメールをリレーするにはSMTP認証やSTARTTLSにも対応せねばならぬから其れ等に纏わるライブラリも併せて導入しておかねばやはり make やメール送信時に警告が挙がる。

$ sudo apt install libdb-dev m4 libssl-dev libsasl2-dev
エラーメッセージ対応策
No <db.h> include file fjound. Install the appropriate db*-devel package first.$ sudo apt install libdb-dev
extract_cfg.sh: 42: extract_cfg.sh: m4: not found$ sudo apt install m4
./mail_params.h:20:10: fatal error: openssl/opensslv.h: No such file or directory$ sudo apt install libssl-dev
host smtp.gmail.com[108.177.97.109] said: 530-5.5.1 Authentication Required.$ sudo apt install libsasl2-dev

続いて make makefiles で必要となるオプションを記述する。CCARGSにある -DUSE_TLS でSTARTTLSに対応し、-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl がSMTP-AUTHを使用するためのオプションである気配である。

これらの記載無しにビルドを進めてメールを送り付けると終いには host smtp.gmail.com[108.177.97.109] said: 530 5.7.0 Must issue a STARTTLS command first. であるとか host smtp.gmail.com[108.177.97.109] said: 530-5.5.1 Authentication Required. といったエラーメッセージを頂戴することになる。

それからpostfixユーザとpostdropグループを make install を実施するよりも先んじて作成しておかねば postfix-install: Error: "postfix" needs an entry in the passwd file. というエラーメッセージが現れて処理が終了してしまう。

$ sudo useradd -s /bin/false postfix
$ sudo groupadd postdrop

$ make makefiles CCARGS="-DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" AUXLIBS="-lssl -lcrypto -lsasl2"
$ make
$ sudo make install

インストールが恙無く完了すれば main.cf の編集へ移ることになるし何らかのエラーに見舞われたらうまい具合に調整して再ビルドに取り組まねばならない。再ビルドの際は make makefiles に先んじて make tidy で前回ビルド時の不要なファイルを除去し、 make install に代わって make upgrade を用いるのが良さそうな情勢である。

設定ファイルの編集とアプリパスワードの生成

main.cf には此度の動作要件を満たす必要最低限の設定を投入する。

$ sudo vi /etc/postfix/main.cf
alias_maps   = hash:/etc/aliases
home_mailbox = Maildir/
relayhost    = smtp.gmail.com:587

smtp_tls_security_level        = may
smtp_sasl_auth_enable          = yes
smtp_sasl_password_maps        = hash:/etc/postfix/sasl_passwd
smtp_sasl_mechanism_filter     = digest-md5 cram-md login plain
smtp_sasl_tls_security_options = noanonymous

alias_maps はよしなにセットしておかねばPostfix起動後に error: open database /etc/aliases.db: No such file or directory とか warning: dict_nis_init: NIS domain name not set - NIS lookups disabled などのエラーメッセージが現れる。

$ sudo vi /etc/aliases
root:        guro
postmaster:  guro

$ sudo newaliases

2段階認証プロセスをオンにしているならば smtp_sasl_password_maps で指定した /etc/postfix/sasl_passwd の設定へ取り掛かる前にGoogleアカウントのセキュリティを司るページでアプリパスワードを生成しておく。

「アプリパスワード」を選択
「アプリを選択」→「メール」
「デバイスを選択」→「その他(名前を入力)」
デバイス名を入力し「生成」をクリック

生成されたアプリパスワードは決して人様に知られぬよう厳格に取り扱わねばならない。さもなければ瞬く間に重大なインシデントと相成って始末書である。

アプリパスワードをコピーして「完了」をクリック

アプリパスワードを用意したら sasl_passwd を作成する。2段階認証プロセスをオンにしていなければ通常のパスワードで宜しい。

$ sudo vi /etc/postfix/sasl_passwd
smtp.gmail.com:587      www7390uo:yufpcclzluerkvsf

作成を終えたら postmap を実行してデータベースファイルの作成・更新を忘れないよう肝に銘じておく。これを怠ると内容が反映されないから意図した動作とは異なる結果に慌てることになる。ほんとうにあわてた。それからファイルのパーミッションを600にしてrootユーザ以外の読み書きを制限しておく。

$ sudo postmap /etc/postfix/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl_passwd*
$ ls -l /etc/postfix/sasl_passwd*
-rw------- 1 root root    43 Oct 12 12:01 /etc/postfix/sasl_passwd
-rw------- 1 root root 12288 Oct 12 12:02 /etc/postfix/sasl_passwd.db

あとは設定に間違いがないかチェックして、内容に差し障りがないようであればPostfixを起動するだけである。

$ sudo postfix check
$ sudo postfix start

メール送信テスト

事前に組み上げておいたSMTPコマンドで以ってテストメールを投げつける。

$ telnet localhost 25
ehlo localhost
mail from: <guro>
rcpt to: <www7390uo@gmail.com>
data
From: guro
To: www7390uo@gmail.com
Subject: test

test
.
quit

恙無くメールが送信できている模様である。

アプリパスワードが不要となれば Googleアカウントのセキュリティを司るページ から削除をし、メールを送信した際に SASL authentication failed; server smtp.gmail.com[64.233.189.109] said: 535-5.7.8 Username and Password not accepted. というメッセージがログに記録されていることを見届ければ終いである。

参考:
Postfix Configuration Parameters
アプリ パスワードでログイン – Gmail ヘルプ

CentOS インストール時の画面解像度を変更する

OS: CentOS Linux 8
VMware Workstaion Pro 15

CentOSのインストールを試みる度に悩まされる事柄が画面の解像度である。インストール画面の右側及び下側が表示領域に収まりきらず文言が見切れたりボタンが押し難くなる。これを改善するにはカーネルの起動パラメータを編集する。

インストーラのブートメニューが表れたらTABキーを押下するとカーネル起動時のパラメータに手を入れる事ができるようになるから、ここで rd.live.check を取り除いて resolution=1280x800 などとして800×600よりも広めの解像度を渡すことで見切れていた箇所を顕にできる。

デフォルトのカーネル起動パラメータ

この際キーボードがUS配列になっているから「=」の入力を実現するには「=」の右隣にある「~ ^ へ」のキーを押し込む。

けれどもパッケージのインストール途中に思いがけず解像度を800×600に戻されてしまいボタンが全く不可視になって却って苦しくなるから、多少の不便を受け入れてデフォルト解像度のままインストールをおこなうほうが結局は首尾よく事が運ぶようである。ままならずもどかしいものである。

すべての情報が表示されて快適な様子1
すべての情報が表示されて快適な様子2
ボタンがまったく表示領域の外へ隠れてしまう様子
カーネル起動パラメータを編集せずにインストールを進めた場合

Ubuntu 18.04でPT3を使用して地上デジタルテレビ放送を拝見できるように手配

OS: Ubuntu 18.04 Desktop
接触型 ICカードリーダライタ CLOUD2700-NTTCom
B-CASカード
PT3

カードリーダCLOUD2700-NTTComとB-CASカードを認識させる

aptで以って必要なパッケージをインストールしたのち、pcsc_scanを実施するとカードリーダとB-CASカードが認識された。放っておくとpcsc_scanは延々スキャンを試みるからいい加減でControl-Cを押下して中断せねばならない。

$ sudo apt install pcscd pcsc-tools libpcsclite-dev
$ pcsc_scan
PC/SC device scanner
V 1.5.2 (c) 2001-2017, Ludovic Rousseau 
Using reader plug'n play mechanism
Scanning present readers...
0: Identive CLOUD 2700 R Smart Card Reader [CCID Interface] (55291450217446) 00 00

(snip)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99
        Japanese Chijou Digital B-CAS Card (pay TV)

MULTI2の復号ソフトウェアを導入

地上デジタルテレビ放送の放送波はMULTI2と呼ばれる暗号方式によって暗号化されていると言うからそのままでの視聴は叶わない模様である。復号するためのソフトウェアARIB STD-B25ライブラリを導入せねばならない。

$ sudo apt install git cmake dkms
$ git clone https://github.com/stz2012/libarib25.git
$ cd libarib25/
$ cmake .
$ make
$ sudo make install

PT3ドライバの導入

LinuxでもPT3を取り扱えるようにドライバを導入する。カーネルがアップデートされるとドライバの再インストールに迫られ手間であるから、READMEファイルの記載に従い dkms.installを実行してDKMSを有効にする。

$ cd ..
$ git clone https://github.com/m-tsudo/pt3.git
$ cd pt3/
$ make
$ sudo make install
$ sudo bash ./dkms.install

カーネルバージョン3.18以降にはearth-pt3と言う名のDVB版PT3ドライバが存在しているから、先に導入したpt3_drvと張り合いデバイスファイルが生成されない、ということなので此れをロードしないようブラックリストに登録しておく必要がある情勢である。そうしたらマシンを再起動する。

$ sudo vi /etc/modprobe.d/blacklist.conf
blacklist earth-pt3
$ sudo reboot

起動後にカーネルモジュールをあらためるとpt3_drvだけロードされて居る。デバイスファイルも生成されているから良さそうな景色である。

$ lsmod | grep pt3
pt3_drv                45056  0

$ ls -l /dev/pt3video*
crw-rw-rw- 1 root video 241, 0  7月 21 23:42 /dev/pt3video0
crw-rw-rw- 1 root video 241, 1  7月 21 23:42 /dev/pt3video1
crw-rw-rw- 1 root video 241, 2  7月 21 23:42 /dev/pt3video2
crw-rw-rw- 1 root video 241, 3  7月 21 23:42 /dev/pt3video3

recpt1の導入

放送を録画するためのコマンド recpt1 を導入する。もとはPT1用として書き起こされたようであるからPT3でも使用できるようヘッダファイル pt1_dev.h の内容を置き換えてからインストールを実施する。

$ sudo apt install autoconf automake
$ mkdir recpt1
$ wget -c http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
$ tar jxvf tip.tar.bz2
$ cd pt1-17b4f7b5dccb/recpt1/
$ sed -i'.orig' 's/pt1video/pt3video/g' pt1_dev.h
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install

recpt1を使用しての録画が恙無くおこなえるか確かめる。コマンドへ引き渡す値はオプションの他、物理チャンネルや録画時間(秒)、録画ファイル名である。またVLCメディアプレーヤーを使用して番組の視聴をするなら録画時間と録画ファイル名を-に置き換えてvlcコマンドへパイプでつなげれば宜しい。

$ recpt1 --b25 --strip 20 60 rec.ts
$ recpt1 --b25 --strip 20 - - | vlc -

やったぜ。

参考:
MULTI2 – Wikipedia
地上デジタル放送 チャンネル表 MASPRO
テレビ周波数チャンネル