在我的 CentOS 6 中,我添加了 IPtables 规则,例如 DROP all the policy,例如
iptables -P 输入删除
然后我使用这个命令允许端口号 22,80,443,
iptables -A 输入 -i eth0 -p tcp --dport 80 -j 接受
iptables -A 输入 -i eth0 -p tcp --dport 443 -j 接受
iptables -A 输入 -i eth0 -p tcp --dport 22 -j 接受
现在可以用 putty 访问 SSH。但我无法访问互联网。我想知道这个问题的具体原因是什么?请帮帮我。
答案1
为了准确诊断此问题,我们需要查看您的 IPTables 规则 - 您可以使用“iptables -vnL”提供该规则
IPTables 规则是特定顺序的。
最有可能的是,在刚刚添加的 -A 规则之前有一个“DENY”规则。我很确定默认情况下,Redhat/CentOS 在默认配置中允许端口 22,但不允许其他端口 - 这就是 SSH 正常工作的原因。您可以通过将“-A INPUT”修改为“-I INPUT”来轻松测试此理论。-I 将规则插入过滤器的开头,-A 位于结尾。
再次,使用 iptables -vnL 将向您显示计数器,如果您有一个受控环境,它可以帮助您找出哪条规则击中了哪个数据包。
答案2
首先,我们无法看到您的所有规则,但您肯定需要这个规则。
iptables -I 输入 1 -m conntrack -j 接受 --ctstate 相关,已建立
答案3
如果我假设你的 iptables 中有以下规则:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
以及为 INPUT 链设置的默认策略:
iptables -P INPUT DROP
默认策略意味着您已通过其他规则明确告知内核丢弃所有不允许的数据包。因此,您可以更改默认策略或添加附加行以允许
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
它将允许通过端口 22、443 和 80 建立/关联任何进一步的连接。