Apache的加密访问与squid正反向代理
1、Apache的加密访问
当我们使用Apache共享文件时使用的是http://
但是我们打开百度时是https://
,后者是加密的访问,由于在网页上经常需要用户登陆和认证,如果不加密的话,可能在信道传输过程中被窃取,这样密码就没有意义了,所以需要使用加密的访问https://
。
首先要安装加密插件mod_ssl
,火墙允许https,重启服务。
安装了插件,出现子配置文件/etc/httpd/conf.d/ssl.conf
,默认端口为443,产生默认的密钥对,路径如下图
现在使用https://172.25.254.52
网址,可以使用加密的访问,网址前面有个锁就代表时加密的
点击锁,查看详细信息,提示不安全,这是因为我们没有认证中心进行身份认证,无法确定是可信的网站,这个问题现在没法解决,真实中的公司需要去官方认证才行。我们注意到各种信息都不齐全,所以不能用默认给的锁,我们要自己建立密钥对和证书。
使用下面的命令产生了新的密钥对和证书,这一长句命令意思是请求产生新密钥,加密方式是sha256,输出放在 /etc/httpd/westos.org.key
;产生证书,有效期为365天,输出放在 /etc/httpd/westos.org.crt
。随后要输入一系列相关信息,包括国家,省,城市,公司名,部门名,域名,邮箱。
接着修改子配置文件/etc/httpd/conf.d/ssl.conf
,把证书和密钥的路径都换为刚才生成的,重启服务
现在网页测试,虽然还显示不安全的(因为没有经过官方认证,现在无法解决),但是最起码看着有相关信息了,更正规了
做到现在这步够吗?还不够,思考我们访问百度时,是输入的www.baidu.com
然而直接跳转了https://www.baidu.com
,而我们现在必须访问https://172.25.254.52/
才可以加密访问,继续改进。
首先建立测试目录和文件
修改/etc/httpd/conf.d/vhost.conf
子配置文件,写了两块内容,第一块是针对加密访问的,端口为443,设置域名,共享文件来源,指定加密密钥和证书的来源。第二块是说使用普通的http80端口时,开启重写功能,重写规则是把地址栏中请求主机输入的所有内容转换为https://地址栏中的所有内容。配置完成后重启服务(这里$1
表示RewriteRule后面跟的第一串字符的值)
记得要在地址解析中添加login.westos.org
,实验测试效果如下,成功了,地址栏输入login.westos.org
自动重写为https://login.westos.org/
。
2、squid+Apache正向代理(客户做的)
比如生活中,我们无法访问某个外国网站,但是有一个中间商可以访问外国服务器,那么我们就可以通过中间商访问外国服务器。当我们需要访问时,中间商就把我们想看的外国网站的内容缓存到自己的主机,我们访问中间商就可以看到了。示意图如下。正向代理是客户做的,目的是访问到原本无法访问的服务器。
实验使用虚拟机a代表自己,无法联网到百度。新开一个虚拟机b代表中间商可以联网到百度。测试首先真机要开火墙,设定地址伪装功能,真机变为路由器,然后虚拟机b打开,需要配置网卡文件,最基本的五条再加上网关(设定为真机)和DNS1(电信),重启网络,虚拟机b的ip为172.25.254.99
,现在测试虚拟机b可以ping通172.25.254.77
(真机的ip),也可以ping通www.baidu.com
。
虚拟机b查看/etc/yum.repos.d/
软件仓库是否存在,如果存在,dnf安装squid代理软件,配置/etc/squid/squid.conf
文件,如下图,允许其他人访问,开启缓存目录。然后重启squid服务,设定火墙要允许squid,现在代理服务器就配置好了。
虚拟机a不能ping通www.baidu.com,安装火狐浏览器,在浏览器中设定从代理b这拿数据,设置端口号3128
现在虚拟机a就可以上网百度www.baidu.com了,如下图,但是仍然不能ping通www.baidu.com
3、squid+Apache反向代理(企业做的)
假如我是西安人,百度的服务器在北京,在西安有一台代理服务器(没有真正的资源)。我想上网时,如果直接去找北京百度,会很慢,因为经过很多的路由器地址解析,并且会给北京服务器很大的压力。如果先找最近的西安的代理服务器,代理找北京要资源,缓存在自己的这里,这样很快,因为代理服务器和北京服务器有专用网络。示意图如下。反向代理是企业做的,目的是使客户访问企业资源时更快速。
实验模拟,现在虚拟机b(99)是代理(代表西安),虚拟机a(52)是资源的真正来源(代表北京),真机代表我,想访问百度的资源。
首先虚拟机b设定squid的配置文件/etc/squid/squid.conf
,要添加两句,http_port 80 vhost vport
表示外部人员访问我b时,可以通过http的80端口(我b现在没有http服务),但是可以支持虚拟域名,支持虚拟端口;cache_peer 172.25.254.100 parent 80 0 proxy-only
表示外部人员访问我b时,我b没有数据,那我b就去52这台主机的80端口找资源,不用备用端口,现在只是代理。然后虚拟机b重启squid代理服务。注意虚拟机b需要防火墙允许htppd
虚拟机a(52)现在是资源的真正来源,他要有httpd服务,当然也需要防火墙允许htppd。现在真机打开firefox,输入172.25.254.99显示的资源其实是虚拟机(52)的。
思路是真机去访问99(前提99必须能被访问),但是99没资源,99需要去52找资源(前提是52必须能被访问),99把52的资源缓存在自己这里。看着是真机访问99,实质是通过99访问了52。