我使用 /etc/hosts 来阻止我不想访问的域,它适用于大多数域。然而,它似乎不适用于 Telegram 网络聊天 (web.telegram.org)。
我的文件中有以下几行:
0.0.0.0 web.telegram.org
0.0.0.0 www.telegram.org
0.0.0.0 telegram.org
但我仍然可以访问该网站并使用网络应用程序的全部功能。难道我做错了什么?
答案1
由于您正在编辑 /etc/hosts,因此您具有 root 访问权限。最好、最优雅的方法是使用 iptables(即阻止数据包离开盒子到 www.telegram.org)
可以通过在命令行输入iptables命令进行测试。
# iptables -A OUTPUT -d www.telegram.org -j REJECT
您可以看到您添加了以下规则:
# iptables -S OUTPUT
-P OUTPUT ACCEPT
-A OUTPUT -d 149.154.167.120/32 -j REJECT --reject-with icmp-port-unreachable
您可以使用以下方法测试对其的尝试访问:
# wget web.telegram.org
--2017-04-26 14:38:01-- http://web.telegram.org/
Resolving web.telegram.org... 149.154.167.120, 2001:67c:4e8:fa60:3:0:811:140
Connecting to web.telegram.org|149.154.167.120|:80... failed: Connection refused.
Connecting to web.telegram.org|2001:67c:4e8:fa60:3:0:811:140|:80... failed: Network is unreachable.
您没有告诉我们您正在运行什么操作系统,因此您可能没有更新版本的 iptables,因此您可能缺少 -S 开关。您可以使用-L:
# iptables -L OUTPUT
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere 149.154.167.120 reject-with icmp-port-unreachable
如果要删除刚刚添加的规则,只需将上面命令中的 -A 替换为 -D 即可。
注意:如果您希望这些规则在重新启动后永久生效,您必须手动iptables-save > /etc/sysconfig/iptables
将它们添加到 /etc/sysconfig/iptables 中。
iptables 相当复杂,但手册页非常有帮助。
(我在我的服务器上运行 CentOS 6 和 7。firewalld 是 CentOS 7 上新的默认前端,但我安装了 iptables-services 并使用它,这是完全受支持的。)
答案2
顺便说一句,我将主机设置为 127.0.0.1 而不是 0.0.0.0....这可能是您原来的问题。
无论如何,另一个技巧是为有问题的 IP 号码添加特殊路由:
# route add -host 10.11.12.13 dev lo
您必须将这些添加到 rc.local (或等效文件)中,以便在重新启动时重新创建这些规则。
我用它来阻止那些试图破解我的网站公司密码的人。
答案3
它使用 websockets 来获取消息
添加
0.0.0.0 zws2.web.telegram.org
PS 检查如何在 chrome devtools 中调试 websockets