Linux Engineer学习------WEB/Postfix

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Engineer学习------WEB/Postfix相关的知识,希望对你有一定的参考价值。

实验环境:修改两台虚拟机防火墙默认区域为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  //返回错误信息给客户端


以上是关于Linux Engineer学习------WEB/Postfix的主要内容,如果未能解决你的问题,请参考以下文章

Linux Engineer学习------NFS

Linux Engineer学习------Samba

Linux Engineer学习------ISCSI

Linux Engineer学习------Mariadb入门

网站后端开发工程师-Web Backend Engineer

Linux学习之Engineer