使用 NAT 的 iptables 防火墙

使用 NAT 的 iptables 防火墙

学习 iptables 是为了学习,所以没什么特别的。iptables 防火墙必须位于 DHCP 路由器(互联网)和带有客户端 PC 的本地 LAN 之间。防火墙将允许客户端上网,但会阻止 ftp 和其他一些端口等。

  • eth0是互联网

  • eth1是 LAN(所以当然是两个网络)

我正在努力更好地理解这些命令。首先,我使用了以下三行来iptables启用在两个网络之间转发数据包的功能。下面的命令似乎有效,客户端 PC 现在可以浏览互联网了。不确定这是否是最优雅的方式。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

从这里我不确定。似乎没有多少示例使用伪装/NA​​T。

我认为最好是丢弃所有数据包,然后允许特定需要的数据包。顺序显然很重要。

我现在可以丢弃所有数据包然后允许端口 80 吗?我现在该如何阻止和允许?

伪装会影响我的操作吗?在我看来,现在所有数据包都直接转发到其他卡,那么我如何知道只允许端口 80?

我还不确定(从客户端角度)与哪些端口相关的入站/出站。允许所有出站?

答案1

这里有几点需要注意——首先,实际上,NAT 提供了防火墙,可以阻止任何传入流量,但与传出流量相关的流量除外。这就是您在上面配置的。第一行打开地址转换,第二行允许与传出数据包相关的传入数据包通过,第三行允许所有传出数据包通过。这里的 OUTBOUND 表示从 LAN 到 INTERNET 的流量,INBOUND 表示从 INTERNET 到 LAN 的流量。

如果您只想允许浏览网页,有几种方法可以实现。第一种方法是仅允许端口 80 的出站请求(并接受相关的传入请求)。您可以按如下方式执行此操作:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE    
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp -dport 80 -o eth0 -j ACCEPT
iptables -A FORWARD -j DROP

前两个规则是相同的,第三个规则只允许端口 80 请求离开网络,第四个规则可能需要也可能不需要,这取决于您的默认设置 - 它表示丢弃所有其他转发的流量。

这会带来一些潜在问题。为了浏览网站,您需要进行 DNS 查找以将域名转换为 IP 地址。如果您的路由器提供 DNS,则没问题(上述规则仅处理通过路由器转发的流量,而不是来自或终止于路由器的流量)。如果您使用外部 DNS 服务器,您还需要允许 DNS 通过。DNS 在 TCP 和 UDP 端口 53 上通信,因此您需要添加:

iptables -A FORWARD -i eth1 -p tcp --dport 53 -j ACCEPT 
iptables -A FORWARD -i eth1 -p ucp --dport 53 -j ACCEPT

说到使用 IPTABLES,顺序很重要,您说得很对。规则按照它们在表中的顺序进行处理,因此如果您ACCEPT在一条规则之前有一条规则DROP,并且两条规则都匹配,则流量将通过。您可以使用 在表的开头插入规则iptables -I,也可以使用 将规则附加到表的末尾iptables -A

还有多条路径,并非所有数据包都会经过所有路径。这可能会变得很复杂,但在上面的简单情况下,您需要担心 3 条路径:和INPUT。是发往路由器的请求。 是源自路由器的请求。是进出路由器的请求。OUTPUTFORWARDINPUTOUTPUTFORWARD

相关内容