Apache 2.4 將 URL 限制為某些 IP

Apache 2.4 將 URL 限制為某些 IP

我試圖將特定 URL 限制為僅對特定 IP 位址在網路外部可用。當外部使用者嘗試存取該 URL(而不是從 IP 清單中)時,他應該會被重新導向到主頁。

這是我到目前為止所嘗試過的,但沒有任何運氣。最後一部分將每個人重新導向到主頁,無論 IP 是什麼。

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS:/secret URL 其實是一個虛擬 URL,並非實際存在於磁碟機上。

答案1

用於Require [ip|host|env]指定誰有權存取您的虛擬主機或位置。

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

當涉及到重定向時,請考慮自訂錯誤頁面。這更加通用,因為每次未經授權的存取都會引發 403 錯誤,因此可以輕鬆評估。

我從來沒有在 apache 上這樣做過,但是在 nginx 上使用了這個策略。對於 apache 應該要這樣做:

ErrorDocument 403 http://homepage.example.com

自訂錯誤文件是使用 ErrorDocument 指令配置的,該指令可以在全域、虛擬主機或目錄上下文中使用。如果AllowOverride 設定為FileInfo,則可以在.htaccess 檔案中使用它。 (來自阿帕奇文件)

答案2

Apache 2.4 中的 Order、Deny 和Allow 選項已被替換為

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

您可以透過使用以下方法明確限制位址:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

完全相反的情況也是如此,要限制所有並僅允許子集,請使用以下命令:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

更多資訊請訪問Apache 2.4 存取控製文件。

關於你的問題(由於缺乏添加評論的點而編輯了我自己的問題),你應該能夠簡單地設置一個 ErrorDocument 並將索引設置為 URL 路徑:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

希望這可以幫助!

答案3

對於 Apache 2.4,您可以使用 <RequireAny>。您可以在虛擬主機或 .htaccess 檔案中執行此操作...

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

阿帕奇文檔https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany

相關內容