我有一个需要充当互联网网关的Debian运行设备。 最重要的是,我想提供的防火墙,不仅阻止入站stream量,而且出站stream量。 而且我认为iptables应该能够完成这项工作。
问题:我已经正确地configuration了NAT(我想?),但是一旦我将默认策略设置为DROP并添加规则以允许来自LAN内部的HTTP通信,则HTTP将不会通过。 所以基本上我的规则似乎没有工作。
以下是我用于iptables的初始化脚本。 该设备有两个NIC,分别是eth0(WAN接口)和eth1(LAN接口)。
echo 1 > /proc/sys/net/ipv4/ip_forward # Flush tables iptables -F iptables -t nat -F # Set policies iptables -P INPUT DROP iptables -P OUTPUT DROP # NAT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow outbound HTTP from LAN? iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
任何人都可以点亮这个?
解决了:迈克build议使用telnet和IP而不是域名来testingHTTPstream量,这导致了两个发现:DNS不能正常工作,出站过滤不工作(我可以telnet到端口8080)。
所以我首先添加了规则来允许LAN客户端使用网关的服务,例如DNS。 (是的,不要担心,我会缩小这个范围来提供服务)
iptables -A INPUT -i eth1 -d 172.16.0.1 -j ACCEPT iptables -A OUTPUT -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
你会认为我现在可以做DNS请求。 而我其实可以,但是这些请求是超时的,因为网关不能自己做DNS请求。 增加了出站DNS的规则:
iptables -A OUTPUT -o eth0 -p tcp --dport 53 -j ACCEPT iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
最后,我将FORWARD链的默认策略设置为DROP 。 我们又回到原点了。
当我看到Ram的回复提示我允许现有连接的入站stream量时,我正在发布更新。 我也在上面的OUTPUT链上应用了这个原理。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
所以现在看起来正在按照我想要的方式工作。 这里完整的脚本 。 谢谢!
您需要答复您的出站请求。
在收到回复后,我将添加这个答案作为回答,但是看起来您遵循了我的思路……我注意到您没有在内部接口上允许DNS。 祝你好运。