如何使特定网站仅通过 Linux 中的 IPTABLES 访问?

如何使特定网站仅通过 Linux 中的 IPTABLES 访问?

我只想访问 www.thinkwell.com 网站,并希望禁用所有其他网站访问。我正在使用 fedora core 19。

步骤如下,我尝试做了,但是结果是无法访问网站。

首先,我获取了 thinkwell.com 的 IP

$ host www.thinkwell.com
www.thinkwell.com is an alias for thinkwell.com.
thinkwell.com has address 207.207.4.196
thinkwell.com mail is handled by 30 aspmx4.googlemail.com.
thinkwell.com mail is handled by 20 alt2.aspmx.l.google.com.
thinkwell.com mail is handled by 30 aspmx3.googlemail.com.
thinkwell.com mail is handled by 30 aspmx5.googlemail.com.
thinkwell.com mail is handled by 20 alt1.aspmx.l.google.com.
thinkwell.com mail is handled by 30 aspmx2.googlemail.com.
thinkwell.com mail is handled by 10 aspmx.l.google.com.

现在,以下是我尝试过的规则。

#iptables -A OUTPUT -p all --destination 207.207.4.196  -j ACCEPT
#iptables -A OUTPUT -p all -j REJECT
#iptables-save

但结果是我无法访问任何网站。请告诉我这里出了什么问题?我只接受 IP 207.207.4.196 的目标输出。但是,我拒绝了其他 IP。我在家里使用路由器。这与它有关吗?

答案1

使用像 squid 这样的代理可能有更好的方法来执行此操作,但如果您要通过 iptables 执行此操作,那么请考虑一下您正在做什么。

您想允许访问一个网站并阻止所有其他网站,您需要允许到该网站的传出连接。

在正常情况下,你会通过端口 80 (http) 和/或端口 443 (https) 访问网站,因此你需要允许这些目的地仅针对网站 IP 地址的端口。对于所有其他 IP 地址,应丢弃到目标端口 80 或 443 的连接。

您只想在 OUTPUT 中阻止目标端口 80 和 443,因为您发现如果不这样做,其他东西就会损坏。

您的 OUTPUT 规则可能是

  • 如果 IP 正确且目标端口为 80,则允许连接到站点
  • 如果 IP 正确且目标端口为 443,则允许连接到站点
  • 如果目标端口是 80,则拒绝连接
  • 如果目标端口是 443,则拒绝连接

如果需要,您可以将多个目标端口组合成一条规则。

请注意,规则的顺序很重要,因为 iptables 将尽早停止处理数据包。

你可能应该花一些时间阅读和理解文档

相关内容