来自iptables的NAT防火墙


1

学习iptables进行学习,所以没什么太重要的。 iptables防火墙必须位于DHCP路由器(Internet)和具有客户端PC的本地LAN之间。防火墙将允许客户端互联网,但它将阻止ftp和其他一些端口等。

  • eth0 是互联网

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

我正在努力更好地理解这些命令。首先,我使用了以下三行来启用 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

从这里我不确定。似乎没有多少例子使用伪装/ NAT。

我的印象是我最好丢弃所有数据包然后允许具体需要的东西。订单显然很重要。

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

假面舞会影响我这样做吗?它看起来我所有的数据包现在直接转发到其他卡,所以我怎么告诉只允许端口80?

关于哪些端口,我也不确定入站/出站(从客户端角度来看)。允许所有出境?

Answers:


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 或者你可以使用APPEND规则到表的末尾 iptables -A

还有多条路径,并非所有数据包都通过所有路径。这可能会变得复杂,但在上面的简单案例中,您需要担心3条路径: INPUTOUTPUTFORWARDINPUT 是发往路由器的请求。 OUTPUT 是源自路由器的请求。 FORWARD 是进出路由器的请求。


注意:在 iptables 文档这些“路径”被称为“链”。
Kamil Maciorowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.