首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iptables安全NAT设置

使用iptables安全NAT设置
EN

Server Fault用户
提问于 2012-06-16 20:44:03
回答 2查看 4.4K关注 0票数 5

我有一个Debian运行设备,需要作为一个互联网网关。在此基础上,我希望提供一个防火墙,它不仅可以阻止入站通信,还可以阻止出站通信。我觉得iptable应该能做好这份工作。

问题是:我已经正确地配置了NAT (我认为?),但是一旦我将默认策略设置为删除并添加规则,例如允许来自LAN内部的HTTP通信,HTTP就不会通过。所以基本上我的规则似乎行不通。

下面是我为iptables使用的初始化脚本。该装置有两个网卡,分别是eth0 (广域网接口)和eth1 (局域网接口)。

代码语言:javascript
复制
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。(是的,别担心,我要把范围缩小到提供的服务上)

代码语言:javascript
复制
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规则:

代码语言:javascript
复制
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链上应用了这个原则。

代码语言:javascript
复制
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

所以现在它似乎和我想要的完全一样。完整脚本在这里。谢谢!

EN

回答 2

Server Fault用户

回答已采纳

发布于 2012-06-16 21:40:51

您需要允许对出站请求的答复。

票数 3
EN

Server Fault用户

发布于 2012-06-16 23:09:06

我本来打算在收到回复后再加上这个作为回答,但看来你是按照我的思路.我注意到在内部接口上不允许使用DNS。祝你的服务好运。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/399458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档