设置IPTables

我试图从我们的产品中删除路由器,并使用iptablesreplace所有function。

系统需要执行一般的stream量控制以及将数据转发到局域网后面的特定服务器。 当前设置是 –

  • eth0 – 外部
  • eth1 – 内部
  • eth2 – 内部
  • eth3 – 内部

eth0通过DHCP获取IP。

eth1,eth2和eth3构成一个具有10.0.1.1静态地址的网桥(br0)的一部分。

有一个服务器坐在10.0.1.2谁需要服务器的HTTP和MySQLstream量。 无法保证将服务器插入(eth1 / 2/3)但IP是静态的。

我试图设置iptables规则,这似乎很容易跟随只有一个eth设备,但是当需要转发的时候,我被捆绑在一起。

这是我迄今为止所尝试的:

# clear and flush everything iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -t raw -F iptables -t raw -X iptables -t security -F iptables -t security -X # DROP packets unless covered by rules iptables -P FORWARD DROP iptables -P INPUT DROP # No intention of filtering any outgoing traffic iptables -P OUTPUT ACCEPT # Handle our routing iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.1.2:80 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3306 -j DNAT --to 10.0.1.2:3306 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # Input Chain iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # ssh iptables -A INPUT -s 10.0.1.2 -p tcp --dport 3306 -j ACCEPT # ssh # Forward Chain iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 10.0.1.2 -j ACCEPT iptables -A FORWARD -i eth0 -p tcp --dport 3306 -d 10.0.1.2 -j ACCEPT # enable ipv4 forwardning for the system echo 1 > /proc/sys/net/ipv4/ip_forward 

这给了我所产生的链/规则设置 –

 Chain INPUT (policy DROP 1 packets, 49948 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 1 52 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 10.0.1.2 0.0.0.0/0 tcp dpt:3306 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 10.0.1.2 tcp dpt:80 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 10.0.1.2 tcp dpt:3306 Chain OUTPUT (policy ACCEPT 1 packets, 196 bytes) pkts bytes target prot opt in out source destination 

但是,我无法通过通过外部接口连接的客户端(防火墙框外)login到我的内部MySQL服务器。

我已经读过数据包只能通过每个ONE链(INPUT / FORWARD / OUTPUT),但是这仍然是这种情况吗? 是我的FORWARD包,然后再作为一个单独的界面上的INPUT处理?

在上面的任何configuration中是否有任何突出的错误?

configuration细节 –

netstat -rn输出

从我可以连接的客户端…

 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.0.0.139 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br0 

Telnet按预期连接。

从我无法连接的客户端…

 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.0.0.139 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.0.0.0 0.0.0.0 255.255.0.0 U 0 0 0 wlan0 

Telnet只显示Trying 10.0.0.17...并且从来没有成功…

networking描述(S) –

10.0.0.0是普通的办公networking,防火墙上的eth0接口连接在这里。 它的IP地址目前是10.0.0.17 …

10.0.1.0是指防火墙eth1 / 2/3后面的networking。

我想通过使用给eth0(10.0.0.17)的IP地址访问防火墙后面的服务器。

由于您列出了可以连接的客户端,因此您的iptables安装程序没有任何问题。 然而,这并不是一回事:客户端必须有一个到达服务器的转发地址的路由,并且服务器必须返回一个路由,以使数据包得到FORWARDing。

工作的客户端在10.0.1.0/24networking上有一些物理存在,因此有一个到它的路由:

 10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 

客户端不仅不具有10.0.1.0/24的路由,而且具有更一般的10.0.0.0/16路由将stream量从其无线网卡发送出去的路由。

现在你还没有告诉我们这个networking的几何形状, 从/ 24和/ 16networking掩码之间的重叠空间的混淆,我猜测它有点混乱(这不是一个保证,有合理的理由这样做,但他们通常是愚蠢的寡不敌众)。 另外,你的networking细节只对你有用。

但结果是任何想要得到10.0.1.2首先必须具备一些如何到达10.0.1.0/24的想法,而且它必须是一个正确的想法。

以与您的networking几何形状一致的方式修复您的客户端上的路由表,一切都应该得到改善。