將某些使用者的網站列入黑名單
這個問題分為兩部分。
首先,如果我有一個我想屏蔽的網站列表。我如何告訴我的電腦阻止這些和任何相關的子域?
其次,我如何在每個使用者的基礎上做到這一點。例如,告訴電腦阻止 userA 訪問 facebook 不應阻止 userB 訪問 facebook。
如果答案是命令行答案,則加分。
實際上,您的問題分為三個部分:
- 決定網路級別的阻塞策略:允許哪些連接?
- 實施該阻止策略。
- …以僅影響某些使用者的方式。
阻止網站並不容易。事實上,我想說的是,如果不完全阻止網路訪問,就不可能完全阻止一個網站。您所能做的就是讓被阻止的使用者的生活更加困難,但如果他們真的願意,他們將能夠訪問被阻止的站點,但延遲會增加,頻寬會減少,前提是他們有足夠的技術複雜性並且可能依賴外部伺服器. 對於普通瀏覽,使用者可以在 Google 或其他網站上查看記憶體副本。擁有外部伺服器的使用者可以將其用作代理,或者他們可以使用現有代理(開放代理來來去去太快而無法有效阻止)。
您可以嘗試通過域名或 IP 地址進行屏蔽。IP 地址可能適用於像 Facebook 這樣的大型網站,儘管您必須跟上他們所有的伺服器移動。它不適用於共同託管的較小站點。
阻止某些網站的一種輕量級方法是阻止其 DNS 名稱解析。只是這可能會使使用者的生活變得非常煩人,以至於他們通過使用外部代理(這確實需要一些複雜性)來繞過您的塊。但是沒有實用的方法來調整每個使用者的 DNS 解析(原則上並非不可能,但您需要設置一個工作
identd
並找到一個與之對話的 DNS 伺服器)。阻止網站的自然方法是阻止直接 Web 訪問並只允許通過 Web 代理進行訪問。魷魚是事實上的標準。您可以將其設置為透明代理(埠 80 和 443 上的所有連接都路由到代理機器;另一個埠上的奇怪網站可能會或可能不會工作,具體取決於您配置防火牆的方式)或顯式代理(使用者必須配置他們的瀏覽器;只有帶有代理的機器才能連接到外部)。
實現每使用者設置的一種簡單方法是要求在代理中進行身份驗證。然後擁有不同級別的訪問權限是代理的工作。為避免密碼要求,您還可以讓代理使用 ident(儘管這會增加所有訪問的延遲)。
如果您可以在另一台機器(可以是虛擬機)上執行代理,您的任務會更輕鬆。在同一台機器上做所有事情是可能的,但在 Linux 上很複雜,我懷疑它在其他 unices 上也是可能的,但很複雜。