当前位置: 首页 > news >正文

配置安全的linux-apache服务器(5)

实验简介

实验所属系列:Linux网络服务配置与安全
实验对象: 本科/专科信息安全专业、网络工程
相关课程及专业:系统安全配置、服务器配置、计算机网络
实验时数(学分):2学时
实验类别:实践实验类

预备知识
虚拟主机简介

虚拟主机(Virtual Host)是指在一台主机上运行的多个Web 站点,每个站点均有自己独立的域名或IP地址。虚拟主机允许为不同的IP地址、主机名或同一机器上的不同端口运行不同的服务器站点。譬如,可以在同一个web服务器上使用虚拟主机来运行 http://www.example.com 和 http://www.anotherexample.com 这两个网站。虚拟主机对用户是透明的,就好像每个站点都在单独的一台主机上运行一样。

SSL介绍

默认情况下,客户端使用http协议访问apache服务器,服务器和它的客户之间的通信就不会被加密,这并不能保证数据传输过程中的安全。对于索求信用卡信息的电子商务网站需要更加可靠的传输,而SSL加密连接可以帮助浏览者更加安全可靠的传输数据。使用SSL的是HTTPS协议。

在搭建安全的apache服务器,配置使用基于SSL的HTTPS协议之前,先了解一些证书的一些基本概念。

SSL证书可以在客户端浏览器和Web服务器之间建立一条SSL安全通道。首先要有一个根证书,然后用根证书来签发服务器证书和客户证书。SSL必须安装服务器证书来认证,在此环境中,通常有三个证书:根证书,服务器证书,客户端证书。在生成证书之前,一般会有一个私钥,用私钥生成证书请求,最后利用证书服务器的根证来签发证书。

实验目的

Apache是一种开放源码的HTTP服务器,由于其多平台和安全性而被广泛使用,是最流行的Web服务器端软件之一。本实验首先通过基本配置演示了如何在redhat linux环境下搭建多个基于apache服务器的虚拟主机。在此基础上,进一步完成了基于apache服务器的安全配置,包括基于用户名的认证、基于IP地址的认证以及使用https协议进行双向认证的过程。

实验环境

测试系统:

CentOS  IP:10.1.1.47

WinXP   IP:10.1.1.215

所需软件:httpd-2.2.15-5.el6.i686.rpm、openssl-0.9.8l.tar.gz、od_ssl-2.8.0-1.3.17.tar.gz
实验步骤一
基本配置:安装和启动Apache服务器

1、Apache软件的安装

在RHEL6.0中可以通过两种方式安装Apache服务器。一种是在RHEL6.0光盘上找到自带的httpd-2.2.14-5.el6.i686.rpm软件包。本次实验使用的是centos,软件包已提前下载好。

其中,httpd-manual-2.2.15-5.el6.noarch.rpm是Apache相关的帮助手册。

使用rpm命令安装httpd-2.2.15,如果出现如下安装包的依赖问题

 先用rpm -ivh httpd-tools-2.2.15-86.2.x86_64.rpm安装httpd-tools,然后再执行上述安装命令即可。

 系统安装成功后,会创建/etc/httpd及相关的目录。

 在/etc/httpd中的文件和目录的作用如下:

(1)/etc/httpd/conf/httpd.conf: Apache的主配置文件。

(2)/etc/httpd/logs:其实是符号链接,指向/var/log/httpd目录,用于存放Apache服务相关的日志文件。

(3)/etc/httpd/modules:符号链接,指向/usr/lib/httpd/modules目录,用于存放Apache服务相关的模块。

此外,和apache服务相关的文件及目录还有:

(4)/usr/sbin/apachectl: Apache控制脚本,用于启动、停止、重启服务。

(5)/usr/sbin/httpd: Apache服务器的程序文件。

(6)/usr/share/doc/httpd-2.2.14:Apache说明文档目录。

(7)/var/www: Apache提供的默认网站存放目录。

2、Apache 服务器的启动和停止

当安装完Apache服务器后,如果想让其提供Web服务还必须启动它。

(1)使用service命令来启动和重新启动Apache服务器:

#service httpd start    和   #service httpd restart

(2)使用控制脚本来启动和停止服务

#/usr/sbin/apachectl start 和 #/usr/sbin/apachectl stop

此外,还可以使用#./apachectl -V查看已安装的apache的版本信息,#./apachectl -l 查看apache服务安装的相关的模块。

 3、查看Apache服务器是否启动

可以使用如下命令查看Apache服务器的运行状态:

(1)#service httpd status

(2)#pstree | grep httpd

(3)#ps -eaf | grep httpd

 

查看Apache监听的端口

 可以看到,80端口号处于监听状态。为使客户端能访问Apache服务器的80端口,要打开防火墙的TCP80端口。使用命令如下:

 或者使用下面的命令清空防火墙的所有规则:
#iptables  -F

4、测试服务器

可以在客户端的浏览器中输入服务器的IP验证一下,如果没有错误,会出现下图页面。

 5、SElinux和Apache服务器

若SElinux处于开启状态,则在SELinux默认的策略中,apache进程默认只能访问/var/www目录。为了完成后面的一些操作,需要关闭SELinux,关闭的方法是:

(1)修改/etc/selinux/config配置文件,设置 SELINUX=disabled,然后重启系统后生效。

(2)如果不想重启系统,可以使用命令:#setenforce 0   //建议使用此命令

如果不想关闭SELinux,又想访问其他目录,可以用如下命令给自己创建的目录,如/var/website1,添加httpd content类型的上下文:

#chcon -Rt  httpd_sys_content_t  /var/website1

其中,-R(recursive)递归,-t(type)类型

虚拟主机设置

虚拟主机(Virtual Host)是指在一台主机上运行的多个Web 站点,每个站点均有自己独立的域名或IP地址。虚拟主机允许为不同的IP地址、主机名或同一机器上的不同端口运行不同的服务器站点。譬如,可以在同一个web服务器上使用虚拟主机来运行 http://www.example.com 和 http://www.anotherexample.com 这两个网站。虚拟主机对用户是透明的,就好像每个站点都在单独的一台主机上运行一样。

Apache服务器提供两种类型的虚拟主机:1)基于IP 地址的虚拟主机:每个Web 站点拥有不同的IP 地址;2)基于名字或主机名的虚拟主机:不同的站点可以使用同一个IP地址,但使用的域名不同。通过使用虚拟主机技术,既可以在同一个服务器上同时搭建多个Web站点,又可以通过共享同一个IP 地址以解决IP 地址缺乏的问题。

对于默认的虚拟主机和基于 IP 的虚拟主机,该选项和<VirtualHost> 指令相对应;对于基于名称的虚拟主机,还需要配合NameVirtualHost 指令使用。

1、基于 IP 的虚拟主机

基于IP 的虚拟主机拥有不同的IP 地址,这就要求服务器必须配置多个IP 地址。

(1)添加多个IP地址

使用命令#ifconfig查看网络配置。假设你的网络设备名为eth0。下面首先添加一个虚拟IP接口,并配置IP地址为 10.1.1.120,使用命令:

$sudo ifconfig eth0:0 10.1.1.120 up  //为网络设备eth0:0添加IP并启动

类似地,再添加一个 10.1.1.121 的 ip  

$sudo ifconfig eth0:1 10.1.1.121 up  //注意,此时的设备名为eth0:1

(2)添加两个虚拟主机所对应的站点目录

为了完成随后对虚拟主机的测试,首先在/var目录下创建子目录website1,作为使用IP地址为10.1.1.120虚拟主机所对应的站点目录,同时在此目录下创建一个测试文件test1.html:

#mkdir  /var/website1

#echo   'This virtual host is based on ip address 10.1.1.120!'  > /var/website1/test1.html

目录下创建测试文件:

#mkdir  /var/website2

#mkdir  /var/website2/icons

#echo   'This virtual host is based on ip address 10.1.1.121!'  > /var/website2/test2.html

(3)更改apache配置文件/etc/httpd/conf/httpd.conf

打开配置文件/etc/httpd/conf/httpd.conf,找到第3 部分Section 3,即用于设置和创建虚拟主机(Virtual Hosts)的部分,在其中添加以下内容:

<VirtualHost 10.1.1.120>          //虚拟主机1,使用的IP是10.1.1.120

DocumentRoot  "/var/website1"   //虚拟主机所对应的目录

Options Indexes FollowSymLinks      //Indexes表示在指定的目录中找不到指定的文件时,允许生成当前目录的文件列表

</VirtualHost>

<VirtualHost 10.1.1.121>             //虚拟主机2,使用的IP是10.1.1.121

DocumentRoot  "/var/website2"

Options Indexes FollowSymLinks

</VirtualHost>

(4)重启服务并验证

在服务器端保存httpd.conf 配置文件,利用命令#apachectl  -t检查并确保虚拟主机配置正确。使用命令“service httpd restart”重启Apache 服务器,以使配置生效。

在客户端打开浏览器,输入http://10.1.1.120/test1.html,如果配置正确,会看到

 2、基于名称的虚拟主机

假设我们想使用www.abc.com,访问站点website1,使用www.xyz.com访问站点website2,需要创建两个基于名称的虚拟主机。因为最终域名要被解析为IP地址,所以www.abc.com和www.xyz.com要对应到服务器的IP,这两个站点可以使用同一个IP,也可以使用不同的IP。假设使用同一个IP为10.1.1.122,下面给出具体配置步骤:

(1)添加虚拟主机ip接口

$sudo ifconfig eth0:2 10.1.1.122 up  //为网络设备eth0:2添加IP并启动

(2)创建相关的目录,添加主页文件

#mkdir  /var/abc

#echo "welcome to abc page">/var/abc/abctest.html

#mkdir  /var/xyz

#echo "welcome to xyz page">/var/xyz/xyztest.html

(3)更改apache配置文件/etc/httpd/conf/httpd.conf

找到第3 部分Section 3,即用于设置和创建虚拟主机(Virtual Hosts)的部分,在其中添加以下内容:

NameVirtualHost 10.1.1.122

<VirtualHost 10.1.1.122>

DocumentRoot  "/var/abc"

ServerName www.abc.com

</VirtualHost>

<VirtualHost 10.1.1.122>

DocumentRoot  "/var/xyz"

ServerName www.xyz.com

</VirtualHost>

(4)配置客户端

配置客户端,保证能将域名 www.abc.com和www.xyz.com解析成服务器的IP地址10.1.1.122。方法有两个,一是配合使用DNS服务,设置客户端的DNS Server的IP地址;二是修改客户端的C:\Windows\System32\drivers\etc\hosts文件。DNS的配置比较复杂,前面章节已有所涉及,下面我们给出的是修改hosts文件。直接修改hosts文件,添加下面的两行:

10.1.1.122  www.abc.com 

10.1.1.122  www.xyz.com

保存退出后,用ping命令验证一下

#ping  www.abc.com

(5)测试

在服务器端保存httpd.conf 配置文件,利用命令#apachectl  -t检查并确保虚拟主机配置正确。使用命令“service httpd restart”重启Apache 服务器,以使配置生效。

在客户端打开浏览器,输入http://www.abc.com/abctest.html

如果配置正确,会看到

welcome to abc page的页面。

实验步骤二
安全配置进阶


1、基于认证的配置 

(1)基本的Apache用户认证方法

若对某一目录,如/var/website1/docs下的文件需要做到用户认证,用vim编辑器打开Apache的主配置文件vim /etc/httpd/conf/httpd.conf

 则在httpd.conf 中加入下面的行

<Directory /var/website1/docs>

 Options Indexes 

AllowOverride AuthConfig

</Directory>

使用Apache安装后自带的程序htpasswd添加用于认证的用户,并将这些用户保存到文件/etc/.passwd,此文件的格式是每行一个用户名:密码。

htpasswd命令用法:htpasswd [选项] 文件名 用户名

例如:#htpasswd -c /etc/.passwd zhangsan  //其中-c表示生成新的文件,zhangsan是用户名,生成文件时还可以选取多种加密方式,参数-p(不加密),-m(md5加密),-s(SHA加密),-d(ENCRYPT加密)

要删除用户zhangsan,使用命令:

#htpasswd -D /etc/.passwd  zhangsan

再添加用户lisi:  #htpasswd  /etc/.passwd  lisi   //lisi是用户名,如果此用户在文件.htaccess存在,则更新其密码,否则添加用户

 在要认证的目录/var/website1/docs下添加文件.htaccess,内容如下:

AuthName "MyAuth"

AuthType basic

Authuserfile /etc/.passwd

Require user zhangsan  lisi …

验证:浏览器输入:http://10.1.1.120/docs/file1.txt

 只有能提供正确的用户名和密码对,才允许登录访问,这是针对任何地址来的请求都要求提供用户名和密码认证。

(2)针对部分网段或地址要求认证。

要限制某些IP地址的访问,需要设置对IP地址的认证。假定站点1主目录是/var/website1,主目录下的某个目录,如/var/website1/iplimit是禁止10.1.1.101访问的,可以在httpd.conf中放入:

<Directory /var/website1/iplimit>

Options Indexes FollowSymLinks

AllowOverride AuthConfig

order deny,allow

deny from 10.1.1.101

</Directory>

2、SSL加密的配置

SSL证书可以在客户端浏览器和Web服务器之间建立一条SSL安全通道。首先要有一个根证书,然后用根证书来签发服务器证书和客户证书。SSL必须安装服务器证书来认证,在此环境中,通常有三个证书:根证书,服务器证书,客户端证书。在生成证书之前,一般会有一个私钥,用私钥生成证书请求,最后利用证书服务器的根证来签发证书。

2-1:服务器端认证配置

(1)安装并配置ssl环境

用以下命令安装openssl(环境已提供)

#yum -y install openssl

安装完成后,即可用openssl命令来生成、签署证书了,查看openssl的安装目录是:/usr/bin/openssl


安装mod_ssl

#yum -y install mod_ssl

实验机内用不了yum命令,用#rpm -ivh mod_ssl-2.2.15-86.2.x86_64.rpm 命令安装

安装之后就会在目录/etc/httpd/conf.d下生成ssl.conf文件。

(2)生成CA证书

要建立一个 CA 的证书,首先为CA证书 创建一个 RSA 私钥

#cd /root

#openssl genrsa -des3 -out ca.key 1024  //生成私钥 ca.key 文件。在此过程中系统会提示输入密码,输入后牢记它。

#chmod 400 ca.key    //将私钥文件属性改为400

#openssl rsa -noout -text -in ca.key  //查看秘钥ca.key的内容,

#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt //利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(X.509结构),生成 ca.crt 文件

在证书生成过程中需要输入下列信息:

Country Name: cn //两个字母的国家代号;

State or Province Name: ShanDong //省份名称

Locality Name: QingDao //城市名称

Organization Name: Family Network //公司名称

Organizational Unit Name: Home //部门名称

Common Name: 10.1.1.47  //注意要与服务器的名称或IP一致(因为我们使用IP来访问服务器,这里我们填的是服务器的IP)

Email Address: zhang@163.com //Email地址

#chmod 400 ca.crt    //将文件属性改为400,并放在安全的地方。

#openssl x509 -noout -text -in ca.crt   //查看证书的内容

(3)创建服务器证书签署请求

首先为你的 Apache 创建一个 RSA 私用密钥:

#openssl genrsa -des3 -out server.key 1024  //生成 server.key 文件

#chmod 400 server.key        //将文件属性改为400,并放在安全的地方。

#openssl rsa -noout -text -in server.key  //查看秘钥的内容

#openssl req -new -key server.key -out server.csr  //用 server.key 生成证书签署请求server.csr。这里也要输入一些信息,和证书生成时输入的内容类似。 至于 'extra' attributes 不用输入。

#openssl req -noout -text -in server.csr  //查看证书签署请求server.csr的细节

签署证书

#openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

#chmod 400 server.crt   //将文件属性改为400,并放在安全的地方。

#rm server.csr    //删除CSR

(4)修改apache设置

修改/etc/httpd/conf.d/ssl.conf,找到下面的两行

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

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

将其中的localhost.crt、localhost.key参数分别改为刚才生成的文件server.crt、server.key,并将server.crt,server.key拷贝到相应的目录中。

(5)测试

1)重启apache服务,此时要填入生成证书时输入的认证码:

 2)windows客户端端验证

打开另一台机器,如windows客户端。

打开IE浏览器,输入https://10.1.1.47,弹出安全警告

 单击“查看证书”,可以看到颁发给服务器的证书。选择“y”,继续,打开服务器主页。

 图 服务器信任警告

单击添加例外“我已充分了解可能得风险”按钮,然后“添加例外”,出现图6所示对话框,单击其中的查看按钮“查看…”,可以查看关于该证书的详细信息。

 图 添加安全例外

这样,基于HTTPS协议的网页发布成功,再次单击地址栏,出现下图所示,单击“更多信息…”按钮,查看更多信息。

 图 查看更多信息

2-2:客户端认证配置

(1)生成客户端密钥库及证书

//生成用户的 RSA 密钥对

#openssl genrsa -des3 -out client.key 1024

//生成用户证书请求

#openssl req -new -days 3650 -key client.key -out client.csr   //(注意:其中Common Name填写客户端的ip,如10.1.1.215)

//使用 CA 签发用户证书,生成client.crt文件

#openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt

//生成pkcs格式文件,将来导入到客户端浏览器中

#openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

 注意:其中输入的export password要记住,后面用。

//将client.p12复制到服务器所对应的网站根目录,这里是/var/www/html

#cp -p  /root/client.p12 /var/www/html

(2)客户端下载所生成的证书

因为证书是在linux端生成的,这里要在win下使用,所以先将client.p12从linux传输到win下,

将客户端证书放到网站根目录下,由win主机去下载到桌面

 图 客户端下载证书

(3)导入并查看证书

如果客户端使用ie浏览器,可以直接双击client.p12,按照提示一步步导入即可。

或者,使用firefox浏览器导入client.p12证书文件。步骤:打开forefox浏览器,找到firefox 工具主菜单:工具-->选项->高级->证书;单击“查看证书”后,将证书导入即可。

图 导入证书

输入前面的密码:

 图 加密证书

(4)修改ssl配置文件ssl.conf,强行对客户端认证

修改/etc/httpd/conf.d/ssl.conf,找到下面的行

SSLCACertificateFile   /etc/pki/tls/certs/ca-bundle.crt

SSLVerifyClient require  //要求进行客户端认证。

SSLVerifyDepth 10

删除行首的注释“#”,并将其中的 ca-bundle.crt 修改为 ca.crt,并将原来生成的文件ca.crt其拷贝到相应的目录/etc/pki/tls/certs中。

#cp -p /root/ca.crt /etc/pki/tls/certs

 (5)测试:https://serve ip

首先,重启服务。#service httpd restart

接下来,在windows客户端,打开浏览器输入:https://10.1.1.47,弹出对话框,让用户选择客户端证书,对客户端认证。

具体实验截图

 

 

 

 

 

 

相关文章:

  • 【栈】数据结构栈的实现
  • BPMP 需求
  • 软件测试(概念Ⅰ) · 软件测试的基本概念 · 什么是需求 · 测试用例的概念 · 软件错误(bug)的概念
  • 理论一:当谈论面向对象的时候,我们到底在谈论什么?
  • 带你三分种了解网络用语之网络层、传输层
  • 元宵节:css画灯笼
  • 异步编程实践
  • Go XORM学习
  • 【golang/go语言】go语言中包的使用、Init()函数、协程和接口
  • 【电源专题】JEITA学习
  • cadence SPB17.4 S032 - PSpice - 仿真元件参数的含义 - 以VSIN为例
  • 印刷线路板焊盘和金手指自动光学检测研究
  • 算法刷题打卡第81天:兼具大小写的最好英文字母
  • 【MySQL】MyCAT三大配置文件详解(MySQL专栏启动)
  • go-zero源码阅读-布隆过滤器
  • 数组试题(Python实现)
  • PHP 杂项 函数
  • Mybatis持久层框架 | CRUD
  • 内网渗透(八)之基础知识-企业域中计算机分类和专业名
  • Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉