![我的带有 TLS 的 FTPS iptables 可以正常使用吗?](https://linux22.com/image/692449/%E6%88%91%E7%9A%84%E5%B8%A6%E6%9C%89%20TLS%20%E7%9A%84%20FTPS%20iptables%20%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E4%BD%BF%E7%94%A8%E5%90%97%EF%BC%9F.png)
我尝试在 Google 上搜索,为我的 FTPS(proftpd)获取一个 iptables,并与我现在使用的 iptables killswitch 配合使用(请参阅https://www.reddit.com/r/linuxquestions/comments/57mga5/is_my_iptables_killswitch_working_have_some_p/)。
我使用端口 10210 作为 FTPS,使用 60100-60119 作为被动端口,此流量不通过 VPN。我想出了这个(它们位于最后一行上方):
# Allow traffic via TLS FTPS
iptables -A INPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# It seems to be working without the line under
#iptables -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --sport 10210:60119 --dport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
iptables -A OUTPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# It seems to be working without the line under
#iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 10210:60119 --dport 10210:60119 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
它似乎有效,但是由于我是 iptables 新手,我想知道我做错了什么(我可能做错了;),不确定端口范围,也许是打开了?)
编辑 我遇到了连接问题,所以我改用了这个,效果更好
-A INPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 60100:60119 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 60100:60119 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 60100:60119 -j ACCEPT
我稍后会读完http://ipset.netfilter.org/iptables-extensions.man.html,请尝试使用这个,而不是上面的端口范围
iptables -A INPUT -p tcp --dport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED,RELATED-j ACCEPT
并且删除-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
,并且我想知道我是否实际上也应该删除-m conntrack --ctstate NEW,ESTABLISHED
10210,因为它是 FTPS 的传入端口?
答案1
输出部分仅用于连接,即发起从服务器发起的连接不会影响从客户端发起的连接。通常输出是未过滤,除非你有特殊要求来阻止某些传出内容。
输入是您应该过滤的部分。
已确立的和有关的部分用于连接,该连接已经启动并且应该继续工作(即像握手后的 TCP),并且通常匹配度高于其他规则。
我们可以将FTP连接分为三种类型:
- 主动 FTP(普通)
- 被动 FTP(普通)
- 带有 SSL 的 FTP(任何加密)
如果是主动 FTP,您需要在客户端打开传入 TCP 21 和出站 TCP 20 源端口以及随机目标,这种连接类型很少使用,即一个连接由客户端发起,另一个连接由服务器发起。由于最后一个原因 - 它实际上从不起作用。
如果是被动 FTP,情况会更糟,被动 FTP 使用 TCP 21 端口来执行命令,使用随机 TCP 端口来传输任何连接的数据传输,该端口将在服务器的 FTP 响应中指定,因此,防火墙必须“监听”FTP 流量,这需要对数据包进行更深入的检查,然后动态打开端口 - 这是正常情况。在这种情况下,使用 FTP 连接跟踪助手/内核模块,这可以解决问题 - 您只需打开 TCP 端口 21。
对于 SSL 来说,情况就更加疯狂了,因为有关随机端口的数据也是加密的,防火墙无法猜测要打开哪个端口,在这种情况下,有些人在 FTP 服务器配置中指定随机端口的数量,并在防火墙上打开所有这些端口。
通常过滤表的规则顺序通常如下所示:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -m multiport --dports 22,80,443 -j ACCEPT
-A INPUT -i eth1 -p tcp -m conntrack --ctstate NEW -m tcp -m multiport --dports 22,53,80,1234 -j ACCEPT
-A INPUT -i eth1 -p udp -m conntrack --ctstate NEW -m udp -m multiport --dports 53,67,123 -j ACCEPT
COMMIT
对于 SSL,您可以在某处添加以下规则
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -m multiport --dports 21,15000:15050 -j ACCEPT