我想仅允许 SSH 访问、FTP 访问以及我的专用服务器和所有 Cloudflare 服务器之间使用 IPTables 的所有通信。我尝试了下面的命令,但似乎我自己踢出了局,我不知道我做错了什么:
# Allow FTP and SSH for our staff
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow all Cloudflare IPv4 and IPv6
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -A INPUT -p tcp --source $i --dport 80 -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -A INPUT -p tcp --source $i --dport 443 -j ACCEPT; done
# make sure nothing comes or goes out of this box
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
ip6tables -A INPUT -j DROP
iptables-save > /etc/sysconfig/iptables
ip6tables-save > /etc/sysconfig/ip6tables
apt-get install iptables-persistent
service iptables-persistent start
service iptables-persistent save
执行此行后,我被 SSH 踢出:iptables -A OUTPUT -j DROP
。FTP 也不再工作了。那里出了什么问题??
答案1
问题在于iptables -A OUTPUT -j DROP
端口的使用方式。虽然您已允许使用端口 20、21 和 22。但您永远不会使用这些端口作为传出端口。它们将是端口范围中的随机数。
尝试添加类似
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
在您的 之前iptables -A OUTPUT -j DROP
。这应该允许与允许的传入连接相关的连接能够返回。