VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。
突然ですが、Programmerboxのサーバを移行しました。移行にあたってどんなレンタルサーバが良いのか迷いましたが、お名前.comのVPS(KVM)に致しました。移行にする時のサーバ構築にちょくちょくハマってしまいましたので次に構築する時にハマらないようにここに忘備録として手順と設定方法を書いていきたいと思います。
構築するサーバの目的
様々なサーバがあると思いますが、今回はWeb寄りのベーシックな構築を行いたいと思います。
自分自身の要望としては
- 前のサーバより多くのアクセスを捌けるようにしたい。
- バーチャルドメインで運用して行きたい。
- FTPでファイルを上げれるようにしたい。
- メールの送受信を行いたい。
- とにかく自由にサーバをいじりたい。
まぁ、こんなもんでしょうか。
やはり、自由にカスタマイズ出来るという点が魅力ですね、VPSは。
お名前.comのVPS(KVM)で構築する
VPSと言っても様々な企業が出していますが、今回はお名前.comのVPS(KVM)で構築致します。何処が良いかは個人個人違うと思いますので、自由に選ぶと良いかと思います。何故ならば何処も負けじと料金と性能の差が変わらなくなって来た為です。個人的にオススメなのはお名前.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が起動しますので以下の記述を自分の設定に書き換えて保存して下さい。
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
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
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
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
一番下から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
設定はこんな感じで、設定したいドメインとドキュメントルートを設定してください。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が扱うメモリ 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
まず、デフォルトで 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
$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
プロトコルの設定 #protocols = imap pop3 lmtp ↓ protocols = imap pop3
次は認証系設定を変えていきます。
vi /etc/dovecot/conf.d/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
メールボックスの形式を指定 #mail_location = ↓ mail_location = maildir:~/Maildir
最後にpostfixからの認証要求を受け付けるようにしときましょう。
vi /etc/dovecot/conf.d/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
ここでは例で 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
# 末行に追加 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
# 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
# コメントを外す #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
エイリアスを解きたい名前をコメントアウトにする 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
内部からの時刻同期を許可 #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の設定(目次) | レンタルサーバー・自宅サーバー設定・構築のヒント
sshで勉強になったサイト
SSHを使ったリモートアクセス(さくらのVPS) - Webサービスの始め方
iptablesで勉強になったサイト
vsftpdで勉強になったサイト
httpdで勉強になったサイト
◇バーチャルホストの設定◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆
メール全般で勉強になったサイト
Postfix関連
Postfix基本設定 - 備忘録として - Seesaa Wiki(ウィキ)
Postfix でバーチャルドメインの設定メモ | Sun Limited Mt.
Dovecot関連
エラー関連
fatal no SASL authentication mechanisms っていうエラー(メール関連)
はじめての自宅サーバ構築 - Fedora/CentOS - ( postfixでメールが全く送信出来ない。)
ユーザーエイリアス関連
yumで勉強になったサイト
PHPをアップデートする時に勉強になったサイト
phpMyAdminをインストールする時に勉強になったサイト
さくらのVPS -phpMyAdminのインストールと初期設定-
まとめ
本来ならば章を切り分けて記事にしていく方が良いとは思ったのですが、忘備録として残して自分自身が1ページで全部乗っていたら便利だろうなーって考えて1記事で全てを載せました。
ただ、まだまだ構築していく部分は多くて、構築と検証が終わりましたら、随時追加していきたいと考えています。
個人の完全な忘備録として淡々とやり方を書いていますが、この記事を書く為に無駄に一つサーバを借りて検証を行いながら書きました。ですが、全部終わってみるとサーバ構築って楽しいなーってしみじみ感じてしまいます。本当ならば一人では到底出来ない事でしたが、今ではググればなんでも情報が出てくる時代です。誰でも頑張ればサーバ構築は出来るって事ですね。性能比較で考えれば普通のレンタルサーバよりも料金がかなり安くなるのでお勧め致します。