Iptables 工作异常

Iptables 工作异常

我的笔记本电脑上安装了 Ubuntu 12.04 x64。

我对 Linux 还很陌生,我想为 iptables 防火墙指定某些规则。

这是我的 iptables 的已保存配置:


*mangle

:PREROUTING ACCEPT [0:0]

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

COMMIT


*nat

:PREROUTING ACCEPT [0:0]

:INPUT ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

-A PREROUTING -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.1.100:3306

-A PREROUTING -p tcp -m tcp --dport 11002 -j DNAT --to-destination 192.168.1.100:11002

-A PREROUTING -p tcp -m tcp --dport 13000 -j DNAT --to-destination 192.168.1.100:13000

-A PREROUTING -p tcp -m tcp --dport 13001 -j DNAT --to-destination 192.168.1.100:13001

-A PREROUTING -p tcp -m tcp --dport 13002 -j DNAT --to-destination 192.168.1.100:13002

-A PREROUTING -p tcp -m tcp --dport 13003 -j DNAT --to-destination 192.168.1.100:13003

-A PREROUTING -p tcp -m tcp --dport 13004 -j DNAT --to-destination 192.168.1.100:13004

-A PREROUTING -p tcp -m tcp --dport 13061 -j DNAT --to-destination 192.168.1.100:13061

-A PREROUTING -p tcp -m tcp --dport 13099 -j DNAT --to-destination 192.168.1.100:13099

-A POSTROUTING -j MASQUERADE

COMMIT


*filter

:INPUT DROP [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT


-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT

理论上,它的作用是丢弃除 http、mysql 和其他几个端口之外的所有端口的所有连接。

而且,它将所有 mysql 和 13000-13004..等端口连接重定向到同一端口的特定本地 ip,即 192.168.1.100。

但奇怪的是,当我的防火墙处于活动状态时,它会完全阻止所有输入连接,甚至那些不应该阻止的连接(http,mysql)。事实上,我确实被阻止了,无法建立任何外部连接。

我究竟做错了什么?

附言:我测试了没有这些重定向的防火墙,它仍然阻止所有输入,所以我认为这不是问题。

答案1

首先,您需要检查您的系统是否允许转发数据包:

cat /proc/sys/net/ipv4/ip_forward

或者

sysctl ipv4_forward

其值应为“1”。如果不是(sudo 或作为 root):

echo '1' > /proc/sys/net/ipv4/ip_forward

要使更改永久生效,您可以取消注释net.ipv4.ip_forward=1/etc/sysctl.conf完成此操作后,您可以进一步测试您的 iptables 设置(我假设在进行微小更改后它将正常工作 ;-))。由于您说您是新手,因此我已在每个规则下放置了规则描述,希望您能理解。

iptables -P INPUT DROP
iptables -A OUTPUT ACCEPT
iptables -A FORWARD ACCEPT

这将丢弃除符合所定义规则的流量之外的所有流量。-P INPUT DROP 可以作为第一条规则,而 -A INPUT DROP 必须是最后一条规则。接下来的 2 条规则将允许传出连接和转发。

iptables -A INPUT -i lo -j ACCEPT

允许环回(127.0.0.1)流量

iptables -A INPUT -m state --state RELEATED,ESTABLISHED -j ACCEPT

这将允许所有状态为 RELATED(FTP 的新辅助连接)或 ESTABLISHED(此连接的数据包已在两个方向上看到 HTTP 流量)的数据包。

iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE

nat 因为您可能正在使用 natting,伪装从接口传出的数据包ethx。Fe:WAN 端在 eth1 上,lan 在 eth0 上,因此 ethx 将是 eth0。这是在 POSTROUTING 上。

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 192.168.1.100:3306

这才是真正的转发。

所以基本上您的 iptables 规则没有问题,您可能只是忘记了 ip_forward 设置。

相关内容