Apache HTTP Server 2.4 版
說明 | 根據主機(名稱或 IP 位址)進行群組授權 |
---|---|
狀態 | 基本 |
模組識別碼 | authz_host_module |
原始碼檔案 | mod_authz_host.c |
相容性 | forward-dns 提供者已新增至 2.4.19 版 |
由 mod_authz_host
實作的授權提供者會使用 Require
指令進行註冊。指令可以在 <Directory>
、<Files>
或 <Location>
區段中參照,此外也可以在 .htaccess
檔案中參照,以控制對伺服器特定部分的存取權限。存取權限可以根據客戶端主機名稱或 IP 位址進行控管。
一般來講,存取限制指令套用到所有存取方法(例如 GET
、PUT
、POST
等)。在多數情況下,這是預期的行為。不過,也可以將指令包含在 <Limit>
區段中,以限制某些方法,並讓其他方法不受限制。
Apache 的 Require
指令會在授權階段中使用,以確保使用者可以存取或被拒絕存取資源。mod_authz_host 用 ip
、host
、forward-dns
和 local
來擴充授權類型。也可以使用其他授權類型,但可能需要載入額外的授權模組。
這些授權提供者會影響哪些主機可以存取伺服器的哪個區域。可以透過主機名稱、IP 位址或 IP 位址範圍控制存取權限。
自 2.4.8 版開始,運算式支援主機需要指令。
ip
提供者允許根據遠端用戶端 IP 位址控制伺服器存取。當指定 Require ip ip-address
時,如果 IP 位址相符,則允許對要求進行存取。
完整 IP 位址
Require ip 10.1.2.3 Require ip 192.168.1.104 192.168.1.205
允許存取的某個主機 IP 位址
部分 IP 位址
Require ip 10.1 Require ip 10 172.20 192.168.2
IP 位址的前 1 到 3 個位元組,供子網路限制使用。
網路/網路遮罩配對
Require ip 10.1.0.0/255.255.0.0
網路 a.b.c.d 和網路遮罩 w.x.y.z。供更細微的子網路限制使用。
網路/nnn CIDR 規範
Require ip 10.1.0.0/16
類似於前一個案例,但網路遮罩由 nnn 高階 1 位元組組成。
請注意,上面最後三個範例完全符合相同的主機組。
可按如下所示指定 IPv6 位址和 IPv6 子網路
Require ip 2001:db8::a00:20ff:fea7:ccea Require ip 2001:db8:1:1::a Require ip 2001:db8:2:1::/64 Require ip 2001:db8:3::/48
注意:由於在啟動時剖析 IP 位址,因此不會在請求時間評估運算式。
host
提供者允許根據遠端用戶端主機名稱控制伺服器存取。當指定 Require host host-name
時,如果主機名稱相符,則允許對要求進行存取。
(部分)網域名稱
Require host example.org Require host .net example.edu
允許名稱相符或以這個字串結尾的主機存取。只會比對完整的組成部分,因此上述範例會比對 foo.example.org
但不會比對 fooexample.org
。這個組態將導致 Apache 在用戶端 IP 位址上執行重複的反向 DNS 查詢,無論設定
指令如何。它會針對 IP 位址執行反向 DNS 查詢,以找出相關聯的主機名稱,然後針對主機名稱執行正向查詢,以確保它與原始 IP 位址相符。只有當正向和反向 DNS 一致且主機名稱相符時,才會允許存取。HostnameLookups
forward-dns
提供者允許根據簡單主機名稱控制伺服器存取。當指定 Require forward-dns host-name
時,對應於 host-name
的所有 IP 位址都允許存取。
與 host
提供者相反,這個提供者不依賴反向 DNS 查詢:它只會針對主機名稱查詢 DNS,並允許客戶端(如果其 IP 相符)。因此,它只能與可以在 DNS 中解析的完整主機名稱搭配使用,而不適用於部分網域名稱。但是,由於不使用反向 DNS,而且 DNS 查詢發生在請求處理時間(而不是啟動時),因此它將與使用動態 DNS 服務的用戶端搭配使用。
Require forward-dns dynamic.example.org
從名稱 dynamic.example.org
解析出 IP 的用戶端將被准許存取。
forward-dns
提供者已在 2.4.19 中加入。
如果符合以下任一條件,local
提供者允許存取伺服器
這樣提供一個方便的方式來比對從本機端發起的連線
Require local
如果你將內容代理至你的伺服器,你需要知道客戶端地址將會是你代理伺服器的地址,而不是用戶端的地址,因此在此情境下使用 Require
指令可能不會發揮你的預期作用。請參閱 mod_remoteip
以了解此問題的一種可能的解決方案。