さくらvpsでの環境構築手順 †例として以下の環境を構築します。
※アプリケーションの各バージョンは2015/08/17現在、以下の手順でインストールを実行した際に導入されるバージョンとなります。 環境構築前の前準備 †sshクライアントを用いてroot権限でvpsへログイン †ssh root@xxx.xxx.xxx.xxx 標準でインストールされているソフトウェアを一括で最新状態へアップデート †yum update タイムゾーンの変更 †ここを変更しないと正しい日本時間が取得できないため、各種アプリケーションで意図しない動作をする可能性があります。
dateと打って日本時間が表示されていれば設定完了です。 各種リポジトリのインストール †php5.4.xやphpMyAdmin4.4.xなど、標準のリポジトリには含まれないパッケージを導入するため
一般ユーザーを追加 †ここでは一例としてsampleユーザーを追加します。
#auth required pam_wheel.so use_uid ↓コメントを外す auth required pam_wheel.so use_uid sshのroot直接ログインを禁止 †セキュリティ上の観点からrootに直接ログインできるのはあまり好ましくないので、
PermitRootLogin yes ↓ PermitRootLogin no
※設定に誤りがあると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を押してインストールします。
※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 †
<Directory "/var/www/html"> AllowOverride None </Directory> ↓ <Directory "/var/www/html"> AllowOverride ALL </Directory> ※コメント行は省略 ※この設定を行わないと.htaccessが利用できないので注意してください。
<VirtualHost xxx.xxx.xxx.xxx:80> ServerName xxx.xxx.xxx.xxx DocumentRoot /var/www/html/ </VirtualHost> ※xxx.xxx.xxx.xxxにはサーバーに割り当てられているIPを指定してください。 URL:http://xxx.xxx.xxx.xxx/sample/ 上記を実行しただけではForbiddenエラーが表示されますが、 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,ドメインには実際に所有しているドメインを指定してください。
エラーが表示されず、ブラウザでアクセスできることが確認出来たらApacheの設定は完了です。
※その他コマンド
MySQL †
#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 これで初期セットアップは完了です。
※その他コマンド
phpMyAdmin †
#以下の変数にランダムな英数字を入力(32桁) $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
<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からのみのアクセスを許可する。 必要に応じて設定を行なってください。
create_tables.sqlの場所は以下となります。 /usr/share/phpMyAdmin/sql/create_tables.sql create_tables.sqlを手元に持ってくるにはftpの公開領域にコピー等しダウンロードする事となります。 vsftpd †
#匿名アクセスを弾く 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
#ファイルを新規作成 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ユーザーを記述してください。
※その他コマンド
メールサーバーについて †前提として本例では以下の構成で構築しています。
今回はバーチャルメールボックスを設定し、Mysqlでメールアドレスを管理、 ※上記の構成はシステムの稼働に必須ではありません。 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しか選択肢がない場合は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になった。
下記項目を書き換え 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 バーチャルメールボックス設定 †
仮に作成したアカウントを上記とします。
/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'
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
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
dovecot †
設定ファイルをlocal.confにまとめるため以下のコメントを外します #!include_try /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 }
auth_mechanisms = plainをコメントアウト !include auth-system.conf.extをコメントアウト
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'
service postfix reload service dovecot reload postfixadmin †
#以下を記述し保存 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>
$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';
環境チェックが実行されて問題なければDB設定が自動的に実行されます。 setupパスワードを発行するためにパスワード文字列を入力してください。 出力された文字列を設定ファイルの下記項目に記述してください。 $CONF['setup_password'] = '';
セキュリティ設定、その他 †iptablesの設定 †さくらの設定例を下に設定していきます。
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
・ポート番号凡例
※iptablesでftpを通すには20と21を開くだけでは不十分です。 vi /etc/sysconfig/iptables-config IPTABLES_MODULES="" ↓ IPTABLES_MODULES="ip_conntrack_ftp" 記述したらiptables再起動 service iptables restart カーネルパニック時の再起動設定 †
#下記修正 kernel.panic = 10 //10秒後に再起動
|