我有一个Debian运行设备,需要作为一个互联网网关。在此基础上,我希望提供一个防火墙,它不仅可以阻止入站通信,还可以阻止出站通信。我觉得iptable应该能做好这份工作。
问题是:我已经正确地配置了NAT (我认为?),但是一旦我将默认策略设置为删除并添加规则,例如允许来自LAN内部的HTTP通信,HTTP就不会通过。所以基本上我的规则似乎行不通。
下面是我为iptables使用的初始化脚本。该装置有两个网卡,分别是eth0 (广域网接口)和eth1 (局域网接口)。
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有人能解释一下这件事吗?
解决方案: Mike建议使用telnet和一个IP来测试HTTP流量,而不是使用域名,这导致了两个发现: 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的回复说我允许现有连接的入站流量时,我正要发布一个更新。我还在上面的OUTPUT链上应用了这个原则。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT所以现在它似乎和我想要的完全一样。完整脚本在这里。谢谢!
发布于 2012-06-16 21:40:51
您需要允许对出站请求的答复。
发布于 2012-06-16 23:09:06
我本来打算在收到回复后再加上这个作为回答,但看来你是按照我的思路.我注意到在内部接口上不允许使用DNS。祝你的服务好运。
https://serverfault.com/questions/399458
复制相似问题