实验简介
实验所属系列: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,弹出对话框,让用户选择客户端证书,对客户端认证。
具体实验截图
文章来源:https://www.toymoban.com/news/detail-777287.html
文章来源地址https://www.toymoban.com/news/detail-777287.html
到了这里,关于配置安全的linux-apache服务器(5)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!