实验环境准备:防火墙默认区域设置为trusted 虚拟机server [root@server0 ~]# firewall-cmd --set-default-zone=trusted
虚拟机desktop [root@desktop0 ~]# firewall-cmd --set-default-zone=trusted
######################################################
Web通信基本概念 • 基于 B/S (Browser/Server)架构的网页服务 – 服务端提供网页 – 浏览器下载并显示网页
• Hyper Text Markup Language(html),超文本标记语言 • Hyper Text Transfer Protocol(http),超文本传输协议
虚拟机server:1.安装httpd服务端软件 [root@server0 ~]# yum -y install httpd
2.重起httpd服务 [root@server0 ~]# systemctl restart httpd [root@server0 ~]# systemctl enable httpd ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service
3.书写页面文件 ]# echo '<h1>My Frist Web' > /var/www/html/index.html ]# cat /var/www/html/index.html
]# firefox 172.25.0.11
######################################################
• 软件包:httpd • 系统服务:httpd • 提供的默认配置
– Listen:监听地址:端口(80) – ServerName:本站点注册的DNS名称(空缺) – DocumentRoot:网页文件根目录(/var/www/html)
DNS服务器:虚拟机classroom server0.example.com www0.example.com webapp0.example.com
#####################################################DocumentRoot:网页文件根目录(/var/www/html) 虚拟机server
1.修改配置文件 /etc/httpd/conf/httpd.confDocumentRoot "/var/www/myweb" #改变网页文件存放路径
2.重起httpd服务]# mkdir /var/www/myweb ]# echo '<h1> wo shi myweb' > /var/www/myweb/index.html ]# systemctl restart httpd
3.访问测试]# firefox 172.25.0.11
#####################################################
网络路径与实际路径
客户端:firefox 172.25.0.11:80----》服务端 httpd ----》DocumentRoot /var/www/myweb
客户端:firefox 172.25.0.11/nsd 服务端 : /var/www/myweb/nsd
客户端:firefox 172.25.0.11/abc 服务端 : /var/www/myweb/abc
客户端:firefox 172.25.0.11/var/www/myweb 服务端 : /var/www/myweb/var/www/myweb ################################################## 客户端:firefox 172.25.0.11/abc 服务端 : /var/www/myweb/abc
虚拟机server: ]# mkdir /var/www/myweb/abc ]# echo '<h1>wo shi abc' > /var/www/myweb/abc/index.html
]# firefox 172.25.0.11/abc
由同一台服务器提供多个不同的Web站点
• 区分方式 – 基于域名的虚拟主机 – 基于端口的虚拟主机 – 基于IP地址的虚拟主机
#################################################
<VirtualHost IP地址:端口> ServerName 此站点的DNS名称 DocumentRoot 此站点的网页根目录 </VirtualHost>
<VirtualHost *:80> ServerName www.nb.com DocumentRoot /var/www/abc </VirtualHost>
• 配置文件路径
– /etc/httpd/conf/httpd.conf #主配置文件 – /etc/httpd/conf.d/*.conf #调用配置文件
虚拟机server [root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> #开启虚拟主机,在所有IP地址上启用80端口 ServerName server0.example.com #指定访问的域名 DocumentRoot /var/www/qq #指定网页文件路径 </VirtualHost> <VirtualHost *:80> ServerName www0.example.com DocumentRoot /var/www/baidu </VirtualHost>
[root@server0 ~]# mkdir /var/www/qq /var/www/baidu [root@server0 ~]# echo '<h1>企鹅' > /var/www/qq/index.html [root@server0 ~]# echo '<h1>百度' > /var/www/baidu/index.html [root@server0 ~]# systemctl restart httpd [root@desktop0 ~]# firefox server0.example.com [root@desktop0 ~]# firefox www0.example.com
当一旦使用了虚拟Web主机的功能,所有的页面都要用虚拟Web主机方式呈现 虚拟机server [root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName server0.example.com DocumentRoot /var/www/qq </VirtualHost> <VirtualHost *:80> ServerName www0.example.com DocumentRoot /var/www/baidu </VirtualHost> <VirtualHost *:80> ServerName webapp0.example.com DocumentRoot /var/www/myweb </VirtualHost>
##################################################
网页内容访问
客户机地址限制• 使用 <Directory> 配置区段 – 每个文件夹自动继承其父目录的ACL访问权限 – 除非针对子目录有明确设置
<Directory 目录的绝对路径> .. .. Require all denied|granted Require ip IP或网段地址 .. .. </Directory>
Require all denied #拒绝所有人访问 Require all granted #允许所有人访问 Require ip 172.25.0.11 #仅172.25.0.11进行访问
###################################################### <Directory /opt> Require all denied </Directory> <Directory /opt/web> Require all granted </Directory>
/opt/web/index.html #可以访问 /opt/nsd/index.html #不可以访问
####################################################案例3:配置网页内容访问 在 Web 网站 http://server0.example.com 的 DocumentRoot 目录下创建一个名为 private 的子目录 要求如下: 1.查看http://server0.example.com 的DocumentRoot 目录 [root@server0 ~]# cat /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName server0.example.com DocumentRoot /var/www/qq </VirtualHost> [root@server0 ~]# mkdir /var/www/qq/private [root@server0 ~]# echo '<h1>wo shi private' > /var/www/qq/private/index.html [root@server0 ~]# cat /var/www/qq/private/index.html
[root@server0 ~]# firefox server0.example.com/private
2.从 server0 上,任何人都可以浏览 private 的内容, 但是从其他系统不能访问这个目录的内容 [root@server0 ~]# vim /etc/httpd/conf/httpd.conf [root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf <Directory /var/www/qq/private> Require ip 172.25.0.11 #仅允许172.25.0.11 </Directory> [root@server0 ~]# systemctl restart httpd
虚拟机desktop: [root@desktop0 ~]# firefox server0.example.com/private Forbidden
You don't have permission to access /private/ on this server.
######################################################案例4:使用自定Web根目录 调整 Web 站点 http://server0.example.com 的网页 目录,要求如下: 1)新建目录 /webroot,作为此站点新的网页文件目录
虚拟机server: 1.创建新的目录 ]# mkdir /webroot ]# echo '<h1>wo shi webroot' > /webroot/index.html ]# cat /webroot/index.html
2.修改配置文件 [root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName server0.example.com DocumentRoot /webroot #修改存放网页文件的路径 </VirtualHost>
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf ...... <Directory /webroot> Require all granted #允许所有人进行访问 </Directory>
[root@server0 ~]# systemctl restart httpd
3.修改SELinux策略,安全上下文策略(标识) ]# semanage fcontext -l | less #查看安全上下文值 ]# ls -Zd /var/www/ #查看目录的上下文值 ]# ls -Zd /webroot/ #查看目录的上下文值
• 方式1:参照标准目录,重设新目录的属性 – chcon [-R] --reference=模板目录 新目录
]# chcon -R --reference=/var/www/ /webroot ]# ls -Zd /webroot ]# firefox server0.example.com
静态网站的运行 • 服务端的原始网页 = 浏览器访问到的网页 – 由Web服务软件处理所有请求 – 文本(txt/html)、图片(jpg/png)等静态资源
动态网站的运行 • 服务端的原始网页 ≠ 浏览器访问到的网页 – 由Web服务软件接受请求,动态程序转后端模块处理 – PHP网页、Python网页、JSP网页......
以webapp0.example.com部署动态网站 虚拟机server: 1.下载Python网页文件 [root@server0 ~]# cat /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName webapp0.example.com DocumentRoot /var/www/myweb </VirtualHost>
]# cd /var/www/myweb/ ]# wget http://classroom.example.com/pub/materials/webinfo.wsgi
]# cat webinfo.wsgi
]# firefox webapp0.example.com/webinfo.wsgi
2.为了方便客户端的访问,页面跳转(网页别名 地址重写)
firefox webapp0.example.com --> /var/www/myweb/weninfo.wsgi
配置字段格式: Alias 网络路径 实际路径 当用户采用的是这个"网络路径",则跳转到"实际路径"
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80> ServerName webapp0.example.com DocumentRoot /var/www/myweb Alias / /var/www/myweb/webinfo.wsgi
当用户直接访问网页文件根目录时,则呈现/var/www/myweb/weninfo.wsgi页面内容
</VirtualHost>
[root@server0 ~]# systemctl restart httpd [root@server0 ~]# firefox webapp0.example.com
3.安装软件mod_wsgi翻译Python页面代码 [root@server0 ~]# yum -y install mod_wsgi [root@server0 ~]# rpm -q mod_wsgi [root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName webapp0.example.com DocumentRoot /var/www/myweb WsgiScriptAlias / /var/www/myweb/webinfo.wsgi </VirtualHost>
[root@server0 ~]# systemctl restart httpd [root@server0 ~]# firefox webapp0.example.com 显示内容: Unix时间戳:自1970-1-1 0:0:0到现在,所经历的秒数 4.此虚拟主机侦听在端口8909 (SELinux非默认端口的开放) [root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909 #针对httpd程序 <VirtualHost *:8909> #针对虚拟web主机提供网站 ServerName webapp0.example.com DocumentRoot /var/www/myweb WsgiScriptAlias / /var/www/myweb/webinfo.wsgi </VirtualHost>
]# semanage port -l | grep http ]# semanage port -a -t http_port_t -p tcp 8909 -a:添加 -t:类型 -p:协议
]# systemctl restart httpd ]# firefox webapp0.example.com:8909 ###################################################### 客户端访问端口的优先级最高,其次是第一个虚拟Web主机
安全Web服务
协议: https:安全的超文本传输协议 默认端口:443
PKI公钥基础设施 • Public Key Infrastructure,公钥基础设施 – 公钥:主要用来加密数据 – 私钥:主要用来解密数据(与相应的公钥匹配) – 数字证书:证明拥有者的合法性/权威性(单位名称、 有效期、公钥、颁发机构及签名、......) – Certificate Authority,数字证书授权中心:负责证书 的申请/审核/颁发/鉴定/撤销等管理工作
数字证书授权中心:虚拟机classroom
构建安装的Web 虚拟机server:
1.安装httpd软件包]# yum -y install httpd
2.安装mod_ssl提供安全加密程序]# yum -y install mod_ssl ]# rpm -ql mod_ssl #显示软件包安装清单 /etc/httpd/conf.d/ssl.conf
3.部署网站证书(营业执照)]# cd /etc/pki/tls/certs/ ]# wget http://classroom.example.com/pub/tls/certs/server0.crt
]# ls
4.部署根证书(工商局信息)]# cd /etc/pki/tls/certs/ ]# wget http://classroom.example.com/pub/example-ca.crt ]# ls
5.部署私钥(用于解密)]# cd /etc/pki/tls/private/ ]# wget http://classroom.example.com/pub/tls/private/server0.key
]# ls
6.修改配置文件,指定安全配置信息[root@server0 ~]# vim /etc/httpd/conf.d/ssl.conf 补充: 末行模式下 输入 :set nu 开启行号功能
59 DocumentRoot "/var/www/html" 60 ServerName www0.example.com:443 #指定进行加密通信的域名
指定网站证书100 SSLCertificateFile /etc/pki/tls/certs/server0.crt 指定私钥107 SSLCertificateKeyFile /etc/pki/tls/private/server 0.key 指定根证书122 SSLCACertificateFile /etc/pki/tls/certs/example-c a.crt
7.重起httpd服务[root@server0 ~]# systemctl restart httpd
8.验证:[root@server0 ~]# firefox https://www0.example.com 选择----->我已充分了解可能的风险----->确认安全例外