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

我有以下的iptables条目麻烦。 我想停止服务器与外部世界进行通信,除了ssh,但是当我input第四个命令(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 

谢谢

而是尝试在第2行:

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

假设当你说“停止服务器与除ssh以外的外部世界进行通信”时,你的意思是“通过ssh阻止世界与服务器通信”,那么出站数据包来自ssh服务器,所以有--sport 22 ,不是dport。

如果你确实意味着你应该只能通过ssh 服务器全世界,那么第一行应该有--sport ,因为INPUT包是来自ssh服务器的。

如果你想让ssh在两个方向上工作,你需要更复杂的规则。 如果你想允许新的 ssh连接,而不仅仅是当你使用规则集时打开的连接,你需要更复杂的规则。

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

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

此规则意味着:只有处于“ESTABLISHED”状态的TCP连接才能连接到SSH端口。 这有效地阻止了所有连接到SSH的连接尝试,因为当有人(你)想连接到SSH端口时,状态仍然是“NEW”而不是“ESTABLISHED”

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

此规则意味着:只允许服务器访问SSH端口,并且只允许“ESTABLISHED”TCP连接。 所以,这是一个types: – --dport应该是 – 运动

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

如果您的服务器不起路由器的作用, 不需要FORWARD规则。

 iptables -P OUTPUT DROP iptables -P FORWARD DROP 

基本的和推荐的“强化”,没有明确允许的所有stream量。


正确的规则

所以,你必须改变你的规则到以下内容:

 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. 删除所有其他来自服务器的stream量

重要笔记:

  1. 通常你会想让 ICMP进出你的服务器

  2. 通常, OUTPUT链的默认策略是ACCEPT而不是DROP

尝试这个:

只允许在某些临时端口上使用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