无法使用 iptables 在 Ubuntu 上打开端口 3306

无法使用 iptables 在 Ubuntu 上打开端口 3306

我正在尝试在我的 ubuntu 12.04 服务器机器上打开端口 3306(用于远程 mysql 连接),但是我无论如何也无法让这个该死的东西工作!

这是我所做的:

1)列出当前防火墙规则:

$> sudo iptables -nL -v

output:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  225 16984 fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22
  220 69605 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     all  --  lo     *       0.0.0.0/0            127.0.0.0/8          reject-with icmp-port-unreachable
  486 54824 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
   19   988 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
    1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8
    4   208 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
    4   208 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  735  182K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain fail2ban-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination
  225 16984 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

2)尝试从远程机器连接:

$> mysql -u root -p -h x.x.x.x

output:
timeout.... failed to connect

3)尝试向iptables添加新规则:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

4)确保新规则已添加:

$> sudo iptables -nL -v

output:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  359 25972 fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22
  251 78665 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     all  --  lo     *       0.0.0.0/0            127.0.0.0/8          reject-with icmp-port-unreachable
  628 64420 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
   19   988 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
    1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8
    5   260 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
    5   260 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:3306

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  919  213K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain fail2ban-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination
  359 25972 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

看起来确实如此(“Chain INPUT”部分的最后一行)。

5)尝试从远程机器再次连接:

$> mysql -u root -p -h x.x.x.x

output:
timeout.... failed to connect

但又失败了。

6)尝试刷新所有规则:

$> sudo iptables -F

7)这次我可以连接了。

8)重新启动服务器并尝试连接,失败。

我怀疑由于新规则被附加在最后,所以它不会产生任何效果,因为在它之前似乎有一个“全部拒绝”类型的规则。如果是这样,如何确保新规则以正确的顺序添加?否则,我遗漏了什么?

请帮忙。

答案1

是的,您的问题与规则顺序有关。最后一条规则不会产生任何影响,因为它前面是拒绝所有规则。

您需要删除最后一条规则或在它之前插入新规则。不需要添加拒绝所有规则。您只需要将INPUTchain 的默认策略更改为DROP拒绝任何未明确允许的流量。

要在链中插入规则,请使用-I选项,而不是-A附加。您可以查看man iptables更多详细信息。

答案2

“8)重启服务器并尝试连接,失败”

这表明你的更新不是持久的。你可以使用 来解决这个问题iptables-restore

1)sudo vi /etc/iptables.firewall.rules

2)插入mySql规则:

#  Allow MySQL connections from anywhere.
-A INPUT -p tcp --dport 3306 -j ACCEPT

3)保存文件并重新加载规则:

sudo iptables-restore < /etc/iptables.firewall.rules

4)激活新规则

sudo iptables -L

相关内容