「サーバーの基本」要点
書籍
1. サーバーとは
- サーバーとは、サーバーソフトウェアを入れたPC。
- webサーバー用ソフトウェアをインストールして起動すれば、webサーバーになる。
- 1台のPCに、複数のサーバーソフトウェアを入れて、複数の(サーバーの)役割を任せることができる。
- メールの送信はSMTP、受信はPOPというプロトコルを使う。(webはHTTP(S))
サーバーの種類 | 要約 | 代表的なソフトウェア |
---|---|---|
webサーバー | HTTPに則りクライアントと通信し、リクエストを受け取って何らかの処理をするもの。そして、場合によってはアプリケーション(例:Rails)にリクエストを投げる。 | Apache, IIS(マイクロソフト), nginx |
webアプリケーションサーバー | RailsでいうとPumaやUnicornなど。Railsアプリケーションを動かしているもの。 | Tomcat, WeblogicServer(オラクル), IIS(マイクロソフト) |
SSLサーバー | 証明書 | OpenSSL |
DNSサーバー | 略 | |
プロキシサーバー | 略 | |
メール(SMTP/POP)サーバー | 略 | |
FTPサーバー | 略 | |
DBサーバー | MySQL, Oracle(オラクル), SQL Server(マイクロソフト) | |
NTPサーバー | 略 | |
Syslogサーバー | 略 | |
SNMPサーバー | 略 |
参考記事
2. ネットワークの基礎知識
別途、腰を据えて勉強する必要がある。この章は割愛。
3. サーバーを用意する
- サーバー用のOSをサーバーOSという。UNIX系サーバーOSとWindows系サーバーOSがある。
- UNIX系 : Linux, AIX(IBM)など
- Linuxのディストリビューション (=Linuxカーネルとその他の機能をまとめ、ユーザが使いやすいようにしたもの。)
- RedHat : 大規模システムで使われる。有料。
- CentOS : RedHatの商用部分を除いたもの。
- Debian : 広く使われている。
- Ubuntu : Debianベース。使いやすい。
- Linuxのディストリビューション (=Linuxカーネルとその他の機能をまとめ、ユーザが使いやすいようにしたもの。)
- Windows系
- UNIX系 : Linux, AIX(IBM)など
4. 社内サーバーの基本
DHCPサーバー
アドレスプール(配布するよう設定したIPアドレス)から未使用のIPアドレスをクライアント(PCなど)に配布する。
家にあるルーターには、大抵この機能が付いている。(詳しくは下記記事を参照。)
参考記事
DNSサーバー
-
DNSサーバーは、キャッシュサーバーとコンテンツサーバーに大別される。
-
クライアントがインターネットにアクセスするとき、クライアントからリクエストを受けたキャッシュサーバーが、コンテンツサーバー(権威DNSサーバー)に問い合わせ、
ホスト名+ドメイン名
に対応するIPアドレス
を教えてもらう。(=名前解決)-
www.sample.co.jp
でいうと、
ホスト名:www
ドメイン名:sample.co.jp
-
-
キャッシュサーバーは、名前解決した情報をキャッシュしている。
コンテンツサーバー(権威DNSサーバー)が、対応表を持っている。 -
DNSサーバーはミッションクリティカルなため、シングル構成でなく、プライマリDNSサーバーとセカンダリDNSサーバーの2つで冗長構成にするのが基本。
プロキシサーバー
プロキシ(proxy) = 代理
クライアントからのインターネットに対する通信を一旦受け取り、クライアントに代わってアクセスする。
以前は、よく閲覧するWebサイトのデータをキャッシュすること(キャッシュ機能)が大きな目的だったが、
今はURLフィルタリング(閲覧していいサイトを限定する)やアンチウイルス(ダウンロードファイルなどにウィルスがないか確認する)などのセキュリティ機能の強化ができるようになっている。
5. 公開サーバーの基本
DMZとは
(DeMilitarized Zone = 非武装地帯)
外部ネットワークと内部ネットワークの間に配置するネットワーク地帯のこと。
(外部に公開するために、内部から隔離した場所。)
内部ネットワークを保護することが目的。
外部からも内部からもDMZは見えるが(「外部、内部→DMZ」はOK)、
「DMZ→内部」は見えないようファイアウォールを設定することで、
「外部→DMZ」のファイアウォールを突破されて乗っ取られても、「DMZ→内部」にはアクセスできないため、内部を保護できる。
公開するサーバー(Webサーバー)は、DMZに配置する。
参考記事
NATとは
プライベートIPアドレスをグローバルIPアドレスに変換する。(→インターネットへ接続が可能となる。)
ファイアウォールの機能の一部。
- 広義のNAT : 複数の端末が1つのルータを介し、ポート番号を変更してインターネットにアクセスする前提。
- 狭義のNAT : 1つの端末が1つのルータを介してインターネットにアクセスする前提。ポート番号が変換されないため、複数のデバイスが同時にインターネットにアクセスするのは困難。
参考記事
クラウド環境(AWS)のサーバーを公開する
- ドメイン名を申請・取得。
ドメイン取得業者(レジストラ)でドメイン名を申請・取得。(例:お名前.com) - 公開サーバーを用意。
EC2インスタンス(サーバー)を作成。サーバーソフトウェアをインストール。 - グローバルIPアドレスを割り当てる。
インスタンスは動的にIPアドレスが割り当てられるため、ElasticIPで、固定のグローバルIPアドレスを割り当てる。 - Route53に、管理するドメインを登録。
1.で取得したドメイン名を登録。そのドメイン名を管理するDNSサーバーが表示される。 - レジストラにDNSサーバーを登録。
1.のレジストラに、4.で表示されたDNSサーバーを登録する。 - 固定IPアドレスとホスト名を関連づける。
Route53で、3.で設定したElasticIPと、FQDN(ホスト名+ドメイン名)を関連づける。 - セキュリティグループで必要な通信を許可する。
セキュリティグループで、インスタンスに対する必要最低限の通信のみを許可し、セキュリティを高める。
SSLサーバー
SSL
データを守るために、SSLは3つの技術を組み合わせて使っている。
- 暗号化 : データを暗号化することで、盗聴を防ぐ。
- メッセージダイジェスト : データをもとにハッシュ値を計算して、サーバー・クライアントで同じ値であることを確認することで、改ざんを防ぐ。
- デジタル証明書 : 証明書によってそのコンピュータが本物である確認することで、なりすましを防ぐ。
SSLの暗号化方式
- 最初に公開鍵暗号化方式を使ってサーバーとクライアントで共有しないといけない鍵を交換。
- 次にその鍵を使って、共通鍵暗号化方式でデータをやり取りする。
公開鍵暗号化方式
サーバー側で暗号化鍵(公開鍵)と復号鍵(サーバー保管の秘密鍵)をペアで作る。
クライアントは公開鍵で暗号化し、サーバーは秘密鍵(自身で保管している復号鍵)で復号する。
処理が複雑なのが問題。
共通鍵暗号化方式
サーバーとクライアントで共通の鍵を使って暗号・復号する。
同じ鍵を、どうやってサーバーとクライアントに届けるかが問題。(鍵配送問題)
デジタル証明書
SSLサーバーには必ずデジタル証明書をインストールする必要がある。(手順は下記)
- サーバーで秘密鍵・公開鍵を作成。
- 公開鍵をCSR(証明書署名要求)として認証局(CA局)に提出。(秘密鍵は当然外部に出さずに大事に保管しておく。)
- 認証局はCSRにデジタル署名(お墨付き)を与え、デジタル証明書として返す。
- 認証局から返ってきたデジタル証明書をサーバーにインストール。
SSLで暗号化するときの流れ
デジタル証明書をインストールしたら、いよいよSSLサーバーとして動作するようになり、クライアントのSSLサービス要求を受け付けられる。
- クライアントが接続してくると、サーバーはデジタル証明書(公開鍵とデジタル署名)を返す。
- クライアントは返されたデジタル署名を見て、デジタル証明書が正しいかチェックする。
正しければ、共通鍵の素を公開鍵で暗号化して、サーバーに送る。 -
サーバーは秘密鍵で復号し、共通鍵の素を取り出す。【公開鍵暗号化方式】
(ここまでの処理をSSLハンドシェイクという。) - クライアントとサーバーは共通鍵の素から共通鍵を作り、その鍵で暗号化通信をする。【共通鍵暗号化方式】
Webアプリケーションサーバー
Webシステムのほとんどは、Webサーバー・Webアプリケーションサーバー・DBサーバーの3層構造になっている。
VPNサーバー
VPNとは
Virtual Private Newwork = 仮想専用線。
インターネット上に安全な仮想の専用線を作ることで、特定のユーザが安全に通信できる。
下記の2種類ある。
-
拠点間VPN
地理的に離れた拠点同士をつなぐ。
IPsecというプロトコルを使う。拠点間を認証し、通信を暗号化することでセキュリティを確保。
ルーターやファイアウォールなど、ネットワーク機器が持っている拠点間VPN機能をVPNサーバーとして使う。 -
リモートアクセスVPN
インターネットに接続さえできれば、会社のサーバーにアクセスできるようになる。(自宅からオフィスに接続する など)
IPsecVPNとSSL-VPNがある。(詳細は割愛)
参考記事
6. サーバーを障害から守る
障害対策の技術
- 冗長化
- チーミング : 複数のNICを論理的に1つに見せる。(Linuxではボンディングという。)
- フォールトトレランス : 物理NICがアクティブ/スタンバイで動作。
- ロードバランシング : 物理NICがアクティブ/アクティブで動作。
- RAID : 複数のストレージドライブを論理的に1つに見せる。
- クラスタリング : 複数のサーバーを論理的に1つに見せる。
- クラスター : 複数のサーバーをネットワークで接続し、1台のサーバーのように見せる技術。
- サーバー負荷分散技術 : 複数のサーバーに通信を振り分けて処理負荷を分散する。
- 広域負荷分散技術 : 複数の**サイト(地理的に離れた拠点)**に通信を振り分けて処理負荷を分散する。
- チーミング : 複数のNICを論理的に1つに見せる。(Linuxではボンディングという。)
- バックアップ
- UPS : 電源制御。
7. サーバーのセキュリティ
ファイアウォール
ネットワークの出入口に配置し、IPアドレスやポート番号で通信を許可・拒否する。
ファイアウォールの種類
- ファイアウォール(トラディショナル)
- UTM
- 次世代ファイアウォール
- WAF : アプリケーションレベルで通信を制御。(クロスサイトスクリプティング、SQLインジェクション、CSRF(クロスサイトリクエストフォージェリ))
Discussion