加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 设置IPTables

发布时间:2020-12-13 17:00:54 所属栏目:Linux 来源:网络整理
导读:我正在尝试从我们的产品中删除路由器并使用iptables替换其所有功能. 系统需要执行一般流量控制以及将数据转发到位于LAN后面的特定服务器.目前的设置是 – eth0 – 外部 eth1 – 内部 eth2 – 内部 eth3 – 内部 eth0通过DHCP获取IP. eth1,eth2和eth3构成桥(b
我正在尝试从我们的产品中删除路由器并使用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地址来访问防火墙后面的服务器.

解决方法

由于您列出了可以连接的客户端,因此您的iptables设置没有任何问题.然而,这不是全部故事:客户端必须有到达服务器转发地址的路由,并且服务器必须有一条路由返回,以使数据包到达FORWARDing.

工作的客户端在10.0.1.0/24网络上具有一些物理存在,因此是其路由:

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从其无线网卡发送流量.

现在你还没有告诉我们网络的几何形状,这一切都在发生;从重叠空间的/ 24和/ 16网络掩模之间的混淆,我猜它有点混乱(这不是一个保证;有合理的理由这样做,但他们通常超过愚蠢的人数).此外,您的网络细节只对您有意义.

但结果是任何想要获得10.0.1.2的客户首先必须知道如何到达10.0.1.0/24,而且它必须是一个正确的想法.

以符合网络几何的方式修复客户端上的路由表,一切都应该改进.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读