centOS8上にマジックパケット送信用Webサーバーを構築(断念)

概要

このページはvpnとddnsを使用してリモートアクセス環境を構築の「6.httpサーバーからマジックパケット送信(断念)」です。
ローカルエリア内に構築したWebサーバーからマジックパケット送信を行えるようにします。

目次に戻る

「5.iPadからopenVPNサーバーにアクセスする」はこちら

「7.Android端末にアクセス環境を設定」はこちら

構築を途中で断念

Webサーバー構築、PHPのインストールまでは出来ましたが、マジックパケット送信をhttpdから行うところが出来ずに断念しました。1日くらい頑張ったのですが知識が足らず無理だったので、途中までトライした内容を記録しておきます。

必要な準備

[1]サーバーにapacheをインストール

今回はVPNを構築しているサーバー上に構築しますが、firewallで外部からのアクセスは出来ない構成とします。基本的なインストールと設定は別サイトにて詳細に解説されていたので、SElinux周りの設定のみに絞って説明します。

[2]サーバーにPHPをインストール

マジックパケット送信を行うためにPHPもインストールします。基本的なインストール手順は別サイトでの説明に譲ります。

[3]マジックパケット送信受付用サイトの作成

pingでの死活確認と、マジックパケット送信をWebサイトから行えるように構築します。ここで断念しました。

Apacheをインストール

基本的には下記サイトを参考にしました。SElinuxを有効にしている場合に注意点があるのでそこだけ説明します。

参考サイト

CentOS 8へApacheをインストールしてウェブサーバーを最短で構築する

注意点

SElinux有効状態の場合、参考サイトに沿ってインストール・設定を行い、テストページを作成してもブラウザからはHTTP403エラーが発生します。この理由としてはルートディレクトリをデフォルトの場所から
/home/www/html
に変更しているため、正しいラベルが付いていないことにあります。そこでルートディレクトリとCGI用ディレクトリに正しいラベルを付けます。

[root@host ~]# semanage fcontext -a -t httpd_sys_content_t /home/www/html
[root@host ~]# restorecon -v /home/www/html
[root@host ~]# semanage fcontext -a -t httpd_sys_script_exec_t /home/www/cgi-bin
[root@host ~]# restorecon -v /home/www/cgi-bin

実行後にラベルを確認すると変更されているはずです。

[root@host ~]# ls -Zd /home/www/html
unconfined_u:object_r:httpd_sys_content_t:s0 /home/www/html
[root@host ~]# ls -Zd /home/www/cgi-bin/
unconfined_u:object_r:httpd_sys_script_exec_t:s0 /home/www/cgi-bin/

 

PHPのインストール

PHPのインストールは下記サイトの手順で行います。

CentOS8.0のPHP7.2をインストールする手順を【コマンド付き】で丁寧に解説

で、この手順通り行って動作確認しましたが、503エラーが出て動作しませんでした。そこで参考にしたのが次のサイトです。

fedora 30 PHP7が503エラー「Service Unavailable」→ /etc/httpd/conf.modules.d/00-mpm.conf を編集して解消

ここに記載がある通り、"00-mem.conf"を編集します。

[root@host ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf

編集前

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines.  See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so

編集後

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines.  See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so

これで無事に動くようになりました。(何の変更か知らんけど)

死活確認機能の実装

参考サイト

PHPでping送信を行う方法【初心者向け】

死活確認はpingで行います。

/* Ping送信プログラム */ 
define('PING_OPTION', [
    'Linux' => '-c',    // linux
    'Darwin' => '-c',   // macOS
    'WINNT' => '-n',    // windows
]);
 
function ping($host, $count = 1){
    $option = PING_OPTION[PHP_OS];
    exec("ping {$option} {$count} {$host}", $output, $result);
    //exec("/bin/ping -c 2 192.168.xyz.10", $output, $result);
 
    if ($result) {
        echo 'ping 失敗', PHP_EOL;
        echo implode(PHP_EOL, $output);
    } else {
        echo 'ping 成功', PHP_EOL;
    }
    //return compact('result', 'output');
    return ($result);
}

で、これを実行してみますが、疎通しているはずなのに"$result=2"となって失敗します。原因はいつも通りSElinuxということまでわかりました。設定をこねくりまわしたりしましたが今回はSElinuxを有効にしたままでは対処法が分からずあきらめました。

 

マジックパケット送信機能の実装

参考サイト

PHPでWakeOnLan

実際に動かしてみた結果

実際に下記スクリプトで動かしてみましたが無理でした。今回はSElinuxをPermissiveにしてもダメで、pingが動かないことでモチベーションを失っていたため早々にあきらめました。

//WakeOnLanプログラム
        function wakeOnLan($macAddr, $ipAddr) {
                // makeMagicPacket
                $magicPacket = "";
                for ($i=0; $i<6; $i++) {
                        $magicPacket.= chr(0xff);
                }
                $aryMacAddr = explode(":", $macAddr, 6);
                $buffer = pack("H*H*H*H*H*H*", $aryMacAddr[0], $aryMacAddr[1], $aryMacAddr[2],
                $aryMacAddr[3], $aryMacAddr[4], $aryMacAddr[5]);
                for ($i=0; $i<16; $i++) {
                        $magicPacket.= $buffer;
                }

                // makeBroadCastAddr
                $aryIpAddr = explode(".", $ipAddr, 4);
                if ($aryIpAddr[0] < 127) {
                        $aryIpAddr[1] = "255";
                }
                if ($aryIpAddr[0] < 191) {
                        $aryIpAddr[2] = "255";
                }
                if ($aryIpAddr[0] < 223) {
                        $aryIpAddr[3] = "255";
                }
                $broadCastAddr = join(".", $aryIpAddr);
                // send
                $fp = fsockopen("udp://".$broadCastAddr, 2304, $errno, $errstr);
                if (!$fp) {
                        print("ERROR: $errno - $errstr\n");
                } else {
                        fwrite($fp, $magicPacket);
                        fwrite($fp, $magicPacket);
                        fclose($fp);
                }
        }

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

5 − 3 =