![需要帮助来弄清楚 iptables 规则](https://linux22.com/image/515758/%E9%9C%80%E8%A6%81%E5%B8%AE%E5%8A%A9%E6%9D%A5%E5%BC%84%E6%B8%85%E6%A5%9A%20iptables%20%E8%A7%84%E5%88%99.png)
我有这个 iptable 规则列表
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:3306
acctboth all -- 0.0.0.0/0 0.0.0.0/0
VZ_INPUT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
ACCEPT tcp -- 94.101.25.40 0.0.0.0/0 state NEW tcp dpt:3306
Chain FORWARD (policy DROP)
target prot opt source destination
VZ_FORWARD all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy DROP)
target prot opt source destination
acctboth all -- 0.0.0.0/0 0.0.0.0/0
VZ_OUTPUT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 94.101.25.40 0.0.0.0/0 state NEW tcp dpt:3306
我只希望 localhost 和我的 ip 访问 tcp 3306。我可以删除上面显示的所有其他规则吗?我不知道是否应该保留其中任何一个
答案1
acctboth 目标可能是 bandmin 自动放置在那里的。如果您删除它,它可能会重新出现。您可以使用“chkconfig bandmin off”禁用 bandmin,但它实际上除了计数数据包之外什么也不做。
VZ_INPUT 看起来像一个我不熟悉的防火墙包。
除此之外,你似乎有三个条目接受全部端口 3306 的流量,并且只允许来自我认为是您的 IP 的新连接。
我建议您删除 INPUT 上的最后 4 条规则并替换如下:
iptables -A INPUT -p tcp --dport 3306 -s 94.101.25.40 -j ACCEPT
iptables -A INPUT -p tcp -i l0 --dport 3306 -j ACCEPT
拥有 DROP 的 OUTPUT 策略有点棘手,并且可能会弄乱很多东西,所以如果我是你,我会将其更改为 ACCEPT:
iptables -p OUTPUT ACCEPT
如果你坚持保持现状,你只会让新的SQL 连接中断,因此删除规则并添加:
iptables -A OUTPUT -p tcp -s 94.101.25.40 --sport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp -i l0 -sport 3306 -j ACCEPT
这假设 94.101.25.40 是机器自己的 IP 地址之一,而不是某个远程 IP。
您如何访问您的服务器?除非您的其他链中有它,否则我甚至看不到允许 SSH 流量进入的规则。您真的应该发布完整的 iptables -L 输出。您仍然可以访问您的机器的唯一原因可能是因为其他链中的规则。
如果您再次发帖,请使用 iptables -L -v。这会添加一些有用的额外信息,例如规则在哪个接口上运行。