httpdのインストールとwebコンテンツ公開

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