サーバー構築初心者が自宅の古いPCにCentOS7をいれ外部公開用のWebサーバーにするときにやったこと

  • 7
    いいね
  • 0
    コメント

自前でサーバ構築するよりAzureつかいましょう

はじめにタイトルと正反対なことをいいましたが,本心です.
おそらく僕は理科大唯一のMicrosoft Student Partnerになったのですが,この立場からも言わせてもらうと,是非Azureをつかってください!
Azureは今回僕がやっためんどくさい方法などほとんどいらなく簡単にWebサーバを建てられます!

今回の記事は1年ほど前にサーバ構築した時の,ほったらかしにしていた備忘録です.
理科大のAdvent Calenderがちょうど開いていたので,ここで公開させてもらいます!

CentOS7のインストール

OSはLinuxディストリビューションの中でもサーバー用として広く用いられているCentOSの筆記時点での最新カーネルバージョンである7を用いています. OSインストール,日本語環境構築、Webサーバー構築までやったことをここにまとめます.
OSインストールの方法は様々ですが, 僕がおすすめの方法はLiveUSBの作製です.しかし僕は手元にあったLiveDVDを使用しました.

CentOS7のイメージファイルについてですが, ブータブルという表記がない限りこのDVDをインストール先のPCのDVDドライバにいれてもインストールは出来ません.ではそのような表記がないDVDでインストールするためには自分でブータブルなDVDを作製しましょう.

このLiveDVDをドライバに入れサーバー機を起動させます.
このときブート場所をマザボのUEFIもしくはBIOSでDVDドライバ(または,USB)に指定しておくといいです.
うまくドライバのLiveDVDから起動させることができると, インストーラーが起動させるようになります. あとは, インストーラーの指示に従えばうまくいくはずです.

日本語環境の設定

最初にOSの日本語環境の設定をします.
日本語環境化の方法はいろいろあると思いますので, 僕がやった方法はあくまで一例として捉えてくれるとありがたいです.

yum install ibus-kkc

このコマンドを端末上で打てば, ibus-kkcというパッケージがインストールされます.
そして, このインストールが反映されるように再起動します. (端末上でsudo rebootと打てば再起動できます.)

再起動ができてログインしたら, メニュー画面から設定を選び, 地域と言語をクリックします.
そして入力ソースに日本語(かな漢字)を追加すればおわりです.

この方法では切り替えがwinキー+スペースでできるようになっているので注意してください.
試しに端末上で適当な字を打ってwinキー+スペースを押してさらに適当な字を打てばどんな調子で日本語切り替えができるかがわかります.

次に, ホームディレクトリ下の英語化を行います.
次のコマンドを端末上で打ちます.

LANG=C xdg-user-dirs-gtk-update

この操作をしたあとに, lsコマンドを打てばきっちり英語になっていることがわかるはずです.

CentOS7でのサービス管理コマンド

Linuxでは常駐するプログラム(プロセス)をデーモンといいます.
今回はそのデーモンの一つであるファイアウォールデーモンの設定をいじる方法を記します.

デーモンプロセスはサービスとして管理できるようになっていて, このサービス管理をCentOS7ではsystemctlコマンドによって行います.
このコマンドの使用方法をいかに列挙します.

現在利用なサービスを出力

次のコマンドを行なうことで, 現在利用なサービスを出力できます.
STATE欄にはサービスの自動起動の有効(enable)か無効(disable)が表示されます.

systemctl list-unit-files -t service

サービスの自動起動の有効無効を設定する方法

systemctl enable (サービス)

systemctl disable (サービス)

手動でサービスを起動または停止したい場合

systemctl start (サービス)

systemctl stop (サービス)

サービスの設定を反映させるためにサービスの再起動を行なうコマンド

systemctl reload (サービス)

サービス管理は以上のコマンドを知っていると便利でしょう.

ファイアウォールの設定コマンド

ファイアウォールの由来は火の壁ではなく火の侵入を防ぐを火消し扉だそうです.
では,このファイアーウォールの設定コマンドを列挙します.

CentOS7では,ファイアウォールサービスは使用する環境を想定し, この環境をおおまかにゾーンというグループでわけています.
このゾーンを設定することで, 簡単にファイアウォールを設けることができます.
このゾーンの中でも一般用途向けに考えられた3つのゾーンを紹介します.
まず, 公共領域で利用を想定されたpublicというゾーン.
次に, 業務での利用を想定したworkというゾーン.
さらに家庭での利用を想定したhomeというゾーンです.
これらのゾーンの設定方法は次です.

現在のデフォルトゾーンの確認

firewall-cmd --get-default-zone

このコマンドによって現在のゾーンを確認できます. そして次のコマンドによってデフォルトのゾーンを設定します.

デフォルトのゾーンの設定

firewall-cmd --set-default-zone=(ゾーン)

ファイアウォールの設定内容の確認表示

このゾーンによるファイアウォールの設定内容の確認表示には次のコマンドが使えます.

firewall-cmd --permanent --list-all

公開設定を加える

もし外部に特定のサービスの公開をしたい場合, 次のように公開設定を加えることができます.

firewall-cmd --pwemanent --add-service=(サービス)

サービスの公開を停止する

また特定のサービスの公開を停止する方法は次です.

firewall-cmd --pwemanent --remove-service=(サービス)

ポートの開放

今度はポートを開放したい場合, 例えばTCPの5900番から5903を開放したいときは次のようなコマンドを打ちます.

firewall-cmd --permanent --add-port=5900-5903/tcp

以上のコマンドを知っていれば便利でしょう. 他にもファイアウォールにはポートフォワ−ディングやリッチルールといった機能も備えられていて, これらも記すとなると長くなるので以上にしておきます.

SSHの設定

サーバを構築するにあたってまず基本になるものがSSHです.
WindowsからTeratermなどのクライアントを用いることによってサーバのリモート操作が可能になります.
これを用いるとサーバにディスプレイを接続する必要がないなどといった利点が得られます.
Windows Subsystem for LinuxをつかったSSH接続も可能なのを確認したので,今後はTeraTermは必要なくなってくるのでしょうか.
このSSHを使うためにはまず, サーバPCで設定を行なう必要があります. この方法を次に示します.

sshのパッケージは標準でインストールされているので, 新たになにかをインストールする必要はありませんが知らない人にリモート操作されないようにいくつか設定を変更しなければなりません.

SSHの初期設定

まず, ファイアウォールの設定です.

firewall-cmd --permanent --add-service=ssh

firewall-cmd --reload

SSHではDSAやRSAという暗号を用いて通信することができます.
設定した鍵を持っていない人はSSHを用いることができません.
本当はこの方法がセキュリティ的にいいのですが, 少しめんどくさいのでここではログインで使われる従来のパスワードによる認証をする方法を説明します.

パスワード認証はデフォルトで使用できなくなっています.
これは/etc/ssh/sshd_config内のPasswordAuthentication yesという部分のコメントアウトを外すことでパスワード認証の使用が許可されます.

そして最後にsshd.serviceの自動起動の設定を行い再起動すればSSHは使えるようになります.

同じネットワーク内にあるLinuxPCでは次のコマンドを打つことによりSSH接続ができます.

ssh (user名)@(ホストIP)

SSHの初期設定はサーバ構築の基礎なので, 初心者のかたは是非これから始めるといいです.

サーバ機のIP固定

また, SSH接続にはローカルIPを知っていないとできません. このIP固定の方法を最後に記しておきます.

こちらは正規の方法でないですが, 固定は出来たみたいなので紹介します.

設定ファイルは/etc/sysconfig/network-scripts/ifcfg-enxxxxxxです.
こちらの設定ファイル名末尾はネット接続環境によって異なるようです. このファイルを見ると, BOOTPROTO="dhcp"となっています.
DHCPはIPが動的に動いてしまうので, これをstaticに変えることによってサーバー機のIPを固定させます.

この下に固定IPの設定を書き込みます.

IPDDR="192.168.1.x"

NETMASK="255.255.255.0"

GATEWAY="192.168.1.x"

DNS1="192.168.1.x"

このようにかきこんだら, 次にこの設定を反映させます.

ネットワーク, ネットワーク管理サービスの再起動コマンド

systemctl restart NetworkManeger

systemctl restart network

これにより, 設定が完了しました.

もし, PCのネットワーク上のアドレスが気になった場合, ifconfigと端末にうちます.
このコマンドは何かと便利なので覚えていたほうがいいです. ちなみにWindowsのコマンドプロンプトではipconfigです.

Webサーバの構築

身近にあるサーバといえば, Webサーバです. 今回はこちらを構築をします.
まず有名なApacheをインストールします. しかし, パッケージ名はApacheではなくhttpdです.
こちらをyum installします.

次にファイアウォールの設定です.

firewall-cmd --permanent -add-service=http

反映させます.

firewall-cmd --reload

そしてサービス管理コマンドでApacheを自動起動し反映させます.

これでWebサーバは構築できました.

ディレクトリ/var/www/html内にindex.htmlという名前のHTMLファイルを作製しましょう.

ブラウザにサーバのIPアドレスを打ち込んでみると作製したWEBページをみることができます. しかしこれができるのはLAN内のPCやスマホだけです.

DDNSでのWebページの外部公開

今回はダイナミックDNSでWebページを外部公開する方法を記しておこうと思います.

ダイナミックDNSとは

まず,DNS(ドメインネームサーバ)というものがあります.ドメインネームとは,インターネットのページを見るときURLみたいなものです.
DNSにそのドメインネームを送ると読みたいWebページがあるサーバのIPアドレスを返ってきます.
この機構により, 簡単にWebページにアクセスすることができています.

インターネットワークに接続するとき, ブロバイダからグローバルIPが割り当てられています. ここで厄介なのが一般の家庭ではこのグローバルIPが動的(ダイナミック)であることです.

たとえば, 昨日グローバルIPとドメインの関連付けをしたとしましょう. もし今日のグローバルIPが昨日と変わっていたら, 行きたいWebページにいけないです.

このようなことを解決するのがダイナミックDNSです.

DDNSでは, ドメインとグローバルIPの関連付けを頻繁に行うことで, IPの変化に対処します.

MyDnsのサブドメインを取得する

ではここから実践的な方法について記していきます.
まず, DDNS用のドメインを取得します. MyDnsでは無料でドメインを取得することができます.

したがってMyDnsをググり, サブドメインを取得しましょう.

crontabを使ってドメインとIPの関連付けを定期的に行う

crontabとは, Linuxに常駐するプログラム(デーモン)で, システム時間に合わせ任意の時間で定期的にコマンドを実行してくれる優れたものです.

こちらを用いて, DDNSを構築する方法を紹介します.

/etc下のディレクトリをlsで見るとcronとついたディレクトリがたくさんありますよね.
それらは, dailyとかhourlyとかmonthlyとか書いてあります. このディレクトリはcronで実行させるコマンドを保管しておく場所です.

今回cronで10分おきにIPとドメインの関連付けを行うこととします.(これは好きな時間で結構だと思います.)
cron.every10minというディレクトリをetc下に作製します.

cd /etc
mkdir cron.every10min

次に, そのディレクトリ内でシェルスクリプトを書きます.

まずmydns.shという名前で以下のコードを書きます.

mydns.sh
#!/bin/sh
/usr/bin/wget -O - 'http://mydns(MasterID):(Password)@www.mydns.jp/login.html' 

MyDNSのアカウントを作製した時の自身のMasterIDとパスワードを書きます.
ただし括弧はいりません.

次にこのシェルスクリプトに実行権限を与えます.

chmod +x mydns.sh

ここまでできたら, crontabに登録する前にこのシェルスクリプトを実行させてみます.

sh mydns.sh

これを打つといろいろな表示がでますが, OKみたいなことが書いてあれば安心してください.
試しにmydnsのHPに飛んで最新IP通知日時が更新されているか確認します.

大丈夫そうであれば,ここからがcronの出番です.

crontab -e

と打ち,ここに

*/10 * * * * root run-parts /etc/crron.every10min

と書き閉じます.

これによりcronへの登録が完了です.

ではこのサービスを再起動しましょう.

systemctl reload crond.service

以上により, DDNSは構築できたはずです. しかし, たいていの場合どこか不具合が出ているはずなので, 念のためlogを確認しておきましょう.

cronからのlogが/var/spool/mail/rootに届いているはずなので,

tail -n 100 /var/spool/mail/root

などと打って最新logをチェックしましょう.

おわり

Webページの作製方法などにはここにはかきませんでした.
僕の場合はCSSフレームワークを使ってバリバリ書いてましたが,WordPressでちゃちゃっとやっちゃえばよかったと後悔してます.
さらに,ここに書いてある方法だと,セキュリティ関係がとてもまずいです.
Let's encryptをつかってサーバ証明書を取得しHTTPSプロトコルを使用することをおすすめします.

この投稿は 東京理科大学 Advent Calendar 20163日目の記事です。