#はじめに
Webサーバを構築してみたので備忘録。
VPSを用いてサイトを公開するまでに行った作業は以下の通り。
- HTMLやCSS, JavaScript, PHPなどでコンテンツを作成する。
- VPSの契約、ドメインの取得を行う。
- VPS上でWebサーバを構築し、設定を行い、コンテンツを公開する。
ここでは、"3"の作業について、行ったことをざっくり説明する。
VPS提供サービスにはさくらインターネット、ドメイン取得サービスにはお名前.comを利用した。
#ネームサーバの設定
お名前.comで取得したドメインをさくらインターネットのVPSで使用するために、ネームサーバ(=DNSサーバ)の設定を行う必要がある。さくらインターネットでは、VPSの契約を行うと無料でネームサーバにドメインを登録できる(契約の種類によって無料で登録できる個数の上限はある)。今回はさくらインターネットのネームサーバを使用する。
###1. さくらインターネットのネームサーバを調べる
さくらインターネットにログイン。契約情報 -> 契約ドメインの確認 -> ドメインメニュー -> ネームサーバ新規登録
ここでお名前.comで取得したドメインを追加する。その後、ドメイン一覧からゾーン情報を確認すると、各レコードの内容が確認できる。NSレコードにプライマリDNSサーバとセカンダリDNSサーバのドメインが載っている。
###2. ネームサーバを指定する
お名前.comのドメインNaviにログイン。ドメイン設定 -> ネームサーバーの変更 -> 他のネームサーバーを利用
ここに、先ほど確認したさくらインターネットのプライマリ及びセカンダリDNSサーバのドメインを入力する。
これで、VPSのIPアドレスと取得したドメイン名がネームサーバによって関連付けられた。
#VPSの事前準備
さくらVPSはデフォルトでCentOS 6がインストールされている。
しかし、今後のことを考えて、様々な機能が追加されているCentOS 7をインストールしておく。
VPSの管理画面において、各種設定 -> OSインストール。CentOS 7のカスタムOSインストールを選択することで、インストーラが開き、パーティションの設定やrootユーザ、一般ユーザの設定が行える。
インストールが終わったら、VNCコンソールを開き、rootでログインしてvisudoコマンドを実行。(viで設定ファイルが開く)
一番下の行に以下の設定を追加する。
一般ユーザ名 ALL=(ALL) ALL
これで、一般ユーザに全コマンドの管理者実行(sudoを付けて)が許可された。
#SSHの設定
さくらVPSの管理画面からVPSを操作することもできるが、セキュリティの観点から、SSHによる遠隔ログインでVPSを操作したい。
SSHの設定を行うために、エディタで設定ファイルを開く。
(エディタは使いやすいものを適宜インストールしておく)
$ emacs /etc/ssh/sshd_config
SSHはデフォルトでは22番ポートに設定されているが、このままだとログイン試行の攻撃を受けやすいので変更する。また、SSH経由のrootログインが出来ないようにも設定する。
#Port 22
.
.
.
#PermitRootLogin yes
このようになっているので、
Port 任意のポート番号
.
.
.
PermitRootLogin no
このように変更する。ポート番号は、ウェルノウンポート番号(0-1023番)以外で、他のアプリケーションが使用していない番号を指定する。ポート番号は16ビットで表されるので、1024-65535番の中から指定すればよい。ただ、1024-49151番はIANAによって特定のアプリケーションに登録されている可能性があるため、49152番以降を指定するとよい。
次にセキュリティに関する設定を行う。
Linuxディストリビューションには、不正ログインを受けた際の被害を抑えるための機構として、SELinuxが用意されている。この設定を変更するためコマンドとしてpolicycoreutils-pythonをインストールし、指定したSSHのポート番号を許可させる。
$ yum -y install policycoreutils-python
$ semanage port -a -t ssh_port_t -p tcp 指定したSSHのポート番号
次にfirewallの設定を行う。firewallを正しく設定することで、特定のポートによる通信のみを通過させることが出来る(もちろんIPアドレスによる制御なども出来るがここではしない)。SSHのポート番号を指定するために、SSH設定用のテンプレートをコピーして、それを編集する。
$ cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
$ emacs /etc/firewalld/services/ssh.xml
ssh.xmlの下の方に、
<port protocol="tcp" port="22">
と、ポートを指定している行があるので、これを変更する。
firewallの設定を反映させて、SSHサーバを再起動する。
$ firewall-cmd --reload
$ systemctl restart sshd.service
以上で設定は完了したので、今後の作業はSSH経由で行う。
(WindowsであればTeraTermなどを用いる)
#Webサーバの導入
SSHで一般ユーザとしてログインしたら、WebサーバとしてApacheをインストールし、起動する。
Apacheはhttpdというパッケージとして提供されている。
$ sudo yum install httpd
$ sudo systemctl start httpd.service
HTTP通信は80番ポートが使用される。外部からWebサーバにアクセス出来るようにfirewallを設定する。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd reload
これで80番ポートへの外部からのアクセスが許可された。
デフォルトのDocumentRoot(Webページとして公開されるファイルを置くディレクトリ。/etc/httpd/conf/httpd.confから変更可)は/var/www/html/となっており、作成したWebページのファイル群をここに置くことで、外部からWebページを閲覧できる。
ここで、手元のPC(win)からVPSへWebページのファイルをまとめたフォルダを転送したい。
これにはSCP(SSHによるファイル転送プロトコル)を用いた。Windowsであれば、SCPクライアントとしてWinSCPが使いやすい。これでフォルダを転送した後、下位のファイルをDocumentRootに置く。
ここで、フォルダを転送したディレクトリにおいて、
$ sudo mv SCPで転送したフォルダ名/* /var/www/html/
としてから、Webページを閲覧すると、httpのエラーである"403 Forbidden"が表示された。
これはどうやらSELinuxの問題らしい。
-> ApacheでSELinuxが原因で403 Forbiddenエラー
mvコマンドでファイルを移動させた場合は、
$ sudo restorecon -R /var/www/html/*
としてラベルを更新する。
もしくはmvコマンドを使わずに、
$ sudo cp -R SCPで転送したフォルダ名/* /var/www/html/
とすれば問題ない。
以上で、Webサーバを稼働させてサイトを公開することが出来た。
#参考
【さくらのVPS】サーバの初期設定ガイド
【さくらのVPS】カスタムOSインストールガイド - CentOS7 / ScientificLinux7 / Fedora 24
ゼロからはじめるLinuxサーバー構築・運用ガイド 中島 能和 (著)
ApacheでSELinuxが原因で403 Forbiddenエラー