实验环境:修改两台虚拟机防火墙默认区域为trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
1、web
案例1搭建基本的Web服务
? 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页
? Hyper Text Markup Language,超文本标记语言
? Hyper Text Transfer Protocol,超文本传输协议
装包、起服务
服务端:Server
1. 安装软件httpd
2. 启动httpd服务,设置开机自起
默认网页文件的位置:/var/www/html/index.html
3. 书写一个页面文件
# echo '<h1>My First Web' > /var/www/html/index.html
客户端:Desktop
#前提:真机所有浏览器关闭
1.测试访问:firefox 172.25.0.11
2.测试访问:命令行测试工具
[[email protected] ~]# yum -y install elinks
[[email protected] ~]# elinks -dump 172.25.0.11
虚拟机Server0:
1.修改配置文件/etc/httpd/conf/httpd.conf
补充vim 命令模式 /ServerName 全文查找ServerName 按n、N跳转
将开头的‘#’去掉
ServerName server0.example.com:80
2.重起httpd服务
虚拟机desktop0:
测试:elinks -dump server0.example.com
DocumentRoot:网页根目录(/var/www/html)
虚拟机Server0:
1.修改配置文件/etc/httpd/conf/httpd.conf
补充vim 命令模式 /Doc 全文查找Doc 按n、N跳转
DocumentRoot "/var/www/myweb"
2.创建目录/var/www/myweb,重起httpd服务
3.书写新的测试页面
[[email protected] ~]# echo woshi myweb > /var/www/myweb/index.html
虚拟机desktop0:
测试:elinks -dump server0.example.com
服务端与客户端路径的对照:
客户端: elinks -dump server0.example.com
服务端: /var/www/myweb
客户端: elinks -dump server0.example.com/abc
服务端: /var/www/myweb/abc
客户端: server0.example.com/abc/private
服务端: /var/www/myweb/abc/private
2、虚拟Web主机
一台服务器,提供多个不同的Web站点
? 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
案例2基于域名的虚拟主机
一旦启用 虚拟Web主机功能,所有的站点都必须用虚拟Web主机来实现
/etc/httpd/conf.d/*.conf #自定义一个配置文件
? 为每个虚拟站点添加配置
<VirtualHost IP地址:端口>
ServerName #此站点的DNS名称
DocumentRoot #此站点的网页根目录
</VirtualHost>
#帮助文档 /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
虚拟机Server0:
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf #调用配置
<VirtualHost *:80> #虚拟Web主机开始
DocumentRoot /var/www/qq #指定网页文件根目录
ServerName www0.example.com #指定域名
</VirtualHost> #虚拟Web主机结束
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/myweb
ServerName server0.example.com
</VirtualHost>
[[email protected] virtual]# httpd -t #确保语法检查OK
Syntax OK
[[email protected] ~]# mkdir /var/www/qq #建立相应的网页目录
[[email protected] ~]# mkdir /var/www/baidu #建立相应的网页目录
[[email protected] ~]# echo QQ > /var/www/qq/index.html
[[email protected] ~]# echo baidu > /var/www/baidu/index.html
[[email protected] ~]# systemctl restart httpd
案例3实现httpd访问控制,实现仅本机访问页面
? 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有明确设置
<Directory 目录的绝对路径>
.. ..
Require all denied|granted
Require ip IP或网段地址 .. ..
</Directory>
虚拟机Server:
1.建立目录
# mkdir /var/www/myweb/private
2.写入网页文件
# echo woshi private > /var/www/myweb/private/index.html
测试:
虚拟机Server: elinks -dump server0.example.com/private
虚拟机Desktop: elinks -dump server0.example.com/private
3.实现httpd服务访问控制
[[email protected] ~]# vim /etc/httpd/conf.d/nsd02.conf #可以写在虚拟主机配置文件内
<Directory "/var/www/myweb/private">
Require ip 127.0.0.1 172.25.0.11 #允许访问的ip
</Directory>
4.重起httpd服务
测试:
虚拟机Server: elinks -dump server0.example.com/private #可以
虚拟机Desktop: elinks -dump server0.example.com/private #失败
案例4:使用自定义Web根目录
SELinux 安全上下文(标签)
? 方式1:参照标准目录,重设新目录的属性
– chcon [-R] --reference=模板目录 新目录
调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
[[email protected] ~]# mkdir /webroot
[[email protected] ~]# echo woshi webroot > /webroot/index.html
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /webroot #注意路径和之前的区别
ServerName server0.example.com
</VirtualHost>
[[email protected] ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot">
Require all granted #允许所有访问
</Directory>
[[email protected] ~]# ls -Zd /var/www #查看该路径下文件夹的selinux属性
[[email protected] ~]# ls -Zd /webroot[[email protected] ~]# chcon -R --reference=/var/www /webroot/ #把指定文件的安全环境设置为与参考文件相同
[[email protected] ~]# ls -Zd /webroot
[[email protected] ~]# systemctl restart httpd
cp会继承标签值,mv不会继承: 尽量用cp
案例5部署动态Web站点
1.在虚拟机Server上,下载动态页面(Python页面)
预先准备一个动态网页
# wget http://classroom/pub/materials/webinfo.wsgi
# cat webinfo.wsgi
2.在虚拟机Server上,放入webapp0.example.com默认网页根目录
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
[[email protected] ~]# cp webinfo.wsgi /var/www/baidu/
[[email protected] ~]# ls /var/www/baidu/
3.安装Python程序,解析识别 Python页面
[[email protected] ~]# yum -y install mod_wsgi
4.Desktop测试:
# elinks -dump webapp0.example.com/webinfo.wsgi
# 可以看到Python代码
5.方便访问,让客户端访问webapp0.example.com可以直接看到 Python页面
虚拟机Server0上:网页跳转(网页别名)
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
alias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
[[email protected] ~]# systemctl restart httpd
6. 客户端测试访问
[[email protected] ~]# elinks -dump webapp0.example.com
7. 程序 Python 的翻译
虚拟机Server0上:
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
WsgiScriptAlias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
[[email protected] ~]# systemctl restart httpd
8. 客户端测试访问
[[email protected] ~]# elinks -dump webapp0.example.com
9.此webapp0.example.com侦听在端口8909
虚拟机Server0上:
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909
<VirtualHost *:8909>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
WsgiScriptAlias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
显示SELinux开放的所有接口
[[email protected] ~]# semanage port -l
[[email protected] ~]# semanage port -l | grep http
[[email protected] ~]# semanage port -a -t http_port_t -p tcp 8909
-a :添加
-t:类型
-p:协议
[[email protected] ~]# systemctl restart httpd
[[email protected] ~]# elinks -dump webapp0.example.com:8909
需要注意的是,原始的独立站点可能出现异常,访问时并不是原始的网页:
[[email protected] ~]# elinks -dump http://server0.example.com/
Virtual Site.
原因是一旦启用虚拟站点机制以后:
外部的 DocumentRoot、ServerName 会被忽略
第1个虚拟站点被视为默认站点,若客户机请求的URL不属于任何已知站点,则由第1个站点响应
案例6搭建安全的Web服务
http------>https
1.安装,实现Web加密传输的软件
[[email protected] ~]# yum -y install mod_ssl
[[email protected] ~]# ls /etc/httpd/conf.d/
autoindex.conf README userdir.conf
nsd01.conf ssl.conf welcome.conf
2.部署网站数字证书(营业执照)
#说明:该案例并没有介绍证书的制作过程
cd /etc/pki/tls/certs/
wget http://classroom/pub/tls/certs/server0.crt
3.部署网站根证书(公安局信息)
cd /etc/pki/tls/certs/
wget http://classroom/pub/example-ca.crt
4.部署私钥(用于解密)
cd /etc/pki/tls/private/
wget http://classroom/pub/tls/private/server0.key
5.修改配置文件/etc/httpd/conf.d/ssl.conf
vim /etc/httpd/conf.d/ssl.conf
补充:vim 末行模式 :set nu 添加行号
59 DocumentRoot "/var/www/html" #去掉注释
60 ServerName server0.example.com:443 #去掉注释,修改域名
指定网站证书位置及名称
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
指定私钥位置及名称
107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key
指定根证书位置及名称
122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
6.重起httpd服务
7.Desktop验证:
[[email protected] ~]# firefox https://server0.example.com
点击: 我以了解安全的风险
添加例外
确认安全例外
2、配置邮件服务器
? 电子邮件服务器的基本功能
– 为用户提供电子邮箱存储空间(用户名@邮件域名)
– 处理用户发出的邮件 —— 传递给收件服务器
– 处理用户收到的邮件 —— 投递到邮箱
SMTP(发邮件的协议 端口:25)
pop3(收邮件的协议 端口:110)
DNS:classrom.example.com
server0.example.com
虚拟机Server0
1.安装postfix,提供邮件功能的软件
2.建立邮件账户,邮件服务器上本地用户
[[email protected] /]# useradd -s /sbin/nologin yg
[[email protected] /]# useradd -s /sbin/nologin xln
[[email protected] /]# echo 123 | passwd --stdin yg
[[email protected] /]# echo 123 | passwd --stdin xln
3.配置邮件服务器 /etc/postfix/main.cf
[[email protected] /]# vim /etc/postfix/main.cf
99 行: myorigin = server0.example.com #默认补全的邮件域名后缀
116 行: inet_interfaces = all #允许所有的网络接口 监听接口
164 行: mydestination = server0.example.com #判断为本域邮件
myhostname #本服务器主机名称
relayhost #目标邮件服务器
4.重起postfix服务
[[email protected] /]# systemctl restart postfix
测试:
使用mail命令发信/收信
? mail 发信操作
mail -s '邮件标题' -r 发件人 收件人
非交互式使用:
echo abc | mail -s 'first' -r
? mail 收信操作
mail [-u 用户名]
[[email protected] /]# mail -s 'test01' -r yg xln
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
.
EOT
[[email protected] /]# mail -u xln
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/xln": 1 message 1 new
>N 1 [email protected] Tue Dec 5 14:18 19/598
& 1
nullclient邮件服务(邮件空客户端)
? nullclient,空客户端
– 不提供任何邮箱账号,因此不需要投递邮件
– 但是可以为用户代发邮件
1.把Desktop配置成邮件服务器
[[email protected] ~]# lab smtp-nullclient setup #预先准备的脚本程序
2.配置Server为邮件空客户端
[[email protected] /]# vim /etc/postfix/main.cf
– 所发出的邮件显示来自于 desktop0.example.com
99行: myorigin = desktop0.example.com
116行: inet_interfaces = localhost
164行: mydestination =
317行: relayhost = [172.25.0.10] #将邮件移交给那台服务器
3.重起postfix服务
[[email protected] /]# systemctl restart postfix
验证:
在Server上发一封邮件,给本地的Student
[[email protected] /]# mail -s 'test02' -r yg student
abc
.
EOT
到Desktop:最终由Desktop上的student收到
[[email protected] /]# mail -u student
inet_interfaces = loopback-only //仅本机
mynetworks = 127.0.0.0/8 [::1]/128 //信任网络
local_transport = error:local delivery disabled //返回错误信息给客户端
原文地址:http://blog.51cto.com/13452945/2061320