サーバー設定 · 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. 要件

このようなシステムをインストールするには、以下が必要です。

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バージョンの使用方法

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。