我正在尝试从我们的产品中删除路由器并使用iptables替换其所有功能.
系统需要执行一般流量控制以及将数据转发到位于LAN后面的特定服务器.目前的设置是 –
> eth0 – 外部
> eth1 – 内部
> eth2 – 内部
> eth3 – 内部
eth0通过DHCP获取IP.
eth1,eth2和eth3构成桥(br0)的一部分,其静态地址为10.0.1.1.
10.0.1.2上有一台服务器,需要为HTTP和MySQL流量提供服务.无法保证将此服务器插入的位置(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
但是,我无法通过外部接口(防火墙外部)连接的客户端登录我的内部MysqL服务器.
我已经读过数据包只能通过每一个链(INPUT / FORWARD / OUTPUT),但这仍然是这种情况吗?是我的FORWARD数据包,然后在另一个接口上再次作为INPUT处理?
在上面的任何配置中有什么突出的错误吗?
配置细节 –
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 …并且实际上从未成功…
网络描述 – s
10.0.0.0是通用办公网络,防火墙框上的eth0接口连接在这里.它的IP地址目前是10.0.0.17 …
10.0.1.0是防火墙eth1 / 2/3后面的网络.
我想通过使用给予eth0(10.0.0.17)的IP地址来访问防火墙后面的服务器.