通过 IPTables 仅允许 SSH、FTP 和 Cloudflare 服务器

通过 IPTables 仅允许 SSH、FTP 和 Cloudflare 服务器

我想仅允许 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。这应该允许与允许的传入连接相关的连接能够返回。

相关内容