webコンテンツを公開するためには、外側からサーバにおいてあるhtmlファイルにアクセスできるようにしなければならない。このために、httpdをインストールする必要がある。
http通信
ブラウザとサーバを繋げるために、httpdが必要になる。このため、root権限ユーザで、
yum install httpd
と入力し、インストールする(y)。その後、httpdを起動する。
systemctl start httpd
次に、firewallでhttpでの通信を許可する。
firewall-cmd --add-service=http --zone=public --permanent firewall-cmd --add-service=https --zone=public --permanent
その後、firewallを再起動する。
systemctl restart firewalld
ブラウザで、以下通り入力すると、外部公開されていることを確認できる。
http://xxx.xxx.xxx.xxx
メモ:これで繋がらない場合は、さくらVPSのコントロールパネルからパケットフィルタ設定で80/443ポートを解放する。
なお、このままだとサーバ起動のたびに、httpdを起動しなければならないので煩雑である。サーバ起動のたびに自動的にhttpdを起動するためには、以下のように記載する。
systemctl enable httpd
これが起動しているのかを確かめるには、ターミナルで、
systemctl list-unit-files -t service
と打ち込み、httpd.serviceがenabled(自動起動)になっているかチェックすれば良い。
ドキュメントルート
Webアプリケーションを開発するには、ドキュメントルートという概念を理解しておく必要がある。これは、
http://xxx.xxx.xxx.xxx
とブラウザに打ち込んだとき、サーバのどこにアクセスされているのかを示す場所である。対応するサーバ上のディレクトリは、一般ユーザにある「/var/www/html」が対応する。そのため、Webコンテンツを外部公開するには、このディレクトリの中にコンテンツをおく必要がある。もし別の場所にしたい場合は、
vim /etc/httpd/conf/httpd.conf
を開き、DocumentRootを探し、自分が設定したい場所に変更すると良い。なお変更した際は、
systemctl restart httpd
にて、httpdを再起動させてください。
動作テスト
サーバ内のどこが外部公開されている領域かわかったところで、実際にコンテンツをサーバに置いてみます。
Webコンテンツを公開するには、はじめにローカルPC上でコンテンツを作成し、サーバへアップロードするという手続きが必要である。ここでは、ローカルPCからサーバへファイルをアップロードする手順を解説する。
まず、exitコマンドでSSH接続を切断し、Macbookのターミナルに戻る。その後、cdコマンドでデスクトップなどに行き、以下のコマンドでhtmlファイルを新規作成する。
vim test.html
こちらに、
Test! Test Contents
のように、何か適当なHTMLコードを書き込み、保存する。
続いて、このコンテンツをVPSのドキュメントルートにアップロードする。このためにCyberduckをMacにインストールする。こちら
続いて、ログイン時に指定するポート番号(未指定の場合は22)、VPSのIPアドレス、VPSの一般ユーザ名(rootはダメ)、そのパスワードで、Cyberduckを経由し、VPSとMacを接続する。Cyberduckを開き、新規接続、SFTPを選択し、上の情報を入力する。
そして、Cyberduckを経由して、一般ユーザの「/var/www/html」ディレクトリにこのhtmlファイルをアップロードする。
ただし、「/var/www」には初期設定では書き込みの許可がされていないので、Cyberduckによるアップロードが弾かれてしまう。これを回避するため、一般ユーザに書き込み許可の権限を与える必要がある。
サーバにssh接続し、rootユーザへとスイッチする。
cd /var/www
と打ち込み、ディレクトリへ移動し、
ls -l
と打ち込むと、権限が以下のように表示される。
drwxr-xr-x 2 root root
これは、rwxr-xr-xに重要な意味が込められている。rは読み込みが許可されていること、wは書き込みが許可されていること、xはプログラムなどの実行が許可されていることを意味する。1〜3桁目がルート権限ユーザの許可状況、4〜6桁目が一般ユーザの許可状況、7〜9桁目が部外者(ホームページなどを見る人)への許可状況を示している。今回は以下の通りです。
root権限の権限: rwx(読み込み、書き込み、実行)
一般ユーザの権限: r-x (読み込み、実行)
他人の権限: r-x (読み込み、実行)
Cyberduckでは、一般ユーザで接続し、ファイルをサーバにアップロードするので、一般ユーザの権限をrwxに変更する必要がある。WordPressなどでhtmlを管理したい場合には、ターミナルに、
cd /var/www chown apache:zzz html chmod 775 html
と入力することで、権限が変更される。zzzはCyberduckなどで使用する一般ユーザ名である。最も覚えなければならないことは、chmodコマンドの意味である。chmodコマンドをデタラメに理解していると、すぐにサーバを乗っ取られるので注意すること。このコマンドにある775とは、ルート、一般ユーザ、部外者に対する許可状況の変更を意味する。775と、3つの数字が書かれていることがわかる。これは、
1桁目: ルート権限の許可状況を変更
2桁目: chownコマンドで指定した一般ユーザの許可状況を変更
3桁目: 部外者の許可状況を変更
7: rwxに変更(読み込み、書き込み、実行を許可)
5: r-xに変更(読み込み、実行を許可)
を意味する。
初学者は3桁目を絶対に7にはしてはいけないと覚えておくこと。書き込み許可とは、ファイルを置けるようにすることを意味する。こうすると、部外者が作成したプログラムや画像ファイル、とにかくなんでもサーバに置かれてしまう。すると、スパムメールの踏み台にされたりだとか、知らないうちに犯罪に巻き込まれていたりだとか、そんなことになる。
この状態で権限を、「ls -l」で確認すると、
drwxrwxr-x 2 apache zzz
となり、権限が変化していることを確認できる。これにより、一般ユーザzzzでCyberduclを経由してVPSにhtmlファイルをアップロードできるようになる。アップロードした後に、
http://xxx.xxx.xxx.xxx
とブラウザで入力すると、アップロードしたhtmlファイルが表示される。
ipアドレス指定によるアクセス拒否
ipアドレスによるアクセス規制:
httpd.confあるいは、そこでロードするconfigファイルに、
<Directory "/var/www/xxxx/"> < RequireAll> Require all granted Require not ip 85.204.246.240 Require not ip 23.105.191.51 </RequireAll> </Directory>
と記載し(Directoryのパスは、アクセス制限したいディレクトリ)、
apachectl restart
とすると、ipアドレスでアクセスを弾くことができる。このアドレスからアクセスがある場合、「Testing 123…」のページに強制的に飛ばされる。このとき、「AllowOverride All」を記載している、「<RequireAll>」で囲っていないなどの場合、エラーが出るので要注意である。怪しいアドレスかどうかは、
Vim /var/log/httpd/access_log
に、アクセスログがあるので、そこをこまめにチェックし、ログイン先にアクセスしている、大量の接続があるなどのipアドレスを確認すると良い。それで、このアドレスでアクセス制限をかける。
挙動を学習したい場合は、自分のスマホでアクセスし、access_logを見て、ipアドレスをチェックし、アクセス拒否を行うと良い。うまく拒否できていると、接続できないはずである。
なお、怪しいipアドレスは、google検索をかけると、みんなが報告していたりする。例えば、
85.204.246.240
23.105.191.51
は、検索すると、wordpressのログイン攻撃を仕掛けてくるだとか、phpMyAdminに攻撃してくるだとか、そういった情報が出てくる。
大前が絶対に許さないリスト:
85.204.246.240
23.105.191.51
195.54.160.135
62.210.172.100
165.227.94.166
64.202.189.187