The*_*igB 5 debian firewall nat iptables
我有一台运行 Debian 的设备,需要充当互联网网关。最重要的是,我想提供一个防火墙,不仅可以阻止入站流量,还可以阻止出站流量。我认为 iptables 应该能够完成这项工作。
问题:我已经正确配置了 NAT(我认为?),但是一旦我将默认策略设置为 DROP 并添加规则以允许来自 LAN 内部的 HTTP 流量,HTTP 就不会通过。所以基本上我的规则似乎不起作用。
下面是我用于 iptables 的初始化脚本。该设备有两个网卡,分别是 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
Run Code Online (Sandbox Code Playgroud)
任何人都可以对此有所了解吗?
已解决: 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
Run Code Online (Sandbox Code Playgroud)
你会认为我现在可以做 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
Run Code Online (Sandbox Code Playgroud)
最后我将FORWARD链的默认策略设置为DROP. 我们又回到了第一广场。
当我看到 Ram 的回复建议我允许现有连接的入站流量时,我正准备发布更新。我也在OUTPUT上面的链上应用了这个原则。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
所以现在它似乎完全按照我想要的方式工作。完整脚本在这里。谢谢!
| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |