特定端口的 iptables 异常

特定端口的 iptables 异常

我是 iptables 新手,但今天在我的 raspian 上配置了一个简单的 natting:

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

如您所见,我还使用 openvpn 并将流量重定向到隧道接口。我想创建一个例外,例如将端口范围 900 到 999 和源 192.168.1.5 排除并直接发送到接口 eth1 并避免 VPN 加密。

我怎样才能创建这样的规则?

非常感谢您的意见。

编辑:我尝试过类似的东西

iptables -t nat -A POSTROUTING -p tcp --dport 900:999 --out-interface eth1 -j MASQUERADE

但好像并没有达到预期的效果...

答案1

您需要策略路由来为每个特定流量设置路由表。我找到了一个简洁且很好的例子Linux 高级路由迷你指南

将以下行放入/etc/iproute2/rt_tables

1 DIRECT

然后你可以这样做:

iptables -t mangle -A PREROUTING -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via <gateway address> dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
ip rule add from 192.168.1.5/32 table DIRECT

答案2

在你的帮助下我设法解决了这个问题。必须为 eth1 上的传入和传出添加额外的规则,并更改 PREROUTING 条件以仅匹配 ip 192.168.1.5,而不是添加规则。使用 ip Rule add from 192.168.1.5/32 表 DIRECT 的路由方法导致来自 192.168.1.5 的所有流量都通过 eth1 而不是仅通过端口 900-999。最终配置如下所示:

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

# Port exceptions
# Added -s for source address 192.168.1.5 here
iptables -t mangle -A PREROUTING -s 192.168.1.5 -p tcp --dport 900:999 -j MARK --set-mark 1

ip route add default via 192.168.2.1 dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT

再次感谢你的帮助。

相关内容