完美的服务器 - CentOS 7 x86_64(nginx,Dovecot,ISPConfig 3)

完美的服务器 - CentOS 7 x86_64(nginx,Dovecot,ISPConfig 3) 本教程将介绍如何准备CentOS 7 x86_64服务器进行安装。

完美的服务器 - CentOS 7 x86_64(nginx,Dovecot,ISPConfig 3)

版本1.0
作者:Till Brehm,Srijan Kishore和Falko Timme
在Twitter上关注howtoing

本教程将介绍如何准备安装ISPConfig 3的CentOS 7 x86_64服务器,以及如何在其上安装ISPConfig 3。 ISPConfig 3是一个Web主机控制面板,允许您通过Web浏览器配置以下服务:nginx Web服务器,Postfix邮件服务器,MySQL,BINDNameservers,PureFTPd,SpamAssassin,ClamAV,Mailman等等。 自3.0.4版以来,除了Apache之外,ISPConfig还全面支持nginx Web服务器; 本教程介绍了使用nginx而不是Apache的服务器的设置。 这里提供了ISPConfig 3 apache完美的服务器教程。

要求

要安装这样的系统,您将需要以下内容

2.初步说明

在本教程中,我使用hostname 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的安全扩展,应该提供扩展的安全性。 在我看来,你不需要配置一个安全的系统,它通常会导致更多的问题,而不是优势(考虑到你做了一周的故障排除后,因为一些服务不能按预期工作,然后你发现一切都OK,只有SELinux造成问题)。 因此我禁用它(如果你想稍后安装ISPConfig,这是必须的)。

编辑/ etc / selinux / config并设置SELINUX = disabled

nano /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
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

...并将行优先级= 10添加到[epel]部分:

[epel]
name=Extra Packages for 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)和maildir数据(var / vmail)存储的文件系统启用了配额。 在这个例子中,我有一个大的根分区,所以我搜索'/':

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   并添加   ,uquota,gquota   到了   /   分区( / dev / mapper / centos-var ):

nano /etc/fstab


#
# /etc/fstab
# Created by anaconda on Sun Sep 21 16:33:45 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/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进行同步是一个好主意   t ime   协议)服务器。 只需运行

yum -y install ntp

您的系统时间将始终保持同步。

9安装MariaDB

我们将安装MariaDB服务器和客户端,如下所示:

yum -y install mariadb mariadb-server

我们希望Mariadb服务在启动后运行,并启动服务:

systemctl enable mariadb.service
systemctl start mariadb.service

设置MySQL根帐户的密码:

mysql_secure_installation

[root @ server1〜]#mysql_secure_installation
/ usr / bin / mysql_secure_installation:行379:find_mysql_client:命令未找到

注意:运行本脚本的所有部分都是为所有MariaDB推荐的
服务器生产使用! 请仔细阅读每一步!

为了登录到MariaDB来保护它,我们需要当前的
root用户的密码。 如果你刚刚安装了MariaDB,
您还没有设置root密码,密码将为空,
所以你应该刚刚进入这里。 < - ENTER

输入root的当前密码(输入无): < - ENTER
OK,成功使用密码,移动...

设置root密码确保没有人可以登录到MariaDB
root用户没有正确的授权。

设置root密码? [Y / n] < - ENTER
新密码: < - yourmariadbpassword
重新输入新密码: < - yourmariadbpassword
密码更新成功!
重新载入特权表..
...成功!


默认情况下,MariaDB安装有一个匿名用户,允许任何人
登录到MariaDB,而不必创建用户帐户
他们。 这仅适用于测试和进行安装
顺利一点 你应该删除它们,然后再进入
生产环境。

删除匿名用户? [Y / n] < - ENTER
...成功!

通常,root只能被允许从'localhost'连接。 这个
确保有人无法从网络的root密码猜测。

禁止root登录远程? [Y / n] < - ENTER
...成功!

默认情况下,MariaDB带有一个名为“test”的数据库,任何人都可以
访问。 这也仅用于测试,应该删除
在进入生产环境之前。

删除测试数据库并访问它? [Y / n] < - ENTER
- 删除测试数据库...
...成功!
- 删除测试数据库的权限...
...成功!

重新加载权限表将确保所有更改到目前为止
将立即生效。

现在重新加载权限表? [Y / n] < - ENTER
...成功!

打扫干净...

全做完了! 如果您已完成上述所有步骤,您的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 ,如果只安装了这两个安装,则ISPConfig将自动执行必要的配置。)

我们可以通过PHP-FPM使PHP5在nginx中工作(PHP-FPM(FastCGI Process Manager)是一种替代的PHP FastCGI实现,具有对任何大小的网站尤其是繁忙的站点有用的其他功能)。 我们可以像php-cli一样安装php-fpm ,还有一些PHP5模块,如php-mysql ,如果要从PHP脚本中使用MySQL,则需要如下所示:

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 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 PATH_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=0
[...]

(请阅读http://wiki.nginx.org/Pitfalls了解为什么你应该这样做)

除此之外,为了避免错误等

[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in /usr/share/nginx/html/info.php on line 2

...在/var/log/php-fpm/www-error.log中,当您在浏览器中调用PHP脚本时,应在/etc/php.ini中设置date.timezone

[...]
[Date]
; Defines the default timezone used by the date functions
; 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是在端口9000上运行FastCGI服务器的守护进程(具有init脚本/etc/init.d/php-fpm )。

要在nginx中获得CGI支持,我们安装了Fcgiwrap。

Fcgiwrap是一个CGI包装器,它也适用于复杂的CGI脚本,可用于共享托管环境,因为它允许每个虚拟机使用自己的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

接下来,我们安装了spawn-fcgi软件包,它允许我们作为守护进程运行fcgiwrap

yum -y install spawn-fcgi

打开/ etc / sysconfig / spawn-fcgi ...

nano /etc/sysconfig/spawn-fcgi

...并修改文件如下:

# You must set some working options before the "spawn-fcgi" service will work.
# If SOCKET points to a file, then this file is cleaned up by the init script.
#
# See spawn-fcgi(1) for all possible options.
#
# Example :
#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运行,这就是为什么我们不运行spawn -fcgi作为用户/组nginx ,而是将nginx添加到apache组)。

14.1其他PHP版本

从ISPConfig 3.0.5开始,可以通过FastCGI和PHP-FPM在一个服务器上(通过ISPConfig可选)拥有多个PHP版本。 本教程介绍了在CentOS中构建其他PHP版本的过程: 如何使用多个PHP版本(PHP-FPM和FastCGI)与ISPConfig 3(CentOS 6.3)