linux系统http转https及模拟网站被修改
https
内容转载百度百科IP
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 [2] 。
HTTP协议的缺点
[编辑](javascript:😉
HTTP 协议虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的 [3] 。
关于 HTTP协议的明文数据传输, 攻击者最常用的攻击手法就是网络嗅探, 试图从传输过程当中分析出敏感的数据, 例如管理员对 Web 程序后台的登录过程等等, 从而获取网站管理权限, 进而渗透到整个服务器的权限。即使无法获取到后台登录信息, 攻击者也可以从网络中获取普通用户的隐秘信息, 包括手机号码, 身份证号码, 信用卡号等重要资料, 导致严重的安全事故。进行网络嗅探攻击非常简单, 对攻击者的要求很低。使用网络发布的任意一款抓包工具, 一个新手就有可能获取到大型网站的用户信息 [3] 。
另外,HTTP协议在传输客户端请求和服务端响应时, 唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度, 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动中间人攻击, 修改客户端和服务端传输的数据, 甚至在传输数据中插入恶意代码, 导致客户端被引导至恶意网站被植入木马 [3] 。
改进目标
[编辑](javascript:😉
HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。
(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 [4] 。
(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 [4] 。
(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 [4] 。
HTTPS协议的改进
[编辑](javascript:😉
双向的身份认证
客户端和服务端在传输数据之前,会通过基于X.509证书对双方进行身份认证 。具体过程如下 [3] :
客户端发起 SSL 握手消息给服务端要求连接。
服务端将证书发送给客户端。
客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。
服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为1024位或者 2048位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。
数据传输的机密性
客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对成加密的密钥交换算法 ( 一般是RSA), 数据签名摘要算法 ( 一般是SHA或者MD5) , 加密传输数据的对称加密算法 ( 一般是DES),以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密 [3] 。
防止重放攻击
SSL使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个SSL握手中,都有一个唯一的随机数来标记SSL握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密, 而直接重传登录数据包的攻击手法。
可以看到,鉴于电子商务等安全上的需求,HTTPS对比HTTP 协议,在安全方面已经取得了极大的增强。总结来说,HTTPS的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行非对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性 [3] 。
与HTTP原理区别
[编辑](javascript:😉
HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
HTTP 原理
① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容 [2] 。
② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容 [2] 。
HTTPS 原理
① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器 [2] ;
② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数 [2] ;
③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器 [2] ;
④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法) [2] ;
⑤ 客户端将所有握手消息的 MAC 值发送给服务器 [2] ;
⑥ 服务器将所有握手消息的 MAC 值发送给客户端 [2] 。
优缺点
[编辑](javascript:😉
优点
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器 [2] ;
- HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性 [2] 。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本 [2] 。
缺点
-
相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗 [2] 。
-
HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用 [2] 。
-
最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行 [2] 。
-
成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度 [4] 。
应用方案实践
[编辑](javascript:😉
现有银行对外提供的互联网金融服务中,互联网门户类网站和图片网站主要通过 HTTP 协议对外服务。其 中门户网站为用户提供金融咨询和优惠信息等服务,还提供银行App客户端、U盾驱动等程序下载服务。为提升用户服务体验,此类 HTTP 网站还部署了内容分发网络(Content Delivery Network,CDN),通过 CDN 将用户需要访问的信息放到离用户所在物理地区最近内容服务站点,可以大幅提升互联网对外服务的获取速度,提供最佳访问体验。上述 CDN 通常为基于 HTTP 协议的互联网应用提供服务,而随着互联网环境中的劫持、篡改等访问安全问题的日趋严峻,CDN 提供的网络分发方案也需要支持 HTTP 协议改造为 HTTPS 协议。下面是对 HTTP 到 HTTPS 改造应用和网络的方案介绍 [4] 。
(1) 从 HTTP 转向 HTTPS 的应用改造要点:HTTP 页面分析评估信息数据安全等级;WEB 页面访问改造;站点证书申请和部署;启用 HTTPS 协议支持,增加 TCP-443 端口,对外服务 [4] 。
(2)从 HTTP 转向 HTTPS 的 CDN 服务改造要点: CDN 侧调整网络服务;CDN 站点增加对 HTTPS 协议支持;CDN 站点对 HTTPS 加速技术进行优化提升稳定性; CDN 站点支持端到端的全链路 HTTPS 支持能力;CDN 站点增加 CA 证书部署的实施方案 [4] 。
现有互联网环境中仍大约有 65% 的网站使用 HTTP 协议,此部分的互联网站的用户访问会存在很高的安全 隐患,导致信息泄露、木马植入等情况出现。针对这一情况,为互联网提供安全服务而采用 HTTPS 已是大势所趋。HTTP 到 HTTPS 的转向可以帮助企业网提升用 户访问安全水平,特别是对于有敏感信息保存和提供金融交易等服务的企业更有帮助。Google、Facebook 和国内诸多大型互联网公司应用已经全面支持 HTTPS,并且苹果和谷歌两大公司也在积极推动 HTTPS 扩大应用 范围,对 HTTPS 协议在全球网站的部署进度起到加速作用 [4]
转载曾老师文档
HTTP:超文本传输协议(不安全)
HTTPS:加密传输协议(安全)
为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。
那么我们在实现https时,需要了解ssl协议,但我们现在使用的更多的是TLS加密协议。
那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用层是http协议,那么在应用层协议之下,我们的表示层,是ssl协议所发挥作用的一层,他通过(握手、交换秘钥、告警、加密)等方式,是应用层http协议没有感知的情况下做到了数据的安全加密
那么在数据进行加密与解密过程中,如何确定双方的身份,此时就需要有一个权威机构来验证双方身份,那么这个权威机构就是CA机构,那么CA机构又是如何颁发证书
我们首先需要申请证书,先去登记机构进行身份登记,我是谁,我是干嘛的,我想做什么,然后登记机构再通过CSR发给CA,CA中心通过后会生成一堆公钥和私钥,公钥会在CA证书链中保存,公钥和私钥证书我们拿到后,会将其部署在WEB服务器上
1.当浏览器访问我们的https站点时,他回去请求我们的证书
2.Nginx这样的web服务器会将我们的公钥证书发给浏览器
3.浏览器会去验证我们的证书是否合法有效
4.CA机构会将过期的证书放置在CRL服务器,CRL服务的验证效率是非常差的,所以CA有推出了OCSP响应程序,OCSP响应程序可以查询指定的一个证书是否过去,所以浏览器可以直接查询OSCP响应程序,但OSCP响应程序性能还不是很高
5.Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取证书是否有效
证书类型
对比 | 域名型 DV | 企业型 OV | 增强型 EV |
---|---|---|---|
绿色地址栏 | 小锁标记+https | 小锁标记+https | 小锁标记+企业名称+https |
一般用途 | 个人站点和应用; 简单的https加密需求 | 电子商务站点和应用; 中小型企业站点 | 大型金融平台; 大型企业和政府机构站点 |
审核内容 | 域名所有权验证 | 全面的企业身份验证; 域名所有权验证 | 最高等级的企业身份验证; 域名所有权验证 |
颁发时长 | 10分钟-24小时 | 3-5个工作日 | 5-7个工作日 |
单次申请年限 | 1年 | 1-2年 | 1-2年 |
赔付保障金 | —— | 125-175万美金 | 150-175万美金 |
证书选择
1.单域名
2.多域名
3.通配符
注意事项
1.https不支持续费,证书到期需要重新申请并进行替换
2.https不支持三级域名,例如:test.m.driverzeng.com
https状态
1.绿色状态:网站是安全的
2.黄色状态:代码中,带有http的不安链接
3.红色状态:网站内部有其它不安全连接
练习 作业:
完善架构
1.web01 02 03 部署nginx 和php 80端口
2.lb部署https证书,80强转443
3.NFS: sersync
4.MySQL
5.RSYNC 实时备份 NFS
- wordpress
- zh
做题思路
1.环境准备(统一服务器环境)
2.部署服务(根据需求部署需要的服务)
3.测试服务(测试部署完之后的服务)
环境准备
主机名 | 外网ip | 内网ip | 服务 | 作用 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | nginx,php-fpm | web服务器 |
web02 | 10.0.0.8 | 172.16.1.8 | nginx,php-fpm | web服务器 |
web03 | 10.0.0.9 | 172.16.1.9 | nginx,php-fpm | web服务器 |
nfs | 10.0.0.31 | 172.16.1.31 | nfs-utils,sersync | 共享存储服务器 |
db01 | 10.0.0.51 | 172.16.1.51 | mariadb-server | 数据库服务器 |
lb01 | 10.0.0.5 | 172.16.1.5 | nginx | 负载均衡服务器 |
backup | 10.0.0.41 | 172.16.1.41 | rsync | 备份服务器 |
web01部署
# 安装nginx和php-fpm,上传nginx和php-fpm的数据包
[root@web01 ~]# rz
# 解压并进入目录安装
[root@web01 ~]# tar xf php_nginx.tgz
[root@web01 ~]# cd root/nginx_php/
[root@web01 nginx_php]# rpm -Uvh *rpm
# 创建www用户组和用户
[root@web01 nginx_php]# groupadd www -g 666
[root@web01 nginx_php]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 修改nginx和PHP的用户
[root@web01 nginx_php]# cat /etc/nginx/nginx.conf
user www;
worker_processes 1;
[root@web01 nginx_php]# cat /etc/php-fpm.d/www.conf
user = www
; RPM: Keep a group allowed to write in log dir.
group = www
# 启动nginx和php-fpm并加入开机自启
[root@web01 ~]# systemctl start nginx php-fpm && systemctl enable nginx php-fpm
# 检测端口和进程
[root@web01 ~]# netstat -lntup|egrep 'nginx|php-fpm' && ps -ef |egrep '[n]ginx|[p]hp-fpm'
# 编辑nginx配置文件
# 部署wordpress
[root@web01 conf.d]# cat blog.test.com.conf
server {
listen 80;
server_name blog.test.com;
root /code/wordpress;
index index.php index.html;
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 部署知乎
[root@web01 conf.d]# cat zh.test.com.conf
server {
listen 80;
server_name zh.test.com;
root /code/zh;
index index.php index.html;
location ~ \.php$ {
root /code/zh;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 根据配置文件需求创建响应站点并进入站点目录上传服务包
[root@web01 conf.d]# mkdir -p /code/{wordpress,zh}
[root@web01 code]# cd wordpress/
[root@web01 wordpress]# rz
[root@web01 wordpress]# tar xf wordpress-5.0.3-zh_CN.tar.gz
[root@web01 wordpress]# mv wordpress/* .
[root@web01 zh]# cd ../zh
[root@web01 zh]# rz
[root@web01 zh]# unzip WeCenter_3-2-1.zip
[root@web01 zh]# mv WeCenter_3-2-1/* .
# 授权目录
[root@web01 zh]# chown www.www /code -R
# 域名解析
#浏览器访问
web02部署
# 安装nginx和php-fpm,上传nginx和php-fpm的数据包
[root@web02 ~]# rz
# 解压并进入目录安装
[root@web02 ~]# tar xf php_nginx.tgz
[root@web02 ~]# cd root/nginx_php/
[root@web02 nginx_php]# rpm -Uvh *rpm
# 创建www用户组和用户
[root@web02 nginx_php]# groupadd www -g 666
[root@web02 nginx_php]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 修改nginx和PHP的用户
[root@web02 nginx_php]# cat /etc/nginx/nginx.conf
user www;
worker_processes 1;
[root@web02 nginx_php]# cat /etc/php-fpm.d/www.conf
user = www
; RPM: Keep a group allowed to write in log dir.
group = www
# 启动nginx和php-fpm并加入开机自启
[root@web02 ~]# systemctl start nginx php-fpm && systemctl enable nginx php-fpm
# 检测端口和进程
[root@web02 ~]# netstat -lntup|egrep 'nginx|php-fpm' && ps -ef |egrep '[n]ginx|[p]hp-fpm'
# 编辑nginx配置文件
# 部署wordpress
[root@web02 conf.d]# cat blog.test.com.conf
server {
listen 80;
server_name blog.test.com;
root /code/wordpress;
index index.php index.html;
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 部署知乎
[root@web02 conf.d]# cat zh.test.com.conf
server {
listen 80;
server_name zh.test.com;
root /code/zh;
index index.php index.html;
location ~ \.php$ {
root /code/zh;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 根据配置文件需求创建响应站点并进入站点目录上传服务包
[root@web02 conf.d]# mkdir -p /code/{wordpress,zh}
[root@web02 code]# cd wordpress/
[root@web02 wordpress]# rz
[root@web02 wordpress]# tar xf wordpress-5.0.3-zh_CN.tar.gz
[root@web02 wordpress]# mv wordpress/* .
[root@web02 zh]# cd ../zh
[root@web02 zh]# rz
[root@web02 zh]# unzip WeCenter_3-2-1.zip
[root@web02 zh]# mv WeCenter_3-2-1/* .
# 授权目录
[root@web02 zh]# chown www.www /code -R
web03部署
# 安装nginx和php-fpm
[root@web03 ~]# rz
# 解压并进入目录安装
[root@web03 ~]# tar xf php_nginx.tgz
[root@web03 ~]# cd root/nginx_php/
[root@web03 nginx_php]# rpm -Uvh *rpm
# 创建www用户组和用户
[root@web03 nginx_php]# groupadd www -g 666
[root@web03 nginx_php]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 修改nginx和PHP的用户
[root@web03 nginx_php]# cat /etc/nginx/nginx.conf
user www;
worker_processes 1;
[root@web03 nginx_php]# cat /etc/php-fpm.d/www.conf
user = www
; RPM: Keep a group allowed to write in log dir.
group = www
# 启动nginx和php-fpm并加入开机自启
[root@web03 ~]# systemctl start nginx php-fpm && systemctl enable nginx php-fpm
# 检测端口和进程
[root@web03 ~]# netstat -lntup|egrep 'nginx|php-fpm' && ps -ef |egrep '[n]ginx|[p]hp-fpm'
# 编辑nginx配置文件
# 部署wordpress
[root@web03 conf.d]# cat blog.test.com.conf
server {
listen 80;
server_name blog.test.com;
root /code/wordpress;
index index.php index.html;
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 部署知乎
[root@web03 conf.d]# cat zh.test.com.conf
server {
listen 80;
server_name zh.test.com;
root /code/zh;
index index.php index.html;
location ~ \.php$ {
root /code/zh;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 根据配置文件需求创建响应站点并进入站点目录上传服务包
[root@web03 conf.d]# mkdir -p /code/{wordpress,zh}
[root@web03 code]# cd wordpress/
[root@web03 wordpress]# rz
[root@web03 wordpress]# tar xf wordpress-5.0.3-zh_CN.tar.gz
[root@web03 wordpress]# mv wordpress/* .
[root@web03 zh]# cd ../zh
[root@web03 zh]# rz
[root@web03 zh]# unzip WeCenter_3-2-1.zip
[root@web03 zh]# mv WeCenter_3-2-1/* .
# 授权目录
[root@web03 zh]# chown www.www /code -R
db01数据库服务部署
# 下载mysql的小伙伴mariadb
[root@db01 ~]# yum install -y mariadb-server
# 启动并加入开机自启
[root@db01 ~]# systemctl start mariadb.service
[root@db01 ~]# systemctl enable mariadb.service
# 给root用户添加密码
[root@db01 ~]# mysqladmin -uroot password '123'
# 登录
[root@db01 ~]# mysql -uroot -p123
# 创建库
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database zh;
Query OK, 1 row affected (0.00 sec)
# 创建管理库的用户和密码
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on wzh_user* to wzh_user@'%' identified by '123'
-> ;
Query OK, 0 rows affected (0.01 sec)
# 查看是否创建成功
MariaDB [(none)]> select user,host from mysql.user;
+----------+-----------+
| user | host |
+----------+-----------+
| discuz | % |
| wzh_user | % |
| root | 127.0.0.1 |
| root | ::1 |
| | db01 |
| root | db01 |
| | localhost |
| root | localhost |
+----------+-----------+
nfs共享存储服务器配置
## 下载nfs-utils
[root@nfs ~]# yum install -y nfs-utils
# 编辑配置
[root@nfs ~]# vim /etc/exports
/wp_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
/zh_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
# 创建用户
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 创建挂载目录
[root@nfs ~]# mkdir /zh_data
[root@nfs ~]# mkdir /wp_data
# 目录授权
[root@nfs ~]# chown www.www /zh_data /wp_data
# 启动并加入开机自启
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server
# 查看挂载目录
[root@nfs ~]# showmount -e
Export list for nfs:
/zh_data 172.16.1.0/24
/wp_data 172.16.1.0/24
web01,02,03,挂载目录
# web01 挂载
[root@web01 ~]# mount -t nfs 172.16.1.31:/zh_data /code/zh/uploads
[root@web01 ~]# mkdir /code/wordpress/wp-content/uploads
[root@web01 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads
[root@web01 ~]# df -h
172.16.1.31:/zh_data 19G 1.4G 18G 8% /code/zh/uploads
172.16.1.31:/wp_data 19G 1.4G 18G 8% /code/wordpress/wp-content/uploads
# web02 挂载
[root@web02 ~]# mkdir /code/wordpress/wp-content/uploads
[root@web02 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads
[root@web02 ~]# mount -t nfs 172.16.1.31:/zh_data /code/zh/uploads
# web03 挂载
[root@web03 ~]# mkdir /code/wordpress/wp-content/uploads
[root@web03 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads
[root@web03 ~]# mount -t nfs 172.16.1.31:/zh_data /code/zh/uploads
backup备份服务器配置
## 服务端
安装rsync
[root@backup ~]# yum install -y rsync
# 修改配置文件
[root@backup ~]# vim /etc/rsyncd.conf
[root@backup ~]# cat /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = nfs_bak
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[nfs]
comment = welcome to oldboyedu backup!
path = /backup
# 创建用户组和用户
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -g 666 -u 666 -s /sbin/nologin -M
# 创建密码文件并写入用户名密码
[root@backup ~]# vim /etc/rsync.passwd
[root@backup ~]# cat /etc/rsync.passwd
nfs_bak:123
# 给密码文件授权600
[root@backup ~]# chmod 600 /etc/rsync.passwd
# 创建备份目录
[root@backup ~]# mkdir /backup/
# 给备份目录授权属主和属组权限为www
[root@backup ~]# chown www.www /backup/
[root@backup ~]# ll /backup/ -d
drwxr-xr-x 2 www www 20 May 10 08:21 /backup/
# 启动服务并开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
# 检测端口和进程
[root@backup ~]# netstat -lntup|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7201/rsync
tcp6 0 0 :::873 :::* LISTEN 7201/rsync
[root@backup ~]# ps -ef|grep rsync
root 7201 1 0 00:13 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 7224 6982 0 00:14 pts/0 00:00:00 grep --color=auto rsync
nfs实时同步backup服务器
## sersync部署在客户端
# 下载sersync的依赖
[root@nfs ~]# yum install -y rsync inotify-tools
# 下载sersync的安装包
[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
# 解压安装包
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
#移动并改名
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync
[root@nfs ~]#
# 修改配置文件
vim /usr/local/sersync/confxml.xml
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/wp_date">
<remote ip="172.16.1.41" name="nfs"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az"/>
<auth start="true" users="nfs_bak" passwordfile="/etc/rsync.pass"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
# 写密码到密码文件
[root@nfs ~]# echo 123 >/etc/rsync.pass
# 授权600权限到密码文件
[root@nfs ~]# chmod 600 /etc/rsync.pass
# 启动服务
[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml
# 启动完成后进入客户端的/wp_data目录。创建一个a.txt文件,然后查看服务端是不是实时同步
[root@nfs wp_data]# touch a.txt
[root@backup backup]# ll
total 200
-rw-r--r-- 1 www www 0 May 10 19:51 a.txt
# 然后客户端echo 123 写入到这个文件里,再次查看服务端
[root@nfs yonghu]# echo 123 >a.txt
[root@backup backup]# cat a.txt
123
lb01负载均衡配置
# 安装nginx,上传数据包
[root@lb01 ~]# rz
# 解压
[root@lb01 ~]# tar xf php_nginx.tgz
[root@lb01 ~]# cd root/nginx_php/
# 安装
[root@lb01 nginx_php]# yum localinstall -y nginx-1.18.0-1.el7.ngx.x86_64.rpm
# 创建用户组和用户
[root@lb01 nginx_php]# groupadd www -g 666
[root@lb01 nginx_php]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 修改nginx启动用户
[root@lb01 nginx_php]# vim /etc/nginx/nginx.conf
user www;
worker_processes 1;
# 编辑nginx的proxy的优化文件,以后可以直接调用参数
[root@lb01 ~]# cat /etc/nginx/proxy_params
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffers 8 4k;
proxy_buffer_size 4k;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
# 编辑nginx的代理文件
# 需要用到 ngx_http_upstream_module模块
[root@lb01 ~]# vim /etc/nginx/conf.d/blog.test.com.conf
upstream blog {
server 172.16.1.7;
server 172.16.1.8;
server 172.16.1.9;
}
server {
listen 80;
server_name blog.test.com;
location / {
proxy_pass http://blog;
include proxy_params;
}
}
[root@lb01 ~]# vim /etc/nginx/conf.d/zh.test.com.conf
upstream zh {
server 172.16.1.7;
server 172.16.1.8;
server 172.16.1.8;
}
server {
listen 80;
server_name zh.test.com;
location / {
proxy_pass http://zh;
include proxy_params;
}
}
# 检查语法
[root@lb01 ~]# nginx -t
# 开启nginx并加入开机自启
[root@lb01 ~]# systemctl start nginx
[root@lb01 ~]# systemctl enable nginx
# 域名解析
lb01部署证书,80强转443
# 查看有没有ssl模块
[root@lb01 ~]# nginx -V
--with-http_ssl_module
# 创建证书存放路径
[root@lb01 ~]# mkdir /etc/nginx/ssl
[root@lb01 ~]# cd /etc/nginx/ssl/
# 自签证书
[root@lb01 ssl]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
............................+++
..............+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:henan
Locality Name (eg, city) [Default City]:putang^H^H^C
[root@lb01 ssl]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
....+++
.......................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:henan
Locality Name (eg, city) [Default City]:puyang
Organization Name (eg, company) [Default Company Ltd]:fanixian
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:test.com
Email Address []:123@qq.com
# 修改lb01代理配置文件
[root@lb01 conf.d]# !v
vi blog.wzh.com.conf
upstream blog {
#server 172.16.1.7;
server 172.16.1.8;
server 172.16.1.9;
}
server {
listen 80;
server_name blog.test.com zh.test.com;
return 302 https://$host/$request_uri;
}
server {
listen 443 ssl;
server_name blog.test.com zh.test.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://blog;
proxy_set_header HOST $host;
}
}
模拟http协议被篡改网站
环境准备
服务器名称 | 外网IP | 内网IP | 安装服务 | 作用 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | nginx | 被钓鱼的网站 |
web02 | 10.0.0.8 | 172.16.1.8 | nginx | 钓鱼网站 |
# 编辑web01配置文件
[root@web01 conf.d]# cat www.wzh.com.conf
server {
listen 80;
server_name www.wzh.com;
root /opt/wzh;
index index.html;
}
#检测语法
[root@web01 conf.d]# nginx -t
# 重新加载nginx
[root@web01 conf.d]# systemctl reload nginx
# 创建站点目录
[root@web01 conf.d]# mkdir /opt/wzh
# 编辑站点目录配置文件
[root@web01 conf.d]# cat /opt/wzh/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my website</title>
</head>
<body>
<article>
<header>
<h1>被钓鱼网站</h1>
<p>创建时间:<time pubdate="pubdate">2020/6/4</time></p>
</header>
<p>
<b>标题:</b>欢迎篡改
</p>
<footer>
<p><small>我太难了</small></p>
</footer>
</article>
</body>
</html>
# 域名解析
# 浏览器访问
web02配置
查看网页源代码
# 编辑web02配置文件
[root@web02 conf.d]# vim test.com.conf
upstream dy {
server 10.0.0.7:80;
}
server {
listen 80;
server_name www.wzh.com;
location / {
proxy_pass http://dy;
proxy_set_header Host $http_host;
sub_filter '<h1>被钓鱼网站' '<h1>这可是正经网站,\n
本网站服务器在美利坚,受美国法律保护,未满十八岁禁止入内';
sub_filter '</b>欢迎篡改' '</b>未满十八岁点进去后果自负';
sub_filter '<small>我太难了' '<img src="http://i1.sinaimg.cn/gm/2012/0328/U5499P115DT20120328161745.gif">';
}
}
# 检测语法
[root@web02 conf.d]# nginx -t
# 重新加载nginx
[root@web02 conf.d]# systemctl reload nginx
# 域名解析
# 浏览器访问