它是由 Apache 基金会构建的 HTTP 服务器。 HTTP 代表超文本传输​​协议,它通过服务器端程序对超文本和多媒体文档进行解码。 HTTP 守护程序(后台进程)程序运行并为来自任何 HTTP 客户端(例如 Web 浏览器)的请求提供服务。需要注意的是,Apache HTTP Server 只能提供静态内容,例如文本或媒体,而不能提供静态内容。在网页加载期间发生变化。为了通过脚本技术/协议提供动态内容,例如通用网关接口 (CGI)、Java 服务器页面 (JSP) 等。

什么是 Apache 模块?

如上所述,Apache HTTP Server 是一个基本的 Web 服务器,可用于提供非动态内容。尽管如此,它也不提供任何功能,例如身份验证、请求加密、日志记录,Support,SSL,Heartbeat,LDAP,Caching等。因此,它提供了特殊的程序模块来扩展Apache HTTP Server的核心功能。

什么是 Apache mod_ldap 模块和 mod_authnz_ldap.so 模块?

轻量级目录访问协议(LDAP)用于存储主体(用户、组织、功能 ID、服务帐户等)的数据库。它有一个支持 LDAP 的服务器。 mod_ldap 是一个 Apache 模块,它向 Apache 服务器提供 LDAP 的核心功能。同样,mod_authnz_ldap 是另一个模块,它允许 LDAP 目录存储数据库以对这些主体进行基本身份验证。

Cloudera Data Platform Web 服务有什么问题?

Cloudera 数据平台 (CDP) 是一个大数据 提供 Hadoop、YARN、Spark、Impala、HUE、Hive、Kafka、NiFi 等开源服务的平台,用于数据仓库、实时数据处理、数据分析、机器学习、可扩展性、安全性和许多其他先进功能。其中许多服务公开 Web 用户界面 (Web UI),这些界面提供静态内容,但不受任何身份验证机制的控制,因此违反了整体安全治理最佳实践。

Apache 模块如何提供帮助

Apache LDAP 模块有助于控制这些服务的身份验证,并确保只有经过授权的个人才能访问这些 Web UI。以下是保护这些 Web UI 安全所需的一些最佳实践。

  • 对于任何现有的 CDP 服务,请确定可访问 Web UI 的端口或端口列表。
  • 确保所有这些 Web UI 均启用了 SSL/TLS。
  • 使用 Apache HTTP 模块添加身份验证以启用身份验证和授权。

代码演示

让我们启用 Hadoop Datanode Web 用户界面的身份验证。 Datanode UI工作在端口号50075上,当启用SSL/TLS时,端口号更改为50470。

启用它的过程是通过反向代理完成的,这是通过安装和配置 Apache HTTP Server、上述 Apache LDAP 模块以及启用软件防火墙 (IPTables) 来完成的。

操作系统:RedHat Enterprise Linux/CentOS 7.9

Cloudera 数据平台:v7.x 

以下是启用此功能的步骤。

  1. 安装 httpd 服务器。

yum -y install httpd

  • 安装身份验证所需的 ldap_mod 软件包。

    yum -y install ldap_mod

  • 安装 iptables 服务包

  • yum -y 安装 iptables-services

  • 创建一个文件并为其指定任意名称,我们将其称为 datanode.conf。该文件的内容如下所述。将此文件放入目录 /etc/httpd/conf.d/

  • 纯文本

     

    #Datanode Web 用户界面端口 听50471 SSLPassPhraseDialog 执行:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed 启动文件:/dev/urandom 256 SSLRandomSeed 连接内置 SSLCryptoDevice 内置 错误日志日志/ssl_error_log TransferLog 日志/ssl_access_log 日志级别调试 SSL协议全部-SSLv2-SSLv3 SSLCipherSuite 高:3DES:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile <证书位置> SSLCertificateKeyFile <.pem 格式的证书私钥的位置> 服务器签名关闭 ServerTokens 产品 <目录“/var/www/cgi-bin”> SSLOptions +StdEnvVars CustomLog 日志/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" AuthLDAPBindAuthoritative 上 AuthLdapUrl "ldaps://ldaps.:636/OU=您的业务单位,DC=业务,DC=国家/地区?sAMAccountName?sub?(objectClass=*)" AuthLDAPBindDN "CN=<将针对 AD 进行身份验证的绑定用户>,OU=<绑定用户的 OU>,dc=<业务>,DC=<国家/地区>" AuthLDAPBindPassword "<绑定用户的密码>" "CN=,OU=,DC=<业务>,DC=<国家/地区>"> AuthLdapUrl "ldaps://ldaps.:636/OU=<您的业务单位>,DC=<业务>,DC=<国家/地区>?sAMAccountName?sub?(objectClass=*)" AuthLDAPBindDN "CN=<将针对 AD 进行身份验证的绑定用户>,OU=<绑定用户的 OU>,dc=<业务>,DC=<国家/地区>" AuthLDAPBindPassword "<绑定用户的密码>" AuthLDAPGroupAttribute 成员 AuthLDAPGroupAttributeISDN 开启 AuthLDAPMaxSubGroupDepth 0 <虚拟主机 *:50471> SSL 引擎开启 SSLProxyEngine 开启 SSLProxyCheckPeerCN 关闭 SSLProxyCheckPeerExpire 关闭 重写引擎开启 RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) 重写规则 .* - [F] <位置“/”> LDAP 推荐关闭 AuthType 基本 AuthName "<用户打开 UI 时显示的消息>" AuthBasicProvider ad-ldap <任意要求> 需要 ldap-group- ProxyPreserveHost 打开 ProxyPass https://<数据节点 IP 地址或主机名>:50470/ ProxyPassReverse https://<数据节点 IP 地址或主机名:50470/

  • 为 iptables 创建一个新文件。给它起任何名字;我们称之为 iptables_config。该文件的内容如下所述。将此文件放在目录 /etc/sysconfig/iptables/

  • 纯文本

     

    # iptables 服务的配置 *筛选 :输入接受[0:0] :转发接受[0:0] :输出接受[0:0] #接受来自所有IP地址的流量 -A 输入 -s <添加您的子网> -p tcp -m tcp --dport 50470 -j 接受 #丢弃50470端口上的流量 -A 输入 -p tcp -m tcp --dport 50470 -j 删除 提交

  • 我们现在需要在 httpd 目录中加载 LDAP 模块。创建一个新文件并添加以下内容。将文件命名为 01-ldap.conf。要放置在 /etc/httpd/conf.modules.d/ 的目录   

  • 纯文本

     

    LoadModule authnz_ldap_module 模块/mod_authnz_ldap.so
    LoadModule ldap_module 模块/mod_ldap.so

  • 上述更改完成后,重新启动HTTPD和iptables服务;下面的命令可用于执行相同的操作。

  • 纯文本

     

    sysconfig iptables 重新启动
    sysconfig httpd 重新启动

    服务重新启动后,Datanode WebUI 将开始在端口 50471 上运行,打开其 WebUI 将需要身份验证,即您的 LDAP 用户 ID 和密码。

    此安全机制的局限性

    Apache HTTPD 反向代理实现不支持 Kerberos 身份验证。 Kerberos 是一项允许平台的用户和服务相互验证的服务。因此,如果您为 Web UI 启用了 Kerberos 服务,则上述实现将不起作用。

    Comments are closed.