IPTABLES 问题 - 尝试删除除 127.0.0.1 和 VPN 之外的所有到 3306 的连接

IPTABLES 问题 - 尝试删除除 127.0.0.1 和 VPN 之外的所有到 3306 的连接

我有一个 VPS,已成功设置 VPN。我使用 OpenVPN 客户端连接。VPN 服务器接口为 10.8.0.1,客户端接收 10.8.0.? IP。我可以 ping 10.8.0.1。我似乎还可以 telnet 到 10.8.0.1:80、10.8.0.1:443 等标准端口,这些端口上有可用的服务,但不能 telnet 到 10.8.0.1:3306。

这是 ifconfig 打印的 VPN 连接:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:383 errors:0 dropped:0 overruns:0 frame:0
          TX packets:358 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:29356 (28.6 KiB)  TX bytes:149232 (145.7 KiB)

MySQL 不绑定任何 IP,因此它可以从任何地方接收连接。我想通过 IPTABLES 降低它的可见性。

然后我将这些规则添加到IPTABLES:

# allow connections from the vpn
iptables -A INPUT -s 10.8.0.0/24 -p tcp --dport 3306 -j ACCEPT
# allow local connections eg your scripts running locally
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
# deny any other attempts of connecting to mysql
iptables -A INPUT -p tcp --dport 3306 -j DROP

现在我可以从服务器本身连接到 127.0.0.1。我无法通过其公共 IP 连接到服务器。我无法通过 10.8.0.1(VPN IP)连接到它。

这是我的完整 IPTABLES:

[root@ddinvps mail]# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:1723
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
icmp_packets  all  --  0.0.0.0/0            0.0.0.0/0
tcp_packets  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  10.8.0.0/24          0.0.0.0/0           tcp dpt:3306
ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp dpt:3306
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain icmp_packets (1 references)
target     prot opt source               destination
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 3
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 11
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8
DROP       icmp --  0.0.0.0/0            0.0.0.0/0

Chain tcp_packets (1 references)
target     prot opt source               destination
ACCEPT     all  --  127.0.0.1            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:26
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
ACCEPT     tcp  --  10.3.124.200         0.0.0.0/0           tcp dpt:9102
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:10000
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0
DROP       udp  --  0.0.0.0/0            0.0.0.0/0

有任何想法吗?

答案1

数据包正在被tcp_packets链过滤。这是因为您的iptables -A命令已将新规则添加到链的末尾,并且过滤器在第一次匹配获胜时起作用。解决问题的最简单方法是使用以下命令INPUT将您的规则添加到链的开头,例如INPUTiptables -I

iptables -I INPUT -s 10.8.0.0/24 -p tcp --dport 3306 -j ACCEPT

等等,这会将您的新规则插入到链的开头。

答案2

很明显,您的 tcp_packets 链在达到您的规则之前会丢弃流量。

将此规则添加到 tcp_packets 链的开头,或者在 INPUT 链中,但在跳转 tcp_packets 之前

相关内容