安全設計原則
規定時間內修復已知 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=//nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=//nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF安裝nginx:
yum -y install nginx啟動nginx服務,并設置為開機自啟:
systemctl start nginx && systemctl enable nginx使用瀏覽器訪問“//服務器IP地址”,顯示如下頁面,說明nginx安裝成功,如未備案可以在系統內使用curl命令進行測試:
curl //127.0.0.1注意
web服務默認通過80端口訪問,但由于政策原因,該端口需要備案才能訪問,默認無法訪問,具體備案操作詳見備案基礎知識-網站備案-備案介紹 - 天翼云 (daliqc.cn)。
如果您未備案,需要瀏覽器訪問,可以先修改nginx端口進行測試:
vim /etc/nginx/conf.d/default.conf修改 listen 字段,80改為81重啟nginx使配置生效:
systemctl restart nginx 或 nginx -s reload如果您想要配置使用https,您可以購買,來搭配域名進行配置使用
1.2、部署mysql客戶端
配置IPv4連接優先級(如果vpc沒配IPv6忽略):
echo "precedence ::ffff:0:0/96 100" > /etc/gai.conf下載 MySQL YUM 倉庫配置:
yum install -y //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.pem1.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 //www.php.net/distributions/php-8.1.0.tar.gztar -zxvf php-8.1.0.tar.gzcd 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.inicp sapi/fpm/php-fpm.conf /usr/local/php81/etc/php-fpm.confcp /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 nginxsudo 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;
}
}
EOF2.配置 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在本地物理機上使用瀏覽器訪問//CT-ECS實例公網IP/test.php,返回success說明PHP代理設置成功并成功連接MySQL數據庫。
3.下載 WordPress
a.進入nginx根目錄,并下載 WordPress:
cd /usr/share/nginx/html && wget //cn.wordpress.org/wordpress-6.8.1-zh_CN.zipb.解壓 WordPress 壓縮包:
unzip wordpress-6.8.1-zh_CN.zipc.進入 WordPress 安裝目錄:
cd /usr/share/nginx/html/wordpressd.復制wp-config-sample.php文件:
cp wp-config-sample.php wp-config.php4.修改 WordPress 配置文件
a.編輯 wp-config.php 文件:
vim wp-config.phpb.按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.瀏覽器訪問“//CT-ECS實例公網IP/wordpress”進入安裝向導。
b.配置站點標題、管理員賬號、密碼和郵箱,并單擊“安裝 WordPress”。
| 參數 | 說明 |
|---|---|
| 站點標題 | WordPress網站名稱。 |
| 用戶名 | WordPress管理員名稱。 |
| 密碼 | 可以使用默認的密碼或者自定義密碼。 不建議重復使用現有密碼,并確保將密碼保存在安全的位置。 |
| 您的電子郵箱地址 | 接收通知的電子郵件地址。 |
c.安裝成功。
d.安裝成功,點擊登錄,或瀏覽器訪問“//CT-ECS實例公網IP/wordpress/wp-login.php,進入WordPress。
6.購買域名為了便于網站的訪問和使用,您可以給網站設置一個域名,使用域名訪問網站。您可以在天翼云域名快速注冊中購買域名。為了您網站的安全性起見,建議您的域名可以搭配 CT-WAF 一起使用,您可以參考:web應用防火墻(原生版)-產品定義。
7.如網站未進行備案,您可以參考:備案基礎知識-網站備案-備案介紹 - 天翼云 (daliqc.cn)。
8.配置域名解析。配置域名解析后才能使用域名訪問網站,具體操作請創建域名解析。
步驟五:配置服務器安全衛士(原生版)
服務器安全衛士(原生版)防護實踐請參考:主機安全防護最佳實踐,您可以根據您開通的對應防護,選擇性的配置對應的安全設置,不同的防護版本有不同的防護功能,您可以參考:產品規格。
配置基線檢查,請參考:本節介紹服務器安全衛士(原生版)基線檢測操作指南。
配置漏洞掃描,請參考:本節為您介紹漏洞掃描原理、漏洞掃描版本規格、漏洞等級。
配置弱口令檢測,請參考:本節介紹服務器安全衛士(原生版)弱口令檢測操作指南。
配置病毒查殺,請參考:病毒查殺概述。
配置文件防勒索,請參考:文件防勒索概述。
配置網頁防篡改,請參考,購買網頁防篡改配額。
步驟六:配置監控告警
如果您是使用云服務器部署數據庫,建議您可以使用應用性能監控-產品定義,為您的應用健康保駕護航。
總結
安全防御從來不局限于單點產品安全能力。安全防御需構建多維協同防護體系:通過全鏈路數據加密、零信任架構、操作系統加固、應用安全沙箱等技術形成縱深防御,實現動態風險阻斷與持續安全運營。