我想允许传入 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=1
via 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
也可以看看:
- https://github.com/rtsisyk/linux-iptables-contrack-exploit
- http://home.regit.org/wp-content/uploads/2011/11/secure-conntrack-helpers.html
笔记:您必须1024:
在 FTP 服务器中设置如下:在 FTP 配置中搜索默认被动端口。否则,您将打开太多可能与 FTP 无关的端口。
重要的提示:我没有添加OUTPUT
规则,因为我的默认规则是iptables -P OUTPUT ACCEPT
.这意味着我相信从我的盒子里得到的东西。这可能不是一个好的选择,尤其是在 NAT 设置中。
非常重要的注意事项:FTPS 不适用于此类设置,因为被动端口是隐藏的(加密的),因此无法iptables
猜测正确的端口。看更改 IPTables 以允许使用被动端口通过 TLS 进行 FTP和https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok