我正在尝试设置一些规则来阻止 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
- 对于
OUTPUT
链中的规则,您应该指定源端口匹配(--sport
),而不是目标端口(--dport
)。 - 无论如何,链
DROP
中的政策OUTPUT
并不是一种常见的做法。 - 阅读 iptables 教程和示例规则集。
- 为了避免丢失连接,最好使用
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
很高兴看到您使用明确的出口过滤,但实现起来还需要做更多的工作。