ホームネットワーク日記

設定したことを忘れないように書いてあります。

2023.12.29
SO-NETがTLS 1.0/1.1のサポートをやめたので Shuriken 2016が繋がらなくなった。

Shuriken 2018ならShuriken TLS設定ツールで対応できるのだが、2016なので繋がらない。 なので、stunnelで、rocky linuxのサーバにproxyを立てて、TLS 1.0 <-->TLS 1.2のバージョン変換をすることにした。 stunnelはwindows版もあるので、サーバーではなくPCそのものにインストール・設定してもつかえるかもしれない。
参考にしたのは、このページ
stunnelはパッケージがあるので、dnf install -y stunnelでインストール。 設定ファイルは、/etc/stunnelにおけば名前はなんでも良いようだが、慣例にしたがってstunnel.confとした。記述内容は以下のとおり。

# /etc/stunnel/stunnel.conf
# Log settings
output=/var/log/stunnel.log
service=stunnel

# connect to sonet
[TLS_proxy_connector]
client = yes
accept = 127.0.0.1:2525
protocol = smtp
connect = mail.so-net.ne.jp:587
sslVersion = TLSv1.2

# connect from shuriken
[TLS_proxy_listener]
accept = 9025
protocol = smtp
key = /etc/letsencrypt/live/jp-oota.net/privkey.pem
cert = /etc/letsencrypt/live/jp-oota.net/cert.pem
CAFile = /etc/letsencrypt/live/jp-oota.net/fullchain.pem
connect = 2525

[TLS_proxy_connector]のセクションは、so-netへ接続させるためのもの。参考にしたページは証明書のverifyをしていたが、ルート証明書の指定と管理が面倒なのでverifyは行わないこととした。
sslVersionの設定は最初はしていなかったが、接続できなかったので追加した。 しかしながら、接続できなかったのは後述の「STARTTLSを使用」の設定の問題かもしれず、不要の可能性もあるが未検証。現時点では実害はないはずなので、そのまま。
[TLS_proxy_listener]のセクションは、shurikenからの接続を受けるためのもの。9025ポートでlistenして、2525ポートにforwardしている。 このポート番号は[TLS_proxy_connector]セクションのAcceptで受けているポートと合わせる必要がある。
証明書ファイル類は、letsenvryptでwebサーバ用に作成したものを指定した。 なので本当のファイル名はちょっと違し、メールサーバらしからぬFQDN。
また、firewallで不要なポートは閉じていたので、/usr/lib/firewalld/serviceに、9025ポートのservice定義を書いてfirewall-cmdでポートを開けた。

これで、shurikenのアカウント登録設定の「送信(SMTP)サーバの名前」にstunnelが動作しているサーバ名(SSL証明書と一致するもの)、「送信サーバのポート番号」に9025を指定し、「SSLを使用」を「する」に、「STARTTLSを使用」を「しない」にすることで、メール送信が可能になった。

2023.08.12
REFUSED unexpected RCODE resolvingのログがmessagesに残る。
Aug 12 21:32:42 XXXXXX named[1488]: REFUSED unexpected RCODE resolving 'p.adsymptotic.com/A/IN': 172.64.32.241#53
  

などというログが大量に/var/log/messagesに残るので対処した。 といってもキャッシュをクリアしただけ。 コマンドは,以下。

ちなみに、rndc ユーティリティーは、ローカルとリモートマシンの両方から named サービスの管理を可能にするコマンドラインツール。 参考にしたページは、rndcをrdncと記述していてしばらく悩んだ。

# rndc flush
# rndc reload
2021.05.18
Webページ上のMarkDown文章をHTMLに成形して表示する。

作業メモなどは、すべてMarkDownで記述し、保管しているディレクトリをApacheで公開している。 この文書をブラウザで開くと単なるテキスト表示されてしまうが、これを成形した形で表示したい。

同じようなことを考えている人はおり、それを参考にして実施したが,全く同じでは動作しなかったので修正点などをメモとしてする。

インストールのための環境を整える

composerをインストールする

markdown文書を成形するために、php-markdonwをインストールする。 インストールにあたって、依存性管理のために、まずはcomposerをインストール。

https://getcomposer.org/download/ に従い、以下のコマンドを実施。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

composer-setup.phpを実施するとphpのjson拡張が無いといわれる。 当方、CentOS-8なので、以下のパッケージをインストールした。

$ sudo dnf install -y php-json

composerを/var/lib/php/composerにインストール。

$sudo php composer-setup.php --install-dir=/var/lib/php/composer
All settings correct for using Composer
Downloading...

Composer (version 2.0.13) successfully installed to: /var/lib/php/composer/composer.phar
Use it: php /var/lib/php/composer/composer.phar

グローバルで使えるように/usr/binにシンボリックリンクを張る。これは直パスで打つなら必要のない作業。

$ sudo ln -sf /var/lib/php/composer/composer.phar /usr/bin/composer

markdown -> html化 ツールをインストール

いくつか種類はあるようだが、参考にしたページにあるphp-markdownをインストール。 インストール先は/var/lib/php/composerとした。

$ cd /var/lib/php/composer
$ sudo composer require michelf/php-markdown
Using version ^1.9 for michelf/php-markdown
./composer.json has been updated
Running composer update michelf/php-markdown
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking michelf/php-markdown (1.9.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading michelf/php-markdown (1.9.0)
  - Installing michelf/php-markdown (1.9.0): Extracting archive
Generating autoload files

markdownを保存しているディレクトリの.htaccessに以下を追加する。
AddTypeにより、拡張子".md"の場合に、コンテンツタイプとして"text/markdown"を追加し、 Actionディレクティブにより、"text/markdown"に対して、指定したファイルを実行する。
Actionで指定したmd.phpは、phpが動作するディレクトリに置き、ドキュメントルートからのパスで指定する。

AddType text/markdown md
Action text/markdown /Memo/md.php

md.phpを上記の場所に設置する。内容は以下のとおり。

<?php
set_include_path(get_include_path().PATH_SEPARATOR."/var/lib/php/composer/vendor/");
require 'autoload.php';
use Michelf\MarkdownExtra;
  
if ( isset($_SERVER['PATH_TRANSLATED']) ) {
  $file = realpath($_SERVER['PATH_TRANSLATED']);
  $ext = substr($file, strrpos($file, '.') + 1);
  $title = $_SERVER['REQUEST_URI'];
}
    
if ( $file and is_readable($file) and strtolower($ext) === 'md')
  $body = MarkdownExtra::defaultTransform(file_get_contents($file));
else
  $body = '<p>cannot read file</p>';
  
header('Content-Type: text/html;');
echo '<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <link rel="stylesheet" type="text/css" href="/css/markdown.css" title="MarkDown Style" />
  <title>'.$title.'</title>
</head>
<body>
' .
$body
. '  </body>
</html>';
?>

include_pathは、php.iniに記述しても良いが、md.phpに記述することとした。 include_pathは、composerのautoload.phpがある場所を、URLではなくローカルディレクトリのパスで指定する。 composerでインストールしたパッケージは、autoload.phpをrequireすることで使用できる。

useでMarkdownExtraではなく、Markdownとすると、TraditionalなMarkdown記法となる。 あえてTraditionalなフォーマットを指定する理由がないので、MarkdownExtraを使用した。
MarkdownExtraでは、テーブルタグも利用できる。

stylesheetをlinkタグで指定しておき、自分の見やすいようにcssで成形する。

2020.09.10
smokepingを設定する

dockerをインストールできたので、smokepingをdocker上に構築してみる

Docker Imageの取得

dockerのイメージを取得する。-pオプションにより、smokepingの内部ポート80に対して、外部のポート番号1888を接続している。

$ sudo docker run -it --name smokeping -p 1880:80 -e TZ=Asia/Tokyo -d dperson/smokeping
fa9d04d50cb41fe7886f1ae03b3239074df5a94319237965029f168584c7e45c

コンテナIDを確認

コンテナに対する操作は、コンテナIDを使用する。コンテナIDを確認するためには以下のコマンドを使用。

$ sudo docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
    fa9d04d50cb4        dperson/smokeping   "smokeping.sh"      17 minutes ago      Up 17 minutes       0.0.0.0:1880->80/tcp   smokeping

監視ターゲットの追加

監視ターゲットとして、googleのDNSを設定してみる。

$ sudo docker exec -it smokeping smokeping.sh -t "Google;DNS1;8.8.8.8"
Service already running, reloading configuration
HUP signal sent to the running SmokePing process, exiting.

ターゲットファイルを直接編集する場合は、一度ホスト側にファイルを持ってきてから編集する。

Targetファイルを複製する

$ sudo docker cp fa9d04d50cb4:/etc/smokeping/config.d/Targets ~

編集後したら元に戻す

$ sudo docker cp ~/Targets fa9d04d50cb4:/etc/smokeping/config.d/

コンテナ上に反映されていることを確認する

$ sudo docker exec -it fa9d04d50cb4 /bin/cat /etc/smokeping/config.d/Targets

コンテナの再起動

設定を反映させるために、コンテナを再起動する

$sudo docker restart fa9d04d50cb4

自動起動の設定

サーバ再起動時等にコンテナを再起動するように設定する。alwaysはコンテナが停止した場合は自動再起動。その他のオプションは以下の通り。

sudo docker update --restart=always smokeping
オプション 意味
no コンテナを自動的に再起動しない
on-failure エラー発生時にコンテナを再起動する
always コンテナが停止すると常に再起動
unless-stopped 手動でコンテナを停止した場合は再起動しない

設定がされたことを確認するには、docker inspectを使用する。

sudo docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' fa9d04d50cb4
always