iptables 允许传入 FTP

iptables 允许传入 FTP

我想允许传入 FTP 流量。

CentOS 5.4:

这是我的/etc/sysconfig/iptables文件。

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

另外,默认情况下,会加载 ip_conntrack_netbios_n 模块。

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

但问题不在于该模块,因为我尝试卸载它,但仍然没有成功。

如果禁用 iptables,我可以将备份从另一台计算机传输到 FTP。如果 iptables 正在强制执行,则传输失败。

答案1

您的 ftp 服务器需要一个通道来传输数据。端口21用于建立连接。因此,为了使数据传输成为可能,您还需要启用端口20。看下面的配置

首先加载以下模块以确保被动 ftp 连接不被拒绝

modprobe ip_conntrack_ftp

21允许端口传入和传出的FTP 连接

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

允许 FTP 端口20用于传入和传出的活动连接

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

最后允许 FTP 被动入站流量

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

有关 FTP 和防火墙问题的更多信息,请参阅:http://slacksite.com/other/ftp.html#active

编辑:添加NEW到端口 21 输入规则。

答案2

我在几个博客等中已经看到了如此广泛的规则,并且想知道为什么不简单地使用

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

nf_conntrack_ftp模块一起。这更加简洁和可读,这通常是一件好事,特别是对于防火墙......

FWIW,内核4.7似乎发生了变化,因此您需要设置net.netfilter.nf_conntrack_helper=1via sysctl(例如将其放入/etc/sysctl.d/conntrack.conf)或使用

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

(看这里更多细节)

答案3

FTP 客户端:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

FTP 服务器:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

在客户端的被动模式和主动模式之间切换

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

答案4

如果您同时需要主动和被动连接,并且已经接受ESTABLISHED连接,例如:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

那么你只需要打开21端口并为被动端口添加特殊规则即可。端口 20 不需要任何规则,因为它已被ESTABLISHED上述规则接受。

首先接受新连接port 21

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

然后为无源端口添加 CT 助手1024:

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

也可以看看:

笔记:您必须1024:在 FTP 服务器中设置如下:在 FTP 配置中搜索默认被动端口。否则,您将打开太多可能与 FTP 无关的端口。

重要的提示:我没有添加OUTPUT规则,因为我的默认规则是iptables -P OUTPUT ACCEPT.这意味着我相信从我的盒子里得到的东西。这可能不是一个好的选择,尤其是在 NAT 设置中。

非常重要的注意事项:FTPS 不适用于此类设置,因为被动端口是隐藏的(加密的),因此无法iptables猜测正确的端口。看更改 IPTables 以允许使用被动端口通过 TLS 进行 FTPhttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

相关内容