VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。

By@mtoksuyOn
VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。

突然ですが、Programmerboxのサーバを移行しました。移行にあたってどんなレンタルサーバが良いのか迷いましたが、お名前.comのVPS(KVM)に致しました。移行にする時のサーバ構築にちょくちょくハマってしまいましたので次に構築する時にハマらないようにここに忘備録として手順と設定方法を書いていきたいと思います。

構築するサーバの目的

様々なサーバがあると思いますが、今回はWeb寄りのベーシックな構築を行いたいと思います。

自分自身の要望としては

  • 前のサーバより多くのアクセスを捌けるようにしたい。
  • バーチャルドメインで運用して行きたい。
  • FTPでファイルを上げれるようにしたい。
  • メールの送受信を行いたい。
  • とにかく自由にサーバをいじりたい。

まぁ、こんなもんでしょうか。

やはり、自由にカスタマイズ出来るという点が魅力ですね、VPSは。

お名前.comのVPS(KVM)で構築する

VPSと言っても様々な企業が出していますが、今回はお名前.comのVPS(KVM)で構築致します。何処が良いかは個人個人違うと思いますので、自由に選ぶと良いかと思います。何故ならば何処も負けじと料金と性能の差が変わらなくなって来た為です。個人的にオススメなのはお名前.comか、さくらですね。

お名前.com

レンタルサーバー|さくらインターネット

VPSとは?

バーチャル・プライベート・サーバ(仮想専用サーバ、英語:virtual private server、略称:VPS)とは、一台の物理的なサーバコンピュータ上で仮想的なサーバコンピュータを何台も起動する技術(仮想機械; Virtual Machine)によってつくられた仮想的なサーバコンピュータである。 VPSは、ホスティングサーバ(レンタルサーバ)事業者のサービスの一つとしても提供されている。これらのサービスは、上記の技術を用いることで、管理者権限が付与される自由度の高い専用サーバを、従来的な専用サーバよりも大幅に安い価格で契約者に提供することを可能にしている。VPS(仮想専用サーバ)は、物理的なサーバを一台占有する「専用サーバ」に比べて処理能力は劣るものの、構成の自由度は専用サーバとほぼ変わらない。

引用元:バーチャル・プライベート・サーバ - Wikipedia

VPS(kvm)メモリ2GBプランの性能を試してみました

プラン別の性能はこちらです。

  メモリ
1GBプラン
メモリ
2GBプラン
メモリ
4GBプラン
メモリ
8GBプラン
メモリ
16GBプラン
初期費用

無料

現在は0円

5,680円

9,681円

16,680円

月額費用
(1ヶ月払い)
940円 1,380円 3,880円 7,880円 15,880円
年額費用
(1ヶ月あたり)
9,999円
(833円/月)
13,846円
(1,153円/月)
38,918円
(3,243円/月)
79,027円
(6,585円/月)
159,248円
(13,271円/月)
CPU 2コア 3コア 4コア 6コア 10コア
メモリ 1GB 2GB 4GB 8GB 16GB
HDD 100GB 200GB 400GB 800GB 1TB
お試しサービス 15日間無料

で、実際の性能は?という事でAB負荷テストを行いました。

1秒で同時に捌ける限界がアベレージ73アクセスでしたので、ギリギリの同時アクセス70で350接続の結果。

理論上1日で捌けるアクセス数は518万アクセスですが、サーバは色んな仕事をしますので実際は300万アクセスくらいでしょうか。集中アクセスに耐えられるのは1分間で4,000くらいですね。

OSはCent OS 6.2 (64bit)で構築します

デフォルトOSですし、一番情報が出回っていますので構築しやすいです。

お名前のVPS(KVM)が揃えてくれているOS一覧。

CentOS 5.9,6.2,6.3,6.4 (32bit/64bit)
Debian GNU/Linux 6.0,7.0 (32bit/64bit)
Fedora 17.18 (32bit/64bit)
FreeBSD 9.1,9.2 (32bit/64bit)
Ubuntu 12.04LTS 12.10,13.04 (32bit/64bit)
Scientific Linux 6.2,6.3 (32bit/64bit)
Arch Linux 2011.08.19 (32bit/64bit)

便利なコマンド集

黒い画面で便利したい時。

// 自動起動するサーバ確認
chkconfig --list

// postfixの設定に対して検索が出来る 設定多めのメールサーバなので重宝する
postconf | grep size_limit

// ログを常時表示 メールサーバ構築する時に重宝する
tail -f /var/log/maillog

// サービスの現在のステータスを調べるコマンド サーバが現在どんな状況なのかを確認したい時
service --status-all 

// シャットダウンして再起動
shutdown -r now

SSHで接続出来るようにする

サーバをレンタルしてから一番初めに設定しなくてはならないのがsshで接続する設定ですね。

お名前VPS(KVM)は鍵認証のみ許可していますので、お名前のコントロールパネルにログインしましょう。ログインしましたら、SSH Key Pairをダウンロードして下さい。

その次にターミナル or コマンドプロンプトを開いて

ls -a

と、叩いて、.sshがあるかどうかを探して下さい。

ある人はそのままで

.sshがなかった人は.sshを作りパーミッションの変更を。

mkdir .ssh
chmod 700 .ssh

ディレクトリを作成しましたら.sshの中に先ほどダウンロードしたvpsxxxxxxxxx-xxx.keyというファイルを移動しましょう。

mv ~/Downloads/vpsxxxxxxxxx-xxx.key(ダウンロードしてきたファイル) ~/.ssh/

移動させましたら次はsshのショートカットを作成致します。

.sshに移動してvimでconfigというファイルを作成しましょう。

cd .ssh
vi config

vimが起動しますので以下の記述を自分の設定に書き換えて保存して下さい。

config
Host          test                        # sshのショートカット名
 HostName     xxx.x.xxx.xxx               # サーバのIPアドレス
 Port         22                          # 接続するポート番号
 User         root                        # VPSサーバのユーザー名
 IdentityFile ~/.ssh/vpsxxxxxxxxx-xxx.key # さっき移動したkey

これでsshのショートカットが完成しましたのでsshで接続してみましょう。

ssh test

無事、接続が出来ましたらここの章は終了です。接続出来なかった場合はもう一度設定するipアドレスや鍵がちゃんと合っているか見直してみましょう。

開発環境を整える

sshでサーバに接続出来きましたので早速サーバ構築に行きたい所ですが、VPS(KVM)は殆ど何も入っていない状態ですので、ローカルで当たり前に使っていたコマンドが使えません。やはり、いつも使っているコマンドは使いたいですので、yumをアップデートしたり、便利なコマンドをインストールしましょう。

yum関連

はじめにyumをアップデート。

yum update

アップデートが完了しましたら、次はyumのグループリストを確認して開発者ツールなるものをインストール。

yum grouplist
yum groupinstall 'Development tools'

便利なコマンドをインストールする

ここで良く使うコマンドをインストールしましょう。

yum install wget
yum install man
yum install cyrus*
yum install mail
yum install telnet
yum install tree 

パケットフィルタリングの設定をする

ファイヤーウォール設定ですね、使用するポートだけを許可するようにしました。ここでファイヤーウォールの設定を一気に済ませとけば、各サーバを構築する時にiptablesを設定している時の開き忘れを防げます。

//----------------------
//ファイヤーウォール設定
//----------------------
// 現在の設定の確認
iptables -L

// FORWARDは使わない
iptables -P FORWARD DROP

// まずは全許可に
iptables -P INPUT ACCEPT

// デフォルトのルールを全て削除
iptables -F

// 自分自身からのパケットは全許可
iptables -A INPUT -i lo -j ACCEPT

// SSH許可 or SSH自分(255.255.255.255)だけ許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 or
iptables -A INPUT -s 255.255.255.255 -p tcp --dport 22 -j ACCEPT

// FTPの接続を許可
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT

// SMTP(送信メール)の許可
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

// DNS関係
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

// http, https の接続を許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

// POP(受信メール)の許可
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

// NTPサーバの通信許可
iptables -A INPUT -p tcp --dport 123 -j ACCEPT

// SUBMISSION ポートを開放
iptables -A INPUT -p tcp --dport 587 -j ACCEPT

// imaps
iptables -A INPUT -p tcp --dport 993 -j ACCEPT

// pop3s
iptables -A INPUT -p tcp --dport 995 -j ACCEPT

// PINGを許可
iptables -A INPUT -p icmp -j ACCEPT

// TCPの接続開始と応答、FTPデータなどを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

// 設定したルール以外のパケットを拒否
iptables -P INPUT DROP

// 設定セーブ
service iptables save

// iptables再起動
service iptables restart

DNS設定

DNS設定に関しては様々なサービスでやり方が異なるのでそのサービスのやり方をググったりしながら設定をしましょう。この設定が一番大事ですので、必ず設定して下さい。

ここではお名前.comのVPS(KVM)を借りている事を想定して説明させて頂きます。

まず、お名前.comのドメインNaviにログインして頂き

ドメイン設定のタブをクリックして下さい。

選択しましたら

次はネームサーバーの設定の中にあるネームサーバの変更をクリックして下さい。

変更するドメインにチェックを入れましたら、下の方にあるVPS(KVM)設定するをクリック。

次は確認画面ですのでもう一度設定するをクリックしますとネームサーバの移行が始まります。

ネームサーバの移行は時間がかかりますので一番最初にやっておくと良いかもしれません。 移行が完了しますとお名前.comからメールが送られて来ますので、その完了メールを受信してからようやくDNS関連の設定が出来るようになります。

先ほど同じようにドメイン設定のタブをクリックしてネームサーバ変更の所にある、DNS関連機能の設定をクリックすると画面が変わりましたらDNSレコード設定を利用するを選択し、変更したいドメインを選んで頂き入力画面に進みましょう。

指定なし、imap、mail、pop、smtpの五つは最低限必要な設定ですのでやっておきましょう。必要ならばwwwも追加しておくと良いかもしれません。

最終的にはこんな感じになっていれば大丈夫です。

これでドメインNaviの設定は終わり、次はサーバーNaviのDNS逆引き設定を行いましょう。

この設定は簡単でサーバーNaviにログインして、借りているVPSのコントロールパネルにログインするとDNS逆引き設定するところがありますのでDNS設定を行ったドメインを登録して下さい。

FTPサーバ構築

一番初めにFTPサーバを構築していきたいと思います。最初に入れておけば面倒なconf関連の編集がVimではなくお気に入りのエディタで出来るようになりますので、ボクは最初に入れるようにしています。

vsftpdインストール

では、yumでFTPサーバをインストールしてみましょう。

yum install vsftpd

Complete致しましたらサーバを再起動した時に自動で起動するようにしておきましょう。

chkconfig vsftpd on

vsftpdの設定

終わりましたらconfを編集します。

vi /etc/vsftpd/vsftpd.conf
conf
vsFTPdの設定

まず、初期状態では匿名による接続を許可していますので、これを許可しないようにしましょう。
anonymous_enable=YES
↓
anonymous_enable=NO
変更。


アスキーモードでのアップロードを許可
アスキーモードでのダウンロードを許可
この設定をしとかないとFTPソフトで同期などの機能が全く使えなくなります。
#ascii_upload_enable=YES
#ascii_download_enable=YES
↓
ascii_upload_enable=YES
ascii_download_enable=YES 


次に、ファイルのタイムスタンプにローカル時間(日本時間)を使用するようにします。
最後尾に、
use_localtime=YESを追加。


そして、データのやりとりで使用するPASVモードで使用するポートの範囲を指定します。
pasv_min_port=60000
pasv_max_port=60030
の2行をさらに追加。

このままの状態ですと、rootで接続出来ませんのでもう2ファイルの設定も変更しましょう。user_listとftpusersのファイルにrootと記述されている所をコメントアウトするだけです。

vi /etc/vsftpd/user_list
vi /etc/vsftpd/ftpusers
user_list & ftpusers
root
↓
# root

編集が終わりましたらvftpdを再起動させましょう。

service vsftpd restart

これで無事に設定は終了しましたので、FTPソフトの設定は各自設定して下さい。

追記 FTPアカウント毎にホームディレクトリの設定

FTPに接続するユーザごとにホームディレクトリを指定し、上位階層へのアクセスを拒否する設定しなければならない場面は多いと思いますので、追記にて書かせて頂きます。

なお、FTPで設定する内容を全て終わらせている事を前提にし、ユーザー作成に関しても下の章(13-2)にて説明しているので省かせて頂きます。

1. user_conf ディレクトリを作成して、各ユーザーの設定を記述する

vsftpd に移動します。

cd /etc/vsftpd/

移動しましたら、user_conf を作ります。

mkdir user_conf

その中に、詳細設定したいユーザー名のファイルを作ります。

vi /etc/vsftpd/user_conf/hoge

次にそのユーザーのルートを決める記述をします。

local_root=/home/foo/hoge

通常ならこれだけで設定は完了なのですが、chroot_listの設定をしていなかったので反映されません。と言うことで次はchroot_listの設定をしていきます。

2. vsftpd.conf で chroot_list系の設定を変更する

設定を変更する為にvimでファイルを開きましょう

vi /etc/vsftpd/vsftpd.conf

多分 # でコメントアウトされていると思いますので削除して設定を反映させましょう。検索してもなかったら一番下に記述してください。

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

3. chroot_listの設定をする

chroot_listファイルを編集するためにvimを。

# vi chroot_list

上位階層へのアクセスを拒否したいユーザー名を記述して保存しましょう。

hoge

これで設定の方は完了です、最期にリスタートをして

service vsftpd restart

FTPソフトで確認を。

webサーバ構築

web開発者にとって必須のサーバですね、構築もそこまで難しくありませんが、バーチャルホストのconfの書く所がググった記事ではバラバラでしたので、そこだけ気をつければ後は問題なく構築出来るような気がします。

Apacheインストール

俗にいうApacheをインストールします。

yum install httpd

Apacheの設定

インストールしましたら早速confをいじりましょう。

vi /etc/httpd/conf/httpd.conf
httpd.conf

ServerAdmin
  サーバー管理者のメールアドレスを記載します。

ServerName
  DNSで設定したサーバー名とポート番号を記載します。
  (例)ServerName programmerbox.com:80

DocumentRoot
  ウェブコンテンツを保存する場所を記載します。
  バーチャルホストを使わない方もいるかもしれませんので、デフォルトのポイントとしてちゃんと記述しておきます。

<Directory "/var/www/html">
  ここはDocumentRootと同じディレクトリパスに変更。

<Directory "/var/www/html">のパスを直したら、その中にある
AllowOverride None を
↓
AllowOverride All に変更しましょう。これで.htaccessが有効になります。

設定が終わりましたら、自動起動onとhttpdをスタートしましょう。

chkconfig httpd on
service httpd start

スタートしましたら生IP(http://xxx.x.xxx.xxx/)とドメインを叩いて表示されるかどうか確認をしてみて下さい。無事Apache 2 Test Pageと表示されましたらちゃんと動いています。

バーチャルホストの設定

一つのサーバで複数のドメインを運用したい時はバーチャルホストを設定しますと出来るようになるのでオススメです。なお、設定する前に追加するドメインのDNSを忘れずにしておいて下さい。

vi /etc/httpd/conf/httpd.conf
httpd.conf

一番下から20行目あたりに
#NameVirtualHost *:80
がありますので、コメントを外して
NameVirtualHost *:80
と、します。これだけでバーチャルホストとして
読んでくれるようになるので、後はhttpd-vhosts.confの中で各ドメインの設定をします。

最後にhttpd-vhosts.confというファイルをインクルードするように末行に
# 追加
include /etc/httpd/conf/httpd-vhosts.conf
を、追加して保存。

保存が終わりましたら、インクルードさせるhttpd-vhosts.confを作成しましょう。

vi /etc/httpd/conf/httpd-vhosts.conf
httpd-vhosts.conf
設定はこんな感じで、設定したいドメインとドキュメントルートを設定してください。logに関してはコメントアウトしても大丈夫です。

# aaa.comの場合
<VirtualHost *:80>
  ServerAdmin  aaa@aaa.com
  DocumentRoot /var/www/vhosts/aaa.com/httpdocs
  ServerName   aaa.com
  ErrorLog     /var/www/vhosts/aaa.com/error_log
  CustomLog    /var/www/vhosts/aaa.com/access_log common
</VirtualHost>
<Directory /var/www/vhosts/aaa.com/httpdocs>
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

# bbb.comの場合
<VirtualHost *:80>
  ServerAdmin  bbb@bbb.com
  DocumentRoot /var/www/vhosts/bbb.com/httpdocs
  ServerName   bbb.com
  ErrorLog     /var/www/vhosts/bbb.com/error_log
  CustomLog    /var/www/vhosts/bbb.com/access_log common
</VirtualHost>
<Directory /var/www/vhosts/bbb.com/httpdocs>
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

ドメインを追加したら随時手動でフォルダを作成して下さい。

フォルダ構成はこんな感じがオススメです。
www
├── cgi-bin
├── error
│    ├...
│     ...
├── html(デフォルトのドキュメントルートはここですね。)
├── icons
│    ├...
│     ...       この階層をドメイン名にしてプライマリーな感じで増やしていく。
└── vhosts    ↓
      └── aaa.com
            ├── access_log
            ├── app
            ├── error_log
            └── httpdocs

フレームワーク等を導入した時にappに切り替えたり出来たりすると思いますので便利です。

これでwebサーバ構築の章は最小限の設定でしたが、これで終わりにさせて頂きます。

dbサーバ構築

次はdbサーバを構築していきます。webサービスには必須のサーバですので、ちゃんと設定をこなしていきましょう。

mysql、mysql-server、mysql-develをインストールして自動起動onにしてスタート。

// 記事アップ時点ではこっちでしたが・・・
yum install mysql
yum install mysql-server
yum install mysql-devel

// 追記 2016.03.02時点ではこっちでインストール
yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql mysql-devel mysql-server mysql-utilities

chkconfig mysqld on
service mysqld start

スタートさせたら最初はパスワードが設定されていないのでmysqlに接続してからクエリを投げてパスワードを設定する。

// 1.rootで入る
mysql -uroot

// 2.パスワードを設定するクエリを投げる
set PASSWORD for root@localhost = PASSWORD('root');

// 3.mysqlをログアウトする
exit

ログアウトしたら先ほど登録したパスワードでmysqlにログインしてみる。

mysql -uroot -proot

exit

追記

厳格な設定(STRICTモード)になっているMySQLの設定を変更する

vi /etc/my.cnf

sql-mode=の記述を
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
にする

service mysqld restart

ここら辺はすんなりいくと思いますので、これでdbサーバ構築の章は終わります。

PHPインストール

特にPHPじゃなきゃいけない訳ではないのですが、個人的にFuelPHPというフレームワークを利用したくてPHPを入れてみる事にしました。それ以外にもPHPは簡単な記述で動きますので軽い感じの事をしたい時は便利です。

yumでlistを確認してみると管理しているPHPは現時点(2013.12.20)で5.3.3でした。

yum list PHP*

折角なので、もっと新しいバージョンをインストールしてみましょう。

remi(Les RPM de Remi - Repository)のrpmパッケージを使います。

http://rpms.famillecollet.com/

// epel リポジトリ追加(32ビット版はx86_64をi386に変更するらしい、未検証)
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
// remi リポジトリ追加
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

追加しましたら確認してみましょう。

yum list --enablerepo=remi --enablerepo=remi-php55 | grep php

膨大な数が追加されていますね。phpは一番上にあります。5.5.7という新しさになりました。リリースされてまだ8日しか経っていません(この文章を書いている時点で)新しすぎてバグが心配な方は最新の安定板と言われている5.5をインストールする事をお勧め致します。

それではインストールしたいパッケージを選んで一気にインストールしてみましょう。

// 今回インストールするパッケージ
// php、php-devel、php-mbstring、php-mcrypt、php-mysql
// php-phpunit-PHPUnit、php-pecl-xdebug、php-gd

// インストール
yum install --enablerepo=remi --enablerepo=remi-php55 php php-devel php-mbstring php-mcrypt php-mysql php-phpunit-PHPUnit php-pecl-xdebug php-gd

インストールが終わりましたらPHPのバージョンを確認してみましょう。

php --version

無事に5.5.7になっていると思います。これで新しい機能をガシガシ使えるようになりました。

php.iniの設定

このままのphp.iniの設定だと使いづらいと思いますので、ボクなりのセッティングしたところを載せときますので参考にして編集して下さい。

php.ini


#----
#色々
#----
# PHPが扱うメモリ
memory_limit = 128M
↓
memory_limit = 512M
406行目あたり

# エラーレベル
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
↓
error_reporting = E_ALL
462行目あたり

# エラー表示
display_errors = Off
↓
display_errors = Off(ローカルならOnで本番環境ならOff)
479行目あたり

# 諸々の送信出来るサイズ
post_max_size = 8M
↓
post_max_size = 128M
673行目あたり

# デフォルト文字コード
;default_charset = "UTF-8"
↓
default_charset = "UTF-8"
693行目あたり

# アップロード出来るサイズ
upload_max_filesize = 2M
↓
upload_max_filesize = 64M
805行目あたり

# 場所(FuelPHPを導入する時にこれを設定していないとFuelPHPインストールする時点でエラーになる。)
;date.timezone =
↓
date.timezone = "Asia/Tokyo"
883行目あたり


#---------
#session系
#---------
# GCプロセスが 始動する間隔(1/1000)
session.gc_divisor = 1000(少し古いPHPだと100なのだが、5.5.7は1000になってた。)
↓
session.gc_divisor = 1000
1430行目あたり

# セッションが消されるまでの時間(秒単位)
session.gc_maxlifetime = 1440
↓
session.gc_maxlifetime = 4320

# キャッシュされたセッションページの有効期間(分単位)
session.cache_expire = 180
↓
session.cache_expire = 540


#--------------
#マルチバイト系
#--------------
# 日本だと明示的に設定
;mbstring.language = Japanese
↓
mbstring.language = Japanese
1665行目あたり

# 文字コード指定
;mbstring.internal_encoding = UTF-8
↓
mbstring.internal_encoding = UTF-8
1671行目あたり

# 入力される文字コード
;mbstring.http_input = UTF-8
↓
mbstring.http_input = UTF-8

# 文字コードを変換しないようにする
;mbstring.http_output = pass
↓
mbstring.http_output = pass

# 内部文字エンコーディングへの変換を無効にする
;mbstring.encoding_translation = Off
↓
mbstring.encoding_translation = Off

php.iniの設定はこんな感じでしょうか。

これでPHPインストールの章を終わりたいと思います。

phpMyAdminインストール

phpもインストール完了したという事でphoMyAdminの方もインストールしたいと思います。

// 記事アップ時点ではこっちでしたが・・・
yum --enablerepo=epel install phpMyAdmin

// 追記 2016.02.12時点ではこっちでインストール
yum install -y --enablerepo=remi,remi-php56 phpMyAdmin

インストールが完了しましたら、確認してみましょうか。

rpm -ql phpMyAdmin

phpMyAdmin.confの設定

ずらずらとインストールされた事が確認出来ましたね、その一番上から3行目あたりまでが設定ファイルですので設定を変えていきます。

vi /etc/httpd/conf.d/phpMyAdmin.conf
phpMyAdmin.conf

まず、デフォルトで
aaa.com/phpMyAdmin/
aaa.com/phpmyadmin/

でアクセス出来るようになってしまっているのでエイリアスの変更を(大事)。

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
を削除かコメントアウトしていただき

Alias /[パスを自由設定] /usr/share/phpMyAdmin

としましょう。

名前は長ければ長い程良いとは思いますが、忘れない程度の名前にする事が大事です。


最後にアクセス出来るIPを設定をします。
厳しくするなら家&会社のIPアドレスのみなど制限をかけた方が良いかもしれません。
ここでは全ての人が入れるように設定します。(ログイン画面に)
変更する点は2点です。

<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>
↓
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from All
   </IfModule>
</Directory>

Allow from 127.0.0.1
↓
Allow from All
に変更して

Allow from ::1
を削除して下さい。

これで全てのバーチャルホストでphpMyAdminを参照出来るようになりました。

次はログイン画面で認証する時にどの認証にするかの設定を行います。デフォルトだとベーシック認証になっていますのでここではクッキー認証に切り替えたいと思います。

vi /etc/phpMyAdmin/config.inc.php
config.inc.php
$cfg['Servers'][$i]['auth_type']     = 'http';
↓
$cfg['Servers'][$i]['auth_type']     = 'cookie';

これでcookie認証に切り替わります。

これでphpMyAdminのインストールと設定は完了です。最後にhhtpdを再起動して設定の読み込みをさせましょう。

service httpd restart

以上でphpMyAdminの章を終わりにさせて頂きます。

メールサーバ構築

webサービスを公開すればメールアドレスも必要になってきますので、メールサーバも構築していきます。この記事の中で一番の難関ですので構築は慎重に行いましょう。

Dovecotインストール

初めに受信系を管理をするdovecotをインストールします。

yum  install dovecot

Dovecotの設定

無事、インストール出来ましたら個別にconfの設定を変えていきます。最初はプロトロルの設定を変更をします。

vi /etc/dovecot/dovecot.conf
dovecot.conf
プロトコルの設定
#protocols = imap pop3 lmtp
↓
protocols = imap pop3

次は認証系設定を変えていきます。

vi /etc/dovecot/conf.d/10-auth.conf
10-auth.conf

平文での認証を許可を不許可にする
#disable_plaintext_auth = yes
↓
disable_plaintext_auth = no

認証方式の設定
auth_mechanisms = plain
↓
auth_mechanisms = plain login

メールボックスの形式を指定。

vi /etc/dovecot/conf.d/10-mail.conf
10-mail.conf
メールボックスの形式を指定
#mail_location =
↓
mail_location = maildir:~/Maildir

最後にpostfixからの認証要求を受け付けるようにしときましょう。

vi /etc/dovecot/conf.d/10-master.conf
10-master.conf
Postfixからの認証要求の受付
#unix_listener /var/spool/postfix/private/auth {
#  mode = 0666
#}
↓
unix_listener /var/spool/postfix/private/auth {
 mode = 0660
 user = postfix
 group = postfix
}

一通り設定が完了しましたらdovecotの起動と自動起動onに。

/etc/rc.d/init.d/dovecot start
chkconfig dovecot on

Postfixの基本構築

次に送信系の構築を行いたいと思います。postfixに関しては最初から入っていると思いますのでインストールは省略します。もしも入っていない場合はyumでインストールをお願い致します。なお、変更する点が多いので間違えないように気をつけましょう。

まず初めにmain.cfを編集をしていきます。

vi /etc/postfix/main.cf
main.cf
ここでは例で webprofile.me というドメインを使って説明しています。実際に変更する時はご自分のドメイン名を記述してください。


# ホスト指定
myhostname = mail.webprofile.me

# ドメイン名指定
mydomain = webprofile.me

# メール送信時の送信元メールアドレスの@以降に付加するドメイン名を指定
myorigin = $mydomain

# 外部からのメール受信を許可するネットワークインターフェースを指定
inet_interfaces = localhost
↓
inet_interfaces = all

# メールを受け付ける宛先指定
# 複数のドメインを設定している場合は追加していく
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# メールボックス形式を指定
home_mailbox = Maildir/

# メールサーバーソフト名をごまかします
smtpd_banner = $myhostname ESMTP unknown



# 末行に追加
# どんなユーザーがいるのかを探れないようにする
disable_vrfy_command = yes

# sasl認証に対応していないメーラを拒否
smtpd_sasl_auth_enable = yes

# sasl認証を使うよう設定
smtpd_sasl_auth_enable = yes

# sasl関連設定
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_type = dovecot
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination

# Dovecotと同じ認証を使用する
smtpd_sasl_type = dovecot

cfの設定が終わりましたらpostfixを起動してsaslを自動起動onにしてから起動させましょう。

chkconfig postfix on
chkconfig saslauthd on
/etc/rc.d/init.d/saslauthd start

サーバの秘密鍵を作成

次はメールサーバとの通信をSSLを使って暗号化する設定や鍵を作っていきます。

まず、opensslというコマンドがあるか調べます。(大抵デフォルトで入っているかと思いますが)

man openssl

コマンドがあったら説明がずらずらと流れるのでqを押して戻ります。

ない場合は No manual entry for openssl と表示されますのでインストールしましょう。

yum install openssl

インストールが終わりましたら暗号鍵の置き場所として、/etc/pki/tls/certs が使われているらしいのでそこへ移動して server.key というkeyを2048の長さで作成していきます。

keyを作成する時にpassを設定しろと言われますが、後からpassを消すので簡単なpassを設定しといて下さい。

cd /etc/pki/tls/certs
openssl genrsa -des3 -out server.key 2048

これでserver.keyという名前でRSAの秘密鍵が作成されました。では、早速鍵のpassを解除をやりましょう。最後にserver.keyをroot以外見れないようにパーミッションを変更しておきます。

openssl rsa -in server.key -out server.key
chmod 400 server.key

証明書の作成

ここで休憩がてら、自己認証の事を詳しく知る為に引用を載せときます。

認証マフィアの説明とメールサーバでは自己認証で問題ない理由。

RSA方式は秘密鍵と公開鍵のペアで暗号複合を行いますので、公開鍵を作成する必要があります。この公開鍵と、鍵の作成者の名前などの識別情報、そしてこの鍵がちゃんと本人によって作成されたことの認証をセットにしたものを公開鍵証明書、又は単に証明書と呼んでいます。

鍵がちゃんと本人が作成したものであることを認証する者を認証局(CA:Certificate Authority)といい、信頼できる第三者機関(TTP:Trusted Third Party)が行う場合と、本人が自ら行う自己認証があります。

このTTPによる認証は、法外な料金を要求するため認証マフィアと呼ばれていますが、オンラインショッピングサイトのように「信用」が不可欠な場合は、やむを得ず法外な料金を支払ってTTPによる認証を受けざるを得ません。そうしないと、ブラウザから「このサイトの証明書は信頼できる第三者機関によって認証されたものではありません」などど、あたかも詐欺サイトであるかのようなメッセージを出されてしまします。

しかし、メールサーバーの場合は利用する人があらかじめ決まっていて詐欺サイトでないことを知っているわけですから、自己認証でなんら差支えありません。ということで、ここでは当然に自己認証の証明書を作成します。

引用元:Linux自習室 - サーバーを使い倒す! - メールサーバーを暗号化

中々勉強になる文章ですね。では、なんとなくわかったという事で作業を進めて参りましょう。先ほどの /etc/pki/tls/certs に場所にいますか?いなかったらもう一度 cd で飛んで下さい。

公開鍵証明書の作成は openssl req コマンドを使用します。

openssl req -new -x509 -days 3650 -key server.key -out mail.crt

-new は新規に証明書の作成を行うオプションで

-x509 は証明書の形式で、現在使用されているx.509形式を指定。

-days は証明書の有効期限で、約10年を指定。

-key は使用する秘密鍵で、これに対応する公開鍵が証明書の中に作成されます。

-out は作成される証明書のファイル名です。

なお、このコマンドを実行すると鍵作成者の識別情報の入力を求められますので英文で入録します。自分だけが使うのであれば適当でも問題ありません。

作業が終わると、mail.crtという公開鍵証明書が作成されます。

PostfixのSSL暗号化設定

先ほど作成した鍵を使う為にSSL暗号化設定を行います。

先にmain.cfの方へ追加を書き足しましょう。

vi /etc/postfix/main.cf
main.cf

# 末行に追加
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 86400s

次にmaster.cfも変更する場所がありますので変えていきます。

vi /etc/postfix/master.cf
master.cf

# submissionを使う
# コメントを外す
#submission inet n       -       n       -       -       smtpd
↓
submission inet n       -       n       -       -       smtpd
#  -o smtpd_sasl_auth_enable=yes
↓
  -o smtpd_sasl_auth_enable=yes

# smtpsを使う
# コメントを外す
# smtps     inet  n       -       n       -       -       smtpd
↓
smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
↓
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

DovecotのSSL暗号化設定

Dovecotの方もssl関連の追加をしていきます。

vi /etc/dovecot/conf.d/10-ssl.conf
10-ssl.conf

# コメントを外す
#ssl = yes
↓
ssl = yes

# 秘密鍵と公開鍵証明書の設定
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
↓
ssl_cert = </etc/pki/tls/certs/mail.crt
ssl_key = </etc/pki/tls/certs/server.key

設定が終わりましたらこれでメールサーバ構築はひとまず完了です。最後にpostfixとdovecotの再起動を行い設定を通しましょう。

service postfix restart
service dovecot restart

長い長い設定が終わったところですが、まだ動作確認を終えていないので次の章でメールの動作確認を致します。

追記 info や support などユーザー名を使いたい場合

infoやmailというユーザーを作成しても送信はできるけど、受信ができないという謎な現象に悩んでいました。

info@xxx.xxっていうメールアドレス使いたいなーってずっと思っていたのですが、ググりまくったら問題を解決してくれたサイトがございましたのでやりかたを説明します。

初期状態でエイリアスがかかっている名前があるらしく、その名前のメールアドレスを使いたい場合、そのエイリアスを解かないといけないみたいなんです。

で、初期状態でエイリアス設定が行われているアカウント名は以下の通りです。

abuse adm amanda apache bin canna daemon dbus decode desktop dovecot dumper fax ftp-adm ftp-admin ftp ftpadm ftpadmin games gdm gopher halt hostmaster ident info ingres ldap lp mail mailer-daemon mailman-owner mailman mailnull manager marketing mysql named netdump news newsadm newsadmin nfsnobody nobody noc nscd ntp nut operator pcap postfix postgres postmaster privoxy pvm quagga radiusd radvd rpc rpcuser rpm sales security shutdown smmsp squid sshd support sync system toor usenet uucp vcsa webalizer webmaster wnn www xfs

出典:http://web.arena.ne.jp/support/suiteprov1/manual/mailserver/postfix.html

そのエイリアスを解きたい場合は、/etc/aliasesを編集いたします。

vi /etc/aliases
HTML
エイリアスを解きたい名前をコメントアウトにする
info:          postmaster
↓↓↓↓↓
#info:          postmaster

コメントアウトをして、保存しましたら新しいエイリアスにするために次のコマンドを打ってください。

newaliases

これで完了です。

上記の設定を行った後、通常のメールアカウント同様にユーザーを作成してから送受信が行えることを確認してください。

ユーザー作成とメール動作確認

ここの章ではroot以外にユーザーを作成して、そのユーザーのメールアドレスでメール動作確認を行いたいと思います。なお、メールクライアントソフトはMacにデフォルトで入っている メール というソフトで行います。

ユーザーを作成した時に自動でユーザーフォルダ直下にMaildirフォルダ作成する

まぁ、そのまんまなのですが、ユーザーを作成した時に最初からMaildirフォルダが生成されたら楽という事でユーザーを作成する前に下準備を行いましょう。

// 新規ユーザ追加時に自動でMaildir形式メールボックス作成
mkdir -p /etc/skel/Maildir/{new,cur,tmp}

// メールボックスパーミッション設定
chmod -R 700 /etc/skel/Maildir/

ユーザー作成

下準備も完了しましたので、早速ユーザーを作成していきます。

// ユーザー作成
useradd [ユーザーの名前]

// パスワード設定
passwd [ユーザーの名前]

メール動作確認 & メールクライアント設定

ではでは、全ての準備がようやく整った所でメール動作確認を行いたいと思います。

作業に取り掛かる前にコマンドで動的にエラーを吐き出すように下準備を行います。

// ログを常時表示 メールサーバ構築する時に重宝する
tail -f /var/log/maillog

これで自動的にコマンドの画面にメールログが吐き出されるようになりますので、このログを見ながら動作確認を行っていきます。

では、Macのメールにてメールアドレス設定を行いましょう。

今回のサーバ設定は

ドメイン:blogreeder.com

ユーザー:article

で、やらせていただきましたが、実際にする時は各自自分の設定で行って下さい。

メールクライアントアプリ 設定画面 アカウントを追加

メールクライアントアプリ 設定画面 受信用メールサーバ

メールクライアントアプリ 設定画面 送信用メールサーバ

メールクライアントアプリ 設定画面 アカウントの概要

メール設定をしている内にmaillogが吐き出されているかと思いますので確認して下さい。

上記の構築を完璧にこなしていれば、おそらくですが接続は出来ている筈なので次のステップに進みます。なお、エラーが出て接続出来ない方は大変申し訳ございませんが、エラーログをコピペする等してググって下さい。

接続出来ましたら一度メールアプリを落として、もう一度アプリを立ち上げて下さい。そうしますと識別情報を確認出来ませんとポップアップが現れますので、常に信頼にチェックを入れまして接続をして下さい。これでもうポップアップが現れない筈です。

メールクライアントアプリ 設定画面 証明書を検証

同じくメールを初めて送信する時も出て来ますので、常に信頼をチェックして接続して下さい。

最後に、ボクがこのメールサーバを構築するのにドハまり(一週間...)してしまいましたので、どこでつまづいてしまったのかを忘備録として残しておきます。

  • iptablesでポートを開いていなかった。
  • ユーザー直下フォルダ(Maildir)のパーミッションが間違っていた。
  • 元から設定があるユーザー名だと(infoとか)
    エイリアスを変更しないとメールが届かない。
  • お名前.comVPS(KVM)を借りて15日間無料期間だと
    そもそも25番ポートをお名前.comが禁止していた。

NTPサーバ構築

NTPサーバはサーバ内の時間を常に世界と合わせるという仕事が出来ます。時間がズレていると様々な弊害や予期せぬバグを生む事になりかねないのでしっかり合わせていきましょう。

NTPインストール

初めにNTPをインストールします。

yum install ntp

手動で時間を合わせる

NTPサーバー(ntpd)を起動する際に、大幅に時間がずれていると、NTPサーバーが起動できないので、まずは手動で時間を合わせます。手動で時間合わせをするコマンドは、ntpdateで、これに正しい時間を教えてくれるサーバーを指定して実行します。時間を合わせる元のサーバーは、NICT(独立行政法人・情報通信研究機構)のNTPサーバーにします。

引用元:Linux自習室 - サーバーを使い倒す! - 常に正確な時間に合わせる

という事らしいので、先ずは時間を合わせてみましょう。

ntpdate ntp.nict.jp

NTPサーバの設定

大体の時間を合わせましたら次は設定を行います。

vi /etc/ntp.conf
ntp.conf

内部からの時刻同期を許可
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
↓
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap


こっちのサーバの方が正確な時間を取得出来るので変更する
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
↓
server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
の二行に変更する

変更を保存しましたら、ntpdをスタートして自動起動onにしましょう。

service ntpd start
chkconfig --level 3 ntpd on 

同期の確認

同期の確認をするにはntpqでオプション-pを付けて確認出来ます。

ntpq -p

ただし、起動直後はすぐには同期されませんので、10分程度たってから確認すると同期されていることが確認できます。同期の確認は、ntpqコマンドに-pオプションと付けて行います。

remoteの欄が同期しているサーバーで、先頭に*(アスタリスク)が付いているサーバーが同期しているサーバーです。その他に、+もいつでも接続可能なサーバーとしてマークされているものです。この欄が空白のサーバーは接続不可です。ただし、ntpdが起動して間もないときは、接続テストが完了しておらず、すべて空白(接続不可)となっています。

その右側の欄のデータのうち、重要なものの意味は次のとおりです。

st → サーバーが第何階層か

when → 最後のパケットを受け取ってからの時間(単位:秒)

poll → ポーリング間隔(単位:秒)

delay → 平均遅延時間(単位:ミリ秒)

offset → サーバーとの時間誤差(単位:ミリ秒)

jitter → 時間のバラつき

引用元:Linux自習室 - サーバーを使い倒す! - 常に正確な時間に合わせる

参考にしたサイト

今回、この記事を書く為に参考になったサイトを載せときます。

全体で勉強になったサイト

Linux自習室 - サーバーを使い倒す! - VPSをゲット!

お名前.comのVPSに引越しました。引越し手順、他社 VPS との比較など | karakaram-blog

CentOSの設定(目次) | レンタルサーバー・自宅サーバー設定・構築のヒント

さくらのVPS -初期設定からLAMP環境導入まで-

sshで勉強になったサイト

SSHを使ったリモートアクセス(さくらのVPS) - Webサービスの始め方

iptablesで勉強になったサイト

サーバーを作るたびにやる iptables の設定

iptablesの設定方法

vsftpdで勉強になったサイト

vsftpdにrootで接続する - ワレココニイル。

vsftpdの設定(vsftpd.conf)

FTPサーバー構築(vsftpd)

httpdで勉強になったサイト

◇バーチャルホストの設定◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆

もっとhttpd.confの設定

バーチャルホスト設定(Apache)

apache2.2 バーチャルホストの設定 後編

メール全般で勉強になったサイト

メールサーバ 構築

さくらのVPSの設定 - メールサーバーの構築

メールサーバー構築(Postfix+Dovecot)

Postfix関連

Postfix基本設定 - 備忘録として - Seesaa Wiki(ウィキ)

Postfix でバーチャルドメインの設定メモ | Sun Limited Mt.

Postfix初期設定 - ITらくがき

Postfix で複数ドメインの管理

Dovecot関連

Dovecot2.x/設定

エラー関連

fatal no SASL authentication mechanisms っていうエラー(メール関連)

はじめての自宅サーバ構築 - Fedora/CentOS - ( postfixでメールが全く送信出来ない。)

ユーザーエイリアス関連

メールサーバの構築_Postfixの設定

yumで勉強になったサイト

yum の使用方法

PHPをアップデートする時に勉強になったサイト

php5.5にする方法

phpMyAdminをインストールする時に勉強になったサイト

さくらのVPS -phpMyAdminのインストールと初期設定-

まとめ

本来ならば章を切り分けて記事にしていく方が良いとは思ったのですが、忘備録として残して自分自身が1ページで全部乗っていたら便利だろうなーって考えて1記事で全てを載せました。

ただ、まだまだ構築していく部分は多くて、構築と検証が終わりましたら、随時追加していきたいと考えています。

個人の完全な忘備録として淡々とやり方を書いていますが、この記事を書く為に無駄に一つサーバを借りて検証を行いながら書きました。ですが、全部終わってみるとサーバ構築って楽しいなーってしみじみ感じてしまいます。本当ならば一人では到底出来ない事でしたが、今ではググればなんでも情報が出てくる時代です。誰でも頑張ればサーバ構築は出来るって事ですね。性能比較で考えれば普通のレンタルサーバよりも料金がかなり安くなるのでお勧め致します。

webサービス