启用防火墙后,我的 FTP 无法正常工作。过去,我一直自行设置 iptables,昨天我大致了解了如何设置,但我错过了设置所需的规则。这是我的 iptables.rules
# 由 iptables-save v1.4.4 于 2010 年 11 月 16 日星期二 23:23:50 生成 *筛选 :转发接受 [0:0] :输入接受 [0:0] :输出接受 [0:0] -A 输入-i lo -j 接受 -A 输入 -m 状态 -i eth0 --状态相关,已建立 -j 接受 -A 输入-p tcp -m tcp --dport 20:21 -j 接受 -A 输入-p tcp -m tcp --dport 989:990 -j 接受 -A 输入-p tcp -m tcp -i eth0 --dport 22 -j 接受 -A 输入-p tcp -m tcp -i eth0 --dport 80 -j 接受 -A 输入-p tcp -m tcp -i eth0 --dport 443 -j 接受 -A 输入-p tcp -m tcp -i eth0 --dport 10000 -j 接受 -A 输入-p icmp -i eth0 -j 接受 -A 输入 -j 拒绝 --拒绝 icmp 端口不可达 犯罪 # 于 2010 年 11 月 16 日星期二 23:23:50 完成 # 由 iptables-save v1.4.4 于 2010 年 11 月 16 日星期二 23:23:50 生成 *弄脏 :路由前接受 [95811:65665815] :输入接受 [92355:65212126] :转发接受 [0:0] :输出接受 [55795:22371752] :后路由接受 [55795:22371752] 犯罪 # 于 2010 年 11 月 16 日星期二 23:23:50 完成 # 由 iptables-save v1.4.4 于 2010 年 11 月 16 日星期二 23:23:50 生成 *自然 :路由前接受 [5132:543438] :后路由接受 [953:67517] :输出接受 [953:67517] 犯罪 # 于 2010 年 11 月 16 日星期二 23:23:50 完成
总而言之,如果启用了防火墙,我的 FTP 可以连接但不会显示任何文件。如果禁用防火墙,则一切都很完美。
编辑:我让它与防火墙配合使用的唯一方法是禁用 ipv6,禁用 TLS 并向防火墙添加一条规则,允许从我的家庭网络进行连接(服务器在其他地方)
答案1
在被动模式下,当客户端想要从服务器获取文件或向服务器发送文件时,FTP 服务器将选择一个随机端口并将该端口发送给 FTP 客户端。
当您不使用加密时,正确配置的防火墙(使用ip_conntrack_ftp
辅助内核模块,这可能是非 TLS 连接所缺少的)将“监听”连接并将这些连接标记为RELATED
。使用加密时,防火墙无法监听。
对此问题的一个快速而粗略的解决方案是配置 FTP 服务器以选择一小段范围的端口用于被动连接,然后允许访问所有这些端口。例如,在vsftpd
:
pasv_min_port=12000
pasv_max_port=12049
然后在 iptables 中:
iptables -A INPUT -p tcp -m tcp -i eth0 --dport 12000:12049 -j ACCEPT
允许任何人访问这些端口可能会造成一种漏洞:如果有人反复扫描这些端口,他们可能会很幸运,能够“抢先”找到数据端口并获取文件。理想情况下,您的 FTP 服务器会检查并确保连接来自与原始连接相同的位置,但由于“FXP”(通过说服一台服务器与另一台服务器的被动数据端口建立主动连接,将文件从一台服务器传输到另一台服务器)之类的东西,某些服务器默认不检查连接。您应该检查您的配置文件,看看是否有禁用 FXP 的选项,然后使用它。(vsftpd 将其称为“混杂”,默认情况下禁用。)
答案2
我没有直接使用 FTPS 的经验,但可能是因为控制通道是加密的,所以 netfilter 的连接跟踪代码无法了解要打开的适当端口以允许客户端的传入数据连接(对于被动模式)。这也许可以解释为什么在禁用防火墙时“一切都很完美”。如果可能,请尝试使用主动模式。不幸的是,我怀疑如果客户端也在防火墙后面,那么出于同样的原因,主动模式也可能会被阻止!
答案3
如果 FTP 连接已启动但无法查看/传输任何文件,则尝试使用被动模式(只需在命令行 ftp 客户端中键入 PASV)。如果没有被动模式,服务器将尝试在匿名端口上建立与您的计算机的连接。至少,这是使用普通 FTP 时发生的情况 - 不知道如何使用 FTPS :S
高血压,
吉吉克