Instantly share code, notes, and snippets.

Embed
What would you like to do?
第1回・Linuxサーバ勉強会テキスト

第1回・Linuxサーバ勉強会プログラム

  1. はじめに【5分】
    • 情技について
    • 今日の日程
  2. サーバ構築に必要なネットワーク入門【25分】
    • ネットワークはどうやって繋がっているの?(コンピュータ to コンピュータ)
      • IPアドレス,セグメント(サブネットマスク),ルータ
    • そもそもサーバって何?
      • サーバの定義
      • サービスの種類
    • 1つのコンピュータにはいくつもサーバの役割を持たせられる(to サービス)
      • ポート番号の概念(TCP, UDP)
      • 代表的なポート番号(well-known)の紹介
      • ポート番号は変えられる
  3. さくらのVPSについて知ろう【10分】
    • VPSって何?
    • さくらのコントロールパネルの使い方
      • ステータスや起動,再起動ボタンなどについて
      • シリアルコンソールについて
  4. 【実習】最低限はやっておきたい設定【45分】
    • 一般ユーザの作成(さくらのコンパネから)【15分】
    • SSHを公開鍵認証のみで使うようにする【20分】
      • 公開鍵認証って?
      • 鍵のペアを作る
        • Windows: puttygen.exe
        • Mac: ssh-keygenコマンド
      • WinSCPで公開鍵をサーバに転送する
        • Macならscpコマンド
    • ファイアーウォールを構築する【15分】
      • FWスクリプトの解説
      • FWスクリプトの設置と有効化
    • その他の内容の紹介
  5. 【実習】Webサーバの構築【20分】
    • Apacheのインストール
    • Apacheの設定
    • コンテンツの設置
  6. おわりに【5分】
    • セキュリティなどへの注意の呼びかけ
    • 次回以降の検討

【】は予定時間(それぞれ5分ぐらいの余裕が出る様に内容を作る)

はじめに

サーバ勉強会を開催するに至った経緯

今日の日程

情報技術研究部について

サーバ構築に必要なネットワーク入門

そもそもサーバって何?

  • サーバの定義
  • サービスの種類

ネットワークはどうやって繋がっているの?

  • コンピュータとコンピュータが通信できる仕組み
  • TCP/IPモデルの5階層
    • 物理層,データリンク層,インターネット層,トランスポート層,アプリケーション層
  • 同じネットワーク内の通信(家の中,学校の中でのお話)
    • コンピュータ1台1台には「IPアドレス」が割り当てられる(正確にはそれぞれのNIC)
    • IPアドレスでお互いを識別できるので,IPアドレスを使って相手と通信を行う(最終的にはMACアドレス)
    • LAN(同じネットワーク)内では,お互い直接通信し合う(ルータを経由しない)
  • ネットワークをまたいだ通信
    • どうやって相手のIPアドレスが自分と同じネットワーク内に属しているか見分けるか
    • ネットワークの範囲を決める「セグメント」,「サブネットマスク」
    • ネットワークをまたぐときは「ルータ」を経由する
  • ポートの概念
    • 1台のコンピュータは多くの接続先と通信する
    • 出入り口が1つだと,同時に1つの相手としか通信できない
    • ポート番号はマンションの住所に例えると,部屋番号に相当する
      • IPアドレス:長野県長野市徳間716 雄風寮
      • ポート番号:xxxx号室
    • ポート番号は16bit(0〜65535)で表される
      • 1023以下: well-knownポート
        • HTTP, FTP, SMTP, POP3などの主要なポート
        • これ以外のポートでもWebサーバなどを立ち上げることができる

さくらのVPSについて知ろう

VPSとは

VPSは,Virtual Private Server(仮想専用サーバ)の略です. 仮想サーバとは,仮想マシン上で動作しているサーバの事です.

最近のコンピュータは1台1台の性能が非常に高いため,1台の物理マシンをそのまま使うのでは無く, その中に複数の仮想マシンを建てて運用することが多くなりました.(スケーラビリティなどの観点から)

VPSサービスは,この仮想マシンを丸々1台占有して利用できるサービスのことを指します.

さくらのVPSについて

さくらのVPSでは,KVM(Kernel-based Virtual Machine)という仮想化ソフトウェアで構築された仮想サーバを提供しています.

KVMには,完全仮想化と呼ばれる技術が使われています. 完全仮想化では,物理マシンにほとんど近いハードウェアをシミュレーションできるので,KVMで構築された仮想サーバは物理マシンを扱っているのとほとんど同様です.

また,HDD容量や回線の品質なども高く,VPSサービスの中では比較的コストパフォーマンスに優れているサービスです.

詳しい内容は,さくらのVPSの案内ページを見てください. http://vps.sakura.ad.jp/

さくらのVPSコントロールパネルの機能

VPSコントロールパネルでは,仮想サーバの稼働状況を見たり,サーバをリモート操作することができます.

参考:http://vps.sakura.ad.jp/function/controlpanel-vps.html

それでは,さくらのコンパネの中身を見てみましょう. https://secure.sakura.ad.jp/vpscontrol/

VPSホーム

仮想サーバの情報がわかります. 情報の内容は内容はIPアドレスやステータス,CPU使用率などです.

リモートコンソール

シリアルコンソールを用いてブラウザから仮想サーバーを操作できます.

OS再インストール

仮想サーバーへ任意のOSをインストールできます.
新規OSにはCentOSやUbuntuなどが選択できます. また,ISOイメージをアップロードすることでそのほかのOSもインストールできます.

最低限はやっておきたい設定

一般ユーザーの作成

まず,一般ユーザーの作成を行います.
今の時点でサーバに存在しているユーザーはroot,すなわち管理者ユーザーです. rootは何でもできる権限を持っているかわりに誤操作で重要なファイルを削除したり,設定を変更してしまう可能性もあります.そのため普段は管理者権限を持たない一般ユーザーでログインして管理者権限が必要なときのみsuコマンドによってrootになるようにします.

以下の操作(コマンド)で一般ユーザーを作成します. また,この操作はさくらインターネットの"VPSコントロールパネル","リモートコンソール"で行ってください.
サーバが動作していなかったら"VPSホーム"の"仮想サーバ操作"の"起動"ボタンをクリックしてサーバを起動してから一般ユーザーを作成します.

# useradd [新しい一般ユーザー名]
# passwd [新しい一般ユーザー名]
	パスワードを設定します.
	確認のため2回の入力を要求されます.
# usermod -G wheel [新しい一般ユーザー名]
	新しい一般ユーザーでsuコマンドが使えるようにします.
# nano /etc/pam.d/su
	エディタを起動して,	
	#auth	requared	pam_wheel.so use_uid
	という行の先頭の"#"を消して(コメント解除)保存します.

次に,以下のコマンドで一般ユーザーでSSH接続時に使用する公開鍵を置いておくディレクトリを作成します.

# mkdir -p /home/[新しい一般ユーザー名]/.ssh

SSHでサーバにアクセスしよう

SSHとは?

"Secure Shell" の略. 安全にリモートコンピュータと通信ができます.
リモートサーバにアクセスして操作するときは基本的にSSHを用います.

2つの認証方法

認証方法には,大きく次の2つがあります.

  • パスワード認証
  • 公開鍵認証

デフォルトでは,パスワード認証が有効な設定になっています. パスワードでの認証を許可すると,総当たり攻撃を受ける可能性があるため, ここではより安全な「公開鍵認証」方式を使います.

公開鍵認証とは?

2つの鍵を用いてデータの暗号化,復号を行う暗号方式の公開鍵暗号方式を利用した認証方式です. (対して,パスワード認証の様な認証方法を「共通鍵認証」と言います.) 暗号化に用いる鍵を「公開鍵」,復号に用いる鍵を「秘密鍵」といいます. 秘密鍵でなければ公開鍵によって暗号化されたデータを復号できないのが特徴です.(公開鍵は暗号化専用の鍵)

実際の認証時には,接続先サーバに公開鍵を,手元に秘密鍵を用意して接続,認証を行います.

公開鍵と秘密鍵の生成

ダウンロードしたときにPuTTY本体と一緒についてくるputtygen.exeを使用します.
以下の手順で公開鍵と秘密鍵を生成します.

  • "Generate"ボタンをクリック
  • 上半分の"Key"の枠内でマウスをランダムに動かして鍵を生成します.
  • 次に"Key passphrase"と"Confirm passphrase"に鍵のパスフレーズを入力します.(パスフレーズは公開鍵認証の接続時に入力する必要があるので覚えておきましょう)
  • "Save private key"ボタンをクリックし,適当な名前をつけて秘密鍵を保存します.
    公開鍵であるが,PuTTYで生成される形式はLinuxで使われているSSHの実装のOpenSSHとの互換性がないので"Save public key"ボタンからは保存しません.
  • メモ帳を起動して,上部の"Public key for pasting into OpenSSH authorized_keys file:"という枠の中の文字列をコピー&ペーストします.

これが公開鍵になります.適当な名前(~.pubという名前が一般的)をつけて保存します.

公開鍵の登録

公開鍵認証では接続先のリモートコンピュータに公開鍵を登録しておく必要があります.
そこで,WinSCPを用いてファイルを公開鍵をリモートコンピュータに転送した後,SSH接続を行います.

WinSCPの入手

今回,サーバとのファイルのやり取りにはWinSCPというソフトを使用します. http://winscp.net/eng/index.phpからダウンロードできます.
以下の手順で日本語化できます.

  • WinSCP起動すると最下部左に"Languages"というボタンがあるのでクリックします.
  • 表示されたメニューの"Get More"をクリックすると言語ファイルのダウンロードサイトがブラウザで開かれます.
  • Japaneseを選び,"jp.zip"をダウンロード,解凍して,"WinSCP.jp"をWinSCP.exeと同じフォルダに置きます.
  • 先ほどの"Langages"メニューで日本語が選べるようになります.

公開鍵の転送

公開鍵は接続先のコンピュータに転送しておく必要があります.
また,この時点ではまだ公開鍵認証での接続はできないので,ユーザー名とパスワードを使って接続します. 以下の手順で公開鍵を転送します.

  • WinSCPを起動して"Host name"にサーバのIPアドレス,"User name"にユーザー名(作成した一般ユーザー名),"Passward"にパスワードを入力して最下部の"Login"ボタンをクリックします.入力した項目が正しければサーバに接続されます.
  • 接続できたらホームディレクトリ(/home/[一般ユーザー名]/)内の".shh/"というディレクトリに公開鍵をコピーします.公開鍵のファイル名は"authorized_keys"とします.
    ".ssh/"がなければ作成してからコピーします.
    コピーできたら接続は切断してかまいません.

SSH接続に使用するプログラム(クライアント)

  • SSHコマンド
  • PuTTY(今回使用するクライアント)
  • Tera Term
  • Poderosa

SSHクライアントの入手

今回はPuTTYというWindows向けSSHクライアントを使用します.
英語版はhttp://www.chiark.greenend.org.uk/~sgtatham/putty/から,日本語版はhttp://hp.vector.co.jp/authors/VA024651/PuTTYkj.htmlからダウンロードできます.
鍵生成から接続まではhttp://www.atmarkit.co.jp/fwin2k/win2ktips/1321putykey/putykey.htmlを参考にするとわかりやすいです.

PuTTYの設定

そのままの設定だと使いにくい部分があるので,次の設定をしましょう.

  • 端末-キーボード-ファンクションキーとキーパッド:Xterm R6
  • ウィンドウ-外観-フォントの設定:お好みで
  • ウィンドウ-変換-文字コードの設定:UTF-8
  • 接続-Keepaliveの間隔:1
  • 接続-TCP keepalivesを有効にする:チェックを入れる
  • 接続-SSH-優先するプロトコルバージョン:2のみ

SSHによる接続

以下の手順でSSHを用いてサーバに接続します.

  • puttyjp.exeを起動します.
  • "ホスト名"に"[作成した一般ユーザー名]@[サーバのIPアドレス]"と入力します.左側のカテゴリ内の"SSH"から"認証"を選んで,"認証のためのプライベートキーファイル"に保存した秘密鍵を指定します.
  • 最下部の"開く"ボタンをクリックすると接続が開始されます.
  • 初回接続時には"PuTTYセキュリティ警告"という警告ダイアログが表示されますが,"はい"をクリックして接続します.
  • 公開鍵認証で接続する旨を示すメッセージが出た後に"Passphrase for key"と表示されるので鍵のパスフレーズを入力してEnterキーを押します.

サーバへのログインに成功するとプロンプトが表示され,サーバを操作することができるようになります.

デフォルトの設定のままだと,日本語の表示がおかしくなるので,次のコマンドラインを実行します.

$ echo "export LANG=ja_JP.UTF-8" >> ~/.bash_profile
$ source ~/.bash_profile

ファイアーウォールを構築しよう

CentOSのそのままの設定では不必要なポートが開いているため,インターネット上から様々な攻撃を受ける危険性があります.(特に,自動化された攻撃は日常的に行われています) ここでは,攻撃を予防する基本的な手段として,「ファイアーウォール」の構築を行います. ここで構築する「ファイアーウォール」は,サーバを出入りする通信を監視し,不正な通信を防ぐ役割を果たします.

Linuxカーネルには,「iptables」というファイアーウォールのための仕組みが備わっています. ここでは,iptablesを利用してファイアーウォールを構築します.

ファイアーウォールスクリプトを見てみよう

https://gist.github.com/4319634にiptablesの設定を用意しました. iptablesは基本的に全てコマンドラインから設定します. 1行1行入力していては,同じ設定を復元できないので,この様にスクリプト形式で作っておくと便利です.

ファイアーウォールを設定しよう

https://gist.github.com/raw/4319634/2187775b83241b0cd48fd889b314a9f61ec487f7/iptables.shから,このスクリプトをダウンロードできます.次のコマンドラインを実行して,このスクリプトを適用してみましょう.

$ su -
# wget https://gist.github.com/raw/4319634/2187775b83241b0cd48fd889b314a9f61ec487f7/iptables.sh
# chmod +x iptables.sh
# ./iptables.sh
# chkconfig iptables on

ポートの開閉の調べ方

ポートがきちんと閉じられている,あるいは開いているか確認する方法としては次の方法があります. ただし,ポートを開いていても,そのポートを使っているサーバソフトウェアが動作していなければ,検知できません.(当たり前ですが)

  • ポートスキャンサービスを利用する
  • nmapを使う
    • 高度な様々なスキャンを行える
    • サーバの中からスキャンしても意味ないよ!(内側からのアクセスと外側からのアクセス許可が異なるため)

参考資料まとめ

以下に参考になりそうなサイトをまとめて示します.

Webサーバを構築しよう

Apacheとは,正式名称を"Apache HTTP Server"というWebサーバーソフトです. 世界中で最も広く使われています.
今回はこのApacheを用いてWebサーバーを構築します.

構築手順

手順は http://centossrv.com/apache.shtml に記載されていることと同じです.

おわりに

セキュリティへの注意

Linuxの基礎コマンド

ファイル・ディレクトリ操作

  • ls, cd, pwd
  • rm, rm -r, rm -rf
  • cp, cp -R
  • mv
  • mkdir
  • chmod, chown
  • which

標準入出力処理

  • cat, less, echo, grep
  • |(パイプ), <, >(リダイレクト)

su権限

  • su

プロセス管理

  • top, kill
  • Ctrl-C

マニュアル

  • man, --help(コマンドオプション)

ネットワーク

  • ping, ifconfig
  • ssh, scp

テキストエディタ

  • nano(今回使用するエディタ)
  • vi, emacs

パッケージ管理システム

  • yum(Red Hat系)
  • apt(Debian系)

Linuxのディレクトリ構成

  • /(ルート)
    • /bin
    • /boot
    • /etc
    • /home
    • /root
    • /sbin
    • /tmp
    • /usr
    • /var

パーミッションについて

あるファイルがあったとき、そのファイルを読み書きできるかどうかなどのアクセスに関する許可情報のこと。
例) あるファイルを……誰でも読み書きできる、管理者だけが編集(書き)できる、管理者だけが実行できる、など。

Linuxでは "chmod" コマンドでパーミッションを変更する。

パーミッションの種類

  • 読み(read)
  • 書き(write)
  • 実行(execute)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment