apache2 が起動しない

現状の環境からの模索

プライベート写真をネット環境に公開しているWebサーバー用に、アップロードするデーター等を作成したり、動作の検証をするために別の機器を立上げ、そこにデーターを変換するアプリや検証のために apache http サーバーを設定して利用しています。

古くて遅いノートPC

別の機器としての作業は、現状は非力で処理の遅い古いノートPCでの作業です。基本的に写真をカメラで写し、居た場所をGPSロガーで収集して、ノートPCに移して加工しています。

動作の検証もノートPC内に立上げた Web サーバー apache で行っているため、全てがワンパッケージで完結しているので、まとまっていて操作性は良いのですが、非力でストレスになってます。

更に非効率なos切替

GPSロガーはアプリがWindows対応なのでそれに従い、写真に位置情報を追加したり公開用にサイズを縮小したりの加工は Linux のバッチ処理で加工しています。OSの切替は昔からあるオーソドックスなデュアルブートを利用しています。切替に時間が掛かりとても効率が悪いです。

データー加工とWebサーバー

新しいノートPCを購入するとか、速くて効率的な作業環境に移行できればストレスも減るのですが、何よりもまず資金が必要な事だし、今ある機器で分散できないものかと模索しています。

機器の分散を模索

データー変換や検証のWebサーバーを別に立て、リモート環境を作ろうかと模索していて、分散対象のサーバーに利用する予定の機器は、サーバーなのに20分で停止してしまったり、致命的な問題はapache が立上げできません。

サーバーとしての機能

サーバーが 20分で停止する問題は、別にまとめた Linux Ubuntu のバージョンアップの仕様が問題でしたが、その後の状況から解決できました。
(systemd の対策で停止を解決)

Webサーバーを設定

検証用Webサーバーとして実績のあるノートPCから apache のサイト情報等のコピーを行ったのに立上げでエラーになります。

$ sudo systemctl start apache2
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

ログ等を確認すると、https を設定するために使用している認証情報に問題があるらしく、今までに実績のあるファイルをコピーして手を抜こうと考えたのですが、定義されたキーが短過ぎるのが原因らしいです。

$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2021-03-14 13:35:13 JST; 11min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 561706 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

 3月 14 13:35:13 big-book systemd[1]: Starting The Apache HTTP Server...
 3月 14 13:35:13 big-book apachectl[561721]: AH00558: apache2: Could not reliably determine the server's fully>
 3月 14 13:35:13 big-book apachectl[561706]: Action 'start' failed.
 3月 14 13:35:13 big-book apachectl[561706]: The Apache error log may have more information.
 3月 14 13:35:13 big-book systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
 3月 14 13:35:13 big-book systemd[1]: apache2.service: Failed with result 'exit-code'.
 3月 14 13:35:13 big-book systemd[1]: Failed to start The Apache HTTP Server.
lines 1-13/13 (END)

error.log を開いてみると、:ee key too small と出ているので証明書の key が小さいのが原因と思われます。

$ less /var/log/apache2/error.log
[Sun Mar 14 13:35:13.253066 2021] [ssl:emerg] [pid 561721:tid 140387924089920] AH02562: Failed to configure certificate sunao-mita.pgw.jp:443:0 (with chain), check /etc/apache2/ssl/server.cert
[Sun Mar 14 13:35:13.253158 2021] [ssl:emerg] [pid 561721:tid 140387924089920] SSL Library Error: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small
AH00016: Configuration Failed
/var/log/apache2/error.log (END)

オレオレ証明書の作成

昔々、ネットの情報を参考にさせて頂きオレオレ証明書を作成したことがありました。それを流用して暫く使えていたのですが今回はエラーになってしまいました。証明書の条件も年月と共に厳しくなっているので少しずつ対応していかないといけません。

ネットを色々と調べ内容の重げなサイトを見付けました。ほぼ丸コピーで試してみようと思います。
https://one-it-thing.com/63/

まずは、オレオレ認証局かな

あまり意識したことがなかったけど OpenSSL のバージョンの確認あたりから進めていこうと思っています。

$ openssl version
OpenSSL 1.1.1f  31 Mar 2020

root ユーザーになって、作業用に /openssl のディレクトリを作成して、そこに移動してサンプルをコピーして、作業を進めることにします。

$ sudo su -
# mkdir /openssl
# cd /openssl
# cp /etc/ssl/openssl.cnf ./

作業用ディレクトリをカレントに定義、シリアルナンバーファイルを作成しておきます。

# vi openssl.cnf
〜途中省略〜
dir = ./ # Where everything is kept
〜途中省略〜


# touch ./index.txt
# echo 00 > ./serial

CA秘密鍵を作成します。途中でパスワードを2回打鍵して継続します。

# openssl genrsa -aes256 -out ./cakey.pem 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
......................................................+++++
.................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for ./cakey.pem: (パスワードを入力して備忘しておく)
Verifying - Enter pass phrase for ./cakey.pem:

CA証明書リクエストを作成

CA とは証明書認証局なのでしょうか、あまり理解できていませんが、ネット情報を参考に進めます。

# openssl req -new -key ./cakey.pem -config ./openssl.cnf -out cacert.csr
Enter pass phrase for ./cakey.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Gunma
Locality Name (eg, city) []:Fujioka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mita
Organizational Unit Name (eg, section) []:Mita-sec
Common Name (e.g. server FQDN or YOUR name) []:192.168.11.5
Email Address []:sunao.mita@nifty.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

理解をしていませんが、X509 v3 拡張領域に入れるために、v3_ca.txt を作成するのだそうです。

# vi v3_ca.txt
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier=hash

CA証明書作成

ここでやっとCA証明書の作成になるようです。

# openssl ca -in cacert.csr -selfsign -keyfile ./cakey.pem -notext -config ./openssl.cnf 
-outdir . -days 3650 -extfile v3_ca.txt -out cacert.pem
Using configuration from ./openssl.cnf
Enter pass phrase for ./cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Mar 14 06:43:10 2021 GMT
            Not After : Mar 12 06:43:10 2031 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Gunma
            organizationName          = Mita
            organizationalUnitName    = Mita-sec
            commonName                = 192.168.11.5
            emailAddress              = sunao.mita@nifty.com
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE 
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Key Identifier:
                CD:2A:04:41:9A:3D:D3:23:1E:BE:C6:FE:FD:E4:3C:8D:1D:9C:1A:79
Certificate is to be certified until Mar 12 06:43:10 2031 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

できあがった証明書をテキストで確認してみて、X509v3 の記述があることを確認するのだそうです。

# openssl x509 -in cacert.pem -text
〜省略〜
       X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Key Identifier: 
                CD:2A:04:41:9A:3D:D3:23:1E:BE:C6:FE:FD:E4:3C:8D:1D:9C:1A:79
〜省略〜

オレオレ サーバー証明書

サーバー秘密鍵の作成

# openssl genrsa -aes256 -out ./server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
........................................................................................................................................................................................................................+++++
..........................+++++
e is 65537 (0x010001)
Enter pass phrase for ./server.key: (パスワードを入力して備忘しておく)
Verifying - Enter pass phrase for ./server.key:

サーバー証明書リクエスト作成

サーバー証明書リクエストの作成を行います。個人使用なので CA証明書と内容は同じで良いようです。

# openssl req -new -key ./server.key -config ./openssl.cnf -out server.csr
Enter pass phrase for ./server.key: (秘密鍵に設定したパスワード)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Gunma
Locality Name (eg, city) []:Fujioka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mita
Organizational Unit Name (eg, section) []:Mita-sec
Common Name (e.g. server FQDN or YOUR name) []:sunao-mita.pgw.jp
Email Address []:sunao.mita@nifty.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

証明書のX509 v3拡張情報

# vi v3_server.txt
[SAN]
basicConstraints = CA:false
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
authorityKeyIdentifier=keyid,issuer

subjectAltName=@alt_names
basicConstraints=CA:FALSE
[alt_names]
DNS.1=192.168.11.2
IP.1=192.168.11.5
IP.2=127.0.0.1

サーバー証明書の作成

# openssl ca -in server.csr -config openssl.cnf -keyfile ./cakey.pem -outdir . -extfile v3_server.txt -extensions SAN -out server.crt -days 3650
Using configuration from openssl.cnf
Enter pass phrase for ./cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Mar 14 07:43:48 2021 GMT
            Not After : Mar 12 07:43:48 2031 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Gunma
            organizationName          = Mita
            organizationalUnitName    = Mita-sec
            commonName                = sunao-mita.pgw.jp
            emailAddress              = sunao.mita@nifty.com
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Authority Key Identifier: 
                keyid:CD:2A:04:41:9A:3D:D3:23:1E:BE:C6:FE:FD:E4:3C:8D:1D:9C:1A:79

            X509v3 Subject Alternative Name: 
                DNS:192.168.11.2, IP Address:192.168.11.5, IP Address:127.0.0.1
            X509v3 Basic Constraints: 
                CA:FALSE
Certificate is to be certified until Mar 12 07:43:48 2031 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

確認のためにできたサーバー証明書をテキストダンプして確認します。

# openssl x509 -in server.crt -text
〜省略〜
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Authority Key Identifier: 
                keyid:CD:2A:04:41:9A:3D:D3:23:1E:BE:C6:FE:FD:E4:3C:8D:1D:9C:1A:79

            X509v3 Subject Alternative Name: 
                DNS:192.168.11.2, IP Address:192.168.11.5, IP Address:127.0.0.1
            X509v3 Basic Constraints: 
                CA:FALSE
〜省略〜

パスなしサーバー秘密鍵の生成

# openssl rsa -in ./server.key -out nopass_server.key
Enter pass phrase for ./server.key:
writing RSA key

作業ディレクトリ内にできた成果

作業ディレクトリ内には不要な作業ファイルも含め、色々なファイルが残っていますが、必要なものは次の4点のようです。

  1. CA秘密鍵:cakey.pem …サーバ証明書を作るためで、不使用
  2. CA証明書:cacert.pem …サーバーを利用する端末のブラウザで使用
  3. サーバ秘密鍵:nopass_server.key …サーバーの apache に指定
  4. サーバ証明書:server.crt …サーバーの apache に指定

サーバー sslの設定に

定義されている場所が複数あり、その1箇所を次に示します。同様に sites-available 内のssl に関連するファイルを確認する必要があります。

# vi /etc/apache2/sites-available/default-ssl.conf
〜省略〜
                SSLCertificateFile    /openssl/server.crt
                SSLCertificateKeyFile /openssl/nopass_server.key
〜省略〜

コンフィグファイルの確認

$ apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

apache2 の起動と確認

Syntax OK となっていても、実際に start でエラーが出て起動しない場合が多いので原因をじっくり潰します。

$ sudo systemctl start apache2
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-03-14 21:52:25 JST; 28s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 877445 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 877471 (apache2)
      Tasks: 57 (limit: 4413)
     Memory: 8.2M
     CGroup: /system.slice/apache2.service
             ├─877471 /usr/sbin/apache2 -k start
             ├─877472 /usr/sbin/apache2 -k start
             ├─877473 /usr/sbin/apache2 -k start
             ├─877474 /usr/sbin/apache2 -k start
             └─877475 /usr/sbin/apache2 -k start

 3月 14 21:52:25 big-book systemd[1]: Starting The Apache HTTP Server...
 3月 14 21:52:25 big-book apachectl[877454]: AH00558: apache2: Could not reliably determine the server's fully>
 3月 14 21:52:25 big-book systemd[1]: Started The Apache HTTP Server.
lines 2-18/18 (END)

何とか最後に起動できました。

公開サーバー交換完了

大晦日から続いた移行作業

大晦日から自信のないまま公開サーバーを置き換えようと模索して、物理的にも旧 PogoPlug が設置されていたスペースに収まりました。

経験のないことで苦労の連続

終ってみれば簡単に事が推移したようにも思えますが、ブログの移行は苦労の連続で、有料プラグインでのマイグレーションではデータを移行するのも簡単らしく書かれていますが、次があるのかいつなのかも不明のまま出資するのに抵抗を感じて、現状のツールだけで進めたいと考えました。

バックアップもマイグレーションも有料オプション

バックアップツールで思い出したように、バックアップだけはしていましたが、このデータからリストアで新しいシステムに戻せるのだろうかと不安でした。結論から言うと PHP のバージョンも大きく変わっていて、直ぐにエラーとなり利用できませんでした。

結局、移行前のサーバーから移行後のサーバーに、ブログの本体である WordPress のディレクトリを rsync コマンドでフルコピーして、MariaDB のデータベースを設定して、アクセスできるユーザーの情報を WordPress のファイルに記述して、バックアップのデータからリストアを試みました。

rsyncでコピーしても同じ動作にならない

それでも移行元の動作状況とは、見た目も動きも程遠くてテーマの設定やら背景の画像やらとしばらく格闘しながら移行前の動作状態に近付けて行きました。

早いサーバーに移行できストレス減少

今回は、なかなか味わえない良い経験をさせていただきました。前のサーバーでは、非力過ぎて待ち時間が長かったのが、そこそこのレスポンスで稼働しているのは安心でき肩の荷が下りた気がします。

物理的にも入替えが終わり、一安心と思っていたのですが、スマホに大量のメールが届いていました。忘れてました大事なことを、データのバックアップ等をさせているサーバーを使い cron で、 ping / http / ssh で公開サーバーに対して5分毎にチェックをしているのです。

消すのも大変なほどのメールが溜まってしまい、慌てて更新しました。

死活チェックに振り回されました

実は、上手く対応できたと思ったのですが、単純に ping して結果をチェックする処理で、その後も5分毎にエラーメールが届いていました。IPv6 のアドレスが、誤って設定されたので気付き直したつもりが、使用を止めたつもりの旧公開サーバーのDNSで名前解決されていて、直したはずの新しいデータがそこには無くて、実在しない IPv6 アドレスに ping を送っていました。

調べてみるとゴーストのイタズラかな

resolv.conf に古いネームサーバーを参照する情報が残っているようで、わけのわからない結果を招いていました。この辺りの動作は何か良くわからない動きをするので困りものです。

/etc/dhcpcd.conf は要注意

対策できたと思って安心していると、その後も5分毎にエラーメールが届きます。更に調べるとエラーメールを送るそのサーバーは、固定アドレスを設定するために、 /etc/dhcpcd.conf の中に固定アドレスを記述しているのですが、一緒にネームサーバーも記述していて、稼働対象外のサーバーアドレスを指定していました。まともな動きをしないのは仕方ないですね。

稼働対象外のサーバーも元はマスターのネームサーバーで稼働していたものなので、定義を変えてスレーブで立上げ直して、しばらく残そうと思い、 /etc/bind/slaves のディレクトリを追加して、マスターから配布されるように設定したつもりでしたが、一向にファイルの配布が行われませんでした。

/etc/bind/slaves の所有者とアクセス権

配布されなかった理由は正確には不明ですが、ディレクトリのオーナーを bind にして、アクセス権を変更して、更に rndc reload のコマンドをマスター側とスレーブ側のサーバーで実行して少し経つとファイルの配布が行われたのを確認できました。

Webalizer も文字化けが解消

文字コードを修正してソースからメイクする情報がネット上にもあるのですが、その中で説明しているファイルを置いていたサーバーが現在接続できなくなっているようです。

最終的には何とか日本語化できたような感じです。見た目の文字列は日本語化されていない部分があちこちに見られますが、文字化けで読めない箇所はないようなので成功したと考えます。しばらくこのまま運用を続けたいと思います。

対策前は、漢字コードが昔懐かしい、euc で書かれていて、UTF-8 として表示しているのか、結果はこんな文字化けが起こって読めません。

文字化けしている表示

文字コードを UTF-8 に変換した結果は、次のような結果となって読めているようなので問題ないレベルになっていると思います。

コードを UTF-8 に変換した結果

家屋内のネームサーバー

ローカルのネームサーバー

細かいことは知りませんが、現在 IPv4で機能するネームサーバーを家の中に立てています。家屋内のプライベートアドレスを割り振る DHCPサーバーに、ローカルのネームサーバーのアドレスを渡して、IPv4 / IPv6 アドレス共に名前解決をしています。

日本国内では、IPv4/IPv6が混在しているらしい

ゆくゆくはネット環境が、IPv6の世界に完全移行して不要になるのだろうと思っています。趣味で北海道とか出歩くこともあって、旅先からリモートで家に置かれた公開サーバーを操作することも時々あるのですが、場所によっては IPv4 だったり IPv6だったりしています。

IPv4 なら家に置かれたホームゲートウェイで、入口のグローバルアドレスから家屋内に置かれたプライベートアドレスの公開サーバーにアドレス変換して接続しますが、IPv6 のアドレスは家屋内の機器にも一律に割り振られていて、外部に置かれた DDNS で名前から直接アドレスが引かれると、そのままダイレクトに機器に接続されるイメージなので家屋内にローカルのネームサーバーは不要のようです。

たぶん当面はローカルのネームサーバーが必要かと

いずれにしてもローカルで、IPv4 を併用している機器が家屋内に現存している限り、ローカルのネームサーバーが必要なのだろうと思っています。

公開Webサーバーをローカルネームサーバー仕立てます

そこで、ハード的には余裕のあるオーバースペックのラズパイで、このブログが利用している公開サーバーをローカルのネームサーバーの1つとして機能追加しようと考えたのですが、過去の立上げから長い年月が過ぎているので作業内容も曖昧です。次があるのかは分かりませんが、トラブった時の参考資料としても有効かと思いまとめることにしました。

ネームサーバーのBIND9 をインストール

次のファイルリストが、ネームサーバーの BIND9 をインストールした時の初期状態のファイル群です。以前にカスタマイズした時は、 db.root のファイルがあったようですが、同様のファイルが別の場所に移されたようです。 → /usr/share/dns/root.hints

root@web-server:~# ls -l /etc/bind
合計 48
-rw-r--r-- 1 root root 2761  6月 21  2019 bind.keys
-rw-r--r-- 1 root root  237  6月 21  2019 db.0
-rw-r--r-- 1 root root  271  6月 21  2019 db.127
-rw-r--r-- 1 root root  237  6月 21  2019 db.255
-rw-r--r-- 1 root root  353  6月 21  2019 db.empty
-rw-r--r-- 1 root root  270  6月 21  2019 db.local
-rw-r--r-- 1 root bind  463  6月 21  2019 named.conf
-rw-r--r-- 1 root bind  498  6月 21  2019 named.conf.default-zones
-rw-r--r-- 1 root bind  165  6月 21  2019 named.conf.local
-rw-r--r-- 1 root bind  846  6月 21  2019 named.conf.options
-rw-r----- 1 bind bind   77  1月  1 12:10 rndc.key
-rw-r--r-- 1 root root 1317  6月 21  2019 zones.rfc1918

db.root の移行は、named.conf.default-zones の中の頭の部分に記載されています。

複数サーバーを立て、マスターとスレーブに仕立てます

このラズパイサーバーをマスターにして、他に稼働するネームサーバーをスレーブとしてデータを受取りながら稼働するサーバーに仕立てる予定です。

bind.keys  …そのまま
db.0     …そのまま
db.127   …そのまま
db.255   …そのまま
db.empty …そのまま
db.local …そのまま
named.conf …そのまま
named.conf.default-zones …そのまま
named.conf.local   …変更する (自分で定義したいゾーンをここで指定する)
named.conf.options …変更する (全体的な動作を定義するらしい)
rndc.key      …そのまま
zones.rfc1918 …そのまま
ゾーンの定義はファイルを追加、ファィルとの対応を記述

自分で定義するゾーンファイルを作成して、このディレクトリに追加すると共に、このファイルが配布の元になるマスターか、配布されたコピーのスレーブなのか、更にはどこから配布を受取るのかや、どこに配布するのかも含めて、 named.conf.local ファイルに記述します。

サーバーの全体的な振舞を定義

また、ローカルのネットワークの流れや解決できない情報を上位のサーバーに渡す先についてのサーバー全体の動作に関する情報などは、 named.conf.options ファイルに記述するようです。

named.conf.options には、次のブルーの部分の追加と修正を行いました。どこからの情報かは不明ですが、いままで同様の設定で稼働しているので、深く考えずにそのまま移行します。

// LAN内のIPアドレスグループをLOCALと定義
acl "LOCAL" {
  192.168.11.0/24;
  240d:1a:34d:7f00::/64;
  localhost;
  localnets;
};

// ネームサーバー共通設定
options {
	directory "/var/cache/bind";

	// If there is a firewall between you and nameservers you want
	// to talk to, you may need to fix the firewall to allow multiple
	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

	// If your ISP provided one or more IP addresses for stable 
	// nameservers, you probably want to use them as forwarders.  
	// Uncomment the following block, and insert the addresses replacing 
	// the all-0's placeholder.

	forwarders { 8.8.8.8; 8.8.4.4;};

        allow-query { LOCAL; };
        allow-query-cache { LOCAL; };

	allow-transfer  { none; };

	masterfile-format text;

	//========================================================================
	// If BIND logs error messages about the root key being expired,
	// you will need to update your keys.  See https://www.isc.org/bind-keys
	//========================================================================
	dnssec-validation auto;

	auth-nxdomain no;    # conform to RFC1035
	listen-on-v6 { any; };
};

192.168.11.0/24 が、IPv4 のローカルネットアドレスで、 240d:1a:〜::/64 が IPv6 のローカルネットアドレスです。

管理するゾーンの名前とアドレスの対応表を作ります

そして、自分で定義したゾーンファイルは、後で識別しやすいように 〜.zone をファイルの最後に付加しておくことにします。

sunao-mita.pgw.jp.zone      …名前からアドレスに変換する定義
11.168.192.rev.zone         …IPv4のアドレスから名前に変換する逆引きファイル
240d:1a:34d:7f00::.rev.zone …IPv6のアドレスから名前に変換する逆引きファイル
MyMemories.localdomain.zone …試験的に変換させるオマケのファイル

管理するゾーン定義の関連付け

初期の named.conf.local ファイルは、次のようになっているので対応するゾーンの定義と対応するファイル、マスターとして転送する場合は送り先のアドレス、スレーブとして受取るならマスターになるサーバーのアドレス等を記述します。

//
// Do any local configuration here
//
  // この部分にゾーン情報を追加します
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";  // コメントから有効に変更
定義の関連付け例

単純に単独で機能させるだけのサーバーなら、正引き逆引きの各ゾーン毎に定義して、次のような内容を追加します。この場合は、/etc/bind ディレクトリ下に sunao-mita.pgw.jp.zone と命名したファイルが置かれています。

シンプルな記述例、単独でファイル管理
zone "sunao-mita.pgw.jp" {
        type master;
        file "/etc/bind/sunao-mita.pgw.jp.zone";
};
マスターファイルを管理し、スレーブに転送

なお、複数のネームサーバーを稼働させていて、マスターのサーバーのデータを更新したら、スレーブ側のサーバーに自動転送させるには、各ゾーン毎に次のような記述を追加します。

zone "sunao-mita.pgw.jp" {
        type master;   // 転送先のスレーブサーバーを列記
        allow-transfer { 192.168.11.23; 192.168.11.20; 192.168.11.21; };
        notify yes;
        also-notify { 192.168.11.23; 192.168.11.20; 192.168.11.21; };
        file "/etc/bind/sunao-mita.pgw.jp.zone";
};

示したゾーンの定義は、マスターとして管理しスレーブ3台に配送する定義です。スレーブ側では、受取ったデータを自分で管理するマスターのデータと混乱しないように、slaves のディレクトリを作成してその中に受取るようにします。

スレーブで、マスターから受取るディレクトリを分ける
zone "sunao-mita.pgw.jp" {
        type slave;
        masters {
                192.168.11.2;  // マスターのデータを管理するサーバー
        };
        file "/etc/bind/slaves/sunao-mita.pgw.jp.zone";
};

マスターデータは、各ゾーン毎に定義するため、複数サーバーで、各ゾーン毎にマスターデータを管理するサーバーを決めて稼働することができます。

少し実行させてみて、スレーブ側のサーバーにマスターで更新した最新のシリアルナンバーのデータが配布されたようで、置かれているのを確認できたので、これで完了でしょう。

編集したマスターデータと配布されたコピー

スレーブにコピーされたデータは、マスター側の更新したデータを直接コピーしたものではなく、適度に編集されて配布されるようです。

参考までにマスター側の原本とスレーブ側のコピーの中身を表示しておきます。素人の記述内容に問題が多くて違いが大きいのかは分かりませんが…

;;  sunao-mita.pgw.jp

$TTL    86400
@      IN      SOA    sunao-mita.pgw.jp.  root.sunao-mita.pgw.jp. (
        2020010202      ;Serial
        3600            ;Refresh
        900             ;Retry
        604800          ;Expire
        86400           ;Minimum TTL
)
                IN      NS      dns.sunao-mita.pgw.jp.
                IN      NS      dns2.sunao-mita.pgw.jp.
                IN      NS      gate.sunao-mita.pgw.jp.
                IN      MX      10 mail.sunao-mita.pgw.jp.

                IN      A       192.168.11.2
                IN      AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
dns2            IN      A       192.168.11.20
dns             IN      A       192.168.11.2
ubuntu-sv       IN      A       192.168.11.199
rpi1-disk       IN      A       192.168.11.23
rpi1-disk       IN      AAAA    240d:1a:34d:7f00:11cf:af0d:3b62:8501
ubuntu-dtp      IN      A       192.168.11.100
gate            IN      A       192.168.11.1
virt            IN      A       192.168.11.105
Radio           IN      A       192.168.11.20
DebianPogo      IN      A       192.168.11.22
DebianPogo      IN      AAAA    240d:1a:34d:7f00:225:31ff:fe00:9df0
mail            IN      A       192.168.11.2
mail            IN      AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
PogoV6          IN      AAAA    240d:1a:34d:7f00:225:31ff:fe00:9df0
dns2            IN      AAAA    240d:1a:34d:7f00:ba27:ebff:feac:28a8
dns             IN      AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
www             IN      A       192.168.11.2
www             IN      AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
RadioV6         IN      AAAA    240d:1a:34d:7f00:ba27:ebff:feac:28a8
rpi1-com2       IN      A       192.168.11.21
rpi1-com2       IN      AAAA    240d:1a:34d:7f00:ba27:ebff:fe0c:5ef3
note            IN      A       192.168.11.51
note            IN      AAAA    240d:1a:34d:7f00:3906:1714:acef:3e46
web-server      IN      A       192.168.11.2
web-server      IN      AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae



collection      IN      CNAME   virt
share           IN      CNAME   rpi1-disk

なお、動きが把握できていませんが、記述ミスに気が付き修正してマスター側で bind9 を restart すると、内容が直ぐに反映しましたが、その後も配布されているにも関わらずスレーブ側のデータ内容は古いシリアルの物を受取っているままでした。

$ORIGIN .
$TTL 86400      ; 1 day
sunao-mita.pgw.jp       IN SOA  sunao-mita.pgw.jp. root.sunao-mita.pgw.jp. (
                                2020010202 ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      dns.sunao-mita.pgw.jp.
                        NS      dns2.sunao-mita.pgw.jp.
                        NS      gate.sunao-mita.pgw.jp.
                        A       192.168.11.2
                        MX      10 mail.sunao-mita.pgw.jp.
                        AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
$ORIGIN sunao-mita.pgw.jp.
collection              CNAME   virt
DebianPogo              A       192.168.11.22
                        AAAA    240d:1a:34d:7f00:225:31ff:fe00:9df0
dns                     A       192.168.11.2
                        AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
dns2                    A       192.168.11.20
                        AAAA    240d:1a:34d:7f00:ba27:ebff:feac:28a8
gate                    A       192.168.11.1
mail                    A       192.168.11.2
                        AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
note                    A       192.168.11.51
                        AAAA    240d:1a:34d:7f00:3906:1714:acef:3e46
PogoV6                  AAAA    240d:1a:34d:7f00:225:31ff:fe00:9df0
Radio                   A       192.168.11.20
RadioV6                 AAAA    240d:1a:34d:7f00:ba27:ebff:feac:28a8
rpi1-com2               A       192.168.11.21
                        AAAA    240d:1a:34d:7f00:ba27:ebff:fe0c:5ef3
rpi1-disk               A       192.168.11.23
                        AAAA    240d:1a:34d:7f00:11cf:af0d:3b62:8501
share                   CNAME   rpi1-disk
ubuntu-dtp              A       192.168.11.100
ubuntu-sv               A       192.168.11.199
virt                    A       192.168.11.105
web-server              A       192.168.11.2
                        AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
www                     A       192.168.11.2
                        AAAA    240d:1a:34d:7f00:a284:cc24:64bd:daae
マスターの更新を直ちにスレーブに反映させるには

修正を直ちに反映させるためには、何かのアクションが必要のようです。ネットで調べてみると reload のキーワードが見付かりました。他にも強制的に配布するコマンドもあるようです。

# service bind9 reload

実行してみるとスレーブ側のデータも最新のシリアルに更新されたようです。 定義の中に、$TTL 86400 ; 1day の記述がありますが、更新されても1日は前の情報を保持する指定なのでしょうか。

やっと念願の公開サーバー交換

宿題事項だったサーバーの交換

2020年元旦になって、数年前から懸念していた公開サーバーを入れ換えることができました。交換したサーバーは、現在の状況で最新版のラズパイで、Raspberry pi 4 B+ / 4GBメモリ で一応最強モデルです。

長く放置できそうな OS

利用する OS は、色々悩みましたが使い慣れているラズパイではデフォルトとなる Raspbian の最新版に落ち着きました。このハードなら色々な OS の選択肢もあるようですが、今までの公開サーバー(PogoPlug E02) のように数年で交換を悩まなそうな見通しを考慮し、日常的で簡単な保守だけで長く安定的に公開させられればとの考えもあっての選択です。

多少のオーバースペックは安心材料

処理速度やメモリ量から考えるとハード的には、完全にオーバースペックのように思います。しかし、ラズパイって昔発売の低スペックのモデルも最新の処理能力の高いモデルも入手する金額に大きな差がないようなので、処理が遅すぎて後で悔やむよりも少し奮発しておけば気が楽になります。

悲願だった交換が完了

換える前のサーバーが非力で、OS の Debian も少し古くなったバージョンで、組込みLinuxを代表するようなシステムだったので、日常的な保守では簡単にバージョンアップができないシステムでした。そのため、このブログ WordPress が稼働する PHP もバージョン5 までしか対応できなくて、セキュリティレベルが低いと警告されていました。

いずれにしても、見た目には同じような動作のままで入替えができたようなので安心しています。使ってみた感じでは、反応がかなり早くなっているので、このブログでも写真の公開でもストレス無く反応しているように感じました。

気持ちだけ焦ってしまう

公開サーバーの更新

遅いし、PHPがバージョンアップ不能

ウェブ用のサーバーを更新しようと思い立ったのは、いつだったのだろうと考えてしまうくらい長い月日が流れてしまいました。

問題は色々あって進まない

自分の能力不足だったり、最適と思える価格と能力を持つ機材が思い当たらなかったり、時間が無かったりと、タラタラと言い訳が出てしまいそうで情けないです。

ラズパイの最新版登場

一応ラズパイも、メモリー搭載が大きくなって処理能力が格段に改善された最新モデルも発売になったので、これを利用して置き換えようと思い立ちました。

簡単な試行では機敏な反応、期待できそう

まずはサーバーとしての基本を設定しなければなりません。素の状態で動作させ始めると確かに速そうな感触です。置き換えられれば反応の悪さが改善しそうな予感です。

Apache稼働でレスポンス良さそう

今動いているこのブログの機能の移行が最大の問題点なのですが、Apacheを稼働させ、写真の公開データをコピーして稼働出来る事を確認しました。単純な作りなので移行も簡単です。

さて、大問題のこのブログですが、WordPressで構成され、PHP上のアプリとして機能して、Mysqlと呼ばれるデータベースを使用しています。

Mysqlが無くなってしまいました

最新のラズパイのOSからはMysqlが削除されて、代替としてMariadbに変わったようです。Mysqlが、Oracleに吸収されたような話を聞いた記憶がありますが、中立性のオープンソースデータベースでしょうか。

操作上の違いがあるのか、ないのかも不明で、ブログの素人の移行作業には更にハードルが上がったとしか思えません。参ったものです。

まずはメールやシステムログのレポート

その前に色々な機能を追加して、サーバーとして稼働させられる様な状況を作る必要があります。

稼働したシステムログを監視して、メールで毎日通知する機能だとか、メールを発信できる機能が必須です。

他のラズパイサーバーが、Postfixでニフティにメールをリレーしているので、それをコピーして稼働させることにしましたが、バージョンも上がっているようで、予想外の四苦八苦です。

システムログのサマリーがメールで届くのか?

明日の朝以降に、Logwatchのメールが届けば、次のステップとしてブログの移行について試行錯誤のテストに移行しようかと考えてます。

連動地図の機能を拡張

山歩きでは地理院の地形図

私が古くから公開していたプライベート写真のページですが、撮影場所や移動経路をマークして表示できるグーグルマップを組込んでいます。しかし山歩きではちょっと役不足のようですね、やはり国土地理院の紙地図で提供されていたあの地形図の 1/25,000 が何と言っても最適な気がします。

一長一短で、地形図も万能ではない

ただ、国土地理院の地形図が万能かと言うと難しく、市街地や郊外、山の地形と色々な場面で一長一短があって、一意に決めるのは難しいのが現状です。

技術的な知識不足も能力不足もあって、その辺りをずっと悩んでいました。そして何とかオープンストリートマップと国土地理院の地図を表示する事ができ、次のステップで念願だった国土地理院の地形図をオーバーレイで重ねて表示できる機能を知り、今回の改良に至りました。

色々な地図に地理院の地形図を重ねると最強

改良してみて、色々な地図とのオーバーレイで感じることは、望んでいた地図はこれだと思いました。

グーグルの標準 [地図] や [地図+写真]、 グーグルの地形図 [☑地形]、 オープンストリートマップ [OSM地図]、 国土地理院の地形図 [地理院]、 国土地理院の航空写真 [地理院 航] と選択はありますが、これらと 地理院の地形図 を重ねてみるとなかなか興味深い結果となりました。

昔の写真を掘り起こすように開いてみると、しみじみと地図に見入ってしまいます。

グーグル地図は、右上に配置されている破線で描いたような のボタンで、全画面の地図に移動できますので、広い画面で地図を楽しむことができます。逆に戻ることもできるのでとても便利です。

最近の地図について

ネット上で広く利用されている地図には、グーグルマップやヤフー地図とか色々なものがあります。私も利用方法がネット上に公開されたこともあり、それより先に公開していたプライベート写真にグーグルマップを連動させる処理を追加してきました。

2018年からグーグルマップが有料に

グーグルマップは色々な機能のAPIがあって、移動した軌跡や写真の撮影場所が簡単に表現できる便利さから利用を始めましたが、昨年から利用が有料に移行したこともあり、状況の推移を見守っていました。

無料の地図システムもあるようです

地図を無料でネット公開のページに組込み利用できるリーフレットと呼ばれる地図表示システムも開発されていて利用されているようです。そこに、オープンストリートマップ国土地理院の地図のように、利用条件に依っては無料で利用できる地図を組み合わせることで、有料のグーグルマップの利用を回避することもできます。

私も無料化を検討したのですが、グーグルマップはさすがに有料なこともあって、住所を取得や指定をしたり、経度と緯度の操作を行うAPIが充実してることもあって、現状は継続利用しています。

私も無料の地図を利用してみる

今更とは思いますが、利用方法が分かりやすく説明されていることもあって、私がグーグルマップに写真を連動している機能の中にもオープンストリートマップと国土地理院の地図が選択できるように改良してみました。

やはり山歩きや散策では国土地理院の地図

グーグルマップは良くできていると思いますが、山を歩いたり例えば霧ヶ峰高原を散策したりした時に、後から歩いた軌跡を辿って見ても、若い頃にお世話になったあの国土地理院の 1/25,000 の紙地図のような細かい表現はなく、のっぺりしているのが物足りなく感じていました。

ただグーグルマップは凄いです。最近になって感じたことですが、自宅周辺の地図のポイントから住所を拾ってみたのですが、『何番地の何』か、まで正確に表示してました。 ! グーグル恐るべし !

放置してたら凄いことに

プライベートの写真 とか ブログ を公開しているこのサーバーですが、家に置かれた小さな機器で公開しています。
当初の設置から考えると、何度か機器は更新されていて、今現在は日本国内向けとして直接販売されなかったピンク色の PogoPlug で稼働しています。

OS の設定も当時最新だった Debian の1つ前の安定版をチョイスしたのですが、システムを入れるルートパーティションに余裕を持たせるような配慮を頭に置かずにセットアップしてしまいました。

放置しっぱなしは良くないですね

あまり稼動状態に目を向けていなくて、Logwatchで毎日メールを受取っていたにもかかわらず、ちゃんと見ていませんでした。
なんとルートパーティションの使用率が 99% を越えていました。いつからこの状態だったのか…

サイズ的には、2GBしか確保していませんでした。今時の割り振りとは思えない小ささです。しかし、サーバーを稼働したままパーティションの再配分なんてできませんので、ピンチです。

コマンド du でどの部分が占めているのかを確認すると、/usr の下に使われているようです。実際には大した量ではないのですが、割合的に大きいです。
メンテナンス操作は、byobu と screen を組合せた端末から、リモート操作している環境です。

場所を移動させたい /usr 以下をガラガラに空いている場所にコピーして、/usr 以下を消去しました。さすがにその時点でbyobuが表示する各種ステータスに異常な表示が見られました。
心配しましたがメンテナンス操作はできているようです。確信はないのですが、byobu が情報の格納に/usr 以下の領域を利用しているようです。
すかさずコピー先を /usr にソフトリンク ln で結びつけると、少しずつ異常なステータス表示は解消して、正常な状態に復帰しました。

さすがにネットに公開して稼働中のサーバーを荒療治でメンテナンスする経験は無いので、ドキドキな経験でしたが無事に対処できて良かったと思います。

/usr をルートディレクトリから排除したことで、使用率が 58% に下がりました。時間がないと思っていても、時々は管理してやらないといけませんね。かなり反省しています。

WWWアタックをカウント

設置時からずっと気になるのは、セキュリティーホールを探るアタックが多いことです。

ポート22を攻めるSSHは、ごく一般的な基本の攻撃なので驚きはしませんが、ここで公開しているこのブログは標準でDBを使用するので、更新したり セットアップしたりする操作が想定できるセキュリティホール全ての事を、端から試すアタックを受け続けています。

暫く長期で旅行の予定は無いので、家の外からの操作もなく、あまりにウザいアタックなので、ポート22を無効にしています。更に、写真の公開については、特に外部からの情報を受け付けない仕様なので問題外です。

問題はこのブログへのアタック

問題はこのブログへのアタックです。毎日のLogwatchのレポートに多数のエラー404が記録されていて、同じIPアドレスから呆れるくらいの数の悪意な接続がリストされています。

どのような内容かと言うと、セットアップしたり初期化する時に、予め使用が考えられそうな操作やコマンドが全て試されているような状況です。

毎日作成されるレポートには、ログから概要がリストされていますが、IPアドレス単位で回数のカウントまでをまとめたレポートまではありません。そこでアクセスログから集計してみました。

毎日ではウザいので、1週間単位に集計して、テキスト形式で共有サーバーのフォルダに自動蓄積するようにしました。そこから転記して覚書として、ここにまとめてみようかと思います。

 回数 :  アドレス
108 : 18.220.66.54 ec2-18-220-66-54.us-east-2.compute.amazonaws.com. アメリカ
410 : 59.36.169.180 180.169.36.59.broad.dg.gd.dynamic.163data.com.cn. 中国 450 : 61.160.215.38 逆引き 登録なし 中国
108 : 66.24.164.33 cpe-66-24-164-33.stny.res.rr.com. アメリカ
436 : 79.8.64.93 host93-64-static.8-79-b.business.telecomitalia.it. イタリア
108 : 79.120.133.202 逆引き 登録なし ハンガリー
108 : 83.28.183.131 bkp131.neoplus.adsl.tpnet.pl. ポーランド
437 : 94.191.10.62 逆引き 登録なし 中国
  436 : 94.191.71.240 逆引き 登録なし 中国
227 : 103.27.61.244 逆引き 登録なし ベトナム
450 : 103.123.161.50 逆引き 登録なし 中国 108 : 104.34.26.102 cpe-104-34-161-50.socal.res.rr.com. アメリカ
420 : 114.116.94.28 ecs-114-116-94-28.compute.hwclouds-dns.com. 中国
410 : 116.193.155.7 逆引き タイムアウト 中国 436 : 118.89.57.149 逆引き 登録なし 中国
431 : 122.114.186.8 逆引き 登録なし 中国
396 : 122.114.240.241 逆引き 登録なし 中国 410 : 123.207.237.141 逆引き 登録なし 中国
467 : 124.156.167.231 逆引き 登録なし シンガポール
478 : 125.27.179.27 node-zdn.pool-125-27.dynamic.totbroadband.com. タイ 436 : 132.232.44.27 逆引き 登録なし 中国
465 : 132.232.200.165 逆引き 登録なし 中国
416 : 132.232.211.14 逆引き 登録なし 中国 408 : 134.175.30.72 逆引き 登録なし 中国 409 : 139.199.23.198 逆引き 登録なし 中国 405 : 139.199.125.47 逆引き 登録なし 中国
397 : 146.71.56.226 逆引き 登録なし アメリカ
436 : 148.70.130.190 逆引き 登録なし 中国
  449 : 159.192.220.60 逆引き 登録なし タイ
418 : 160.19.49.95 逆引き 登録なし 香港 108 : 182.164.172.192 182-164-172-192f1.shg1.eonet.ne.jp. 日本
416 : 188.131.128.163 逆引き 登録なし 中国 396 : 188.131.181.62 逆引き 登録なし 中国
450 : 188.131.204.15 逆引き 登録なし 中国
108 : 188.192.161.111 ipbcc0a16f.dynamic.kabel-deutschland.de. ドイツ
228 : 192.185.82.119 xenon.websitewelcome.com.
108 : 196.201.197.69 逆引き 登録なし ジブチ
450 : 201.117.251.50 customer-201-117-251-50.uninet-ide.com.mx. メキシコ
420 : 210.89.52.233 Sublime-52-233.pacenet-india.com. インド
437 : 218.161.75.200 218-161-75-200.HINET-IP.hinet.net. 台湾
381 : 220.135.141.52 220-135-141-52.HINET-IP.hinet.net. 台湾
114 : 220.146.236.244 nttkyo699244.tkyo.nt.ngn.ppp.infoweb.ne.jp. 日本
397 : 222.179.152.117 逆引き 登録なし 中国
478 : 222.186.136.116 逆引き 登録なし 中国
450 : 222.192.60.40 逆引き 登録なし 中国
200 : 222.255.46.171 static.vnpt.vn. ベトナム
205 : 2a02:4780:bad:3:fced:1ff:fe03:166 逆引き 登録なし LT:Lithuania

アタックするIPアドレスは、まんべんなく分散しているようです。間隔の狭いアクセスは、1秒に10回程度の機械的な接続を試みています。普通に人が操作しても数秒も掛かる操作を連打されている感じでしょうか。

元々が普通に遅いサーバーなので、処理能力の50倍や100倍の強制操作となっていて、レスポンスに時間がかかるのは当然のようです。

アメリカの amazon aws とかありますけど、クラウドの貸出サーバーでしょうか、アタックするために借りているのかなぁ…、汚染された結果なのか、脆弱な放置システムの検索のために公務で利用しているとか????

日本国内からもアタックがありました。正規に逆引き登録もされているシステムから、回数は 100回程度で少ないのですが記録されています。

リスト更新日 : 2019-04-19

ネット環境の独り言

このブログシステムであるWordPressをよく理解していないまま、メモを残せるところが欲しくて、『ブログ』をキーにしたネット検索のヒット情報から、思い付きで導入してしまったのが、今の利用の切っ掛けです。

そのような訳なので、管理のノウハウももちろん無いまま、運用方法も設定方法もわからないまま今日に至ってしまっています。あまり意識しないままシステムの更新も重ねバージョンも上がっています。

それはそれで良かったのですが、サーバーを移行したいとか、色々と気になることもあるのですが、対応する方法とか手順とか知識がなく分からないので心配の種がつきません。

そんな状況ですから、追加でCSSの設定ができることを知ったのも最近でした。投稿用のエディタの使い方もわからないままとりあえず利用していたのです。

WordPressのエディタが変更されました

そんな中で投稿用のエディタを使いこなす前に、新しいエディタの公開が始まり置き換えられました。今までのエディタはクラッシックとしてプラグインで残されていて利用も選択も可能のようです。

新しいエディタでは段落毎に分割されブロックとして扱われ、間の追加や入替え、写真やライブラリの追加も容易らしく、今までの慣れを持たない初心者が新しく慣れるには最適なのかもしれません。

しかし、以前の投稿内容を複製して、新しいエディタで変更していたら、ぐちゃぐちゃに書き換えられたり、ごっそり消え去ったりと大変な目にあいました。以前のタグによる記述のできるクラッシックブロックと言われる扱いもあるらしいのですが、知識がないと使いこなし方が分かりません。

自己防御に必要で、仕方無くネットから多少の基本的な知識を得ました。新しいエディタがグーテンベルクと名前の付いたエディタで、以前のものをクラッシックエディタと称しているようで、選択して利用できるようにしました。

デフォルトでは新しいエディタが選ばれた状態ですが、選べばクラッシックに変更も可能です。新しいエディタが便利なのは、適当に書き込んでいると下書きの状態が自動で保存されるようです。クラシックの操作では意識して自分で保存する必要があったように思います。

ネットからのアタック多発でコメント禁止に

プライベート写真の公開は、ブログのWordPressの機能を利用していませんので、いつからかを忘れるくらい前からネット上に公開しています。それに追加するイメージで、メモ書きができるようにWordPressのこのブログを立上げました。

当初から悪意のあるアタックがログに多数記録されていましたが、SQLデータベースも利用していないし、SSHのログインではパスワード認証を受け付けていないので、ネットワークトラフィックの増加程度しか影響もなく無視していました。

しかし、『群馬のじゆうじん』さんの歩きによる日本縦断の頃に、ブログ機能を追加してからはアタックが極度に増加して、毎日のログに多数のアタックが書き込まれ、日本語以外のスパムコメントが多数追加されるようになり、時々の管理では削除するのも手が回らなくなり、仕方無くコメントの受付を禁止しました。

--------------------- httpd Begin ------------------------
 Requests with error response codes
    400 Bad Request
       /: 4 Time(s)
       null: 1 Time(s)
    401 Unauthorized
       /: 4 Time(s)
       /menu.js: 1 Time(s)
    403 Forbidden
       /.php: 1 Time(s)
    404 Not Found
       /blog/index.php/2015/08/03/wp-setup-1/: 9 Time(s)
       /x.php: 5 Time(s)
       /1.php: 4 Time(s)
       /confg.php: 4 Time(s)
       /qq.php: 4 Time(s)
       /test.php: 4 Time(s)
       /blog/20190117_121630582/: 3 Time(s)
       /cmd.php: 3 Time(s)
       /z.php: 3 Time(s)
       /2.php: 2 Time(s)
       /MCLi.php: 2 Time(s)
       /api.php: 2 Time(s)
       /blog/index.php/2015/08/04/syslog-cron-1/: 2 Time(s)
       /conflg.php: 2 Time(s)
       /hell.php: 2 Time(s)
       /hello.php: 2 Time(s)
       /help.php: 2 Time(s)
       /log.php: 2 Time(s)
       /manager/html: 2 Time(s)
       /paylog.php: 2 Time(s)
       /q.php: 2 Time(s)
       /robots.txt: 2 Time(s)
       /s.php: 2 Time(s)
       /shell.php: 2 Time(s)
       /sitemap.xml: 2 Time(s)
       /test123.php: 2 Time(s)
       /wp-login.php: 2 Time(s)
       /xx.php: 2 Time(s)
       /zxc1.php: 2 Time(s)
       /.well-known/assetlinks.json: 1 Time(s)
       /.well-known/security.txt: 1 Time(s)
       //MyAdmin/scripts/setup.php: 1 Time(s)
       //myadmin/scripts/setup.php: 1 Time(s)
       //phpMyAdmin/scripts/setup.php: 1 Time(s)
       //phpmyadmin/scripts/setup.php: 1 Time(s)
       //pma/scripts/setup.php: 1 Time(s)
       /1111.php: 1 Time(s)
       /1213.php: 1 Time(s)
       /123.php: 1 Time(s)
       /1hou.php: 1 Time(s)
       /1q.php: 1 Time(s)
       /3.php: 1 Time(s)
       /51.php: 1 Time(s)
       /51314.php: 1 Time(s)
       /5201314.php: 1 Time(s)
       /56.php: 1 Time(s)
       /666.php: 1 Time(s)
       /7.php: 1 Time(s)
       /777.php: 1 Time(s)
       /92.php: 1 Time(s)
       /9510.php: 1 Time(s)
       /9678.php: 1 Time(s)
       /HX.php: 1 Time(s)
       /MyAdmin/index.php: 1 Time(s)
       /PMA/index.php: 1 Time(s)
       /PMA2/index.php: 1 Time(s)
       /Ss.php: 1 Time(s)
       /_query.php: 1 Time(s)
       /a.php: 1 Time(s)
       /aa.php: 1 Time(s)
       /aaaa.php: 1 Time(s)
       /aaaaaa1.php: 1 Time(s)
       /admin/PMA/index.php: 1 Time(s)
       /admin/index.php: 1 Time(s)
       /admin/mysql/index.php: 1 Time(s)
       /admin/mysql2/index.php: 1 Time(s)
       /admin/phpMyAdmin/index.php: 1 Time(s)
       /admin/phpmyadmin/index.php: 1 Time(s)
       /admin/phpmyadmin2/index.php: 1 Time(s)
       /admin/pma/index.php: 1 Time(s)
       /admn.php: 1 Time(s)
       /ak.php: 1 Time(s)
       /ak47.php: 1 Time(s)
       /ak48.php: 1 Time(s)
       /angge.php: 1 Time(s)
       /aotu.php: 1 Time(s)
       /aotu7.php: 1 Time(s)
       /app.php: 1 Time(s)
       /appserv.php: 1 Time(s)
       /bak.php: 1 Time(s)
       /blog//wp-content/plugins/wp-special-textb ... tb-uploader.php: 1 Time(s)
       /blog/?author=2: 1 Time(s)
       /blog/?author=4: 1 Time(s)
       /blog/index.php/2015/08/31/kawashimo/: 1 Time(s)
       /blog/index.php/2015/09/22/numanodaira/: 1 Time(s)
       /blog/index.php/2015/10/29/windows-vista/: 1 Time(s)
       /blog/index.php/2016/03/22/gun/: 1 Time(s)
       /blog/index.php/2016/09/04/rpi3-setup-8/: 1 Time(s)
       /blog/index.php/category/raspberry-pi/page/3/: 1 Time(s)
       /boots.php: 1 Time(s)
       /cacti/plugins/weathermap/editor.php: 1 Time(s)
       /cadre.php: 1 Time(s)
       /cainiao.php: 1 Time(s)
       /caonma.php: 1 Time(s)
       /cc.php: 1 Time(s)
       /ceshi.php: 1 Time(s)
       /cgi-bin/config.exp: 1 Time(s)
       /claroline/phpMyAdmin/index.php: 1 Time(s)
       /cmdd.php: 1 Time(s)
       /cmv.php: 1 Time(s)
       /cn.php: 1 Time(s)
       /cnm.php: 1 Time(s)
       /conf.php: 1 Time(s)
       /conf1g.php: 1 Time(s)
       /core.php: 1 Time(s)
       /cxfm666.php: 1 Time(s)
       /data.php: 1 Time(s)
       /db.init.php: 1 Time(s)
       /db.php: 1 Time(s)
       /db/index.php: 1 Time(s)
       /db__.init.php: 1 Time(s)
       /db_cts.php: 1 Time(s)
       /db_dataml.php: 1 Time(s)
       /db_desql.php: 1 Time(s)
       /db_pma.php: 1 Time(s)
       /db_session.init.php: 1 Time(s)
       /dbadmin/index.php: 1 Time(s)
       /default.php: 1 Time(s)
       /defect.php: 1 Time(s)
       /desktop.ini.php: 1 Time(s)
       /dexgp.php: 1 Time(s)
       /diy.php: 1 Time(s)
       /errors.php: 1 Time(s)
       /erwa.php: 1 Time(s)
       /fack.php: 1 Time(s)
       /favicon.ico: 1 Time(s)
       /fb.php: 1 Time(s)
       /feixiang.php: 1 Time(s)
       /fusheng.php: 1 Time(s)
       /general.php: 1 Time(s)
       /godkey.php: 1 Time(s)
       /h1.php: 1 Time(s)
       /hack.php: 1 Time(s)
       /hacly.php: 1 Time(s)
       /help-e.php: 1 Time(s)
       /hh.php: 1 Time(s)
       /hm.php: 1 Time(s)
       /horde/imp/test.php: 1 Time(s)
       /horde3/imp/test.php: 1 Time(s)
       /htdocs.php: 1 Time(s)
       /htfr.php: 1 Time(s)
       /imp/test.php: 1 Time(s)
       /index.php: 1 Time(s)
       /index1.php: 1 Time(s)
       /indexa.php: 1 Time(s)
       /info.php: 1 Time(s)
       /info1.php: 1 Time(s)
       /infoo.php: 1 Time(s)
       /infos.php: 1 Time(s)
       /ip.php: 1 Time(s)
       /j.php: 1 Time(s)
       /java.php: 1 Time(s)
       /knal.php: 1 Time(s)
       /l6.php: 1 Time(s)
       /l7.php: 1 Time(s)
       /l8.php: 1 Time(s)
       /lala-dpr.php: 1 Time(s)
       /lala.php: 1 Time(s)
       /ldw.php: 1 Time(s)
       /license.php: 1 Time(s)
       /lindex.php: 1 Time(s)
       /linux.php: 1 Time(s)
       /linux1.php: 1 Time(s)
       /linuxse.php: 1 Time(s)
       /logon.php: 1 Time(s)
       /lol.php: 1 Time(s)
       /lost.php: 1 Time(s)
       /lx.php: 1 Time(s)
       /m.php: 1 Time(s)
       /m.php?pbid=open: 1 Time(s)
       /miao.php: 1 Time(s)
       /min.php: 1 Time(s)
       /mm.php: 1 Time(s)
       /muhstik-dpr.php: 1 Time(s)
       /muhstik.php: 1 Time(s)
       /muhstik2.php: 1 Time(s)
       /muhstiks.php: 1 Time(s)
       /muieblackcat: 1 Time(s)
       /mx.php: 1 Time(s)
       /myadmin/index.php: 1 Time(s)
       /myadmin2/index.php: 1 Time(s)
       /mysql-admin/index.php: 1 Time(s)
       /mysql/admin/index.php: 1 Time(s)
       /mysql/dbadmin/index.php: 1 Time(s)
       /mysql/index.php: 1 Time(s)
       /mysql/mysqlmanager/index.php: 1 Time(s)
       /mysql/sqlmanager/index.php: 1 Time(s)
       /mysql_admin/index.php: 1 Time(s)
       /mysqladmin/index.php: 1 Time(s)
       /mz.php: 1 Time(s)
       /nuoxi.php: 1 Time(s)
       /okokok.php: 1 Time(s)
       /ou2.php: 1 Time(s)
       /p.php: 1 Time(s)
       /pe.php: 1 Time(s)
       /php.php: 1 Time(s)
       /phpAdmin/index.php: 1 Time(s)
       /phpMyAbmin/index.php: 1 Time(s)
       /phpMyAdm1n/index.php: 1 Time(s)
       /phpMyAdmin+++---/index.php: 1 Time(s)
       /phpMyAdmin-4.4.0/index.php: 1 Time(s)
       /phpMyAdmin.old/index.php: 1 Time(s)
       /phpMyAdmin/index.php: 1 Time(s)
       /phpMyAdmin/phpMyAdmin/index.php: 1 Time(s)
       /phpMyAdmin/scripts/db___.init.php: 1 Time(s)
       /phpMyAdmin/scripts/setup.php: 1 Time(s)
       /phpMyAdmin1/index.php: 1 Time(s)
       /phpMyAdmin123/index.php: 1 Time(s)
       /phpMyAdmin__/index.php: 1 Time(s)
       /phpMyAdmina/index.php: 1 Time(s)
       /phpMyAdminold/index.php: 1 Time(s)
       /phpMyAdmion/index.php: 1 Time(s)
       /phpMyadmi/index.php: 1 Time(s)
       /phpMyadmin_bak/index.php: 1 Time(s)
       /phpMydmin/index.php: 1 Time(s)
       /phpStudy.php: 1 Time(s)
       /phpadmin/index.php: 1 Time(s)
       /phpinfi.php: 1 Time(s)
       /phpma/index.php: 1 Time(s)
       /phpmy/index.php: 1 Time(s)
       /phpmyadm1n/index.php: 1 Time(s)
       /phpmyadmin-old/index.php: 1 Time(s)
       /phpmyadmin/index.php: 1 Time(s)
       /phpmyadmin/phpmyadmin/index.php: 1 Time(s)
       /phpmyadmin/scripts/db___.init.php: 1 Time(s)
       /phpmyadmin/scripts/setup.php: 1 Time(s)
       /phpmyadmin0/index.php: 1 Time(s)
       /phpmyadmin1/index.php: 1 Time(s)
       /phpmyadmin2/index.php: 1 Time(s)
       /phppma/index.php: 1 Time(s)
       /phpstudy.php: 1 Time(s)
       /plugins/weathermap/editor.php: 1 Time(s)
       /pma-old/index.php: 1 Time(s)
       /pma.php: 1 Time(s)
       /pma/index.php: 1 Time(s)
       /pmamy/index.php: 1 Time(s)
       /pmamy2/index.php: 1 Time(s)
       /pmd/index.php: 1 Time(s)
       /pmd_online.php: 1 Time(s)
       /post.php: 1 Time(s)
       /ppx.php: 1 Time(s)
       /program/index.php: 1 Time(s)
       /public/20040606.yunomaru/publicindex.html: 1 Time(s)
       /pwd/index.php: 1 Time(s)
       /python.php: 1 Time(s)
       /qa.php: 1 Time(s)
       /qaq.php: 1 Time(s)
       /qaz.php: 1 Time(s)
       /qq5262.php: 1 Time(s)
       /qw.php: 1 Time(s)
       /qwe.php: 1 Time(s)
       /qwq.php: 1 Time(s)
       /qwqw.php: 1 Time(s)
       /repeat.php: 1 Time(s)
       /ruyi.php: 1 Time(s)
       /s/index.php: 1 Time(s)
       /s1.php: 1 Time(s)
       /scripts/setup.php: 1 Time(s)
       /sean.php: 1 Time(s)
       /sha.php: 1 Time(s)
       /shaAdmin/index.php: 1 Time(s)
       /she.php: 1 Time(s)
       /sheep.php: 1 Time(s)
       /shopdb/index.php: 1 Time(s)
       /ss.php: 1 Time(s)
       /ssaa.php: 1 Time(s)
       /sss.php: 1 Time(s)
       /system.php: 1 Time(s)
       /text.php: 1 Time(s)
       /tiandi.php: 1 Time(s)
       /tomcat.php: 1 Time(s)
       /tools/phpMyAdmin/index.php: 1 Time(s)
       /toor.php: 1 Time(s)
       /typo3/phpmyadmin/index.php: 1 Time(s)
       /u.php: 1 Time(s)
       /up.php: 1 Time(s)
       /uploader.php: 1 Time(s)
       /users-online/: 1 Time(s)
       /uu.php: 1 Time(s)
       /uuu.php: 1 Time(s)
       /v/index.php: 1 Time(s)
       /ver.php: 1 Time(s)
       /w.php: 1 Time(s)
       /wan.php: 1 Time(s)
       /wanan.php: 1 Time(s)
       /wb.php: 1 Time(s)
       /wc.php: 1 Time(s)
       /wcp.php: 1 Time(s)
       /web/phpMyAdmin/index.php: 1 Time(s)
       /webdav/: 1 Time(s)
       /webmail/imp/test.php: 1 Time(s)
       /webslee.php: 1 Time(s)
       /weixiao.php: 1 Time(s)
       /win.php: 1 Time(s)
       /win1.php: 1 Time(s)
       /wp-admins.php: 1 Time(s)
       /wp-config.php: 1 Time(s)
       /wp-content/plugins/portable-phpmyadmin/wp-pma-mod/index.php: 1 Time(s)
       /wpc.php: 1 Time(s)
       /wpo.php: 1 Time(s)
       /wshell.php: 1 Time(s)
       /wuwu11.php: 1 Time(s)
       /www/phpMyAdmin/index.php: 1 Time(s)
       /xampp/phpmyadmin/index.php: 1 Time(s)
       /xiao.php: 1 Time(s)
       /xiaodai.php: 1 Time(s)
       /xiaohei.php: 1 Time(s)
       /xiaoma.php: 1 Time(s)
       /xiaomae.php: 1 Time(s)
       /xiaomar.php: 1 Time(s)
       /xiaomo.php: 1 Time(s)
       /xiaoyu.php: 1 Time(s)
       /xp.php: 1 Time(s)
       /xshell.php: 1 Time(s)
       /xw.php: 1 Time(s)
       /xw1.php: 1 Time(s)
       /xxx.php: 1 Time(s)
       /xz.php: 1 Time(s)
       /yao.php: 1 Time(s)
       /yj.php: 1 Time(s)
       /yumo.php: 1 Time(s)
       /zshmindex.php: 1 Time(s)
       /zuo.php: 1 Time(s)
       /zuoindex.php: 1 Time(s)
       /zuos.php: 1 Time(s)
       /zuoshou.php: 1 Time(s)
       /zuoshss.php: 1 Time(s)
       /zuoss.php: 1 Time(s)
       /zxc0.php: 1 Time(s)
       /zxc2.php: 1 Time(s)
       /zzk.php: 1 Time(s)
    405 Method Not Allowed
       /: 1 Time(s)
       /blog/xmlrpc.php: 1 Time(s)
       133.130.126.119:43: 1 Time(s)
    408 Request Timeout
       null: 1 Time(s)
 ---------------------- httpd End -------------------------
 --------------------- SSHD Begin ------------------------
 Illegal users from:
    undef: 164 times
    23.226.82.76: 11 times
    37.49.225.93: 31 times
    88.214.26.15: 2 times
    95.78.163.55 (95x78x163x55.static-business.chel.ertelecom.ru): 11 times
    113.124.142.159: 1 time
    155.4.252.84 (h-252-84.A259.priv.bahnhof.se): 1 time
    156.220.114.220 (host-156.220.220.114-static.tedata.net): 1 time
    178.135.245.108: 1 time
    183.101.51.180: 1 time
    193.201.224.218: 213 times
    195.88.208.72 (208-72.static.spheral.ru): 4 times
    195.88.208.247 (208-247.static.spheral.ru): 4 times
    222.138.93.66 (hn.kd.ny.adsl): 1 time

こんなのが毎日記録されていて、さすがに慣れっこになってしまいます。

まだ固定電話の工事が残っているので、正式には移行が完了していませんが、ブラスト光に環境は置き換えていて、支給されているルーターは中国共産党の汚染問題が懸念されているファーウェイ製です。機種名は HG8045Qとなっています。ログインして項目を見ると色々な設定ができるようです。

その前にワイモバイルで契約したソフトバンク支給ルーターは、設定できる項目が少なく、かつ少し働くと勝手に眠りにつくらしいDNSで、スマホでネット情報を検索したくても繋がらなくて、日に何度もルーターをリセットしていたことを考えると嘘のような使い物にならない困り物でした。そしてクレームしたくても問合せ先が不明でした。

せめてDHCPサーバーの機能で、 DNSサーバーを指定する項目があれば、スマホからでも WiFiでインターネットが利用できるのですが、独自に立てているDNSサーバーを活かすこともできなくて、1つの回避策は WiFiを利用しないで有料の4G/3Gの専用線を常時利用することです。これってソフトバンクの政策でしょうか、詐欺的商法に思えます。

それを考えるとファーウェイのHG8045Q は、排除するIPアドレスも簡単に指定できるようになったので、とても使い勝手が良くなりました。そこで先程の話題で触れた異常に回数の多いアタックのIPアドレスをブロックしてみようかと考えました。

様子を見ながら少しずつアタック IPを追加してブロック

今回のアタック対策では、同一IPアドレスから複数回 22番ポートのSSHに対して行われているものを対象としてブロックしてみましたが、やはり効果はあるようです。ブログやプライベート写真公開へのアタックも同様に激減しているように思えます。

次の懸念材料は、スパムコメントの対策です。どんどん追加されるコメントで溢れ意味もわからないまま追われました。何のコメントを追加してくれたのかと思い、必死に日本語にしてみると何のことはない内容で、バイアグラが安いとか、ランジェリーが何だとかの宣伝をコメントに書き込んでいるだけでした。

機械的にスパムコメントを送りつけているだけの対策ですが、ネットを調べていると日本語の含まれないコメントをスパムとして排除する方法で、初期設定のままでも結果が満足だと紹介している情報に行き当たりました。

私の公開しているWebにスパム以外のコメントが付いた経験もなく、日本語以外のコメントが付けられること自体がありえないことのようなので、私に完璧に一致している対策のようです。

その対策用プラグインは、Throws SPAM Away と付けられたもので、導入すると管理用のメニューに設定変更の項目が追加され、色々な適用項目の選択ができるようになるようです。まずはそのまま変更無しで利用してみます。

スパムコメント対策を実施して、コメント受付を試す

そして最近の投稿にだけコメントの追加ができるように変更してみました。一応メモを蓄積するブログなので、コメントを受付けるのが筋かと思いますので、今後は様子を見ながら対策のカスタマイズをしたいと思います。