我试图用谷歌搜索我的 FTPS 的 iptable,使用 TLS (proftpd) 与我现在正在工作的 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 的传入端口?
OUTPUT部分仅用于连接,它是从服务器发起的,它根本不影响从客户端发起的连接。通常OUTPUT不是FILTERED,除非你有特殊要求来阻止传出的东西。
INPUT是您应该过滤的部分。
ESTABLISHED和RELATED部分用于连接,它已经启动并且应该继续工作(例如握手后的 TCP),并且通常比其他规则具有更高的匹配度。
我们可以将FTP连接分为三种类型:
在活动 FTP 的情况下,您需要在客户端打开传入 TCP 21 和出站与源 TCP 20 端口和随机目标,这种类型的连接很少使用,即从客户端启动一个连接,从服务器启动一个连接. 因为最后一个 - 它实际上永远不会起作用。
在被动 FTP 情况更糟的情况下,被动 FTP 使用 TCP 21 端口进行命令,使用 RANDOM TCP 端口进行任何连接的数据传输,服务器的 FTP 响应中将指定哪个端口,因此,防火墙必须“监听” FTP 流量,需要对数据包进行更深入的检查,然后动态打开端口 - 这是正常情况。在这种情况下,使用 FTP 连接跟踪帮助程序/内核模块并解决问题 - 您只需打开 TCP 端口 21。
在 SSL 的情况下 - 它甚至更疯狂,因为有关 RANDOM 端口的数据也被加密并且防火墙无法猜测要打开哪个端口,在这种情况下,有些人在 FTP 服务器配置中指定随机端口的数量并打开所有这些端口防火墙。
通常过滤表的规则顺序通常如下所示:
对于 SSL,您可以在某处添加以下规则