2019年1月アーカイブ

ウェブサーバーは、通常は、 http://www.example.com や https://www.example.com というリクエストを受けて、HTMLデータをクライアントへ返しているわけですが、
サーバーに対して、外部から、
http://999.999.999.999
https://999.999.999.999
のように、IPアドレスでアクセスしに来る場合もあります。
また、ウェブサーバー自身は www.example.com で情報提供したいのに、第三者が、xxx.example.net をそのサーバーのIPに勝手にDNS割当てしてアクセスさせるということもできたりするので、ウェブサーバー側では、IPアドレスによるアクセスに限らず、自分がホストしているFQDN以外でアクセスがあった場合は、基本的には「アクセス拒否」したほうが良いです。

reject01.png

特に、中国国内に立てているウェブサーバーは、ICPサイト登録が必要だったりしますが、登録したドメイン以外でアクセスができてしまうと、データセンター経由で、当局より叱られたりします。

そんな、「IPアドレスや違うFQDNによるアクセスを拒否したい場合」の設定方法です。
OSはCentOS 7.5、Apacheは2.4.6、SSLはmod_sslです。
状況設定が中途半端(DocumentRootが/var/www/htmlだったり...)な、ざっくりメモです。
よくわからない子はまねしないでね。

ちなみに、Apache 2.4では、デフォルトでVirtualHostがONになっています。
そして、VirtualHostやSSLの設定は cond.d/*.conf からIncludeするようになっています。

1.http(80)については、ホストするVirtualHostを conf/httpd.conf または conf.d/vhost-01.conf に、必要な設定を行います。

(vhost-01.confの中身の例)
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

2.https(443)については、ホストするVirtualHostを conf.d/ssl.conf 等に、必要な設定を行います。

ここまでの設定で、
http://www.example.com
https://www.example.com
http://999.999.999.999
https://999.999.999.999
http://xxx.example.net ←不正なFQDN
https://xxx.example.net ←不正なFQDN
のすべてでアクセスができるようになってしまっています。

3.conf.d/ の下に 00-reject.conf のような名前で、以下のような内容のファイルを用意します。
conf.dのREADMEには
 Files are processed in alphabetical order.
とあるので、ファイル名が非常に重要なポイントになります。

<VirtualHost *:80>
ServerName any
<Location />
Require all denied
</Location>
</VirtualHost>

<VirtualHost *:443>
ServerName any
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt ←ファイル名はあなたの環境のそれを指定
SSLCertificateKeyFile /etc/pki/tls/certs/server.key  ←ファイル名はあなたの環境のそれを指定
<Location />
Require all denied
</Location>
</VirtualHost>

4.チェックとapacheの再起動
apachectl configtest
systemctl restart httpd

こんな感じです。
試してみてね。

ぐっどらっこ。

2019/01/27 追記
 下記の設定を行った場合でも、1週間前のファイルが、相変わらず消えていることに気づきました。(泣) 調べたところ、Windows 10の問題のようです。
 ディスクのクリーンアップタスク (SilentCleanup) にて環境変数 %TEMP% や %TMP% に設定されているフォルダーが削除されてしまう問題について
 修正プログラムがないそうなので、タスクスケジュラーで、タスクスケジューラライブラリ→Microsoft→Windows→DsikCleanupから SilentCleanup を「無効」にします。
 管理者モードのコマンドプロンプトから
  schtasks /change /tn \Microsoft\Windows\DiskCleanup\SilentCleanup /disable
 でもOKです。

では、本文です。

知らなかった...。
Windows 10 Fall Creators Update(バージョン1709)以降、Tempの下のファイルが自動削除できるようになったらしい。
しかも、デフォルトでON。
1週間より前のファイルが自動的に削除されている。
多くの人にとってはいいことなのだろう。
でも、私にとっては「勝手に消さないで!」である。

早速、自動的に削除されないように設定した。

1.スタート→設定(歯車)アイコンをクリック。
2.システム→ストレージ→空き領域を自動的に増やす方法を変更するをクリック。
3.「ストレージセンサー」をオフに。(これはオフだった)
4.「一時ファイル」の「アプリで使用されていない一時ファイルを削除します」のチェックをオフに。念の為、その下の2つを「許可しない」に変更。

temp_auto_erase.png

ぐっどらっこ。

空き領域を自動的に増やす方法を変更する

CentOS7.5のパッケージで入れたphp5.4+MariaDBでphpMyAdminをyumでインストールしたかったけど、phpのバージョンとかリポジトリーとかの絡みがあって入れられそうもなかったので、手動でインストールしてみた。
そのメモ。
良い子は真似しないでね。

phpmyadmin_logo.png

1.phpMyAdminのダウンロード。php5.4で使えるphpmyadminのバージョンは4.0。
wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-4.0.10.20-all-languages.zip

2.解凍
unzip phpMyAdmin-4.0.10.20-all-languages.zip

3.解凍したフォルダを、phpmyadminという名前に変更して/var/wwwの下へ移動。
mv phpMyAdmin-4.0.10.20-all-languages phpmyadmin
mv phpmyadmin/ /var/www/.

4./var/wwwの下のconfig.sample.inc.phpをconfig.inc.phpとしてコピー。
cp config.sample.inc.php config.inc.php

5.config.inc.phpを編集。
diff config.inc.php config.sample.inc.php
17c17
< $cfg['blowfish_secret'] = 'xxxxxxxxxxx'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
---
> $cfg['blowfish_secret'] = 'a8b7c6d'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
48,60c48,60
< $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
< $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
< $cfg['Servers'][$i]['relation'] = 'pma__relation';
< $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
< $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
< $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
< $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
< $cfg['Servers'][$i]['history'] = 'pma__history';
< $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
< $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
< $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
< $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
< $cfg['Servers'][$i]['recent'] = 'pma__recent';
---
> // $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
> // $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
> // $cfg['Servers'][$i]['relation'] = 'pma__relation';
> // $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
> // $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
> // $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
> // $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
> // $cfg['Servers'][$i]['history'] = 'pma__history';
> // $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
> // $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
> // $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
> // $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
> // $cfg['Servers'][$i]['recent'] = 'pma__recent';

6.apacheにエイリアスの設定。
/etc/httpd/conf.dの下に、以下の内容でphpmyadmin.confを作成。

Alias /phpmyadmin /var/www/phpmyadmin
<Directory /var/www/phpmyadmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
<RequireAny>
Require ip 127.0.0.1
Require ip xxx.xxx.xxx.xxx
</RequireAny>
</IfModule>
</Directory>

7.コンフィグをテスト。
apachectl configtest

8.apacheを再起動。
systemctl restart httpd

9.許可したIPから/phpmyadminへブラウザでアクセス。
mysqliがない!というエラーが表示されたので、yum install php-mysqliを実行。

10.phpmyadminを使って、create_tables.sql をインポート。(phpmyadminのソースのexamplesフォルダの下にある)
この操作を行わないと、phpmyadminでデーブルを展開時に、
#1146 - Table 'phpmyadmin.pma__table_uiprefs' doesn't exist
というエラーが発生する。

完了!

ぐっどらっこ。

OneDriveのサインインで0x8004def7エラー

OneDriveアプリでサインインしようとしたら、0x8004def7というエラーでサインインできませんでした。

onedrive_freeze1.jpg

原因は、サインインに使ったマイクロソフトアカウントでの、OneDriveが「凍結」されていたためでした。しばらく使っていなかった...。

https://onedrive.live.com/

へアクセスし凍結を解除したらアプリでサインインできました。

onedrive_freeze2.png

ぐっどらっこ。

Windows10でのお話です。
買ったばかりのパソコンで、HDDの容量は500GBもあるのに、1ヶ月もしないうちに「空き容量が不足しています」「まもなくいっぱいになります」といった感じのメッセージが表示されるというので、ちょっと調べてみました。

原因はOneDriveでした。

問題のパソコンは、Windows 10の初期セットアップの際に、マイクソフトアカウントでログインするように設定し(本人はその認識なし)、さらに、OneDriveを利用するように設定(本人はその認識なし)をしたので、デスクトップ、ドキュメント、ピクチャーがOneDriveの領域を利用するように設定されていたために、OneDriveの領域が不足(デフォルトで5GB、この時、残り400MB)しているというメッセージが表示されている状態でした。
デスクトップの多くのファイルには、下のような緑色の小さなチェックマークが付いていました。
onedrive_folder01.png

空き容量を確保するためにOneDriveの画面で「追加のストレージを取得」を選ぶと、有料で増量できますが、そんなことは望んでいません。普通に、HDDに保存できればよいのです。

これを解決するには、OneDriveで「このPCのリンク解除」を実行すればよいのですが、
onedrive_folder02.png

この時、「自動保存」タブ→「重要なフォルダーを保護する」の「フォルダーの更新」で「保護の停止」をしておかないと、ドキュメントやデスクトップの保存場所が、OneDriveフォルダーの下のそれらのフォルダーを使い続けてしまいますので注意が必要です。
onedrive_folder03.png

もし、保護の停止操作をせずに、OneDriveのリンクを解除した場合は、再度、サインインして、OneDriveを使用する状態にしてから保護の停止を行い、その後、リンク解除する流れの操作をすることをおすすめします。
onedrive_folder07.png

サインインせずに、通常のユーザーフォルダー下を保存場所に変更したい場合は、
・「デスクトップ」はプロパティ画面で「場所」を変更する。

onedrive_folder04.png
・「ドキュメント」と「ピクチャー」はレジストリを変更し、パソコンを再起動する。
  コンピューター\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders の
   {F42EE2D3-909F-4907-8871-4C22FC0BF756} ←ドキュメント 値の例 C:\Users\taro\Documents
   {0DDD015D-B06C-45D5-8C4C-F59713854639} ←ピクチャー 値の例 C:\Users\taro\Pictures
onedrive_folder05.png
をすることで、対応できます。

「ドキュメント」や「ピクチャー」を、デスクトップと同じように「場所」の変更で移動しようとすると、「同じ場所にリダイレクトできないフォルダーがあるため、フォルダーを移動できません。」というエラーが発生し、移動が失敗します。
onedrive_folder06.jpg

なお、「保護の停止」や場所の変更&レジストリ修正の作業後に、移動後のユーザーフォルダー下のデスクトップやドキュメントなどに、作業前にあったはずのファイルが見つからない場合は、OneDriveフォルダの下のデスクトップやドキュメントなどのフォルダーの下にあるはずですので、そちらから移動します。

ぐっどらっこ。

apache-httpd.png

apache 2.4 で、SSIを動作させる方法は

apache 2.4の.htaccessで.htmlと.htmをSSIのinclude virtualで動作させる方法

で書きましたが、
この設定を行った .htaccess に、「PHPを.htmlでも動作させるための設定」の記述

AddHandler php-script .php .html

を追加すると、.html内に書いた

<!--#include virtual="/include/template.html" -->

というSSI用のコードが効かなくなります。
そこで、上記を次のように書き換えます。

<?php echo file_get_contents("include/template.html"); ?>

なお、テンプレートファイル名は相対パスで書きましょう。

ぐっどらっこ。

Windows10 1809のパソコンから、バッファローのBHR-4RVルーターに設定したPPTPサーバーへ接続しようとしたら接続できず、少しハマったのでメモ。

最初に、パソコンにVPNの接続設定を行ったところ、接続設定は作成されるものの、接続設定アイコンに「利用不可能 - デバイスが見つかりません」と表示され、設定変更しようとすると「予期しないエラーが発生しました」となります。

w10_vpn7.jpg

デバイスマネージャーで確認すると、通常あるはずのWAN Miniport(PPTP)がありません。

w10_vpn1.jpg

原因は、Remote Access Connection Managerというサービスが依存関係の問題で起動していなかったことでした。

w10_vpn2.jpg

その依存関係のサービスは「DNS Client(Dnscache)」なのですが、Dnscacheのプロパティ画面の表示項目がグレーアウトしていて何も操作ができません。この時「スタートアップの種類」は「無効」でした。

w10_vpn3.jpg

Dnscacheが開始されていないと、たとえば、ipconfig /flushdns というコマンドが
Could not flush the DNS Resolver Cache: 関数は実行中に失敗しました。
というエラーとなり実行できないなどの不都合が発生します。
今まで、よくこんな状態でパソコンを使っていたなと思ったり思わなかったり。

話戻して、
Dnscacheが開始できないのはDnscacheのレジストリの権限設定あたりが原因(NetworkServiceへフルコントロールを付与したけど効果なし)と思われますが、とりあえず、regeditで「スタートアップの種類」を無効(4)→自動(2)に変更してパソコンを再起動したところ、Dnscacheサービスは「開始」となりました。

「\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Start」
を4→2に変更。

w10_vpn4.jpg

次に、
Remote Access Auto Connection Manager
Remote Access Connection Manager
Telephony
の3つのサービスを開始させて、ついでにこれらの「スタートアップの種類」を「自動」に変更しました。

さて、これでVPNの接続設定は作成できたのですが、ルーターへ接続すると、今度は、
「PPP リンク制御プロトコルを終了しました」
エラーで接続できません。
PPTPのセキュリティ設定がまずいようなので、コントロールパネル→「ネットワークと共有センター」→「アダプターの設定の変更」から、作成済みのVPN接続アイコンを右クリックして、プロパティから「セキュリティ」タブの「データの暗号化」を「暗号化が必要(サーバーが拒否する場合は切断します)」に変更します。
PPTPサーバーは「MS-CHAPv2」なので「Microsoft CHAP Version 2」なので、その項目のチェックボックスをオンにしました。

w10_vpn5.jpg

以上の設定でVPN接続ができるようになりました。

ぐっどらっこ。

2019年2月追記
 GMAILからdocomo宛に送信した添付ファイル付きメールを、iPhoneやiPadの標準メールアプリでも見られるようになりました!

以下、歴史として....

画像のサイズは小さいし、auやSoftbankのメルアドではちゃんと画像が表示されるのに、なぜかiPhoneの純正メールアプリに設定したIMAPのdocomoアドレスで受信した時だけ、画像を表示できません。
メールの一覧にはクリップマークが付いている(ということは、サイズオーバーや迷惑メール判定で受信拒否されているわけではない)のに、詳細画面へ進むと、「タップしてダウンロード」の表示すらありません。

docomo_logo.png

どうやらこの現象はdocomoメールの仕様のようです。

https://faq.nttdocomo.co.jp/faq/p/detail.do?seq=577994&scn=CS14U030 ← 現在、Page not found.


Q: Gmailなどの他社メールサービスから送信された添付ファイル付メールを、ドコモメールで受信しました。iPhone・iPadの標準メールソフト、またはドコモメール(ブラウザ版)で添付ファイルを閲覧できないのはどうしてですか?

A: ドコモメールサービス以外から送信されたメールの添付ファイルは、閲覧できない場合があります。

なお、以下の方法で閲覧できる場合があります。
・送信、受信側ともにドコモメールアプリで送信・閲覧
・送信、受信側ともにGmailなどの他社メールサービスで送信・閲覧

※本事象についてはサービス改善を行っており、対応できるメールサービスを拡充予定です。

「サービス拡充」ではなく、「不具合の修正」の間違いなのでは、ドコモさん?

ちなみに、パソコンのブラウザのGMAILでは、「添付」操作の他に、メール本文中への画像のドラッグ&ドロップで画像の挿入ができますが、この方法で送信すると、iPhoneのメールアプリでも表示できます。
AndroidのGMAILアプリではこの方法が使えないので、痛い。

ぐっどらっこ。