使用EC2,VPC搭建博客系统详细步骤-3

2. 启动EC2实例,选择合适的AMI等等。

某些情况下,类似VMware ESXi。全称Amazon Elastic Compute Cloud,简称Amazon EC2。首先是laaS,Google的Google Compute Engine;微软的Microsoft Azure都是如此。EC2使用Xen虚拟化技术。每个虚拟机,又称作“实例”(instance),能够运行小、大、极大三种能力的虚拟私有服务器。Amazon.com利用EC2 Compute Units去分配硬件资源(一个ECU相当与一个Sandy BridgeXeon)。

3. 在 Amazon Linux 2 上安装 LAMP Web 服务器

3.1 远程(CRT等工具使用*.pub等密钥文件)

使用CRT等去远程实例,稍微检查下更新

 sudo yum update -y

3.2 安装 Amazon Linux Extras和PHP

安装 lamp-mariadb10.2-php7.2 和 php7.2 Amazon Linux Extras 存储库。查看安装过程(安装/安装依赖/依赖关系已更新)就会发现经过Amazon 优化后的Linux,对于应用优化的非常棒。

 sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

sudo yum reinstall yum --noplugins

 

3.3 安装 Apache Web 、MariaDB 

 sudo yum install -y httpd mariadb-server

3.4 启动,设置开机自启apache等。并测试。

3.4.1 测试apache

[ec2-user@ip-172-15-1-131 ~]$ sudo -s
[root@ip-172-15-1-131 ec2-user]# mkdir /var/www/html/a

wget -P /var/www/html/a/ https://raw.githubusercontent.com/AWSinAction/\code/master/chapter3/a/index.html

[root@ip-172-15-1-131 ec2-user]# cat /var/www/html/a/index.html
<html>
<head>
<title>djf</title>
</head>
<body>
<h1>Hello A!</h1>
</body>
</html>


[ec2-user@ip-172-15-1-131 ~]$ cat /etc/httpd/conf.d/a.conf
<VirtualHost 172.15.1.131:80>
   DocumentRoot /var/www/html/a
</VirtualHost>
[ec2-user@ip-172-15-1-131 ~]$ 
[ec2-user@ip-172-15-1-131 ~]$ sudo vim  /etc/httpd/conf.d/a.conf    
[ec2-user@ip-172-15-1-131 ~]$ sudo systemctl restart  httpd

或者加一个/var/www/html/phpinfo.php 文件

sudo yum list installed httpd mariadb-server php-mysqlnd

测试后删除: rm /var/www/html/phpinfo.php

验证必需的程序包。

sudo yum list installed httpd mariadb-server php-mysqlnd

3.5 设置文件权限

添加用户到组:
sudo usermod -a -G apache ec2-user
将/var/www 及其内容的组所有权更改到 apache 组:
sudo chown -R ec2-user:apache /var/www
添加组写入权限以及设置未来子目录上的组 ID,请更改 /var/www 及其子目录的目录权限:
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
添加组写入权限,递归更改 /var/www 及其子目录的文件权限:
 find /var/www -type f -exec sudo chmod 0664 {} \;

3.6 获取CA,启用SSL/TLS

获取Apache 模块 mod_ssl 

sudo yum install -y mod_ssl   

需要用到三个文件,若没有,手动创建证书

使用openssl手动创建证书:

安装openssl:sudo yum install openssl openssl-devel

/etc/httpd/conf.d/ssl.conf

mod_ssl 的配置文件。它包含告知 Apache 以下信息的“指令”:在何处查找加密密钥和证书、允许哪些 SSL/TLS 协议版本、接受哪种加密密码。

/etc/pki/tls/private/localhost.key

针对 Amazon EC2 主机的自动生成的 2048 位 RSA 私有密钥。在安装期间,OpenSSL 已使用此密钥生成自签名主机证书,可使用此密钥生成证书签名请求 (CSR) 以提交给证书颁发机构 (CA)。

注意:如果在目录列表中看不到此文件,则可能是因为其访问权限受限。请尝试在目录中运行 sudo ls -al。

/etc/pki/tls/certs/localhost.crt

针对服务器主机的自动生成的自签名 X.509 证书。此证书对于测试是否已将 Apache 正确设置为使用 SSL/TLS 来说很有用。

3.6.1 创建密钥

使用非对称加密算法RSA生成 2048 位 RSA 私钥。

sudo openssl genrsa -out localhost.key 2048

采用256位rsa算法生成密钥localhost.key文件,这种方法产生的证书在apache等服务器中启动服务器时不会要求输入密码,同时也不会把私钥加密。

或sudo openssl genrsa -out custom.key 4096(创建系数更大的更严格的 RSA 密钥),一般情况下,现在个人应用需要768比特,公司需要使用1024比特,一些极其重要的场合需要使用2048比特。

 

使用对称加密算法DES3加密新产生的 1024 位 RSA 私有test.key文件,每次要使用这个私钥时都要用输入密码。如果电子证书是用在apache等服务器中,每次启动服务器时都要输入密码一次。

 

使用对称加密算法AES-128 密码加密的 4096 位 RSA 私有密钥。

sudo openssl genrsa -aes128 -passout pass:abc12345 -out custom.key 4096  

 

创建普通(基于椭圆曲线的数学运算的密钥)密码:

sudo openssl ecparam -name prime256v1 -out putong.key -genkey      

输出为一个使用 prime256v1 (OpenSSL 支持的“命名曲线”) 的 256 位椭圆曲线私有密钥。根据 NIST,其加密强度略高于 2048 位 RSA 密钥。

3.6.2 修改密钥权限

确保新的私有密钥具有高度限制的所有权和权限 (所有者=根、组=根、仅面向所有者的读取/写入权限)。命令如下:

3.6.3 生成证书请求文件(Certificate Signing Request)。

sudo openssl req -new -key localhost.key -out localhost.csr

3.6.4 签署生成证书。三方签署。并修改密钥权限。

通常把localhost.csr这个档案给第三方CA(Certificate Authority)机构签署生成证书就可以了。

openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt
openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt

自签名证书:sudo openssl req -x509 -days 365 -in localhost.csr -key localhost.key -out localhost.crt  

 

3.6.5 配置ssl.conf

自签名证书,按如下配置:

vi /etc/httpd/conf.d/ssl.conf

 

SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

注:如果SSLCertificateFile中指定的证书已包含相应私钥,SSLCertificateKeyFile这一行就可以注释掉。

 

如果是第三方签署的CA证书,按如下配置:

SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateChainFile /etc/ssl/certs/server-ca.crt

各指令含义:

SSLEngine :这个指令用于开启或关闭SSL/TLS协议引擎。

SSLCertificateFile:该指令用于指定服务器持有的X.509证书(PEM编码),其中还可以包含对应的RSA或DSA私钥。如果其中包含的私钥已经使用密语加密,那么在Apache启动的时候将会提示输入密语。

SSLCertificateKeyFile:指定了服务器私钥文件(PEM编码)的位置。如果SSLCertificateFile指定的服务器证书文件中不包含相应的私钥,那么就必须使用该指令,否则就不需要使用。

SSLCertificateChainFile:这个指令指定了一个多合一的CA证书,用于明确的创建服务器的证书链。这个证书链将被与服务器证书一起发送给客户端,由直接签发服务器证书的CA证书开始,按证书链顺序回溯,一直到根CA的证书结束,这一系列的CA证书(PEM格式)就构成了服务器的证书链。这有利于避免在执行客户端认证时多个CA证书之间出现混淆或冲突。

3.6.6 强化安全配置

用于加密 SSL/TLS 数据流的快速密码 RC4 具有多个重大弱点。修复方法是完全禁用 RC4 支持。
禁用 SSL 版本 2 和 3,以及 TLS 版本 1.0 和 1.1。服务器现在拒绝接受与任何不是使用支持的 TLS 版本的客户端进行加密连接。

 点击此处展开...

#SSLProtocol all -SSLv3
#SSLProxyProtocol all -SSLv3
SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
SSLProxyProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2

#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
#SSLProxyCipherSuite HIGH:MEDIUM:!aNULL:!MD5

SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLProxyCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

教程:

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/SSL-on-an-instance.html

 

3.7 确保数据库服务器的安全

sudo systemctl start mariadb

sudo mysql_secure_installation

在提示时,键入根账户的密码。

键入当前根密码。默认情况下,根账户没有设置密码。按 Enter。

键入 Y 设置密码,然后键入两次安全密码。

注意

设置 MariaDB 根密码仅是保护数据库的最基本措施。构建或安装数据库驱动的应用程序时,通常可以为该应用程序创建数据库服务用户,并避免使用根账户执行除数据库管理以外的操作。

键入 Y 删除匿名用户账户。

键入 Y 禁用远程根登录。

键入 Y 删除测试数据库。

键入 Y 重新加载权限表并保存您的更改。

sudo systemctl enable mariadb

3.8 安装 phpMyAdmin

sudo yum install php-mbstring -y

sudo systemctl restart httpd

 sudo systemctl restart php-fpm 

 cd /var/www/html   

wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1

 rm phpMyAdmin-latest-all-languages.tar.gz      

 sudo systemctl start mariadb 

对Cookies做加密,以免多个PhpMyAdmin或者和其他程序共用Cookies时搞混。(注:其中的’′为随意的字符)

vim phpMyAdmin/libraries/config.default.php 

vim phpMyAdmin/config.sample.inc.php  

结果:

posted @ 2019-10-25 01:49  JeffreyDin  阅读(543)  评论(0编辑  收藏  举报