IPtables 阻止 SSH,即使在隐式启用之后?

IPtables 阻止 SSH,即使在隐式启用之后?

我对以下 iptables 条目感到困惑。我想停止服务器与 ssh 以外的外部世界的通信,但当我输入第四个命令 (iptables -P OUTPUT DROP) 时,我丢失了 SSH 连接,尽管我将其保持打开状态。如能得到任何帮助,我将不胜感激?

iptables -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT  
iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT
iptables -A FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

谢谢

答案1

尝试在第 2 行:

iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED --sport ssh -j ACCEPT

假设当你说“停止服务器与外界通信(ssh 除外)”时,你的意思是“停止外界与服务器通信(ssh 除外),那么出站数据包就会ssh 服务器有--sport 22,但是没有 dport。

如果你真的意味着你只能说话服务器如果通过 ssh 与世界通信,则第 1 行应该用 来--sport代替,因为 INPUT 数据包是来自 ssh 服务器的数据包。

如果你希望 ssh 双向工作,你需要更复杂的规则。如果你想允许新的ssh 连接,不仅仅是在您设置规则集时打开的连接,您还需要更复杂的规则。

答案2

我假设规则iptables在你的服务器上,你的问题意味着你只想允许 SSH 连接到该服务器。让我们分析一下你的规则:

iptables -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT

这条规则的意思是:只有TCP连接已经处于“ESTABLISHED”状态的用户可以连接到 SSH 端口。这有效地阻止了所有 SSH 连接尝试,因为当有人(您)想要连接到 SSH 端口时,状态仍然是“NEW”,而不是“ESTABLISHED”

iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT

这条规则的意思是:只允许访问服务器SSH 端口,并且只允许“已建立”的 TCP 连接。因此,这是一种类型:--dport应该是--sport

iptables -A FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT

如果你的服务器不是作为路由器,你需要一条FORWARD规则。

iptables -P OUTPUT DROP
iptables -P FORWARD DROP

基本和推荐的“强化”措施是丢弃所有未明确允许的流量。


正确的规则

因此,您必须将规则更改为以下内容:

iptables -A INPUT  -p tcp --dport ssh -j ACCEPT  
iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --sport ssh -j ACCEPT
iptables -P INPUT  DROP
iptables -P OUTPUT DROP
  1. 允许所有连接到 SSH 端口的尝试

  2. 允许来自 SSH 端口的所有回复(TCP 状态 == ESTABLISHED)

  3. 放弃所有其他连接尝试

  4. 删除从服务器传出的所有其他流量

重要笔记:

  1. 通常你会允许 ICMP 进出你的服务器

  2. 通常,OUTPUT连锁店有一个默认的政策,ACCEPT而不是DROP

答案3

尝试这个:

仅允许在某些临时端口上使用 SSH

iptables -A INPUT -p tcp --sport 513:65535 --dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 --dport 513:65535 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 513:65535 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --sport 22 --dport 513:65535 -j ACCEPT

确保没有任何东西进入或离开此框

iptables -A INPUT -j DROP

iptables -A OUTPUT -j DROP

相关内容