我正在尝试审核在我们的 Linux RHEL 5.3 服务器上运行的启用 SSL 的端口/服务。我正在尝试查找我们服务器上哪些端口启用了 SSL。我不确定如何找到它。我需要知道如何检查哪些端口正在使用启用 SSL 的服务。
我已经运行以下命令
lsof -i -n -P
netstat -ntulp
netstat -nap
但从这些输出中,我不确定如何确定哪些端口正在运行 SSL。我不确定要寻找什么。
我知道 SSLscan 实用程序,但当我运行它时,它没有返回任何值并弹出错误“无法在端口 443 上打开与主机 127.0.0.1 的连接”
SSLscan 似乎可以在我们的 Windows 环境中运行,没有任何错误,但在 Linux 中却不行。我也知道 nmap,但出于安全原因,不能在我们的环境中使用它。
答案1
我不确定是否有自动化的方法可以做到这一点。
首先,我会列出所有正在监听的端口,并将端口与进程/可执行文件进行匹配(例如,以netstat -t -l -p
root 身份查看进程 ID(PID))。
[编辑]
您将获得如下条目,其中 PID 为:
tcp 0 0 *:https *:* LISTEN 5221/apache2
这会告诉您哪个程序正在端口 上运行https
。(netstat -t -l -p -n
如果您只想要端口号,请使用 ,在这种情况下,您将看到*:443
而不是)。这会告诉您有一个套接字正在监听端口 443。此外,这里的 5221 是 apache2 的 PID,因此它还会告诉您正在使用哪个应用程序。有时,可能无法立即看到正在使用哪个应用程序(例如,*:https
您可以查看 的内容以了解更多详细信息)。/proc/5221/cmdline
我只会关注绑定到外部接口的条目(并忽略这些localhost
条目)。
通常,您可能会看到某些程序在端口 22(ssh)、80(http)、443(https)等上进行监听...
然后您必须根据下面描述的方法逐一进行测试。
例如echo "" | openssl s_client -connect your.host.name:80
应该显示一条错误消息,因为您的 Web 服务器不会(或不应该)监听此端口上的 SSL/TLS 请求,所以echo "" | openssl s_client -connect your.host.name:443
应该可以工作并向您显示有关证书和连接的一些信息。
[/编辑]
为了预置 SSL/TLS,您可以检查它是否会接受 TLS ClientHello
(即从连接开始就是 TLS 服务器),但使用echo "" | openssl s_client -connect hostname:port
(echo "" |
是可选的,它会在建立连接后立即停止 openssl,因为您可能不想发送任何特定内容)。
为了“升级” SSL/TLS 连接,在应用程序协议级别的命令之后完成(例如STARTTLS
),这可能会更加棘手。
您可以通过添加来做到这-starttls the_name_of_the_protocol
一点openssl s_client
命令。根据 OpenSSL 文档,“目前仅支持的 [协议名称] 是“smtp”、“pop3”、“imap”和“ftp”“。
这对于 LDAP(如果配置为使用 Start TLS 而不是 up-front TLS)、MySQL、PostgreSQL 等没有帮助。对于这些,您可能只需查看它们各自的配置文件。自动化此过程需要一个可以理解所有这些协议的工具,这可能非常困难。
如果是为了进行更一般的安全审计,还有几点需要补充:
启用 SSL/TLS 很少能满足需求。您还需要确保其配置正确:有效证书、禁用 SSLv2、尝试通过禁用旧版本(如果用户群足够兼容)迁移到更高的 SSL/TLS 值(SSLv3、TLSv1.0、TLSv1.1+)、尽可能禁用不安全的重新协商、合理强大的密码套件。
尽管使用了 OpenSSL 库,但 OpenSSH(以及一般的 SSH)并不基于 SSL/TLS。即使您的策略是使用仅 SSL/TLS 服务,您可能仍想保留这一项。