さくらvpsでの環境構築手順

例として以下の環境を構築します。

ドメインsample.com
OSCentOS 6.x
Apache2.2
PHP5.4.43
MySQL5.5.44
phpMyAdmin4.4.11
vsftpd2.2
postfix2.6.6
dovecot2.0.9
postfixadmin2.92

※アプリケーションの各バージョンは2015/08/17現在、以下の手順でインストールを実行した際に導入されるバージョンとなります。

環境構築前の前準備

sshクライアントを用いてroot権限でvpsへログイン

ssh root@xxx.xxx.xxx.xxx

標準でインストールされているソフトウェアを一括で最新状態へアップデート

yum update

タイムゾーンの変更

ここを変更しないと正しい日本時間が取得できないため、各種アプリケーションで意図しない動作をする可能性があります。

  • オリジナルをバックアップ
    cp /etc/localtime /etc/localtime.org
  • タイムゾーンファイルの変更
    ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

dateと打って日本時間が表示されていれば設定完了です。

各種リポジトリのインストール

php5.4.xやphpMyAdmin4.4.xなど、標準のリポジトリには含まれないパッケージを導入するため
epelやremiリポジトリを利用できるようにインストールします。

  • 上から順にepel,remiリポジトリをインストール
    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

一般ユーザーを追加

ここでは一例としてsampleユーザーを追加します。

  • ユーザーの作成
    useradd sample
    passwd sample
    #設定するパスワードを聞かれるので入力、確認の2回入力
  • wheelグループに追加
    usermod -G wheel sample
  • rootになれるユーザーを制限
    先ほどsampleユーザーを追加したのでsu出来るのはrootユーザー,sampleユーザーのみとなります。
    必要に応じて追加した一般ユーザーをwheelグループに追加してください。
    vi /etc/pam.d/su
#auth       required     pam_wheel.so use_uid
↓コメントを外す
auth        required     pam_wheel.so use_uid

sshのroot直接ログインを禁止

セキュリティ上の観点からrootに直接ログインできるのはあまり好ましくないので、
一般ユーザーを経由してroot昇格のみ許可するように以下のように書き換えて設定を変更します。

  • 設定ファイルの変更
    設定ファイルを以下のように書き換えます。
    vi /etc/ssh/sshd_config
PermitRootLogin yes
↓
PermitRootLogin no
  • sshdを再起動
    /etc/init.d/sshd restart

※設定に誤りがあるとsshでのログインが以降不可能になってしまいます。
ssh再起動後は現在のセッションを閉じる前に別セッションでssh接続できることを確認してください。

各種アプリケーションをインストール

Apache

yum install httpd httpd-devel

バージョンが2.2であることを確認出来たらyを押してインストールします。

PHP

php本体、システムの稼働に必要なモジュールを指定してインストールを行います。

yum --enablerepo=remi install php php-devel php-curl php-json php-xml php-gd php-mbstring php-pdo php-pear

※上記は1行にまとめて実行してください。

バージョンが5.4台であることを確認したらyを押してインストールします。

  • php5.5.xを導入する場合は以下
    yum --enablerepo=remi-php55 install php php-devel php-curl php-json php-xml php-gd php-mbstring php-pdo php-pear
  • php5.6.xを導入する場合は以下
    yum --enablerepo=remi-php56 install php php-devel php-curl php-json php-xml php-gd php-mbstring php-pdo php-pear

※phpのバージョンは各パッケージの必要環境に合わせてインストールして下さい。

MySQL

yum --enablerepo=remi install mysql-server

バージョンが5.5台であることを確認したらyを押してインストールします。

phpMyAdmin

yum --enablerepo=remi install phpMyAdmin

バージョンが4.4台であることを確認したらyを押してインストールします。

※phpmyadminとphpMyAdminでは導入されるバージョンが異なりますので大文字小文字の違いには注意してください。

vsftpd

yum install vsftpd

バージョンが2.2台であることを確認したらyを押してインストールします。

postfix

yum install postfix

バージョンが2.6台であることを確認したらyを押してインストールします。

dovecot

yum install dovecot

バージョンが2.0台であることを確認したらyを押してインストールします。

各種アプリケーションの設定、起動

PHP

設定ファイルの各行を以下のように書き換えます。

vi /etc/php.ini
date.timezone = "Asia/Tokyo"		//デフォルトのタイムゾーンを設定
display_errors = On			//Offにするとエラーは全てHTTPステータス500を返す。 開発時はOn推奨。 公開時はOffにするかスクリプトやhtaccess側からoffにする事。
log_errors = On				//phpのエラーログをサーバーに残す。
error_log = /var/log/php/error.log	//エラーログを残すファイルを指定。自らディレクトリやファイルを作成した場合は所有者をapacheにし、パーミッションに書き込み権限を与えること。
html_error = On				//エラー表示にhtmlを使う。

Apache

  • htaccessを許可
    設定ファイルを以下のように書き換えます。
    vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
	AllowOverride None
</Directory>
↓
<Directory "/var/www/html">
	AllowOverride ALL
</Directory>
※コメント行は省略

※この設定を行わないと.htaccessが利用できないので注意してください。

  • システムを設置するディレクトリの作成
    mkdir /var/www/html/sample
    chmod 777 /var/www/html/sample
  • バーチャルドメインの設定
    ファイルの最下部に以下を追記します。
    vi /etc/httpd/conf/httpd.conf
<VirtualHost xxx.xxx.xxx.xxx:80>
        ServerName xxx.xxx.xxx.xxx
        DocumentRoot /var/www/html/
</VirtualHost>

※xxx.xxx.xxx.xxxにはサーバーに割り当てられているIPを指定してください。
上記設定によりサーバー起動後、ブラウザからIPでのアクセスが可能となります。

URL:http://xxx.xxx.xxx.xxx/sample/

上記を実行しただけではForbiddenエラーが表示されますが、
単にindexファイルがないということですので以下のコマンドでindexファイルを設置し、
再度アクセスすればエラーは解消されます。

touch /var/www/html/sample/index.html

ドメイン取得済みの場合は以下の設定を末尾に更に追記してください。

<VirtualHost xxx.xxx.xxx.xxx:80>
       ServerName sample.com
       ServerAlias www.sample.com
       DocumentRoot /var/www/html/sample/
       ErrorLog logs/sample_error_log
       RewriteEngine on
       RewriteCond %{HTTP_HOST} ^(sample.com)(:80)? [NC]
       RewriteRule ^(.*) http://www.sample.com$1 [R=301,L]
</VirtualHost>

上記設定でサーバー起動後、ドメインでのアクセスが可能となりなます。

URL:http://www.sample.com/ 

xxx.xxx.xxx.xxxにはサーバーに割り当てられているIP,ドメインには実際に所有しているドメインを指定してください。

  • サーバーを起動
    service httpd start

エラーが表示されず、ブラウザでアクセスできることが確認出来たらApacheの設定は完了です。
エラーが出た場合はエラーを修正し、再度起動コマンドを実行してください。

  • サーバー起動時に自動でApacheを起動するように設定
    chkconfig httpd on

※その他コマンド

  • Apacheの停止
    service httpd stop
  • Apacheの強制再起動
    service httpd restart
  • Apacheの安全な再起動
    service httpd graceful

MySQL

  • mysqlを起動
    service mysqld start
  • 初期セットアップ
    初期セットアップには専用のスクリプトが用意されているので以下のコマンドでそれを使用します。
    /usr/bin/mysql_secure_installation
    ※以下のように対話形式でセットアップが行われます。
#Enter current password for root (enter for none) //デフォルトではパスワードがないのでそのままEnter。

#Set root password? [Y/n] y ← 「y」と入力してEnter
#New password: ← rootパスワードとして設定したい文字列を入力してEnter
#Re-enter new password: ← もう一度入力してEnter
#Password updated successfully!

#匿名ユーザーを削除するかどうか。「y」と入力してEnter
#Remove anonymous users? [Y/n] y 

#ローカルホスト外からのroot接続を拒否するかどうか。アプリケーション分割する予定がなければ拒否。今回は拒否する為「y」と入力してEnter
#Disallow root login remotely? [Y/n] y

#テストテーブルを削除するか。「y」と入力してEnter
#Remove test database and access to it? [Y/n] y

#今までの設定をすぐに反映するかどうか。「y」と入力してEnter
#Reload privilege tables 2015-08-18 (火) 17:31:52 y

これで初期セットアップは完了です。

  • 自動起動設定
    chkconfig mysqld on

※その他コマンド

  • mysqlの停止
    service mysqld stop
  • mysqlの強制再起動
    service mysqld restart

phpMyAdmin

  • パスフレーズの設定
    設定ファイルを以下のように書き換えます。
    vi /etc/phpMyAdmin/config.inc.php
#以下の変数にランダムな英数字を入力(32桁)
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
  • 接続元IPの解放
    設定ファイルを以下のように書き換えます。
    vi /etc/httpd/conf.d/phpmyadmin.conf
<Directory "/usr/share/phpmyadmin">
	Order Deny,Allow
#	Allow from all
	Allow from xxx.xxx.xxx.xxx
</Directory>
Allow from all	//これを有効にすると全てのIPからのphpmyadminへのアクセスを許可する
Allow from xxx.xxx.xxx.xxx	//これを有効にすると指定されたIPからのみのアクセスを許可する。

必要に応じて設定を行なってください。

  • Apacheの再起動
    設定を変更した後はApacheの再起動を行います。
    service httpd graceful
  • 環境保管領域メッセージの解消
    phpMyAdminにアクセスしログインした後はページ下部に
    「phpMyAdmin 環境保管領域が完全に設定されていないため〜〜」というメッセージが表示されます。
    そちらを解消するには、
    phpMyAdminにroot権限でログインし、create_tables.sqlをインポートしてください。
    これによってphpmyadminデータベースとパスワード未設定のpmaユーザが作成され、環境保管領域が作成されます。

create_tables.sqlの場所は以下となります。

/usr/share/phpMyAdmin/sql/create_tables.sql

create_tables.sqlを手元に持ってくるにはftpの公開領域にコピー等しダウンロードする事となります。

vsftpd

  • 初期設定
    設定ファイル項目を書き換えorコメントを外します。
    項目の記述がない場合は末尾に追記してください。
    vi /etc/vsftpd/vsftpd.conf
#匿名アクセスを弾く
anonymous_enable=NO
#アスキーモード有効に
ascii_upload_enable=YES
ascii_download_enable=YES
#シグニチャ隠蔽
#コメントを外す
ftpd_banner=Welcome to blah FTP service.
#ホームディレクトリ参照できるように
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#タイムスタンプ時間をローカル時間にする
use_localtime=YES
  • ftpログイン時のホームディレクトリを指定
    #ホームディレクトリ設定用のファイルを格納するディレクトリ作成
    mkdir /etc/vsftpd/vsftpd_user_conf
#ファイルを新規作成
vi /etc/vsftpd/vsftpd_user_conf/sample
※sampleにあたる部分は&aname(#rc361480)で作成したユーザー名を指定する
#以下をファイルに記述する
local_root=/var/www/html/sample/

※ここで記述したディレクトリがFTPログイン時のホームディレクトリとなります。 これにより指定したディレクトリより上位階層のディレクトリへは移動できなくなります。

#下記ファイルに設定を適用するユーザーを追記する
vi /etc/vsftpd/chroot_list
sample

※1行に1ユーザーを記述してください。

  • ftpサーバーの起動
    service vsftpd start
  • 自動起動設定
    chkconfig vsftpd on

※その他コマンド

  • ftpサーバーの停止
    service vsftpd stop

メールサーバーについて

前提として本例では以下の構成で構築しています。

MySQL5.5.44
postfix2.6.6
dovecot2.0.9
postfixadmin2.92

今回はバーチャルメールボックスを設定し、Mysqlでメールアドレスを管理、
postfixadminを使用し、GUIを用いてブラウザからメールアドレスの管理を出来るようにします。

※上記の構成はシステムの稼働に必須ではありません。
phpからメール送信を行うためにpostfixやsendmail等のmtaが導入、設定されていることが最低条件となります。
最低限の設定で済ます場合は下記となります。

postfix 最低限の設定

  • phpでのメール配送をsendmailからpostfixに変更する
#sendmailを停止
service sendmail stop 
#sendmailの自動起動をオフ
chkconfig sendmail off 
#mtaの切り替えを行う
alternatives --config mta

例として以下の様な表示がされたものとします。

There is 1 program that provides 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail [#hf15696d]
2 /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number:

上記の状態ではデフォルトのmtaにsendmailが設定されています。
postfixに切り替える為、2を入力しenter押下。

※postfixしか選択肢がない場合はsendmailは導入されていないということなのでmta切り替えは不要です。

#もう一度mta切替画面から設定を確認。
alternatives --config mta
There are 2 programs which provide 'mta'. 

Selection Command 
----------------------------------------------- 
* 1 /usr/sbin/sendmail.sendmail [#k0d5da3f]
+ 2 /usr/sbin/sendmail.postfix 

Enter to keep the current selection[+], or type selection number: 

+マークがpostfixに移動した事を確認。これで使用するmtaがpostfixになった。
  • postfixの設定
    vi /etc/postfix/main.cf

下記項目を書き換え

myhostname = mail.sample.com	//メールサーバのFQDNを指定
mydomain = sample.com		//ドメイン名
myorigin = $mydomain		//差出人アドレスに使用されるドメイン名
inet_interfaces = localhost	//ローカルから外部への配送のみ許可
inet_protocols = ipv4		//IPv4のみ許可
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain	//メールサーバー自身に配送されたとみなすドメインのリスト
mynetworks = 127.0.0.0/8	//メールのリレー(転送)を許可するネットワークにローカルのみを指定
smtpd_banner = $myhostname ESMTP Unknown	//postのバージョンを隠蔽
  • postfix起動
    service postfix start
  • postfixの自動起動設定
    chkconfig postfix on

メール送信のテストを行って問題がなければ設定は完了です。

postfix バーチャルメールボックス設定

  • 予めphpmyadminでpostfixユーザー,postfixDBを作成
    db:postfix
    user:postfix
    pass:postfix_pass

仮に作成したアカウントを上記とします。

  • 受信用のバーチャルユーザーとグループの作成
    groupadd -g 10000 vusers
    useradd -g 10000 -u 10000 vusers
  • 以下3つを作成
    mkdir /etc/postfix/sql
/etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix_pass
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix_pass
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix_pass
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
  • main.cfの編集
    vi /etc/postfix/main.cf
myhostname = mail.sample.com
mydestinaion = $myhostname, localhost
inet_interface = all
inet_protocols = ipv4
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP Unknown
#Virtual Domain /MySQL
local_transport = local
virtual_transport = virtual
virtual_mailbox_base = /home/vusers
virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_minimum_uid = 10000
#SMTP-Auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions = reject_rbl_client bl.spamcop.net
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
  • master.cfの編集
    vi /etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd
 -o smtpd_tls_security_level=may	//encryptからmayに書き換え
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,permit
 -o milter_macro_daemon_name=ORIGINATING
  • postfix起動
    service postfix start
  • postfix自動起動設定
    chkconfig postfix on

dovecot

  • dovecotのmysqlドライバをインストール
    yum install dovecot-mysql
  • 設定ファイルの書き換え
    vi /etc/dovecot/dovecot.conf

設定ファイルをlocal.confにまとめるため以下のコメントを外します

#!include_try /etc/dovecot/local.conf ←最終行、コメントを外す
  • local.confに設定を記述
    vi /etc/dovecot/local.conf
# debug関係
auth_debug_passwords = yes
auth_verbose = no
auth_debug = yes

listen = *
disable_plaintext_auth = no
auth_mechanisms = PLAIN LOGIN CRAM-MD5
mail_location = maildir:/home/vusers/%d/%n
first_valid_uid = 10000
first_valid_gid = 10000
mail_plugins = quota

protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
  mail_plugins = $mail_plugins imap_quota
}
protocol pop3 {
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
plugin {
  quota = maildir:User quota
}
  • 10-auth.confの編集
    vi /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plainをコメントアウト
!include auth-system.conf.extをコメントアウト
  • dovecot用のmysql設定ファイルを作成
    vi /etc/dovecot/dovecot-postfixadmin-mysql.conf 
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix_pass
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT concat('/home/vusers/', maildir) AS home, 10000 AS uid, 10000 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
  • postfix,dovecotを起動、または再起動
service postfix reload
service dovecot reload

postfixadmin

  • 最新版をダウンロード
    wget ダウンロード先URL/postfixadmin-2.92.tar.gz
  • 解凍し、/var/www/に配置
    tar zxvf postfixadmin-2.92.tar.gz
    mv postfixadmin-2.92 /var/www/postfixadmin
  • エイリアス設定、アクセス制御を設定
    #設定ファイルを新規作成
    vi /etc/httpd/conf.d/postfixadmin.conf
#以下を記述し保存
Alias /postfixAdmin /var/www/postfixadmin
Alias /postfixadmin /var/www/postfixadmin
<Directory "/var/www/postfixadmin">
	Order allow,deny
#	Allow from all
	Allow from xxx.xxx.xxx.xxx
</Directory>
  • apacheの再起動
    service httpd graceful
  • config.local.phpの編集
    $CONF['configured'] = true;
    $CONF['setup_password'] = '指定された文字列';
$CONF['default_language'] = 'ja';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix_pass';
$CONF['database_name'] = 'postfix';
  • セットアップ画面へアクセス
    http://xxx.xxx.xxx.xxx/postfixadmin/setup.php

環境チェックが実行されて問題なければDB設定が自動的に実行されます。

setupパスワードを発行するためにパスワード文字列を入力してください。 出力された文字列を設定ファイルの下記項目に記述してください。

$CONF['setup_password'] = ''; 
  • php-imapが足りないと警告が出たらyumでインストール
    yum install php-imap
  • 管理者の登録
    ドメイン管理者、パスワードを設定してください。
  • postfixadminにログインし、ドメイン、メールアドレスの追加
  • メールクライアントを用いて疎通確認

セキュリティ設定、その他

iptablesの設定

さくらの設定例を下に設定していきます。
https://help.sakura.ad.jp/app/answers/detail/a_id/2423

  • データを持たないパケットの接続を破棄
  • SYNflood攻撃と思われる接続を破棄
  • ステルススキャンと思われる接続を破棄
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  • localhostからの通信とpingを許可に設定
     iptables -A INPUT -i lo -j ACCEPT 
     iptables -A INPUT -p icmp -j ACCEPT
  • 開放するポート番号を指定
     iptables -A INPUT -p tcp -m tcp --dport [ポート番号] -j ACCEPT

・ポート番号凡例

80http
443https
465smtp(SSL)
110POP3
995POP3(SSL)
143IMAP
993IMAP(SSL)
22SSH
21ftp
20ftp
3306mysql
  • 確立済みの通信を許可に設定
     iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 許可した通信以外のサーバに受信するパケットを拒否し、サーバから送信するパケットを許可に設定
     iptables -P INPUT DROP 
     iptables -P OUTPUT ACCEPT
  • iptablesの設定を保存
    service iptables save

※iptablesでftpを通すには20と21を開くだけでは不十分です。
パッシブモードのFTPは通さないのでip_conntrack_ftpのモジュールをロードする必要があります。

vi /etc/sysconfig/iptables-config
IPTABLES_MODULES=""
  ↓
IPTABLES_MODULES="ip_conntrack_ftp"

記述したらiptables再起動

service iptables restart

カーネルパニック時の再起動設定

  • 設定ファイルを開く
    vi /etc/sysctl.conf
#下記修正
kernel.panic = 10	//10秒後に再起動
  • 設定の反映
    sysctl -p

トップ   編集 凍結 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2016-01-22 (金) 15:32:34 (1026d)