欢迎投稿

今日深度:

Oracle最佳替代者PostgreSQL数据库的整体安全性(1)(7)

SSH 隧道使用端口转发

IP 转发是一项隧道tunneling)技术,它可以将 Internet 包从一台主机转发到另一台主机。它允许您的 PostgreSQL 客户机,比如 psql、pgadmin 甚至 openoffice,通过一个 SSH 连接与远程 Postgres 服务器建立联系。

考虑下面的问题:

•如果远程 PostgreSQL 服务器上不存在 psql 客户机,会发生什么?
•如果需要在您的工作站和远程主机之间上传或下载数据,会发生什么?
•如果需要使用数据库客户机来执行 psql 客户机无法很好地执行或根本无法执行的任务,该怎么做?
•如何对网络使用隧道,从而使您的团队能够远程连接到防火墙后面的数据库?
这个例子将一个客户机本地主机)连接到一台远程主机192.168.2.100)。在工作站的端口 10000 创建了一个代理连接。客户机连接到端口 10000 后,被转发到远程主机的 PostgreSQL 服务器,后者正在侦听端口 5432:ssh -L 10000:localhost:5432 192.168.2.100。

添加 -g 参数switch)允许其他主机利用您的转发连接,这使得连接成为了专门用于 Postgres 连接的即时虚拟专有网VPN):ssh -g -L 10000:localhost:5432 192.168.2.100.

有关隧道的一些注意事项:

•数据库客户机和服务器都被认为它们正在与各自的本地主机通信。
•注意要配置文件 pg_hba.conf 以使用 TCP/IP 为本地主机连接设置正确的身份验证。
•1024 以内的端口全部由根用户控制。
•SSH 会话需要在 PostgreSQL/SSH 服务器上有一个已有的用户帐户。
由 SSL 加密的会话

PostgreSQL 中的加密会话要求服务器通过 --with-openssl 参数进行编译。Linux 发行版二进制文件提供了这个功能。诸如 psql 和 pgadmin 之类的客户机也具有这类必需的功能。

可以使用 pg_config 命令行工具对服务器进行检验,如下所示。

pg_config --configure            

针对加密会话配置 PostgreSQL 服务器:

1.使用 OpenSSL 命令行工具 openssl 创建一个自签名的服务器密匙server.key)和证书server.crt)。
1.创建服务器密匙:openssl genrsa -des3 -out server.key 1024。
2.删除密码 openssl rsa -in server.key -out server.key。
3.为服务器创建一个自签名的证书:openssl req -new -key server.key -x509 -out server.crt。
2.将 server.key 和 server.crt 这两个文件安装到数据集群的目录中。
3.编辑 postgresql.conf 文件并设置指定的对:ssl = on。
4.重启服务器。

清单 23. 成功的 SSL 加密会话连接
robert@wolf:~$ psql -h 192.168.2.100 -U robertWelcome to psql 8.2.4, the PostgreSQL interactive terminal.Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quitSSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)robert=#            

服务器将始终针对已加密的会话请求测试连接。然而,通过编辑身份验证文件 pg_hba.conf,您可以控制服务器的行为。在客户机端,可以通过定义环境变量 PGSSLMODE 来控制客户机psql)的默认行为:是否使用加密的会话。

共有 6 种模式其中两种新模式特别针对 V8.4)。

模式 描述
disable 将只尝试未加密的 SSL 连接。
allow 首先尝试未加密的连接,如果不成功,则尝试 SSL 连接。
prefer 与 allow 模式相反;首先尝试 SSL 连接,然后尝试未加密连接。
require 客户机只尝试已加密的 SSL 连接。
verify-ca SSL 连接,并且具有由可信 CA 签发的有效客户机证书。
Verify-full SSL 连接,具有由可信 CA 签发的有效客户机证书,并且服务器主机名匹配证书的主机名。

例如:导出 PGSSLMODE=prefer.

SSL 证书

SSL 身份验证是指客户机和服务器交换由具有可靠凭证的第三方签发的证书。这个第三方被称为证书权威CA)。如果客户机或服务器不能从另一方接收到合法的证书,那么连接将被拒绝。

尽管涉及许多细节,但是在 PostgreSQL 上使用 SSL 证书设置身份验证非常简单:

1.编辑 postgresql.conf,ssl=on。 服务器端身份验证要求下面的文件必须位于其数据集群中:

•server.key
•server.crt必须由 CA 签发)
•root.crt检验客户机身份验证)
•root.crl证书撤销列表,可选)
文件 root.crt 包含一个经过检验的证书列表。其中应该包含可用于您的特定发行版的所有证书,您也可以向该文件中添加证书。
文件 root.crl 类似于 root.crt,因为它包含一组经过 CA 签名的证书。然而,这些证书属于已被撤销了连接权的客户机。一个空的 root.crl 文件不会影响身份验证过程。
客户端身份验证要求下面的文件必须位于客户机的主目录 ~/.postgresql 中:

•postgresql.key
•postgresql.crt
•root.crt检验服务器身份验证)
•root.crl证书撤销列表,可选)
和服务器的 root.crt 一样,客户机的 root.crt 文件包含了由一个可信的第三方 CA 签名的服务器证书的列表。最后一个文件 root.crl 是可选的,用于撤销服务器证书。
要获取证书,需要客户机和服务器都向 CA 提交了证书请求 client.csr 和 server.csr。证书只有在生成了它们的密匙后才能被创建,如下所示。
openssl req -new -newkey rsa:1024 -nodes -keyout client.key -out client.csropenssl req -new -newkey rsa:1024 -nodes -keyout server.key -out server.csr

可以使用多种方法执行 openssl 实用工具来获得证书。例如,您可以对它们施加一个生命周期,或者使用自签名证书来生成它们,这样就不需要涉及到 CA。

2.您现在可以使用三种方法生成客户机和服务器证书。您可以:
•获得由可信 CA 签名的 client.csr 和 server.csr。
•通过使用 openssl perl 实用工具 CA.pl 成为 CA。
•创建自签名证书并分别将它们添加到服务器和客户机的 root.crt 文件中。
3.下面是一组用于 CA.pl 的命令,它们被进行了缩减。查看 CA.pl 手册页获得有关证书请求的更多信息。
•CA.pl -newca创建新 CA)
•CA.pl -newreq使用私匙创建一个证书请求)
•CA.pl -signreq 使用您创建的 CA 对证书请求签名)
对于坚持使用纯开源技术的人,可以在 http://www.cacert.org 找到 “免费” 的证书。


清单 24. 一个示例证书
-----BEGIN CERTIFICATE-----MIIC9TCCAl6gAwIBAgIJAMuhpY+o4QR+MA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxFDASBgNVBAMTC0NvbW1vbiBOYW1lMB4XDTA3MDIxMjEyMjExNVoXDTA3MDMxNDEyMjExNVowWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEUMBIGA1UEAxMLQ29tbW9uIE5hbWUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKA4nX/eBKsPJI1DmtH2wdJE9uZf+IRMUWYrAEDL4F6NEuo2+BsIoOBKS/rrV77Itet9kduJCQ6k/z2ouAVb4muXpJALDjJpYBXt9wqZf+2p1n9dqDw1rCWBjXIdhOcA3DDvu0Ig1FUfm8GS97evxM5IJBECRnK/5JZroXCRSHcpAgMBAAGjgcAwgb0wHQYDVR0OBBYEFElEWNUCV+61itXp86czrDe35vjrMIGNBgNVHSMEgYUwgYKAFElEWNUCV+61itXp86czrDe35vjroV+kXTBbMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRQwEgYDVQQDEwtDb21tb24gTmFtZYIJAMuhpY+o4QR+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAaFzbUmXcWVzqaVeEpZkNwF/eVh110qIUUxXGdeKZGNXIyK67GCUYSG/IFkZ/hrGLeqElLrdmU0mHd2Enq2IuvhxnsOVTTickjKospJvlHPYSumkXx0Xpzey9PhjLh1chpxNGTATKb8ET8YZvBRrDHl/EMPIjLd62iSR/ugFe8go=-----END CERTIFICATE-----

4.假设您已经生成了自签名证书,将它们复制到正确的位置并编辑 root.crt。 客户机证书被保存在服务器的 root.crt 中,而服务器的证书被保存在客户机的 root.crt 中。

5.重启服务器后监视日志消息,确定一切配置正常。
服务器的默认行为将仍然使用加密。这可以通过编辑 postgresql.conf 中的名称对 ssl_ciphers='NULL' 并重启服务器禁用。慎重考虑您的决定:将 ssl_ciphers 设置为 NULL 就可以禁用加密。

结束语

在 本文中,您了解了有关 PostgresSQL 数据库服务器保护的基本知识。有关这个话题还涉及到许多内容,但是一篇文章所能介绍的内容是有限的。目前有关 PostgreSQL 的介绍还不够丰富。也许,借助您的一点帮助,我们可以更深入地了解 PostgreSQL 安全性。

  1. 专题:网站常见的攻击与防御
  2. Web应用防火墙是如何为客户提供防护的
  3. 选择硬件防火墙时你应注意的十件事
  4. 深入理解防火墙 有效屏蔽外界的攻击
  5. 防火墙功能分类及其局限性介绍分析
  6. Windows 7 SP1缘何会在正式版之前露面?
  7. 美韩作战计划泄漏 敏感部门USB使用需谨慎
  8. DDoS来袭Amazon圣诞节遭殃 DNS防护不可回避 


www.htsjk.Com true http://www.htsjk.com/shujukuaq/16816.html NewsArticle SSH 隧道使用端口转发 IP 转发是一项隧道tunneling)技术,它可以将 Internet 包从一台主机转发到另一台主机。它允许您的 PostgreSQL 客户机,比如 psql、pgadmi...
评论暂时关闭