前回はVirtualBox+CentOS7環境にApacheやMySQL、PostgreSQLをインストールし、PHPをアップデートして開発用Webサーバーとして使えるようにしました。
ただ、現状ではホストOSからの接続はできず、VirtualBox内でのみ動くことになります。これだと開発用Webサーバーとしては少し使いづらいです。
というわけで、今回はホストOS(ここではMac)から接続できるようにしてみます。
ホストOSからHTTP接続するためのVirtualBox設定
ホストOSのブラウザに「http://localhost/」を入力すると、ホストOSのWebサーバーに接続されます。
VirtualBoxのWebサーバーに接続するには、まず仮想マシン側の設定で「ネットワーク」を開き「アダプタ1」で「ネットワークアダプタを有効化」にチェックを入れ、「NAT」を選択します。この時、もしCentOS7が起動している場合には設定変更ができないので、一度シャットダウンします。
「高度」を開いて「ポートフォワーディング」をクリックします。
ウインドウ右のプラスボタンを押し、新たに追加された行に対して以下のように入力しOKを押します。
名前:Apache
プロトコル:TCP
ホストIP:空白
ホストポート:20080
ゲストIP:空白
ゲストポート:80
もしSSH接続が必要な場合は、Apacheと同じような形式で、以下のように入力します。
名前:SSH
プロトコル:TCP
ホストIP:空白
ホストポート:20022
ゲストIP:空白
ゲストポート:22
ここでCentOS7を起動します。
VirtualBoxの設定はこれで完了です。
CentOS7のセキュリティ系設定
ただ、まだ接続は正しくできません。FirewallやSELinuxの設定をする必要があります。
まずFirewallですが、「firewall-cmd」に「–state」オプションをつけて動作の確認ができます。「running」と表示されたら動作しているということです。私の場合は特に何も設定せずに動作していました。
sudo su
firewall-cmd --state
次に「–list-all」オプションで設定確認ができます。「target」や「interfaces」「protocols」などがズラッと表示されます。この中の「services」に「http」があればOKですが、私の場合はありませんでした。
firewall-cmd --list-all
というわけでその設定を追加します。「–permanent」オプションを付け、「–add-service」オプションでhttpを追加します。その後「–reload」オプションで設定反映させればFirewall設定はOKです。
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
さらに「SELinux」というLinux標準のセキュリティ機能を設定します。「getenforce」コマンドで「Enforcing」と表示されたら接続拒否されるので、それを「Permissive」(警告のみで遮断はしない)か「Disabled」(無効)のどちらかに変更します。今回はローカル内部のみで使用する開発用WebサーバーなのでDisabledにします。
設定ファイル「/etc/selinux/config」の「SELINUX」というパラメーターを「disabled」にします。
SELINUX=disabled
保存して再起動をするとSELinuxが無効になります。
これでホストOSのブラウザのURL欄にに「http://localhost:20080/」を入力すると、仮想マシンのWebサーバーを表示することができます。
次回はさらに使いやすくする設定
今回でようやくVirtualBoxの仮想マシンに構築したWebサーバーに、ホストOSから接続することができるようになりました。
と、ここまで書いて、気になったことがあるのですが、SELinuxの設定が「Enforcing」でも接続できる時があったような???
もしかしたらブラウザのキャッシュなども関係してるかもしれないですし、何が影響しているか現状では明確ではないため、セキュリティ関連設定についてはまだ研究中です。
あと、本当は今回で完結する予定だったのは秘密ですが、次回からはより使いやすくなるような設定を書いてみたいと思います。