Iptables:“nf_conntrack_ftp”在 debian 下无法工作

Iptables:“nf_conntrack_ftp”在 debian 下无法工作

我已经安装了 debian(在我的树莓派上,但问题很笼统):

Linux raspberrypi 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux

我正在尝试在其上设置一个简单的匿名和纯文本(无 SSL)FTP 服务器(vsftpd)。 TCP 端口是常规 21 FTP 端口,我将只允许被动模式。

我想要严格的防火墙配置,所以我只允许 ssh 和前面提到的 FTP 服务器。

为此,我使用该conntrack模块仅允许合法的入站连接。因此我加载了modprobenf_conntrack_ftp模块:

modprobe nf_conntrack_ftp

我的 iptables 配置:

# Generated by iptables-save v1.4.21 on Sat Aug 12 15:50:44 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [108:11273]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 15:50:44 2017

使用此配置,我无法使被动数据连接正常工作。

我已经设置了 tcpdump 并在:-A INPUT j LOG之前添加了一条规则 -A INPUT -j DROP:我可以清楚地看到要记录和拒绝的 Iptablespassive 数据连接的入站数据包。

前段时间我在 Centos7 机器上做了几乎相同的设置,它运行正常。我错过了什么重要的事情吗?

谢谢你的帮助 :)

答案1

正如 @meuh 在评论中所建议的,我查看了托管的文档https://home.regit.org/netfilter-en/secure-use-of-helpers/

“使用CT目标来完善安全性”段落解释道:

帮助程序的一个典型问题是帮助程序侦听预定义的端口。如果服务不在标准端口上运行,则需要声明它。在 2.6.34 之前,唯一的方法是使用模块选项。这导致所选帮助程序对添加的端口进行系统解析。这显然不是最理想的,CT 目标已在 2.6.34 中引入。它允许指定特定流程使用什么帮助程序。例如,假设我们有一个 FTP 服务器,IP 地址为 1.2.3.4,在端口 2121 上运行。

要声明它,我们可以简单地做

iptables -A PREROUTING -t raw -p tcp --dport 2121 \\
       -d 1.2.3.4 -j CT --helper ftp

这不是我的情况(因为我使用的是常规端口 21),但如果有人想为入站连接启用 ftp 帮助程序,它似乎仍然可以工作。

iptables -A PREROUTING -t raw -p tcp -m tcp --dport 21 -j CT --helper ftp

我的(工作)配置现在是:

# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*raw
:PREROUTING ACCEPT [445:37346]
:OUTPUT ACCEPT [375:44051]
-A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp
COMMIT
# Completed on Sat Aug 12 17:39:53 2017
# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [169:17775]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 17:39:53 2017

可能值得注意的是该文档如何建议警惕这种配置,因为防火墙的行为取决于用户输入。

我想知道以这种方式面对开放互联网上的 FTP 服务器是否存在风险。一般来说,就安全性而言,FTP 并不是最好的协议……

相关内容