Domino iNotes服务器配置Apache逆向代理的具体步骤

来源:互联网 发布:销售数据分析报告ppt 编辑:程序博客网 时间:2024/06/01 07:57
摘要:文详细介绍了给 Domino iNotes 服务器配置一个 Apache 逆向代理(reverse proxy)的具体步骤。为了增加网络公共安全性,在 Domino iNotes 服务器的实际部署中,很多企业希望隐藏 Domino iNotes 服务器的地址,不对外暴露它的访问地址,而把它放入局域网内,外部用户通过

由于众所周知的安全考虑,不想对公网暴露 Domino http 服务器的地址?

多个 Domino 服务器能不能对外只用一个地址?

在部署 Domino 的情况中,这种需求越来越多。而这些可以通过安装 Apache http 服务器, 把它作为 Domino 的逆向代理(reverse proxy)来实现。

为什么选择 Apache http 服务器

首先,它是一个开源的项目,文档源码都可以参考到。其次,它已经被广泛使用,健壮性有口皆碑。最后,安装配置很简单,在 Windows 上不到 10 分钟就能完成。

逆向代理是 Apache 服务器的一个应用,它处理来自 internet 上客户端的连接请求,然后将请求转发给内部网络上的服务器,并将从内部网络上服务器上得到的结果返回给 internet 上请求连接的客户端。 可参看以下示意图:

图 1. 逆向代理示意图

Domino iNotes服务器配置Apache逆向代理的具体步骤

上图中 Apache 逆向代理服务器上没有保存任何网页的真实数据,所有的内容都来来自于在内部的 Domino 服务器上。因此对逆向代理服务器的攻击并不会使得 Domino 服务器上的数据遭到破坏,这样就增强了 Web 服务器的安全性。

实际部署中,通常逆向代理位于防火墙外,Domino 服务器位于防火墙里,能受到防火墙的安全保护。

Apache 逆向代理还可以根据需求配置容许的缓存数据,比如图片。还可以配置动态负载平衡,等等其他一些特性,但这些特性不在本文介绍范围内。

安装 Apache Web 服务器

我们以 Windows 为例。

首先去在 apache 的网站 http://httpd.apache.org/download.cgi 下载一个稳定版 Windows 安装包。下载完后,点击执行安装,一路使用默认的配置,只是在填 host 名字的时候,填上实际安装机器对外的 host 名字,比如我们这里填:bj.cn.ibm.com.

安装完后,窗口右下角会有一个图标 ,这时 apache http 服务器已经自动运行了。尝试打开浏览器,输入 http://dev.cn.ibm.com, 回车,会打开默认的网页,表示 apache 服务器工作正常。

如果是测试配置环境,并没有真正的对外 host 名字,可以在 c:\windows\system32\drives\etc\hosts 里面加上:

ip 地址 hostname

如果机器的 ip 地址是 192.168.0.11,就可以加上如下一行:

192.168.0.11 bj.cn.ibm.com

Hostname 可以是多个。若多个 hostname 实际使用同一个 ip,比如下面就是 2 个 host 共享一个 ip 地址:

192.168.0.11 bj.cn.ibm.com sh.cn.ibm.com

逆向代理配置

下面我们来看具体怎么和 Domino 服务器结合,配置逆向代理。现在假设我们有 2 台 domino 服务器,他们属于是一个集群(cluster)。

其中一台 host 名字是:inotesBJ.cn.ibm.com

另一台 host 名字是:inotesSH.cn.ibm.com

Apache 服务器就是上面刚刚安装好的。

在配置好后,internet 用户直接使用 bj.cn.ibm.com 来透明访问 inotesBJ.cn.ibm.com; 或者使用 sh.cn.ibm.com 来透明访问 inotesSH.cn.ibm.com。他们实际并不知道 inoteBJ/inotesSH.cn.ibm.com 的存在。

我们知道 Domino Web 服务支持 http 和 htpps 两种方式,https 的逆向代理配置稍微复杂一些,下面先 http 的配置开始。

Http 请求配置

安装好 Apache Web 服务器后,对 http 请求,它默认使用的是 80 端口。而 Domino 默认使用的 http 端口也是 80,所以为了避免冲突,把 domino 的端口改为 8080.(提示一下,这一步可以一并把 Domino https 默认的端口号 443 改为 4433.)

如下图所示:

图 2. 修改 Domino http(s) 默认端口号
Domino iNotes服务器配置Apache逆向代理的具体步骤

修改结束后,保存,再通过 Admin 控制台,重启一下 http 服务。

接下来打开 apache 应用程序目录,下面有个 conf 子目录,用文本编辑器打开这个目录下的 httpd.conf. 这个文件存放了 Apache 服务器的所有配置信息,为了增加逆向代理支持,我们在文件的末位加上:

Include conf/myproxy.conf

然后在同一个目录下新建一个文件 myproxy.conf,里面加上如下配置。

 LoadModule headers_module modules/mod_headers.so  LoadModule proxy_module modules/mod_proxy.so  LoadModule proxy_http_module modules/mod_proxy_http.so  <VirtualHost *:80>  ServerName bj.cn.ibm.com  ProxyRequests Off  ProxyPassReverse / http://inotesbj.cn.ibm.com:8080/  <Location / >  ProxyPass http:// inotesbj.cn.ibm.com:8080/  </Location>  </VirtualHost>  <VirtualHost *:80>  ServerName sh.cn.ibm.com  ProxyRequests Off  ProxyPassReverse / http://inotesSH.cn.ibm.com:8080/  <Location / >  ProxyPass http:// inotesSH.cn.ibm.com:8080/  </Location>  </VirtualHost> 

保存一下所做的修改,再重启一下 Apache 服务器。 试着在浏览器里面输入 bj.cn.ibm.com, 就会发现已经进入 inotesbj.cn.ibm.com 的登录界面; 相应的试着输入 sh.cn.ibm.com, 就会发现进入 inotesSH.cn.ibm.com 的登录页面。

很简单,http 的逆向代理就配好了。接下来是 https 的逆向代理配置。

Https 请求配置

1.Https 是基于 SSL 的,这意味着作为逆向代理的 Apache 服务器需要一个 SSL 的证书, 而 Domino 使用的证书是 .kyr 格式的,这种格式 Apache 服务器无法识别。所以需要一个工具将 .kyr 格式转换成 Apache 能读取的证书格式(.cert 和 .key)。然而 Domino 并没有自带的内建命令或者工具能把 .kyr 格式转换成任何其他格式。
所幸 IBM 提供了一个叫 ikeyman 的程序, 它是 IBM http server 和 Websphere 的一部分,用它可以打开 .kyr 文件,然后导出成 .pkcs12 格式。如果没有 IBM http server 和 Websphere,可以从下列 ftp 服务器上下载:ftp://ftp.software.ibm.com/software/lotus/tools/Domino/gsk5-ikeyman.zip
下载完成后,根据 readme 里面描述的步骤,打开 ikeyman(注意,ikeyman 不能在 Win7 64 位上运行),在图形用户界面下,先打开 .kyr 文件,然后通过此程序的 import/Export 按钮,选择把 .kyr 导出成 .pkcs12 格式的文件,后缀为 .p12,这期间需要输入生成 .kyr 时设置的密码。 iKeyman 不能直接导出成 Apache 可读的格式,但 .p12 格式已经是个中间格式了。这里我们把导出文件名叫 server.p12.

2. 从 www.openssl.org上下载 openssl,用以下命令将步骤 1 的 .p12 文件转换成 .cert 和 .key 文件。

openssl pkcs12 -in server.p12 -clcerts -nokeys -out server.cert
openssl pkcs12 -in server.p12 -nocerts -nodes -out server.key转换结束后,拷贝这 2 个文件到 Apache 安装目录下。

3. 下面要修改 myproxy.conf:
首先在前面 http 配置过程新建的 myproxy.conf 中 , 在 loadModule 下面加上如下 2 个 module。
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so 再加上增加监听 https 默认端口 443, 如下:
Listen 443
注意,请确保 Domino 已经完成图 2 所示的修改,把 Domino 默认的 SSL 端口改为非 443,如上图为 4433.

4. 接着修改 VirtualHost 部分, SSLCertifcateFile 指向刚刚拷过来的 server.cert 路径,这个路径是相对于 apache 可执行程序的路径。SSLCertifcatekeyFile 指向 server.key 的相对路径。

 <VirtualHost *:443>  ServerName bj.cn.ibm.com:443  SSLEngine On  SSLCertificateFile conf/ssl/server.cert  SSLCertificateKeyFile conf/ssl/server.key  SSLProxyEngine on  ProxyRequests Off  KeepAlive off  ProxyPassReverse / https://inotesbj.cn.ibm.com:4433/  <Location / >  ProxyPass https://inotesbj.cn.ibm.com:4433/  </Location>  </VirtualHost> 

对于 inotesSH.cn.ibm.com, 重复以上步骤,将它的 .kyr 文件转换成 .cert 和 .key 文件,增加一个 VitualHost 部分,对应填上相应的数据。

5. 最后重启一下 Apache 服务器。试着输入 https://bj.cn.ibm.com,将会出现登陆 intoesbj.ibm.com.cn 的页面,同理对于 sh.cn.ibm.com.

终于 Domino 服务器的 https 逆向代理也配好了。

最好这是一份完整的,仅供参考的 myproxy.conf.

配置清单 :

 #######################################################  # Before attempting to use your new reverse-proxy  #  #  1: Stop the Apache server  #  2: Start Apache server  #  #######################################################  LoadModule headers_module modules/mod_headers.so  LoadModule proxy_module modules/mod_proxy.so  LoadModule proxy_http_module modules/mod_proxy_http.so  LoadModule rewrite_module modules/mod_rewrite.so  LoadModule ssl_module modules/mod_ssl.so  LoadModule proxy_connect_module modules/mod_proxy_connect.so  CookieLog logs/cookies.log  Listen 443  <IfModule ssl_module>  SSLMutex default  SSLRandomSeed startup builtin  SSLRandomSeed connect builtin  SSLSessionCache none  </IfModule>  <VirtualHost bj.cn.ibm.com:443>  ServerName bj.cn.ibm.com:443  SSLEngine On  SSLCertificateFile conf/ssl/server.cert  SSLCertificateKeyFile conf/ssl/server.key  SSLProxyEngine on  ProxyRequests Off  <Proxy *>  Order deny,allow  Allow from 127.0.0.1  </Proxy>  KeepAlive off  ProxyPassReverse / https://inotesbj.cn.ibm.com:4433/  ProxyPassReverseCookieDomain inotesbj.cn.ibm.com .cn.ibm.com  <Location / >  ProxyPass https:// inotesbj.cn.ibm.com:4433/  </Location>  </VirtualHost>  <VirtualHost sh.cn.ibm.com:443>  ServerName sh.cn.ibm.com:443  SSLEngine On  SSLCertificateFile conf/ssl/server2.cert  SSLCertificateKeyFile conf/ssl/server2.key  SSLProxyEngine on  ProxyRequests Off  <Proxy *>  Order deny,allow  Allow from 127.0.0.1  </Proxy>  KeepAlive off  ProxyPassReverse / https://inotessh.cn.ibm.com:4433/  ProxyPassReverseCookieDomain inotessh.cn.ibm.com .cn.ibm.com  <Location / >  ProxyPass https:// inotessh.cn.ibm.com:4433/  </Location>  </VirtualHost>  <VirtualHost bj.cn.ibm.com:80>  ServerName bj.cn.ibm.com:80  ProxyRequests Off  ProxyPassReverse / http:// inotesbj.cn.ibm.com:8080/  <Location / >  ProxyPass http:// inotesbj.cn.ibm.com:8080/  </Location>  </VirtualHost>  <VirtualHost sh.cn.ibm.com:80>  ServerName sh.cn.ibm.com:80  ProxyRequests Off  ProxyPassReverse / http:// inotessh.cn.ibm.com:8080/  <Location / >  ProxyPass http:// inotessh.cn.ibm.com:8080/  </Location>  </VirtualHost> 

总结

通过使用 Apache 逆向代理来对外提供 Domino 的 Web 服务功能,是一个很不错的安全选择,实施的代价很小,而得到的功能是很多企业想要的。这样即使有黑客攻破了 Apache 服务器,也获取不了任何有价值的数据,因为所有的数据都在企业的局域网内的 Domino 服务器上。


0 0
原创粉丝点击