新手 iptables 配置错误,规则不明确

新手 iptables 配置错误,规则不明确

我正在配置一台服务器,并尝试制定一些我认为非常简单的 iptables 规则:

[root host ~]
- iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             loopback/8          reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

[root host ~] 
- iptables -P INPUT DROP

这导致我的 SSH 会话挂起。现在我根本无法通过 SSH 访问机器,但所有其他权限(HTTP 等)似乎都运行正常。

事后我又做了一些研究,但对我来说这仍然看起来是一个正确的配置。

我觉得我误解了 iptables 提供的过滤功能。是这样的吗?这张图片有什么问题?

编辑:我修改了我的规则debian iptables 文章,这样您就可以在那里看到原始的输入行。

双重编辑:我应该在这里做一些准备工作;我已经重新创建了 Debian 文章中的原始输入

-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

答案1

这条规则相当可疑:

REJECT     all  --  anywhere             loopback/8          reject-with icmp-port-unreachable

除非您确保它不适用于环回接口(lo),否则它可能会破坏各种各样的东西。

答案2

事实证明问题出在我的第二条规则上:

-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

我愚蠢地没有仔细检查 VPS 上的接口,而且由于它是基于 OpenVZ 的,内部 vm 接口的地址为 127.0.0.2,但从技术上讲并不是环回,从而触发了此规则。

编辑:不,我又错了!最终发现,我的 VPS 允许插入基于状态的规则,但从未匹配它们,因此当我将策略设置为 DROP 时,已建立的连接被丢弃。

相关内容