我对以下 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
允许所有连接到 SSH 端口的尝试
允许来自 SSH 端口的所有回复(TCP 状态 == ESTABLISHED)
放弃所有其他连接尝试
删除从服务器传出的所有其他流量
重要笔记:
通常你会想允许 ICMP 进出你的服务器
通常,
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