サーバー設定 · 8 min read · Nov 01, 2025

完璧なサーバー – CentOS 7.1 と Apache2、Postfix、Dovecot、Pure-FTPD、BIND および ISPConfig 3 - ページ 2

9 Dovecot のインストール

Dovecot は以下のようにインストールできます:

yum -y install dovecot dovecot-mysql dovecot-pigeonhole

空の dovecot-sql.conf ファイルを作成し、シンボリックリンクを作成します:

touch /etc/dovecot/dovecot-sql.conf  
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf

次に、システム起動リンクを作成し、Dovecot を起動します:

systemctl enable dovecot  
systemctl start dovecot

10 Postfix のインストール

Postfix は以下のようにインストールできます:

yum -y install postfix

次に、Sendmail をオフにし、Postfix と Mariadb (MySQL) を起動します:

systemctl enable mariadb.service  
systemctl start mariadb.service
systemctl stop sendmail.service  
systemctl disable sendmail.service  
systemctl enable postfix.service  
systemctl restart postfix.service

Sendmail がサーバーにインストールされている場合に起動しないようにするために、sendmail を無効にします。したがって、エラーメッセージ “Failed to issue method call: Unit sendmail.service not loaded.” は無視できます。

11 Getmail のインストール

Getmail は以下のようにインストールできます:

yum -y install getmail

12 MySQL パスワードの設定と phpMyAdmin の設定

MySQL の root アカウントのパスワードを設定します:

mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation  
  
  NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB  
  SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
MariaDB を保護するためにログインするには、現在の  
root ユーザーのパスワードが必要です。MariaDB をインストールしたばかりで、  
まだ root パスワードを設定していない場合、パスワードは空白になりますので、  
ここで Enter を押してください。
Enter current password for root (enter for none):  
OK, successfully used password, moving on...
root パスワードを設定することで、適切な認証なしに誰も MariaDB の  
root ユーザーにログインできないようにします。  
  
root パスワードを設定しますか? [Y/n] <-- ENTER  
新しいパスワード: <-- yourrootsqlpassword  
新しいパスワードを再入力: <-- yourrootsqlpassword  
パスワードが正常に更新されました!  
特権テーブルを再読み込み中..  
 ... 成功!  
  
デフォルトでは、MariaDB のインストールには匿名ユーザーがあり、誰でも  
ユーザーアカウントを作成することなく MariaDB にログインできます。これはテスト用にのみ  
意図されており、インストールを少しスムーズにするためのものです。  
本番環境に移行する前に、これらを削除する必要があります。  
  
匿名ユーザーを削除しますか? [Y/n] <-- ENTER  
 ... 成功!  
  
通常、root は 'localhost' からのみ接続を許可されるべきです。  
これにより、誰かがネットワークから root パスワードを推測できないようにします。  
  
root のリモートログインを禁止しますか? [Y/n] <-- ENTER  
 ... 成功!  
  
デフォルトでは、MariaDB には誰でもアクセスできる 'test' という名前のデータベースがあります。  
これもテスト用にのみ意図されており、本番環境に移行する前に削除する必要があります。  
  
テストデータベースとそのアクセスを削除しますか? [Y/n] <-- ENTER  
 - テストデータベースを削除中...  
 ... 成功!  
 - テストデータベースの特権を削除中...  
 ... 成功!  
  
特権テーブルを再読み込みすることで、これまでに行ったすべての変更が  
即座に反映されることを保証します。  
  
特権テーブルを今すぐ再読み込みしますか? [Y/n] <-- ENTER  
 ... 成功!  
  
クリーンアップ中...  
  
すべて完了!上記のすべての手順を完了した場合、MariaDB の  
インストールは安全になっているはずです。  
  
MariaDB をご利用いただきありがとうございます!  
  
[root@server1 tmp]#

次に、phpMyAdmin を設定します。Apache の設定を変更して、phpMyAdmin が localhost からだけでなく接続を許可するようにします(”Require ip” の 2 行をコメントアウトし、新しい行 “Require all granted” を スタンスに追加します):

nano /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin


   
     # Apache 2.4
     
     #  Require ip 127.0.0.1
     #  Require ip ::1  
        Require all granted
     
   
   
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   

            

次に、phpMyAdmin の認証を cookie から http に変更します:

nano /etc/phpMyAdmin/config.inc.php
[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]

次に、Apache のシステム起動リンクを作成し、起動します:

systemctl enable  httpd.service  
systemctl restart  httpd.service

これで、ブラウザを http://server1.example.com/phpmyadmin/ または http://192.168.0.100/phpmyadmin/ に向けて、ユーザー名 root と新しい root MySQL パスワードでログインできます。

13 Amavisd-new、SpamAssassin および ClamAV のインストール

amavisd-new、spamassassin および clamav をインストールするには、次のコマンドを実行します:

yum -y install amavisd-new spamassassin clamav clamav-update unzip bzip2 perl-DBD-mysql

freshclam 設定ファイル /etc/freshclam.conf を編集します

nano /etc/freshclam.conf

“Example” の行をコメントアウトします

[....]  
# Example  
[....]

次に、freshclam、amavisd、および clamd.amavisd を起動します:

sa-update  
freshclam   
systemctl enable amavisd.service

14 mod_php、mod_fcgi/PHP5、PHP-FPM および suPHP を使用した Apache2 のインストール

ISPConfig 3 では、mod_php、mod_fcgi/PHP5、cgi/PHP5、および suPHP をウェブサイトごとに使用できます。

mod_php5、mod_fcgid、および PHP5 を使用して Apache2 を以下のようにインストールできます:

yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel php-fpm

次に、/etc/php.ini を開きます…

nano /etc/php.ini

… そしてエラーレポートを変更します(通知が表示されないように)、タイムゾーンを設定し、cgi.fix_pathinfo=1 のコメントを外します:

[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PAppp.tldTH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1  
[...]  
date.timezone = 'Europe/Berlin'
[...]

次に、suPHP をインストールします(リポジトリに mod_suphp パッケージがありますが、残念ながら ISPConfig とは互換性がないため、suPHP を自分でビルドする必要があります):

cd /usr/local/src  
wget http://suphp.org/download/suphp-0.7.2.tar.gz  
tar zxvf suphp-0.7.2.tar.gz

CentOS 7.1 は apache-2.4 を使用しているため、コンパイルする前に suphp にパッチを適用する必要があります。パッチは次のように適用されます:

wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch  
patch -Np1 -d suphp-0.7.2 < suphp.patch  
cd suphp-0.7.2  
autoreconf -if

[root@server1 suphp-0.7.2]# autoreconf -if

libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, config'. libtoolize: copying fileconfig/ltmain.sh’

libtoolize: Consider adding AC_CONFIG_MACRO_DIR([m4])' to configure.ac and libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree. libtoolize: Consider adding-I m4’ to ACLOCAL_AMFLAGS in Makefile.am.

configure.ac:9: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see:

configure.ac:9: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation

configure.ac:24: installing ‘config/config.guess’

configure.ac:24: installing ‘config/config.sub’

configure.ac:9: installing ‘config/install-sh’

configure.ac:9: installing ‘config/missing’

src/Makefile.am: installing ‘config/depcomp’

[root@server1 suphp-0.7.2]#

パッチが適用されます。これで新しいソースを次のようにコンパイルできます:

./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid-mode=owner --with-logfile=/var/log/httpd/suphp_log  
make  
make install

次に、suPHP モジュールを Apache 設定に追加します…

nano /etc/httpd/conf.d/suphp.conf
LoadModule suphp_module modules/mod_suphp.so

… そして /etc/suphp.conf ファイルを次のように作成します:

nano /etc/suphp.conf
[global]
;Path to logfile
logfile=/var/log/httpd/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=apache
;Path all scripts have to be in
docroot=/
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=100
; Minimum GID
min_gid=100

[handlers]
;Handler for php-scripts
x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"

/etc/httpd/conf.d/php.conf ファイルを編集して、phpmyadmin、roundcube および /usr/share の他のシステムパッケージに対してのみ PHP パースを有効にし、/var/www のウェブサイトには ISPConfig が各ウェブサイトに対して個別に PHP を有効にするため、次のように変更します。

nano /etc/httpd/conf.d/php.conf

次の行を変更します:

  
SetHandler application/x-httpd-php  

を:

  
  
SetHandler application/x-httpd-php  
  

PHP ハンドラーが Directory ディレクティブで囲まれるようにします。

httpd と PHP-FPM を起動時に開始するように有効にし、PHP-FPM サービスを起動します。

systemctl start php-fpm.service  
systemctl enable php-fpm.service  
systemctl enable httpd.service

最後に Apache を再起動します:

systemctl restart httpd.service

15 mod_python のインストール

apache モジュール mod_python は RPM パッケージとしては利用できないため、ソースからコンパイルします。最初のステップは、python 開発ファイルをインストールし、現在の mod_python バージョンを tar.gz ファイルとしてダウンロードすることです。

yum -y install python-devel
cd /usr/local/src/  
wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz  
tar xfz mod_python-3.5.0.tgz  
cd mod_python-3.5.0

次に、モジュールを構成してコンパイルします。

./configure  
make  
make install

そして、apache でモジュールを有効にします。

echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf  
systemctl restart httpd.service

16 PureFTPd のインストール

PureFTPd は以下のコマンドでインストールできます:

yum -y install pure-ftpd

次に、システム起動リンクを作成し、PureFTPd を起動します:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

次に、PureFTPd を設定して FTP および TLS セッションを許可します。FTP は非常に安全でないプロトコルであり、すべてのパスワードとすべてのデータが平文で転送されます。TLS を使用することで、通信全体を暗号化でき、FTP をはるかに安全にします。

TLS には OpenSSL が必要です。OpenSSL をインストールするには、単に次のように実行します:

yum install openssl

/etc/pure-ftpd/pure-ftpd.conf を開きます…

nano /etc/pure-ftpd/pure-ftpd.conf

FTP および TLS セッションを許可する場合は、TLS を 1 に設定します:

[...]
# このオプションは 3 つの値を受け入れます :
# 0 : SSL/TLS 暗号化レイヤーを無効にします (デフォルト)。
# 1 : 従来のセッションと暗号化されたセッションの両方を受け入れます。
# 2 : SSL/TLS セキュリティメカニズムを使用しない接続を拒否します。
#     匿名セッションを含む。
# このコメントを盲目的に外さないでください。次のことを確認してください:
# 1) サーバーが SSL/TLS サポートでコンパイルされていること (--with-tls)、
# 2) 有効な証明書が存在すること、
# 3) 互換性のあるクライアントのみがログインします。

TLS                      1
[...]

TLS を使用するには、SSL 証明書を作成する必要があります。私はそれを /etc/ssl/private/ に作成するので、最初にそのディレクトリを作成します:

mkdir -p /etc/ssl/private/

その後、次のように SSL 証明書を生成できます:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

国名 (2 文字コード) [XX]: <– 国名を入力します (例: “DE”).
州または県名 (フルネーム) []: <– 州または県名を入力します。
市名 (例: デフォルトの市) [Default City]: <– 市名を入力します。
組織名 (例: デフォルトの会社名) [Default Company Ltd]: <– 組織名を入力します (例: 会社名)。
組織単位名 (例: 部門名) []: <– 組織単位名を入力します (例: “IT 部門“).
共通名 (例: 名前またはサーバーのホスト名) []: <– システムの完全修飾ドメイン名を入力します (例: “server1.example.com”).
メールアドレス []: <– メールアドレスを入力します。

SSL 証明書の権限を変更します:

chmod 600 /etc/ssl/private/pure-ftpd.pem

最後に PureFTPd を再起動します:

systemctl restart pure-ftpd.service

これで完了です。FTP クライアントを使用して接続を試みることができますが、FTP クライアントを TLS を使用するように設定する必要があります。

17 BIND のインストール

BIND は以下のようにインストールできます:

yum -y install bind bind-utils

既存の /etc/named.conf ファイルのバックアップを作成し、新しいファイルを次のように作成します:

cp /etc/named.conf /etc/named.conf_bak  
cat /dev/null > /etc/named.conf  
nano /etc/named.conf
// named.conf\
//\
// Red Hat bind パッケージによって提供され、ISC BIND named(8) DNS\
// サーバーをキャッシング専用の名前サーバーとして構成します (localhost DNS リゾルバーとしてのみ)。\
//\
// 例の named 構成ファイルについては /usr/share/doc/bind*/sample/ を参照してください。\
options {\
        listen-on port 53 { any; };\
        listen-on-v6 port 53 { any; };\
        directory       "/var/named";\
        dump-file       "/var/named/data/cache_dump.db";\
        statistics-file "/var/named/data/named_stats.txt";\
        memstatistics-file "/var/named/data/named_mem_stats.txt";\
        allow-query     { any; };\
                allow-recursion {"none";};\
        recursion no;\
};\
logging {\
        channel default_debug {\
                file "data/named.run";\
                severity dynamic;\
        };\
};\
zone "." IN {\
        type hint;\
        file "named.ca";\
};\
include "/etc/named.conf.local";\

/etc/named.conf の最後に含まれる /etc/named.conf.local ファイルを作成します (/etc/named.conf.local は、ISPConfig で DNS ゾーンを作成するときに後で ISPConfig によって埋められます):

touch /etc/named.conf.local

次に、起動リンクを作成し、BIND を起動します:

systemctl enable named.service  
systemctl start named.service

18 Webalizer と AWStats のインストール

Webalizer と AWStats は以下のようにインストールできます:

yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder

19 Jailkit のインストール

Jailkit は SSH ユーザーと cronjob を chroot するために使用されます。以下のようにインストールできます (重要: Jailkit は ISPConfig より前にインストールする必要があります - 後からインストールすることはできません!):

cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz  
tar xvfz jailkit-2.17.tar.gz  
cd jailkit-2.17  
./configure  
make  
make install  
cd ..  
rm -rf jailkit-2.17*

20 fail2ban のインストール

これはオプションですが推奨されます。なぜなら、ISPConfig モニターがログを表示しようとするからです。

yum -y install iptables-services fail2ban fail2ban-systemd  
systemctl mask firewalld.service  
systemctl enable iptables.service  
systemctl enable ip6tables.service  
systemctl stop firewalld.service  
systemctl start iptables.service  
systemctl start ip6tables.service

次に、/etc/fail2ban/jail.local ファイルを作成し、ssh、email および ftp サービスの監視を有効にします。

nano /etc/fail2ban/jail.local

jail.local ファイルに次の内容を追加します:

[sshd]  
enabled = true  
action = iptables[name=sshd, port=ssh, protocol=tcp]  
  
[pure-ftpd]  
enabled = true  
action = iptables[name=FTP, port=ftp, protocol=tcp]  
maxretry = 3  
  
[dovecot]  
enabled = true  
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]  
maxretry = 5  
  
[postfix-sasl]  
enabled = true  
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp]  
maxretry = 3

次に、fail2ban のシステム起動リンクを作成し、起動します:

systemctl enable fail2ban.service  
systemctl start fail2ban.service

21 rkhunter のインストール

rkhunter は以下のようにインストールできます:

yum -y install rkhunter

22 Mailman のインストール

サーバーで Mailman を使用してメーリングリストを管理したい場合は、今すぐ mailman をインストールします。Mailman は ISPConfig によってサポートされているため、後で ISPConfig を通じて新しいメーリングリストを作成できます。

yum -y install mailman

Mailman を起動する前に、最初のメーリングリストである mailman を作成する必要があります:

touch /var/lib/mailman/data/aliases  
postmap /var/lib/mailman/data/aliases  
/usr/lib/mailman/bin/newlist mailman

[root@server1 tmp]# /usr/lib/mailman/bin/newlist mailman
メーリングリストを運営する人のメールアドレスを入力してください: <– 管理者のメールアドレス、例: [email protected]
初期の mailman パスワード: <– メーリングリストの管理者パスワード
メーリングリストを作成するには、次の行を /etc/aliases (または同等の) ファイルに追加し、newaliases プログラムを実行する必要があります:

mailman メーリングリスト

mailman: “|/usr/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/usr/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/usr/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/usr/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/usr/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/usr/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/usr/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/usr/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/usr/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/usr/lib/mailman/mail/mailman unsubscribe mailman”

mailman の所有者に通知するには Enter を押してください… <– ENTER

[root@server1 tmp]#

その後、/etc/aliases を開きます…

vi /etc/aliases

… そして次の行を追加します:

[...]
mailman:              "|/usr/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/usr/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/usr/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/usr/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/usr/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/usr/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/usr/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/usr/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/usr/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/usr/lib/mailman/mail/mailman unsubscribe mailman"

その後、次のコマンドを実行します:

newaliases

その後、Postfix を再起動します:

systemctl restart postfix.service

次に、Mailman の Apache 設定ファイル /etc/httpd/conf.d/mailman.conf を開きます…

nano /etc/httpd/conf.d/mailman.conf

… そして次の行を追加します ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/。Alias /pipermail/ /var/lib/mailman/archives/public/ のコメントを外し、Alias /pipermail /var/lib/mailman/archives/public/ の行を追加します:

#
#  httpd 設定設定 Mailman と一緒に使用するための設定。
#
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/

    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all


#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/

    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddDefaultCharset Off


# 次の行のコメントを外して、/mailman へのクエリを
# listinfo ページにリダイレクトします (推奨)。

# RedirectMatch ^/mailman[/]*$ /mailman/listinfo

Apache を再起動します:

systemctl restart httpd.service

Mailman のシステム起動リンクを作成し、起動します:

systemctl enable mailman.service  
systemctl start mailman.service

ISPConfig 3 をインストールした後、次のようにして Mailman にアクセスできます:

すべての Apache vhosts に対して /cgi-bin/mailman のエイリアスを使用できます(Mailman にアクセスしたいすべての vhosts では suExec と CGI を無効にする必要があります!)。つまり、リストの Mailman 管理インターフェースには http:///cgi-bin/mailman/admin/ でアクセスでき、メーリングリストのユーザー用のウェブページは http:///cgi-bin/mailman/listinfo/ で見つけることができます。

http:///pipermail/ ではメーリングリストのアーカイブを見つけることができます。

Share: X/Twitter LinkedIn

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

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