在 iptables 中我有一条 ssh 规则,为什么它不起作用?

在 iptables 中我有一条 ssh 规则,为什么它不起作用?

我把所有的 iptables 链都改成了DROP,并且制定了一条规则,允许从计算机(10.21.0.40,有隐藏的 NAT,eth1)通过 ssh 连接到 Ubuntu 服务器(172.16.21.1,静态 ip,eth0),规则如下:

sudo iptables -I INPUT 1 -p tcp -dport 22 -i eth1 -s 10.21.0.40 -d 172.16.21.1 -m conntrack --ctstate NEW -j ACCEPT

当我尝试通过 ssh 从计算机连接到 ubuntu 服务器时,出现错误:

connect to host 172.16.21.1 port 22: Connection refused

为什么会这样?

答案1

规则很好,忘记安装 open-ssh。

答案2

您引用的规则由于语法错误而无法运行。除此之外,您还遇到了另外两个问题:

  • 您只允许设置了 SYN 标志的传入连接(新连接)
  • 您将 OUTPUT 链的默认策略设置为 DROP,不允许回复发出。SSH 服务器将如何发送其响应?

在您想要接受传入 SSH 连接的机器上添加的完整规则集:

# Flush all the rules in all tables
iptables -F
iptables -t nat -F

# Delete all user defined tables
iptables -X

# Set default policies (you normally leave OUTPUT as 'ACCEPT')
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Allow local connections
iptables -A INPUT -i lo -j ACCEPT

# Allow ICMP traffic (optional)
iptables -A INPUT -i lo -j ACCEPT

# Allow TCP sessions that are already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Finally, allow incoming SSH connections.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

相关内容