安全设计原则
规定时间内修复已知 OS 安全漏洞,满足安全补丁管理基线;同步配置弱口令检测、病毒查杀、重要文件防勒索及网页防篡改功能。
定期备份关键数据,防意外丢失,确保数据可恢复。
对云硬盘与云数据库存储加密,配置SSL加密数据连接。
集成精细化权限管理、多因子认证及动态访问控制,构建全链路安全防护。
通过逻辑隔离与最小权限访问,阻断威胁横向渗透路径。
部署架构
在云服务器CT-ECS中部署WordPress使用的安全架构如下。
在部署WordPress过程中需要创建ECS实例和RDS MySQL数据库,本实践针对这两者做的安全配置如下:
弹性云主机实例
通过安全组控制 CT-ECS 实例的出入流量安全组是一种网络安全防护机制,用于防止未经授权的访问和保护计算机网络免受恶意攻击。它是一种虚拟防火墙,用于限制入向和出向网络流量。关于安全组的使用请参考:安全组概述。
使用云硬盘快照策略对云硬盘进行周期性备份天翼云云硬盘快照是一种数据备份方式,云硬盘快照服务可以备份或者恢复整个云硬盘的数据,常用于数据备份、制作镜像、应用容灾等。关于云硬盘快照的使用请参考:云硬盘快照策略。
使用 KMS 加密数据密钥管理服务(Key Management Service,KMS)是一站式密钥管理和数据加密服务平台,提供安全合规、可靠易用的资源托管及密码运算服务。同时与天翼云云硬盘、对象存储、弹性文件、关系型数据库MYSQL等云产品无缝集成,实现云上原生数据的加密保护。更多信息,请见云硬盘加密概述。
使用 IAM 授权获取访问凭证统一身份认证(Identity and Access Management,简称IAM)服务,是提供用户进行权限管理的基础服务,可以帮助您安全的控制云服务和资源的访问及操作权限。更多信息,请参见
使用服务器安全卫士进行防护服务器安全卫士(原生版)(CT-CSS,Cloud Security System)是一款全方位保障云上服务器安全的产品,能全面识别并管理服务器中的信息资产、实时监测服务器风险并阻止非法入侵行为,当发现服务器出现安全问题时,第一时间向您发出告警通知。主要包括资产清点、漏洞扫描、入侵检测、基线检查、弱口令检测、病毒查杀、文件防勒索等功能,帮助您构建服务器安全防护体系。更多信息,请参见产品简介。
关系型数据库MySQL版
使用 SSL 数据加密SSL(Secure Socket Layer,安全套接层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。更多信息,请参考设置SSL数据加密。
使用 IAM 身份认证关系数据库MySQL版支持CTIAM身份认证和多种访问控制,多维度保障您云数据库的安全。更多信息,请参考主子账号和IAM权限管理。
资源规划说明
本实践将指导用户在CTyunOS 2.0.1操作系统上的云主机实例上部署WordPress,均在华东1资源池操作。
资源规划总体说明
资源类型 | 资源数量 | 说明 |
---|---|---|
弹性云主机 | 1 |
|
虚拟私有云 | 1 |
|
弹性IP | 1 |
|
安全组 | 1 |
|
关系型数据库MySQL版 | 1 |
|
操作步骤
流程图如下
步骤一:创建云服务资源
创建一个VPC和1个子网具体操作步骤请参考:创建VPC、子网搭建私有网络。
开启服务器安全卫士(原生版)的免费防护功能(建议选择)具体操作步骤请参考:开启免费防护。
创建安全组,建议创建最小权限的安全组规则具体操作步骤请参考:创建安全组。
方向 授权策略 类型 优先级 协议 端口范围 远端 描述 入方向 允许 IPv4 1 Tcp 22 0.0.0.0/0 放通安全组内ECS的SSH(22)端口,用于远程登录Linux ECS。 入方向 允许 IPv4 1 Tcp 81 0.0.0.0/0 临时使用,用于测试WordPress。 入方向 允许 IPv4 1 Any Any sgs-test(sg-my7uktu28l) 针对IPv4,用于安全组内ECS之间网络互通。 出方向 允许 IPv4 1 Any Any 0.0.0.0/0 针对IPv4,用于安全组内ECS访问外部,允许流量从安全组内ECS流出。 出方向 允许 IPv6 1 Any Any ::/0 针对IPv6,用于安全组内ECS访问外部,允许流量从安全组内ECS流出。 创建弹性云主机具体操作步骤请参考:创建弹性云主机。
网络:选择已创建的虚拟私有云和子网,vpc-test和subnet-test
安全组:选择已创建的安全组,名称 sgs-test
开启主机安全防护:开启(建议勾选)
存储:磁盘加密✔️(建议勾选)
如果没有密钥则创建密码,参考创建密钥
弹性IP:自动分配,或使用已有的弹性IP
创建云盘快照策略具体步骤请参考:创建云硬盘快照。
创建 IAM 相关授权,按照用户职责规划用户组,并将对应职责的权限授予用户组。具体步骤请参考:创建用户组和授权具体步骤请参考:创建IAM用户和登录。
创建内网关系型数据库MySQL版具体步骤请参考:创建实例。
版本:8.0
实例规格:x86
存储:
存储空间自动扩展✔️(可选)
磁盘加密✔️(可选)
网络:选择已创建的虚拟私有云和子网,vpc-test和subnet-test
安全组:选择已创建的安全组,名称 sgs-test
IPv4地址,手动指定:192.168.1.101
加入白名单:是
mysql设置IAM,参考:主子账号和IAM权限管理
步骤二:SSH安全加固
SSH是远程登录Linux服务器的主要方式,但它也是黑客进行暴力破解和恶意攻击的主要入口之一。为了加强Linux云主机的SSH登录安全,请参考:Linux服务器SSH登录的安全加固,进行安全加固。
步骤三:配置MySQL安全
配置MySQL备份,请参考:备份功能简介
配置SQL审计,请参考:开启SQL审计日志(开启后您可以选择性的是否使用DMS操作审计,请参考:DMS操作审计),SQL审计日志保留期最长为7天,如果您需要永久保存,请参考:云审计
配置MySQL-SSL数据加密,请参考:设置SSL数据加密
步骤四:在弹性云主机上部署 WordPress
说明:
不同的操作系统搭建WordPress的命令存在差异,请根据您的CT-ECS实例操作系统选择对应的操作,否则会安装失败。
本文档以 CTyunOS 2.0.1 64位操作系统,MySQL 8.0,PHP 8.1,为例部署WordPress 6.8。
WordPress对PHP、MySQL版本存在依赖关系,如果版本不匹配则会导致WordPress安装失败,具体依赖信息,请移步到 WordPress官网 --> WordPress Compatibility 进行查看。
1.部署 LNMP
1.1、部署nginx:
添加nginx官方源:
sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
安装nginx:
yum -y install nginx
启动nginx服务,并设置为开机自启:
systemctl start nginx && systemctl enable nginx
使用浏览器访问“http://服务器IP地址”,显示如下页面,说明nginx安装成功,如未备案可以在系统内使用curl命令进行测试:
curl http://127.0.0.1
注意
web服务默认通过80端口访问,但由于政策原因,该端口需要备案才能访问,默认无法访问,具体备案操作详见备案基础知识-网站备案-备案介绍 - 天翼云 (ctyun.cn)。
如果您未备案,需要浏览器访问,可以先修改nginx端口进行测试:
vim /etc/nginx/conf.d/default.conf
修改 listen 字段,80改为81重启nginx使配置生效:
systemctl restart nginx 或 nginx -s reload
如果您想要配置使用https,您可以购买SSL证书,来搭配域名进行配置使用
1.2、部署mysql客户端
配置IPv4连接优先级(如果vpc没配IPv6忽略):
echo "precedence ::ffff:0:0/96 100" > /etc/gai.conf
下载 MySQL YUM 仓库配置:
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
更新仓库缓存:
yum clean all && yum makecache
安装 MySQL 客户端:
yum install -y --nogpgcheck mysql-community-client
测试连接,参考内网连接MySQL:
mysql -h 192.168.1.11 -P 13049 -u root -p --ssl-ca=ca.pem
1.3、部署PHP 8.1版本
安装编译依赖:
yum install -y gcc make autoconf libxml2-devel openssl-devel curl-devel libpng-devel libjpeg-devel libzip-devel oniguruma-devel sqlite-devel bzip2-devel libxslt-devel
下载并编译 PHP 8.1:
wget https://www.php.net/distributions/php-8.1.0.tar.gz
tar -zxvf php-8.1.0.tar.gz
cd php-8.1.0
./configure \
--prefix=/usr/local/php81 \
--with-openssl \
--with-config-file-path=/usr/local/php81/etc \
--enable-fpm \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-opcache \
--enable-zip \
--enable-calendar \
--enable-exif \
--enable-ftp \
--with-zlib \
--with-bz2 \
--with-gettext \
--with-zlib-dir \
--with-freetype \
--with-jpeg \
--with-webp \
--with-xsl \
--enable-soap \
--enable-sockets \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm
输出如下符合预期
安装:
make -j$(nproc) && make install
配置环境变量:
echo 'export PATH=/usr/local/php81/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
复制配置文件模板:
cp php.ini-production /usr/local/php81/etc/php.ini
cp sapi/fpm/php-fpm.conf /usr/local/php81/etc/php-fpm.conf
cp /usr/local/php81/etc/php-fpm.d/www.conf.default /usr/local/php81/etc/php-fpm.d/www.conf
创建系统服务:
echo '[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php81/var/run/php-fpm.pid
ExecStart=/usr/local/php81/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php81/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/php-fpm81.service
重载服务:
systemctl daemon-reload && systemctl enable --now php-fpm81
重启服务:
systemctl restart php-fpm81.service
添加PHP转发规则,并重启nginx服务:
systemctl restart nginx
sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
server {
listen 81; #使用81端口临时测试,80端口需备案后使用
server_name localhost;
root /usr/share/nginx/html;
location / {
index index.php index.html index.htm;
}
location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
2.配置 WordPress 数据库
2.1、为 WordPress 网站创建一个名称为 wordpress 的数据库,可以参考图形化的方式:创建数据库或使用下述命令行的方式:
连接数据库:
mysql -h 192.168.1.11 -P 13049 -u root -p --ssl-ca=ca.pem
创建数据库:
create database wordpress;
创建新用户 user,新用户密码自定义:
create user 'user'@'%' identified by 'XXXXX';
赋予用户对 wordpress 数据库的全部权限:
grant all privileges on wordpress.* to 'user'@'%';
使上述配置生效:
flush privileges;
退出MySQL:
exit;
新建test.php文件,用于测试数据库连接的代码,并修改下述配置信息为你实际的配置信息
sudo tee /usr/share/nginx/html/test.php <<-'EOF'
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$servername = "192.168.1.11"; // 修改此处,填写数据库的IP地址
$username = "user"; //刚刚创建的user用户
$password = "XXXXX"; //user用户的密码
$dbname = "wordpress"; //指定访问的库wordpress
$conn = new mysqli($servername, $username, $password, $dbname, 13049); // 13049为你数据库的端口
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error); // 输出具体错误
}
echo "Success!";
$conn->close();
?>
EOF
在本地物理机上使用浏览器访问http://CT-ECS实例公网IP/test.php,返回success说明PHP代理设置成功并成功连接MySQL数据库。
3.下载 WordPress
a.进入nginx根目录,并下载 WordPress:
cd /usr/share/nginx/html && wget https://cn.wordpress.org/wordpress-6.8.1-zh_CN.zip
b.解压 WordPress 压缩包:
unzip wordpress-6.8.1-zh_CN.zip
c.进入 WordPress 安装目录:
cd /usr/share/nginx/html/wordpress
d.复制wp-config-sample.php文件:
cp wp-config-sample.php wp-config.php
4.修改 WordPress 配置文件
a.编辑 wp-config.php 文件:
vim wp-config.php
b.按i键进入编辑模式。修改下述关于MySQL部分的配置信息,如果有问题可以从wp-config-sample.php文件进行恢复。
/ database_name_here 修改为实际的数据库名称,本文示例创建为:wordpress
define( 'DB_NAME', 'database_name_here' );
/ username_here 修改为实际创建的用户名,本文示例创建为:user
define( 'DB_USER', 'username_here' );
/ password_here 修改为实际创建用户名的密码
define( 'DB_PASSWORD', 'password_here' );
/ localhost 修改为数据库的主机加端口,格式:IP地址 + 端口号,本文示例创建为:192.168.1.11:13049
define( 'DB_HOST', 'localhost' );
/ utf8 修改为 utf8mb4
define( 'DB_CHARSET', 'utf8' );
/ '' 添加 utf8mb4_0900_ai_ci,如果你使用的非云数据库,请修改为 utf8mb4_unicode_ci
define( 'DB_COLLATE', '' );
/可选,配置SSL加密连接,把 /path/ca.pem 替换为实际的CA证书路径
/可以参考 步骤三:配置MySQL安全,设置SSL数据加密,下载数据库的证书
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
define('MYSQL_SSL_CA', '/path/ca.pem');
c.按Esc键,输入:wq后按Enter键,保存退出配置文件。
5.安装并登录 WordPress 网站
a.浏览器访问“http://CT-ECS实例公网IP/wordpress”进入安装向导。
b.配置站点标题、管理员账号、密码和邮箱,并单击“安装 WordPress”。
参数 | 说明 |
---|---|
站点标题 | WordPress网站名称。 |
用户名 | WordPress管理员名称。 |
密码 | 可以使用默认的密码或者自定义密码。 不建议重复使用现有密码,并确保将密码保存在安全的位置。 |
您的电子邮箱地址 | 接收通知的电子邮件地址。 |
c.安装成功。
d.安装成功,点击登录,或浏览器访问“http://CT-ECS实例公网IP/wordpress/wp-login.php,进入WordPress。
6.购买域名为了便于网站的访问和使用,您可以给网站设置一个域名,使用域名访问网站。您可以在天翼云域名快速注册中购买域名。为了您网站的安全性起见,建议您的域名可以搭配 CT-WAF 一起使用,您可以参考:web应用防火墙(原生版)-产品定义。
7.如网站未进行备案,您可以参考:备案基础知识-网站备案-备案介绍 - 天翼云 (ctyun.cn)。
8.配置域名解析。配置域名解析后才能使用域名访问网站,具体操作请创建域名解析。
步骤五:配置服务器安全卫士(原生版)
服务器安全卫士(原生版)防护实践请参考:主机安全防护最佳实践,您可以根据您开通的对应防护,选择性的配置对应的安全设置,不同的防护版本有不同的防护功能,您可以参考:产品规格。
配置基线检查,请参考:本节介绍服务器安全卫士(原生版)基线检测操作指南。
配置漏洞扫描,请参考:本节为您介绍漏洞扫描原理、漏洞扫描版本规格、漏洞等级。
配置弱口令检测,请参考:本节介绍服务器安全卫士(原生版)弱口令检测操作指南。
配置病毒查杀,请参考:病毒查杀概述。
配置文件防勒索,请参考:文件防勒索概述。
配置网页防篡改,请参考,购买网页防篡改配额。
步骤六:配置监控告警
如果您是使用云服务器部署数据库,建议您可以使用应用性能监控-产品定义,为您的应用健康保驾护航。
总结
安全防御从来不局限于单点产品安全能力。安全防御需构建多维协同防护体系:通过全链路数据加密、零信任架构、操作系统加固、应用安全沙箱等技术形成纵深防御,实现动态风险阻断与持续安全运营。