阻止除白名单 IP 地址之外的所有流量

阻止除白名单 IP 地址之外的所有流量

我需要阻止防火墙中的所有传入和传出连接,除了白名单中的 IP 地址。我目前在虚拟机上使用ubuntu。我尝试了这些命令site:但我无法连接到这个网站,这是谷歌,但 ping 有效,我没有 Linux 经验,其他网站也不能工作。

iptables -A INPUT -s 172.217.23.206 -j ACCEPT
iptables -A OUTPUT -d 172.217.23.206 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

答案1

iptables以首场比赛为基础。让我们分解一下你的例子:

iptables -A INPUT -s 172.217.23.206 -j ACCEPT
iptables -A OUTPUT -d 172.217.23.206 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

第一行指示iptables允许从 IP 地址172.217.23.206到应用这些规则的计算机的所有流量。毫不夸张地说,所有流量都是所有流量。因此,无论协议、端口、选项等如何;只要来源匹配就172.217.23.206可以通过。

第二行允许从您的计算机到 的所有流量172.217.23.206。再说一遍,协议、端口等是什么并不重要;只要目的地匹配172.217.23.206就允许。

第三行iptables告诉降低任何与前两条规则不匹配的传入流量,而第四行和最后一行iptables告诉降低与上述三行不匹配的任何传出流量。


我假设您想要构建一个仅允许流量流向几个网站的场景。您编写的规则集不适用于这种情况;

  • 您的计算机无法知道 google.com 可能会解析为172.217.23.206.通常,它可以通过查询 DNS 服务器或本地/etc/hosts条目来获取此信息。
  • 在这种情况下没有理由允许任何传入流量,因为iptables它足够智能来跟踪您的连接并允许回复。这个过程称为保持状态。
  • 仅仅为了获得一个网站而允许各种流量访问172.217.23.206是没有任何意义的。
  • ICMP 流量(包括ping)是一种特殊的流量。你需要专门阻止它。

该规则集确实适合这种情况:

iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -d unix.stackexchange.com --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -d unix.stackexchange.com --dport 443 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

此规则集允许您的计算机使用端口 53/udp 查询 DNS 服务器。然后,它允许 TCP 流量流向 unix.stackexchange.com、端口 80 (http) 和 443 (https)。它会跟踪连接并丢弃所有其他流量。

只要您在 中配置了匹配条目,您就可以删除允许 DNS 查询的规则/etc/resolv.conf

相关内容