前回まで:VMware PlayerへCentOSのインストール完了
今回:CentOSでWebサーバーを立ち上げ、ホストOS側からブラウザで接続してみる

いよいよVMware上で作動しているCentOSにWebサーバー用の設定を施します。
4回にわたって練習用Webサーバー構築について書きましたが、今回が最後です。

インストール終了→OS起動→Webサーバー起動

CentOSが起動したらまずはログイン
ログイン
最初はrootでログイン。パスワードはインストール時に設定したもの。

通常(Webサーバとして公開する場合)は最初にrootでログインした際、ハッキング防止の為ログイン専用アカウントを作成して、さらにリモートからrootにログイン出来ないように設定します。しかし今回はしばらくは外部と接続しないので、そういう練習は後回しにします(このページ内にそれらの解説はありません)

モジュールのアップデート

とりあえず
yum update
と入力してファイルを最新の状態にアップデートしておく。
これも1~2時間かかるのを覚悟する(時間帯・回線速度による)

ネットワーク環境の確認、ターミナルツールで接続

CentOSのコマンドラインから「ifconfig」と入力し、ネットワーク環境を確認してみる
ifconfig
▲クリックで拡大
inet addr:192.168.60.131 と表示されたので、まずはTera TermWinSCPなど(WindowsからWebサーバーへ接続するターミナルツール)でもログイン出来るか確認する。そしてLinuxに慣れないうちはそのままTeraTermやWinSCPで操作した方が楽。徐々に慣れる事。

接続出来なかったら
ちょっと下で書いているiptablesがインストールされているかチェック。
iptablesで22番ポートが閉じていないか、INPUT・OUTPUTがACCEPTになっているか、等々。

スポンサー リンク

Apacheのインストール確認

Apacheはフリーで利用できるWebサーバーソフトの一つ。これがインストールされていなければWebサーバーとして機能させる事が出来ない。

rpm -qa httpdと入力(インストールされているか確認)

Apacheのインストール確認
上記のように表示されればApacheはインストールされている。インストールされていない場合は何も表示されない。
インストールされていなければ
yum -y install httpd
でインストールを行う。

Apacheの起動
service httpd start 

Apacheの起動
正常起動を確認。

Apacheの自動起動を有効にする
chkconfig --list httpd
httpd          0:off  1:off  2:off  3:off  4:off  5:off  6:off
↑チェック。無効のようだ
chkconfig httpd on
これでCentOSを起動するたび、Apacheも自動で起動する。

iptablesの確認

iptablesとはLinux系OSに実装されるファイアウォール機能。インストールしただけじゃ機能しないので、全部自分で設定を行う。失敗するとリモート(ネット経由)で(設定者自身も)接続出来なくなってしまうので、ここでガンガン練習しよう。

yumlist installed | grep iptables
で確認。インストールされていなかったら
yum -y install iptables 

後からyumでインストールした場合、ポート80番は初期設定では閉じているので注意。
/etc/sysconfig/iptables の内容をチェックする。

viというコマンドでテキストエディタを起動し編集出来るが、Linux初心者のうちはWinSCPを利用してWindows側からメモ帳で開いて編集した方が楽だ。
viで編集する場合は、以下コマンドを入力
vi /etc/sysconfig/iptables
ちなみに viエディタの使い方←こういうのを知っておかないとLinux初心者はviエディタ使えない。

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306  -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
  ▲ある程度一般的・必要最小限な設定例
赤字の部分、22番ポートが閉じているとSSH通信が出来ないし、
80番が閉じているとブラウザからWebページに接続出来ない。

/etc/rc.d/init.d/iptables restart
でiptables再起動。

設定完了:表示確認

上記までで、最低限の設定は完了。

ifconfigで取得したIP(今回の場合192.168.60.131)をブラウザに「http://192.168.60.131/」と入力。何かしらのWebページが表示されれば、Apacheは正常に稼動、とりあえず自宅のLANネットワーク内からは接続できる事になる。

お疲れさま。このページの詳しい解説はここまで。

この先は自分の試したい事をガンガン試して遊びつくそう。自信が付いたら、そのまま自宅サーバーとしてWeb公開するもよし、VPSなどroot権付きで利用できるレンタルサービスを利用するもよし。自作cgi・php・cornの作動確認等々、通常のレンタルサーバーで稼動させるプログラムの練習場にも利用できる。

 

以下、個人的にハマった所のポイント紹介や、外部に公開したい場合のLAN設定を紹介しているサイトへのリンク等々。

Webページが表示されない場合

  1. iptablesは適切に稼動しているか?
    /etc/sysconfig/iptables
    を開いてみて確認。80番ポートがACCEPTになっている事
    よく解らなかったらこのサイトが分かりやすい。
    ちなみに私の公開サーバー用のiptableは現在こんな感じ。
  2. /etc/httpd/conf/httpd.conf
    の265行目のコメントアウトを外し
    ServerName XXX.XXX.XXX.XXX
    とIPアドレスを入力してみる。
  3. SELinuxが何か邪魔をしているかもしれない その1
    /selinux/enforce
    の中身を1から0にしてApache再起動
  4. SELinuxが何か邪魔をしているかもしれない その2
    /etc/selinux/config
    の中身6行目を SELINUX=disabled と書き換えサーバー再起動
  5. ディレクトリのパーミッションは適切か?
    Web公開用のディレクトリ(初期/var/www/html)のパーミッションを変に弄っていないか?
    「とりあえず全部許可しちゃえ」と「777」にしたりしても作動はおかしくなる。(私はrootディレクトリを777にしたらssh接続が出来なくてドツボにハマった)

あとは使う人次第。好きに使う

CentOS上でのファイル操作やコマンド操作に不慣れな場合や、実際にレンタルサーバー等で操作する事を想定して経験を積みたい場合は、TeraTermWinSCPなどを利用するのが手っ取り早い。この場合もifconfigで表示されたIPアドレスとユーザーネーム・パスワードでログインする。

後はhttpd.confの編集の練習をするもよし、phpやMySQL、ImageMagick等の定番モジュールを追加してWordPressやMovableTypeなどCMSをインストールしてみるのもよし、iptablesやSSLでセキュリティの練習をするもよし。

仮想PCは復旧が簡単。ガンガン試せる

仮想HDDのバックアップを取っておけば、「サーバーのここが解らない」って部分を誰にも気兼ねなく、マシンが壊れそうな危ないレベルのテストもする事が可能。サーバー学習用の環境として、思う存分いじり倒そう。

疑問が沸いたら無料期間付きのレンタルサーバーを借りてみる

で、「あれっ?実際にWebサーバーに設定したらどうなるんだろ?」な疑問が出たら、root権から操作可能なレンタルサーバーを借りてみる。個人的にはさくらのVPSがお勧め。
さくらのVPSなら2週間の無料お試し期間あり。お試し期間中でも転送量に制限がある位で、あとは自由です。

さくらのVPS a8

このページではさくらのVPSで本稼動を想定した仮想環境の構築を目指しているので、手順どおり進めていた場合はさくらのVPSとほぼ同じ環境が手元にあるはず。

個人用メモ:追加モジュール

覚書きとして、現在追加したモジュール等々のメモ

必要なモジュールがインストールされているか確認

rpm -qa vsftpd
rpm -qa php
rpm -qa php-ldap
(↑最初に入れていた)
rpm -qa php-pear
rpm -qa php-mysql
rpm -qa  php-mbstring
rpm -qa php-mcrypt
rpm -qa mysql-server
(↑入れてなかった)

yum install php-pear php-mysql  php-mbstring php-mcrypt mysql-server
↑入れてなかったのをインストール

Image::Magickインストール
yum list installed | grep ImageMagick
yum install ImageMagick-perl
最新版を落としてコンパイルしようとしたが、pngやjpgの縮小が出来なくて苦しんだ。面倒臭いのでyum使ったら一発でpngもjpgも縮小出来た。とりあえずmake初体験できたので良しとする。

MySQLの設定
MySQLの設定参考リンク

DOS攻撃防止モジュール
yum -y install httpd-devel
cd /usr/local/src
wget http://www.sfr-fresh.com/unix/privat/mod_evasive_1.10.1.tar.gz
tar zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
apxs -i -a -c mod_evasive20.c
恥ずかしながらこれがコンパイル→拡張モジュールビルド初体験。
参考:Apache DoS攻撃対策 mod_evasiveインストール&設定

CentOSの時計・ログファイルを日本時間に 
/etc/sysconfig/clock
を以下に書き換え
ZONE="Asia/Tokyo"
UTC=false
ARC=false

いろいろテストして遊んでいます(´∀`)ノ

 

外部に公開してみる

サーバーの設定が終了したら、ホストOS側やルーターにも外部接続出来るような設定を施し、インターネット経由でも表示できるか確認してもOK。

利用しているLAN機器やルーターで設定方法が全然異なるので、ここでは解説は割愛。
解説サイト ポート開放ナビ Windows7のポート開放 バッファロー製WHRシリーズLANの設定

私の場合、VMwareで作成した仮想Webサーバーはサンドボックスとして利用するので、接続出来ることが確認出来たらすぐにポートを閉じた。また、本気で外部に公開する場合は、外部からrootにログイン出来ないよう設定したり、アカウントの権限を制限したり、セキュリティ的な対策がさらに必要。

 

解説ここまで。以下はあとがきとか


以前は、何が原因で導入失敗したのか

以前にVMwareにWebサーバーを導入しようとして失敗した大きな原因は、二つ

  1. 明確な目的が無かった
  2. 実際にサーバー管理をした経験が無かった(問題を切り分ける能力が無かった)

「ローカルでMovableTypeを作動させて色々実験してみたいなぁ」とか「自作phpやcgiの作動テストを気軽に、レン鯖にも迷惑かけずに行いたいなぁ」程度の目的はあった。
でもその程度の目的だけでは、サーバー関連の知識ゼロからスタートした場合、何に躓いていて上手く作動しないかがサッパリ解らなかったし、失敗を乗り越えるモチベーションにならなかった。

私の場合、今回の成功の一番の原因は、サーバー関連の知識が少しずつ増え、「自分好みのサーバーを構築してみたい」って理由が生まれていた事にあった気がする。
Webページの表示速度を上げたいとか、サーバーの負荷を下げたいとか、YSlowやPageSpeedで高得点出したいとか、そんな時に仕入れていた知識が少しずつ役に立った格好です。

具体的な「過去に躓いていた場所」

  • インストール作業に非常に長い時間がかかった為、インストール終了時には既にモチベーションが下がっていた。
  • 必要なモジュールを全て最初からインストールしようとしてて、「何がやりたいか」よりも「全部インストールしとこう」みたいな考えで進めてしまっていた。
    • 一つ個別に作動確認せず、一気にインストール。上手く作動しなくても何が原因か解らない。
    • makeやコンパイルすら分かっていなかった。
    • phpやcgiの作動確認したいだけなのに1~2日も下準備にかかってウンザリ。
  • ネット上で入手出来る情報や手順を元に作業を進めても、上手く作動しなかった。
    • 具体的に書くとDocumentRootやログファイル保存場所変更などが上手く行かないとか、ディレクトリやファイル生成・書込みが出来ないとか。この辺が解決しなくて、やりたい事が何にも出来なかった。
    • 当時は全く理由が解らなかったが、今にして思えば、躓いていた一番の原因はSELinuxの強制アクセス制御関連だった。
       →SELnuxの存在  SELinuxのモード
  • ifconfigすら知らなかった
    • さらに恥ずかしい話だが、当時はifconfigすら知らずにサーバー構築にチャレンジしていた。
  • 結果、Linuxは起動出来る様になりローカルでHTMLの表示は出来たものの「やってみたい事」は殆ど試す事の出来ない環境が出来上がり、何がやりたいのか解らない状態に。

 

さくらのVPSを借りて、インストール済み・root権限付きのWebサーバーを触った事で、「正常に稼動しているサーバーはどんなもの」で、「過去、自分がどの部分で躓いていたか」がある程度予測出来るようになったのが大きい。

ぶっちゃけ、成功体験なし・周りに詳しいLinuxユーザーがいない状態だと最初の一歩を踏み出すのは凄く難しい事だったんだなぁと痛感。この一連のページが、これからWebサーバーを立ち上げてみたい人の役に立てば幸いです。

おまけ
併設の裏ブログに「さくらのVPSに挑戦(駄文)」というカテゴリーを設置しています。
駄文満載ですが、実際にWebサーバーを運営していく上での初心者向けTipや外部リンクがそれなりに揃っています。まだまだ素人丸出しな情報ばかりですが、私はこんな風にトライ&エラーで経験を積んでいます。