前回記事、GMOクラウド VPSを借りてまず行う初期設定内容 から間が空いてしまったけれど、今回はWebとメールサーバーの設定編を。
とはいえ、自分の場合メールサービスとしてGoogle Appsを利用しているため、VPS上では問い合わせやログ等を送れればいいだけなので、そっちは超簡単な設定だけで終わらせてますが……。
ということで、続きは以下から。割と長いです。
スポンサードリンク
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) 様を参考に、Webサーバー環境を構築します。既に 先の記事 でCentOSのアップグレードは行っているため、まず
# yum check-update
して、
# yum update
で、各パッケージのアップデートをしておきます。
その後レポジトリを追加します。現時点でCentOS 6系の最新版は
のようです。
全てのデータをダウンロードしてきます。
# cd /usr/local/src # wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
各レポジトリを追加します。
# rpm -Uvh epel-release-6-8.noarch.rpm remi-release-6.rpm rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
これまた 参考サイト様 の記事通り、レポジトリの無効化をしておきます。
# vi /etc/yum.repos.d/epel.repo
として
[epel] ~省略~ #enabled=1 enabled=0 ~省略~
epelを無効化した後、
# vi /etc/yum.repos.d/rpmforge.repo
として
### Name: RPMforge RPM Repository for RHEL 6 - dag ### URL: http://rpmforge.net/ [rpmforge] ~省略~ #enabled = 1 enabled = 0 ~省略~
rpmforgeも無効化します。remiはデフォルトで無効になっているので、これでレポジトリの追加は完了です。
Web環境のインストールを行います。phpMyAdminだけは最新版を手動で入れたいので、ここではインストールしません。そうするといくつかのライブラリが自動で入らないので、以下のように指定して入れます。
# yum --enablerepo=remi,epel,rpmforge install httpd-devel php php-devel php-pear php-mcrypt php-mbstring php-mysql php-pdo php-gd mod_ssl mysql-server
とすると、うちのGMOクラウドVPSでは、これだけのパッケージが入るようです。
パッケージ名 | アーキテクチャ | バージョン | レポジトリ |
apr | x86_64 | 1.3.9-5.el6_2 | base |
apr-devel | x86_64 | 1.3.9-5.el6_2 | base |
apr-util | x86_64 | 1.3.9-3.el6_0.1 | base |
apr-util-devel | x86_64 | 1.3.9-3.el6_0.1 | base |
apr-util-ldap | x86_64 | 1.3.9-3.el6_0.1 | base |
autoconf | noarch | 2.63-5.1.el6 | base |
automake | noarch | 1.11.1-4.el6 | base |
compat-mysql51 | x86_64 | 5.1.54-1.el6.remi | remi |
cyrus-sasl-devel | x86_64 | 2.1.23-13.el6_3.1 | base |
db4-cxx | x86_64 | 4.7.25-18.el6_4 | base |
db4-devel | x86_64 | 4.7.25-18.el6_4 | base |
expat-devel | x86_64 | 2.0.1-11.el6_2 | base |
freetype | x86_64 | 2.3.11-14.el6_3.1 | base |
httpd | x86_64 | 2.2.15-30.el6.centos | updates |
httpd-devel | x86_64 | 2.2.15-30.el6.centos | updates |
httpd-tools | x86_64 | 2.2.15-30.el6.centos | updates |
libaio | x86_64 | 0.3.107-10.el6 | base |
libjpeg-turbo | x86_64 | 1.2.1-3.el6_5 | updates |
libmcrypt | x86_64 | 2.5.8-9.el6 | epel |
libpng | x86_64 | 2:1.2.49-1.el6_2 | base |
libtool-ltdl | x86_64 | 2.2.6-15.5.el6 | base |
libX11 | x86_64 | 1.5.0-4.el6 | base |
libX11-common | noarch | 1.5.0-4.el6 | base |
libXau | x86_64 | 1.0.6-4.el6 | base |
libxcb | x86_64 | 1.8.1-1.el6 | base |
libXpm | x86_64 | 3.5.10-2.el6 | base |
libxslt | x86_64 | 1.1.26-2.el6_3.1 | base |
mailcap | noarch | 2.1.31-2.el6 | base |
mod_ssl | x86_64 | 1:2.2.15-30.el6.centos | updates |
mysql | x86_64 | 5.5.38-1.el6.remi | remi |
mysql-libs | x86_64 | 5.5.38-1.el6.remi | remi |
mysql-server | x86_64 | 5.5.38-1.el6.remi | remi |
openldap-devel | x86_64 | 2.4.23-34.el6_5.1 | updates |
perl-DBD-MySQL | x86_64 | 4.013-3.el6 | base |
perl-DBI | x86_64 | 1.609-4.el6 | base |
php | x86_64 | 5.4.30-1.el6.remi | remi |
php-cli | x86_64 | 5.4.30-1.el6.remi | remi |
php-common | x86_64 | 5.4.30-1.el6.remi | remi |
php-devel | x86_64 | 5.4.30-1.el6.remi | remi |
php-gd | x86_64 | 5.4.30-1.el6.remi | remi |
php-mbstring | x86_64 | 5.4.30-1.el6.remi | remi |
php-mcrypt | x86_64 | 5.4.30-1.el6.remi | remi |
php-mysql | x86_64 | 5.4.30-1.el6.remi | remi |
php-pdo | x86_64 | 5.4.30-1.el6.remi | remi |
php-pear | noarch | 1:1.9.4-28.el6.remi | remi |
php-process | x86_64 | 5.4.30-1.el6.remi | remi |
php-xml | x86_64 | 5.4.30-1.el6.remi | remi |
t1lib | x86_64 | 5.1.2-6.el6_2.1 | base |
初回インストール時は以下のように証明鍵の許可をするかどうかの表示が出ますが、yを押して許可します。
warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi Importing GPG key 0x00F97F56: Userid : Remi Collet <RPMS@FamilleCollet.com> Package: remi-release-6.5-1.el6.remi.noarch (installed) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi Is this ok [y/N]: y warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 Importing GPG key 0x0608B895: Userid : EPEL (6) <epel@fedoraproject.org> Package: epel-release-6-8.noarch (installed) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 Is this ok [y/N]: y
さて、ここからはhttpdの設定を詰める作業に入るわけですが、使用環境によって内容は大幅に変わってくることもありますし、私の場合は既に作成したレシピがあるので、そちらをコピーして利用します。httpdの最適化については、参考サイト様 に設定のヒントがあるため、そちらをご確認ください。
参考までに、自分の httpd.confのモジュール読み込み設定は、
LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_alias_module modules/mod_authn_alias.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so #LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so #LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule authz_default_module modules/mod_authz_default.so #LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so #LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so #LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so #LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so #LoadModule actions_module modules/mod_actions.so #LoadModule speling_module modules/mod_speling.so #LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so #LoadModule disk_cache_module modules/mod_disk_cache.so #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule mem_cache_module modules/mod_mem_cache.so LoadModule cgi_module modules/mod_cgi.so LoadModule version_module modules/mod_version.so
こんな感じにしています。そのままコピペしてきたので見づらいですが、安全寄りで不要な物を少しだけコメントアウトしています。
また、preforkの値は、メモリ2GBの環境なので、ちょっと大きめの設定にしています。
<IfModule prefork.c> StartServers 10 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 100 MaxRequestsPerChild 1000 </IfModule>
最適化以外の部分については、気休めですがセキュリティ対策としてApacheから出す情報を減らします。
# vi /etc/httpd/conf/httpd.conf
として、
ServerTokens ProductOnly ServerSignature Off
を設定します。両方ともデフォルト値が設定されているので、検索して書き換えてください。
また、VirtualHostで動作させることを前提としているため、IPアドレス直にアクセスしてくる接続を拒否します。(IPアドレスに直に叩いてくるのは、脆弱性を探しているbotなどがほとんどですし)
/etc/httpd/conf/httpd.conf の末尾辺りに
<VirtualHost *:80> ServerName any DocumentRoot /tmp </VirtualHost> <Directory /tmp> order deny,allow deny from all </Directory>
と記載します。これとは別に、例えば
<Directory "/home/user/public_html"> Options Includes FollowSymLinks ExecCGI MultiViews AllowOverride All Order allow,deny Allow from all </Directory> <VirtualHost *:80> ServerAdmin webmaster@example.com DocumentRoot /home/user/public_html ServerName example.com ServerAlias www.example.com ErrorLog logs/example.com-error_log CustomLog logs/example.com-access_log combined env=!no_log </VirtualHost>
のように、VirtualHostでアクセスするドメイン設定を書いておきます。これでIPアドレスを入力してアクセスした時、どんなアドレスを入力しても403 ForbiddenになればOKです。
# vi /etc/php.ini
として、設定を変更します。自分が変更する内容としては
memory_limit = 256M post_max_size = 128M upload_max_filesize = 128M max_file_uploads = 100 mysql.cache_size = 4000 mysqli.cache_size = 4000
とするくらいです(全てデフォルト値が設定されているので検索して書き換えてください)。mbstring設定は、最近のCMS等ではあまり設定する必要がないので、ここでは変更しません。
通常ならデフォルト設定のままで問題ないとは思いますが、パフォーマンス調整として、以下の内容を /etc/my.cnf の [mysqld] セクション末尾あたりに追加しています。
# vi /etc/my.cnf
query_cache_size=128M query_cache_limit=1M query_cache_min_res_unit=4k query_cache_type=1 tmp_table_size=128M max_heap_table_size=128M table_cache=128 max_allowed_packet=16M sort_buffer=1M read_buffer_size=1M read_rnd_buffer_size=1M join_buffer_size=1M key_buffer_size=32M
その後は 参考サイト様 のように初期設定を行うか、当ブログ記事 のようにデータベースのインポートを行います。
http://www.phpmyadmin.net/home_page/downloads.php
から、使用するPHP・MySQLのバージョンにあわせたものを選びます。remiパッケージでインストールされるバージョンはPHP 5.4系・MySQL 5.5系なので、現時点で最新の 4.2.5のbz2圧縮版をダウンロードしました。
ファイルをサーバーに転送して、解凍ならびにディレクトリ名を変更します。phpMyAdminを狙った攻撃も多いので、気休め程度ですが名前は分かりづらくしておきます。(deathtrap は例ですので、実際の運用時は別の分かりづらい名前にすることをお勧めします)
# cd /usr/local/src # tar xvjf phpMyAdmin-4.2.5-all-languages.tar.bz2 # mv phpMyAdmin-4.2.5-all-languages deathtrap
その後、ServersMan@VPS(CentOS)に phpMyAdmin をインストールする。 様を参考に、設定ファイルをサンプルからコピーし、blowfish_secretを設定します。
# cd deathtrap # cp config.sample.inc.php config.inc.php # vi config.inc.php
として、17行目の
$cfg['blowfish_secret'] = 'a8b7c6d'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
内の a8b7c6d を、64文字までのランダムな文字列に変更します。
さらに自分の場合、自宅の固定IPからの接続のみ許可するよう、.htaccessファイルを作成します。
# vi .htaccess
内容はこんな感じ。
<Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> Options -Indexes order deny,allow allow from 許可するIPアドレス deny from all
固定IPを使っていない場合は、BASIC認証あたりを追加するといいでしょう。
ここまで終わったら、Webサーバーのある場所にディレクトリを移動します。(移動先は例です)
# cd .. # mv deathtrap /home/user/public_html
高速化のため、APCをインストールします。
# yum --enablerepo=remi,epel,rpmforge install php-pecl-apc-devel
パッケージ名 | アーキテクチャ | バージョン | レポジトリ |
php-pecl-apc | x86_64 | 3.1.15-0.4.20130912.el6.remi.5.4 | remi |
php-pecl-apc-devel | x86_64 | 3.1.15-0.4.20130912.el6.remi.5.4 | remi |
が入ります。その後設定ファイルを編集します。
# vi /etc/php.d/apc.ini
自分の場合は余裕を持たせて、apc.shm_size を128MBに設定します。
apc.shm_size=128M
管理用のスクリプトが
/usr/share/doc/php-pecl-apc-3.1.15/apc.php
にあるので、Webからアクセスできる場所にコピーします。(以下は例)
# mkdir /home/user/public_html/apc # cp /usr/share/doc/php-pecl-apc-3.1.15/apc.php /home/user/public_html/apc
同じディレクトリに、管理者機能を使うための設定ファイルを作成します。
# cd /home/user/public_html/apc # vi apc.conf.php
内容はこんな感じです。
<?php defaults('ADMIN_USERNAME','ユーザー名を入力'); defaults('ADMIN_PASSWORD','パスワードを入力'); ?>
こちらもphpMyAdmin同様、固定IPアドレスからのみアクセスするため、
# vi .htaccess
として、以下のようにアクセス制限をします。
<Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> Options -Indexes order deny,allow allow from 許可するIPアドレス deny from all
だいたいはGDで事足りることが多いですが、たまに使うこともあるので、ImageMagickもインストールしておきます。
# yum --enablerepo=remi,epel,rpmforge install php-pecl-imagick
これ一発で全て入るので便利。
パッケージ名 | アーキテクチャ | バージョン | レポジトリ |
atk | x86_64 | 1.30.0-1.el6 | base |
avahi-libs | x86_64 | 0.6.25-12.el6_5.1 | updates |
cairo | x86_64 | 1.8.8-3.1.el6 | base |
ConsoleKit | x86_64 | 0.4.1-3.el6 | base |
ConsoleKit-libs | x86_64 | 0.4.1-3.el6 | base |
cups-libs | x86_64 | 1:1.4.2-50.el6_4.5 | base |
dbus | x86_64 | 1:1.2.24-7.el6_3 | base |
eggdbus | x86_64 | 0.6-3.el6 | base |
fftw | x86_64 | 3.2.1-3.1.el6 | base |
fontconfig | x86_64 | 2.8.0-3.el6 | base |
GConf2 | x86_64 | 2.28.0-6.el6 | base |
ghostscript | x86_64 | 8.70-19.el6 | base |
ghostscript-fonts | noarch | 5.50-23.1.el6 | base |
gnutls | x86_64 | 2.8.5-14.el6_5 | updates |
gtk2 | x86_64 | 2.20.1-4.el6 | base |
hicolor-icon-theme | noarch | 0.11-1.1.el6 | base |
ilmbase | x86_64 | 1.0.1-6.1.el6 | base |
ImageMagick-last-libs | x86_64 | 6.8.9.0-1.el6.remi | remi |
jasper-libs | x86_64 | 1.900.1-15.el6_1.1 | base |
lcms2 | x86_64 | 2.3-2.el6 | epel |
libcroco | x86_64 | 0.6.2-5.el6 | base |
libfontenc | x86_64 | 1.0.5-2.el6 | base |
libgomp | x86_64 | 4.4.7-4.el6 | base |
libgsf | x86_64 | 1.14.15-5.el6 | base |
libICE | x86_64 | 1.0.6-1.el6 | base |
libIDL | x86_64 | 0.8.13-2.1.el6 | base |
librsvg2 | x86_64 | 2.26.0-6.el6_5.3 | updates |
libSM | x86_64 | 1.2.1-2.el6 | base |
libthai | x86_64 | 0.1.12-3.el6 | base |
libtiff | x86_64 | 3.9.4-10.el6_5 | updates |
libwebp | x86_64 | 0.3.1-2.el6.remi | remi |
libwmf-lite | x86_64 | 0.2.8.4-22.el6.centos | base |
libXcomposite | x86_64 | 0.4.3-4.el6 | base |
libXcursor | x86_64 | 1.1.13-6.20130524git8f677eaea.el6 | base |
libXdamage | x86_64 | 1.1.3-4.el6 | base |
libXext | x86_64 | 1.3.1-2.el6 | base |
libXfixes | x86_64 | 5.0-3.el6 | base |
libXfont | x86_64 | 1.4.5-3.el6_5 | updates |
libXft | x86_64 | 2.3.1-2.el6 | base |
libXi | x86_64 | 1.6.1-3.el6 | base |
libXinerama | x86_64 | 1.1.2-2.el6 | base |
libXrandr | x86_64 | 1.4.0-1.el6 | base |
libXrender | x86_64 | 0.9.7-2.el6 | base |
libXt | x86_64 | 1.1.3-1.el6 | base |
OpenEXR-libs | x86_64 | 1.6.1-8.1.el6 | base |
ORBit2 | x86_64 | 2.14.17-3.2.el6_3 | base |
pango | x86_64 | 1.28.1-7.el6_3 | base |
php-pecl-imagick | x86_64 | 3.1.2-3.el6.remi.5.4 | remi |
pixman | x86_64 | 0.26.2-5.1.el6_5 | updates |
polkit | x86_64 | 0.96-5.el6_4 | base |
sgml-common | noarch | 0.6.3-32.el6 | base |
urw-fonts | noarch | 2.4-10.el6 | base |
xorg-x11-font-utils | x86_64 | 1:7.2-11.el6 | base |
ここまでで一通りの設定は終わったので、サービスを再起動します。(起動してなかった場合は停止に失敗しますが、その後起動していればOK)
# service httpd restart # service mysqld restart
問題なく立ち上がり、動作に問題がなければ、ApacheとMySQLをサーバー起動時に自動起動されるように設定します。
# chkconfig httpd on # chkconfig mysqld on
Postfixはデフォルトでインストールされているため、特に追加パッケージを入れたりする必要はありません。設定内容としては、冒頭でも書いた通りサーバー内部からのメールを送るためだけに利用するので、外部中継も行わず(よってポートも開けない)、POP3・IMAPサーバーも立てません。
# vi /etc/postfix/main.cf
として、以下の辺りを変更します。(myhostnameやmydomainはご自身のドメインを適切に設定しておいてください)
smtpd_banner = $myhostname ESMTP unknown mydestination = localhost
mydestinationは、GMOクラウド VPS 以外で、逆引きやドメイン設定をある程度自由に変更できるところならあまり気にしなくても問題ないのですが、Google Apps利用ドメイン名と全く同じだったりすると、デフォルトでは自分宛ドメインのメールを全て受け取ってしまうため、localhostのみとします。
また、次の記事で書く予定ですが、FUSIONの月額無料050電話番号+Asteriskで構築するFAXサーバーのため、1通あたりのメール容量制限を緩和しておきます(こんなに大きくしなくてもいいとは思いますが)。不要な方は飛ばしてください。
message_size_limit = 25600000
その後、メール転送の設定をしておきます。
# vi /etc/aliases
として、末尾辺りに転送先を追加します。(内容は例です)
root: root@example.com FaxMaster: root
FaxMaster は例によってFAXサーバー用の設定ですので、不要な方は書かなくても大丈夫です。ちなみに、このアドレス宛にFAX受信通知が届きます。
設定が終わったら、
# service postfix restart
としてサービスを再起動しておきます。(reloadでもいいとは思いますが、念のために)
ログ監視ツール logwatch のインストールと設定 ~ CentOS6 様サイトを参考に、
# yum --enablerepo=remi,epel,rpmforge install logwatch
として、パッケージをインストールします。
パッケージ名 | アーキテクチャ | バージョン | レポジトリ |
logwatch | noarch | 7.3.6-52.el6 | base |
mailx | x86_64 | 12.4-7.el6 | base |
perl-Date-Manip | noarch | 6.24-1.el6 | base |
perl-YAML-Syck | x86_64 | 1.07-4.el6 | base |
こんな感じでパッケージがインストールされたら、
# vi /etc/logwatch/conf/logwatch.conf
として、以下の2行を末尾に追加します。
Archives = Yes Detail = High
これで圧縮されたログファイルも対象とし、より詳細な情報が記載されたメールが届くようになります。
設定を確認するため、
# logwatch --print > /root/testlogwatch.log
などとしてログを出力して、
# less /root/testlogwatch.log
で内容を確認し、ちゃんと出力されているか確認してください。
かなり長い記事となりましたが、最後までお読みいただきありがとうございました。読むのも嫌になりそうですが、メモからこれだけ書き起こすのも嫌になりそうでしたw (Asterisk編はメモ段階でこの記事に近いぐらい長いので、書き起こすのも読むのも大変になりそうな気が)
内容としては、一部例を交えてたり設定ファイルの内容をはしょった部分もあるとはいえ、ほぼこんな設定を行っています。細かい所で記述抜けがあったりなどするかもしれませんが、動かないなどの問題があればコメント等からお知らせいただければ幸いです。
スポンサードリンク
当サイトのコメント欄は承認制となっております。また、日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
コメントを残す