我想屏蔽 stackexchange 网络上的所有网站(因为我经常在这些网站上浪费大量时间)。我该怎么做?
一个解决方案显然是在 hosts 文件中手动写入所有站点的条目,但是有没有更好的解决方案呢?
请注意,仅在正则表达式上进行阻止*.stackexchange.com
是行不通的,因为很多网站都有像superuser
和这样的唯一名称askubuntu
。
我正在使用 Ubuntu 16.04。
编辑:
我在这里发布这个问题不是为了学习自我控制,而是因为我真的很好奇它的技术可行性。
请在评论中写下反对的原因,以便我采取行动!
答案1
首先,顺便说一句,花时间在 stackexchange 上绝对不算浪费时间。你要么得到问题的答案,要么帮助其他用户。据我所知,无论是自我教育还是帮助其他用户,都不算浪费时间。
其次,凭借着 121 的声誉,我怀疑您是否像我一样花费了如此多的时间,而我的声誉已经达到 5000 并且还在增加。
Whois 会显示这一点,因此请阻止此范围,否则您将无法获取它。如果您的防火墙支持 CIDR 表示法,则下面的一行将阻止所有内容。
NetRange: 151.101.0.0 - 151.101.255.255
CIDR: 151.101.0.0/16
阻止访问此 IP 范围的命令:
iptables -I OUTPUT 1 -d 151.101.0.0/16 -j DROP
您必须保存 iptables 配置,否则重新启动时它将丢失。我不知道 Ubuntu 是否有自动功能。
iptables-save ><somewhere>/iptables.save
iptables-restore <<somewhere>/iptables.save
如果使用 systemd,请在 /etc/systemd/system/ 中创建一个名为 iptables.service 的文件
[Unit]
Description=IPtables load rules
DefaultDependencies=no
After=ipset.service network-pre.target
Before=network-online.target network.target
[Service]
Type=oneshot
ExecStartPre=-/bin/echo 'Starting iptables'
ExecStart=/usr/sbin/iptables-restore <somewhere>/iptables.save
ExecReload=/usr/sbin/iptables-restore <somewhere>/iptables.save
ExecStop=/usr/lib/systemd/scripts/iptables -flush
RemainAfterExit=yes
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW
[Install]
WantedBy=basic.target
然后systemctl 启用 iptables
答案2
作为一种更温和的解决方案,您可以轻松配置仅在有限的时间内阻止 stackexchange 网站,您可以考虑使用 Chrome 扩展程序专注。