如何託管區域網路外無法訪問的內網網站?
我在區域網路上有一台伺服器(Debian Squeeze)。我已經在上面安裝了 Nginx 網路伺服器。伺服器可以訪問 Internet 以下載和安裝軟體包。
我的問題:
我可以託管一個網站,以便當 LAN 上的使用者鍵入:
http://abcd (no .com, .net, etc.)
進入他們的瀏覽器,網站打開了嗎?請注意,他們還可以完全訪問 Internet,因此不應直接訪問 Google 或其他一些預設搜尋引擎。
同時,區域網路外的任何人都不能訪問它,無論他們鍵入什麼 URL。
這可能嗎?
控制其他電腦是否可以訪問您電腦上執行的伺服器的不是名稱:這只是為了方便。如果您想讓您的電腦或至少您的 Web 伺服器在 LAN 之外無法訪問,您需要採取措施在 IP 或 HTTP 級別阻止它。
您的 LAN 管理員可能已經阻止了與 LAN 內的 Web 伺服器的傳入連接,在這種情況下,您無事可做。但是你可能還是想在你的機器上設置一個過濾器,以防萬一。
如果您不想在 LAN 之外提供任何 Web 流量,請在 IP 級別阻止傳入的 Web 流量。為此,請使用iptables或一些設置 iptables 規則的更高級別的工具,例如ufw。要阻止所有傳入的 HTTP 和 HTTPS 流量,請阻止 TCP 埠 80 和 443,假設您的 LAN 對應於地址範圍 203.0.113.0/24(即 203.0.113.*):
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 80,443 -s \!203.0.113.0/24 -j REJECT
您不妨阻止所有傳入埠,除了您知道自己需要的埠。例如,僅允許傳入的 SSH 請求以及來自 LAN 的傳入流量並排除所有其他傳入流量:
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A INPUT -p tcp --dport http,https -s 203.0.113.0/24 -j ACCEPT iptables -A INPUT -j REJECT
另請參閱是否有一種標準方法來配置 iptables 在 Debian 下啟動時載入的策略?,iptables:允許某些ips並阻止所有其他連接並將某些防火牆埠設置為只接受本地網路連接?.
如果您想允許從任何地方到您的機器的 Web 連接,但只允許從 LAN 訪問某個虛擬主機,您需要在 Apache 伺服器級別進行過濾(我假設您使用的是 Apache )。這是在虛擬主機配置文件或
.htaccess
文件中使用Allow和Deny指令完成的。Order deny,allow Deny from all Allow from 203.0.113.0/24
說到名字,如果你想給你的伺服器起一個無點的名字,這需要客戶端機器的配合。但是你可以給你的伺服器一個全域有效的名字。這完全獨立於您的伺服器是否可以從任何地方訪問。您需要的是您機器的DNS條目。您可以以每年 10 美元左右的價格購買一個域名和基本 DNS 服務,因此您機器的 IP 地址將記錄在一個類似
www.spartanblogger.net
. 如果您的IP地址在私有範圍內(例如 10.xyz 或 192.168.xy),則無關緊要。對於個人使用的單個地址,如果您不介意沒有自己的域名,可以使用DynDNS等免費服務(您的 IP 地址是否實際上是動態的);你可以選擇一個像spartanblogger.dyndns.org
.
如果您無法控製網路,也無法控制客戶端電腦,並且無法從外部訪問您的伺服器,恐怕這是不可能的。想像一下,什麼會阻止您將 google 或 stackexchange 重定向到您的伺服器?
您可以做的是要求管理員創建一個 DNS 條目
abcd
以指向您的 IP 地址。然後,您所需要的只是一個偵聽標準埠的 Web 伺服器。如果他拒絕,您所能做的就是通過 IP 地址而不是主機名訪問您的 Web 伺服器。