LDAP登入Apache2.4代理網頁
Table of contents
背景
- Apache with LDAP authentication by Oriol Tauleria(2020)
- 這一篇應該指得只有LDAP驗證與授權,而不是整個IPA,據稱Apache ssl/tsl服務與FreeIPA是相衝突的。
- 意思應該指的是遠端Apache的ssl.conf是沒有必要、只要有ldap.conf。
- 官網
- Enterprise Linux 實戰講座:利用 LDAP 整合 Apache 網頁驗證林彥明2006
GPT 看法
設定Apache來代理具有LDAP驗證的網頁是一種常見的用例,尤其在需要集中驗證和訪問控制的企業環境中。一些與此設置相關的常見討論和挑戰包括:
集中驗證: LDAP驗證允許組織將用戶驗證集中管理。用戶可以使用他們的LDAP憑據訪問各種服務,增強安全性並減少單獨登錄憑據的需求。
訪問控制: LDAP與Apache的整合實現了細粒度的訪問控制。管理員可以根據LDAP用戶屬性、組成員身份或其他標準定義訪問策略,確保只有授權用戶可以訪問特定資源。
單點登錄(SSO): 實現SSO通常是這種設置中的討論點。用戶使用他們的LDAP憑據驗證一次,然後無需再次登錄即可訪問多個服務。這提升了用戶體驗並簡化了管理。
LDAP組映射: LDAP組映射到Apache訪問控制指令的話題很常見。它允許管理員基於LDAP組成員身份靈活動態地控制訪問管理。
SSL/TLS安全性: 討論通常圍繞著確保Apache和LDAP服務器之間通信的安全性。確保SSL/TLS加密對於在傳輸過程中保護敏感的驗證信息至關重要。
LDAP連接問題的故障排除: 設置LDAP連接有時可能具有挑戰性。討論可能集中在排除常見連接問題上,確保Apache能夠正確地與LDAP服務器通信。
用戶和組同步: 確保用戶和組信息在LDAP目錄和Apache之間同步是重要的。討論可能涉及自動同步和更新用戶/組數據的機制。
錯誤處理和日誌記錄: 配置正確的錯誤處理和記錄是關鍵的考慮因素。這有助於診斷問題、監視驗證嘗試,確保系統安全且維護良好。
性能注意事項: 根據部署的規模,可能會涉及性能討論。對LDAP查詢進行優化、緩存策略和負載平衡可能對大型部署很重要。
Web應用程序集成: 討論可能涉及將LDAP驗證與特定Web應用程序(例如CMS、論壇)集成。這涉及了解Web應用程序如何與Apache和LDAP進行用戶身份驗證。
LDAP服務器冗餘性: 討論可能涉及確保LDAP服務器冗餘性和故障轉移機制,以防止LDAP服務器故障造成的中斷。
通過解決這些方面,組織可以建立一個強大且安全的LDAP驗證設置,為集中訪問控制和用戶管理打下基礎。
shake hand with Apache
mod_nss_to_mod_ssl
官網這份文件提到了在Apache中使用mod_ssl
取代 mod_nss
的計畫,這是一項遠離使用NSS(Network Security Services)並轉向使用OpenSSL的大型改動的一部分。目標Fedora版本是Fedora 28。
用途:
mod_ssl
是普遍使用的。mod_ssl
使用平整的PEM文件而不是一組複雜的工具來操作證書數據庫。
設計:
mod_nss
的證書數據庫深度整合到IPA中,是RA代理證書和CA鏈的來源。- 在新安裝中,會生成證書/密鑰文件,跟蹤並取消跟蹤證書,安裝CA證書,驗證服務器證書及其鏈,更改ssl.conf指令,處理PKCS#12的安裝。
- 在升級現有安裝中,任何修改
nss.conf
的用戶可能會使升級變得脆弱。 - 在升級過程中,可能需要刪除
/etc/httpd/alias
中的Server-Cert,以避免混淆。
實施:
- 依賴於更新的
certmonger
。 - 在升級失敗的情況下,將需要手動指導用戶進行轉換為
mod_ssl
數據庫所需的更改。
特性管理:
- 無界面(UI)和命令行(CLI)的特性變更。
配置:
- 替換一些
NSS
相關的配置,並刪除不再需要的配置。
使用方式:
- 對於一般用戶來說,這個過渡應該是透明的,但在定制
nss.conf
的情況下,需要將其遷移到ssl.conf
。
測試計劃:
- 需要測試不同情境,包括新安裝、升級、創建副本、替換證書和更新。
KRA(Key Recovery Authority):
- 需要測試基本的保險庫操作,包括REST操作。
卸載:
- 在卸載時,應該能夠恢復相應的配置文件和刪除Apache證書和密鑰。
總體而言,這是一項從NSS到OpenSSL的轉換計劃,其中包括新安裝、升級、替換、更新和卸載等各種情境的測試和操作。
Apache使用SNI實現基於名稱的SSL虛擬主機與Kerberos登錄
簡介: Apache 2.2.12引入了SNI(Server Name Indication)到mod_ssl的TLS支持中,而RHEL6則引入了2.2.15,其中包含了這項技術。這使得多個站點能夠使用單個IP,每個站點都有自己的證書,基本上是基於名稱的SSL虛擬主機。
注意事項:
- SNI的可行性取決於客戶端和服務器端,並且具有一些限制。
- 由於這需要初始請求中的主機標頭,因此它對封包檢查和記錄是開放的,不同於傳統SSL。
IPA/SSSD配置: SSSD不需要任何特殊配置,但是如果ipa-getcert list
顯示任何錯誤,如CA_UNREACHABLE
,當拓撲中有多個副本時,值得檢查/etc/ipa/default.conf
,確保服務器正在使用IPA拓撲進行證書請求。
Apache配置:
- 初始SSL Apache配置:
- 添加IPA服務:
ipa service-add HTTP/
- 安裝必需的軟件:
yum install httpd mod_ssl
- 創建證書存儲目錄:
mkdir /etc/httpd/certs
- 允許Certmonger寫入目錄:
semanage fcontext -a -t cert_t ‘/etc/httpd/certs(/.*)?’ && restorecon -v /etc/httpd/certs
- 通過Certmonger請求證書/密鑰對:
ipa-getcert request -r -f /etc/httpd/certs/default.crt -k /etc/httpd/certs/default.key -N CN=uname -n -D uname -n -K HTTP/uname -n
- 添加IPA服務:
- 添加基於名稱的虛擬站點:
- 在IPA中添加虛擬主機:
ipa dnsrecord-add example.com dummyhost --a-rec=10.180.80.1
- 添加虛擬主機並管理它:
ipa host-add dummyhost.example.com --desc="Dummy Host" --location=" " && ipa host-add-managedby dummyhost.example.com --hosts=" "
- 添加IPA服務和主機:
ipa service-add HTTP/dummyhost.example.com && ipa service-add-host HTTP/dummyhost.example.com --hosts=" "
- 通過Certmonger請求虛擬主機的證書/密鑰對:
ipa-getcert request -r -f /etc/httpd/certs/dummyhost.crt -k /etc/httpd/certs/dummyhost.key -N CN=dummyhost.example.com -D dummyhost.example.com -K HTTP/dummyhost.example.com
- 配置Apache以使用名稱為基礎的虛擬主機:修改
/etc/httpd/conf.d/ssl.conf
- 在IPA中添加虛擬主機:
- 添加Kerberos身份驗證:
- 安裝mod_auth_kerb模塊:
yum install mod_auth_kerb
- 創建存儲Keytab的目錄:
mkdir /etc/httpd/keytabs
,允許Certmonger寫入目錄:semanage fcontext -a -t httpd_keytab_t '/etc/httpd/keytabs/(.*)?'
- 獲取默認Keytab:
ipa-getkeytab -s -p HTTP/uname -n -k /etc/httpd/keytabs/default
- 獲取虛擬主機特定的Keytab:
ipa-getkeytab -s -p HTTP/dummyhost.example.com -k /etc/httpd/keytabs/dummyhost
- 配置Apache以使用Kerberos身份驗證:修改
/etc/httpd/conf.d/ssl.conf
- 安裝mod_auth_kerb模塊:
結論: 如果按照上述步驟進行配置,並且一切正常運行,那麼服務器應該已經配置好,可以輕鬆添加新的虛擬主機,每個主機都有自己的SSL證書(通過Certmonger跟踪和更新),並且在標準RHEL6安裝中,除了標準RHEL存儲庫之外,IPA基礎結構用於所有身份驗證。
mod_authnz_external
- mod_authnz_external算是第3方提供的模組,這個方向也是GPT提出的建議之一。
- 分支一:mod_authnz_external + pwauth
- 但畢竟驗證方式是使用pwauth,需要每個工作站都建立使用者登入帳密,如果修改呢?少量還可以忍受,量大了,這途徑就很不實際。
- 老薯條(2011)直接抓取系統使用者帳號 驗證Apache網頁權限,這一篇的內容似曾相識,算是講解的很完整,很多網友也或多或少會引用其中的內容。
- ATI的軟體&網管技術誌(2013)使用 PAM 作為 Apache Basic 驗證,提供了編譯過程的經驗。
- 分支二:mod_authnz_external + LDAP
- Gerald Schneider(2017)authentication using openldap with apache 2.4這題的範例似乎使用external在外層,後面又補了LDAP,實際上應該會被問2次帳密吧?
Directory entry from apache site configuration
<Directory /var/www/html>
AuthName "Restricted - Kattronics Users Only"
AuthType Basic
#Satisfy any
AuthBasicProvider ldap
AuthLDAPUrl "ldaps://dc2-ldap001:636/ou=Users,dc=ldap,dc=kattronics,dc=com?uid"
AuthLDAPBindDN "ou=Users,dc=ldap,dc=kattronics,dc=com"
AuthLDAPBindAuthoritative off
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
#Require valid-user
Require ldap-user # Gives error AH01618
</Directory>
Workaround below
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
<Directory /var/www/html>
AuthType Basic
AuthName "Login"
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
</Directory>