サーバー設定 · 4 min read · Oct 02, 2025
完璧なサーバー - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)
完璧なサーバー - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)
バージョン 1.0
著者: Till Brehm, Srijan Kishore, Falko Timme
howtoforgeをTwitterでフォローする
このチュートリアルでは、ISPConfig 3のインストールのためにCentOS 7 x86_64サーバーを準備する方法と、それをインストールする方法を示します。ISPConfig 3は、nginxウェブサーバー、Postfixメールサーバー、MySQL、BINDネームサーバー、PureFTPd、SpamAssassin、ClamAV、Mailmanなど、さまざまなサービスをウェブブラウザを通じて構成できるウェブホスティングコントロールパネルです。バージョン3.0.4以降、ISPConfigはApacheに加えてnginxウェブサーバーの完全サポートを提供します。このチュートリアルでは、Apacheではなくnginxを使用するサーバーのセットアップをカバーします。ISPConfig 3のApache完璧サーバーチュートリアルはここにあります。
ISPConfig 3マニュアル
ISPConfig 3の使い方を学ぶために、ISPConfig 3マニュアルをダウンロードすることを強くお勧めします。
約300ページにわたり、ISPConfigの概念(管理者、リセラー、クライアント)を説明し、ISPConfig 3のインストールと更新方法を説明し、ISPConfig内のすべてのフォームとフォームフィールドのリファレンスを有効な入力の例と共に含み、ISPConfig 3での最も一般的なタスクのチュートリアルを提供します。また、サーバーをより安全にする方法を説明し、最後にトラブルシューティングセクションがあります。
1. 要件
このようなシステムをインストールするには、以下が必要です。
- あなたの近くのミラーからCentOS 7.0のDVDを2枚ダウンロードします(ミラーのリストはここにあります: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso)。
- 高速インターネット接続
2. 前提条件
このチュートリアルでは、ホスト名server1.example.com、IPアドレス192.168.0.100、ゲートウェイ192.168.0.1を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換えてください。このチュートリアルリンクから最小限のCentOS 7インストールを行ってから進んでください。
3. nanoエディタをインストールし、/etc/hostsを調整する
yum -y install nano wget
次に、/etc/hostsを編集します。以下のようにしてください:
nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100 server1.example.com server1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6そして、ホスト名をserver1.example.comに設定します: echo ‘server1.example.com’ > /etc/hostname
4. ファイアウォールを設定し、基本的なネットワークソフトウェアをインストールする
(基本システムインストールの最後にファイアウォールを無効にした場合は、この章をスキップできます。)
このチュートリアルの最後にISPConfigをインストールしたいので、デフォルトのCentOSファイアウォールを無効にします。もちろん、必要に応じてそれを有効にして設定することもできます(ただし、その場合は、後で他のファイアウォールを使用しない方が良いでしょう。おそらくCentOSファイアウォールと干渉するためです)。
実行します。 systemctl stop firewalld.service
systemctl disable firewalld.service
[root@server1 ~]# systemctl disable firewalld.service
rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’
rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’
[root@server1 ~]#
ファイアウォールを無効にします。
ファイアウォールが本当に無効になっているか確認するには、次のコマンドを実行できます。
firewall-cmd –state
その後の出力は次のようになります:
[root@server1 ~]# firewall-cmd –state
not running
[root@server1 ~]#
yum -y install net-tools NetworkManager-tui
5. SELinuxを無効にする
SELinuxはCentOSのセキュリティ拡張で、拡張セキュリティを提供するはずです。私の意見では、安全なシステムを構成するためにそれは必要ありませんし、通常は利点よりも多くの問題を引き起こします(あるサービスが期待通りに動作しなかったために1週間トラブルシューティングを行った後、すべてが正常で、SELinuxが問題を引き起こしていたことがわかることを考えてみてください)。したがって、私はそれを無効にします(後でISPConfigをインストールする場合は、これが必須です)。
/etc/selinux/configを編集し、SELINUX=disabledに設定します: nano /etc/selinux/config
# このファイルはシステム上のSELinuxの状態を制御します。
# SELINUX=は次の3つの値のいずれかを取ることができます:
# enforcing - SELinuxセキュリティポリシーが強制されます。
# permissive - SELinuxは強制する代わりに警告を表示します。
# disabled - SELinuxポリシーはロードされません。
SELINUX=disabled
# SELINUXTYPE=は次の2つの値のいずれかを取ることができます:
# targeted - 対象プロセスが保護されます。
# mls - マルチレベルセキュリティ保護。
SELINUXTYPE=targeted
その後、システムを再起動する必要があります:
reboot
6. 追加のリポジトリを有効にし、いくつかのソフトウェアをインストールする
CentOSシステムでEPELリポジトリを有効にします。チュートリアルの過程でインストールする多くのパッケージは、公式のCentOS 7.0リポジトリにはありません。
yum -y install epel-release
yum -y install yum-priorities
/etc/yum.repos.d/epel.repoを編集します… nano /etc/yum.repos.d/epel.repo
… [epel]セクションにpriority=10の行を追加します:
[epel]
name=Enterprise Linux 7のための追加パッケージ - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...] 次に、システム上の既存のパッケージを更新します: yum update
次に、後で必要なソフトウェアパッケージをインストールします: yum -y groupinstall ‘Development Tools’
7. クォータ
(私が選んだパーティショニングスキームと異なる場合は、この章を調整して、必要なパーティションにクォータが適用されるようにしてください。)
クォータをインストールするには、次のコマンドを実行します: yum -y install quota
次に、ウェブサイト(/var/www)とメールデータ(var/vmail)が保存されているファイルシステムでクォータがすでに有効になっているかどうかを確認します。この例のセットアップでは、1つの大きなルートパーティションがあるため、’ / ‘を検索します:
mount | grep ‘ / ‘
[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#
別の/varパーティションがある場合は、次のようにします: mount | grep ‘ /var ‘
行に「 noquota 」という単語が含まれている場合は、次の手順を実行してクォータを有効にします。
/(ルート)パーティションでのクォータの有効化
通常、/etc/fstabファイルでクォータを有効にしますが、ファイルシステムがルートファイルシステム「/」の場合、クォータはLinuxカーネルのブートパラメータによって有効にする必要があります。
grub設定ファイルを編集します: nano /etc/default/grub
GRUB_CMDLINE_LINUXで始まる行を検索し、コマンドラインパラメータにrootflags=uquota,gquotaを追加して、結果の行が次のようになるようにします:
[...]
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"
[...] 次に、次のコマンドを実行して変更を適用します。
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg
サーバーを再起動します。
reboot
クォータが有効になっているかどうかを確認します: mount | grep ‘ / ‘
[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#
クォータがアクティブな場合、マウントオプションリストに「 usrquota,grpquota 」が表示されます。
別の/varパーティションでのクォータの有効化
別の/varパーティションがある場合は、/etc/fstabを編集し、/パーティション(/dev/mapper/centos-var)に、uquota,gquotaを追加します: nano /etc/fstab
#
# /etc/fstab
# anacondaによって2014年9月21日16:33:45に作成されました
#
# 参照によってアクセス可能なファイルシステムは、'/dev/disk'の下に維持されます
# fstab(5)、findfs(8)、mount(8)、および/またはblkid(8)のマニュアルページを参照してください
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0次に、次のコマンドを実行します: mount -o remount /var
quotacheck -avugm
quotaon -avug
クォータを有効にします。
8. システムクロックを同期する
システムクロックをインターネット上のNTP( n etwork t ime p rotocol)サーバーと同期することは良いアイデアです。単に次のコマンドを実行します: yum -y install ntp
これで、システム時間は常に同期されます。
9. MariaDBをインストールする
MariaDBサーバーとクライアントを次のようにインストールします: yum -y install mariadb mariadb-server
MariaDBサービスがブート時に実行されるようにし、サービスを開始します: systemctl enable mariadb.service
systemctl start mariadb.service
MySQL rootアカウントのパスワードを設定します:
mysql_secure_installation
[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
注意: このスクリプトのすべての部分を実行することは、すべてのMariaDBサーバーで推奨されます。
各ステップを注意深く読んでください!
MariaDBにログインしてセキュリティを確保するためには、rootユーザーの現在のパスワードが必要です。
MariaDBをインストールしたばかりで、まだrootパスワードを設定していない場合、パスワードは空白のままですので、ここでは単にEnterを押してください。 <–ENTER
Enter current password for root (enter for none): <–ENTER
OK, successfully used password, moving on…
rootパスワードを設定することで、適切な認証なしに誰もMariaDBのrootユーザーにログインできないようにします。
Set root password? [Y/n] <–ENTER
New password: <–yourmariadbpassword
Re-enter new password: <–yourmariadbpassword
Password updated successfully!
Reloading privilege tables..
… Success!
デフォルトでは、MariaDBインストールには匿名ユーザーがあり、誰でもユーザーアカウントを作成せずにMariaDBにログインできます。
これはテスト用にのみ意図されており、インストールを少しスムーズにするためのものです。
本番環境に移行する前に、これらを削除するべきです。
Remove anonymous users? [Y/n] <–ENTER
… Success!
通常、rootは「localhost」からのみ接続を許可されるべきです。
これにより、誰かがネットワークからrootパスワードを推測できないようにします。
Disallow root login remotely? [Y/n] <–ENTER
… Success!
デフォルトでは、MariaDBには誰でもアクセスできる「test」という名前のデータベースが付属しています。
これもテスト用にのみ意図されており、本番環境に移行する前に削除するべきです。
Remove test database and access to it? [Y/n] <–ENTER
- Dropping test database…
… Success! - Removing privileges on test database…
… Success!
特権テーブルをリロードすることで、これまでに行ったすべての変更が即座に有効になります。
Reload privilege tables now? [Y/n] <–ENTER
… Success!
Cleaning up…
すべて完了しました!
上記のすべてのステップを完了した場合、あなたのMariaDBインストールは今や安全であるはずです。
MariaDBをご利用いただきありがとうございます!
[root@server1 ~]#
10. Dovecotをインストールする
Dovecotは次のようにインストールできます: yum -y install dovecot dovecot-pigeonhole dovecot-mysql
空のdovecot-sql.confファイルを作成し、シンボリックリンクを作成します: touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
次に、システム起動リンクを作成し、Dovecotを起動します: systemctl enable dovecot.service
systemctl start dovecot.service
11. Postfixをインストールする
Postfixは次のようにインストールできます: yum -y install postfix
次に、Sendmailをオフにし、Postfixを起動します: systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service
12. Getmailをインストールする
Getmailは次のようにインストールできます: yum -y install getmail
13. Amavisd-new、SpamAssassin、およびClamAVをインストールする
amavisd-new、spamassassin、clamavをインストールするには、次のコマンドを実行します: yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql
freshclam設定ファイル/etc/freshclam.confを編集します
nano /etc/freshclam.conf
「Example」という行をコメントアウトします。
[….]
[….]
次に、freshclam、amavisd、およびclamd.amavisdを起動します:
sa-update
freshclam
systemctl enable amavisd.service
14. Nginx、PHP5(PHP-FPM)、およびFcgiwrapをインストールする
NginxはCentOS 7.0用のパッケージとして利用可能で(EPELから)、次のようにインストールできます: yum -y install nginx
もしApache2がすでにシステムにインストールされている場合は、今すぐ停止します… systemctl stop httpd.service
… そしてApacheのシステム起動リンクを削除します: systemctl disable httpd.service
次に、nginxのシステム起動リンクを作成し、起動します: systemctl enable nginx.service
systemctl start nginx.service
(Apache2とnginxの両方がインストールされている場合、ISPConfig 3インストーラーはどちらを使用するかを尋ねます。この場合はnginxと答えてください。これらのうちの1つだけがインストールされている場合、ISPConfigは必要な設定を自動的に行います。)
PHP5をnginxで動作させるために、PHP-FPMを使用します(PHP-FPM(FastCGIプロセスマネージャー)は、特に忙しいサイトに便利な追加機能を持つPHPの代替FastCGI実装です)。次のようにphp-fpmをphp-cliおよびMySQLを使用するために必要なphp-mysqlなどのいくつかのPHP5モジュールと共にインストールします: yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy
次に、/etc/php.iniを開きます… nano /etc/php.ini
… そしてエラーレポートを変更します(通知が表示されないように):
[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]また、cgi.fix_pathinfo=0に設定します: nano /etc/php.ini
[...]
; cgi.fix_pathinfoはCGIのための*実際の* PATH_INFO/PATH_TRANSLATEDサポートを提供します。PHPの以前の動作は、PATH_TRANSLATEDをSCRIPT_FILENAMEに設定し、PATH_INFOが何であるかを理解しませんでした。PATH_INFOの詳細については、cgi仕様を参照してください。これを1に設定すると、PHP CGIはそのパスを仕様に従って修正します。ゼロに設定すると、PHPは以前のように動作します。デフォルトは1です。スクリプトを修正してSCRIPT_FILENAMEを使用する必要があります。
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...](なぜこれを行うべきかについては、http://wiki.nginx.org/Pitfallsをお読みください。)
さらに、次のようなエラーを回避するために:
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): システムのタイムゾーン設定に依存するのは安全ではありません。date.timezone設定またはdate_default_timezone_set()関数を使用する必要があります。これらの方法のいずれかを使用してもこの警告が表示される場合、タイムゾーン識別子を誤って入力した可能性があります。/usr/share/nginx/html/info.phpの2行目で、’Europe/Berlin’を’CEST/2.0/DST’の代わりに選択しました。
… /var/log/php-fpm/www-error.logでPHPスクリプトをブラウザで呼び出すときに、/etc/php.iniでdate.timezoneを設定する必要があります:
[...]
[Date]
; date関数で使用されるデフォルトのタイムゾーンを定義します
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]次に、php-fpmのシステム起動リンクを作成し、起動します: systemctl enable php-fpm
systemctl restart php-fpm
PHP-FPMはデーモンプログラム(initスクリプトは/etc/init.d/php-fpm)で、ポート9000でFastCGIサーバーを実行します。
nginxでCGIサポートを得るために、Fcgiwrapをインストールします。
FcgiwrapはCGIラッパーで、複雑なCGIスクリプトにも対応し、各vhostが独自のcgi-binディレクトリを使用できるため、共有ホスティング環境で使用できます。
CentOS 7.0用のfcgiwrapパッケージはないため、自分でビルドする必要があります。まず、いくつかの前提条件をインストールします: yum -y install fcgi-devel
次に、次のようにfcgiwrapをビルドします: cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install
これにより、fcgiwrapが/usr/local/sbin/fcgiwrapにインストールされます。
次に、fcgiwrapをデーモンとして実行できるようにするspawn-fcgiパッケージをインストールします: yum -y install spawn-fcgi
/etc/sysconfig/spawn-fcgiを開きます… nano /etc/sysconfig/spawn-fcgi
… そしてファイルを次のように修正します:
# "spawn-fcgi"サービスが機能する前に、いくつかの作業オプションを設定する必要があります。
# SOCKETがファイルを指している場合、このファイルはinitスクリプトによってクリーンアップされます。
#
# すべての可能なオプションについては、spawn-fcgi(1)を参照してください。
#
# 例:
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"次に、nginxユーザーをapacheグループに追加します: usermod -a -G apache nginx
spawn-fcgiのシステム起動リンクを作成します…
chkconfig spawn-fcgi on
… 次のように起動します: systemctl start spawn-fcgi
これで、/var/run/fcgiwrap.socketにfcgiwrapソケットが見つかるはずで、所有者はユーザーとグループapacheです(Mailmanなどの一部のスクリプトは、ユーザー/グループapacheによって実行されることを期待しているため、nginxユーザー/グループとしてspawn-fcgiを実行するのではなく、nginxをapacheグループに追加します)。
14.1 追加のPHPバージョン
ISPConfig 3.0.5以降、1つのサーバーで複数のPHPバージョンを持つことが可能になりました(ISPConfigを通じて選択可能)これらはFastCGIおよびPHP-FPMを通じて実行できます。CentOSでの追加のPHPバージョンをビルドする手順は、次のチュートリアルに記載されています:ISPConfig 3(CentOS 6.3)での複数のPHPバージョンの使用方法
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。