设置 iptables 规则后无法访问实例

设置 iptables 规则后无法访问实例

我正在尝试设置一些规则来阻止 TCP(SSH 和 FTP)上除 21 和 22 之外的所有端口。但是当我尝试运行此脚本时,我被锁定在我的实例之外并且无法访问它。这是脚本:

# Flush the FW Rules 
iptables -F
iptables -X

# Block all traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Allow FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT

# Allow ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

在脚本中,它设置了 SSH 和 FTP 的传入和传出请求,但为什么我无法访问它?

答案1

  1. 对于OUTPUT链中的规则,您应该指定源端口匹配(--sport),而不是目标端口(--dport)。
  2. 无论如何,链DROP中的政策OUTPUT并不是一种常见的做法。
  3. 阅读 iptables 教程和示例规则集。
  4. 为了避免丢失连接,最好使用iptables-save工具iptables-apply

答案2

您应该设置状态跟踪,并丢失线路-A OUTPUT ... -j ACCEPT

IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

很高兴看到您使用明确的出口过滤,但实现起来还需要做更多的工作。

相关内容