我把所有的 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