我目前的情况涉及允许各种规则,但我需要可以从任何地方访问 ftp。操作系统是 Cent 5,我正在使用 VSFTPD。我似乎无法使语法正确。所有其他规则都正常工作。
## Filter all previous rules
*filter
## Loopback address
-A INPUT -i lo -j ACCEPT
## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
##Allow FTP
## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT
以下是我尝试过的规则。
##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT
-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
这是我推荐人们参考的文档,以便他们可以遵循 FTP 协议:http ://slacksite.com/other/ftp.html
您的帖子中没有任何内容:您的 OUTPUT 链,所以我也会在此处包含它。如果您的 OUTPUT 链是默认丢弃,那么这很重要。
将这些规则添加到您的 iptables 配置中:
那么,要支持被动模式 FTP,您需要在启动时加载 ip_conntrack_ftp 模块。取消注释并将 /etc/sysconfig/iptables-config 文件中的 IPTABLES_MODULES 行修改为:
保存 iptables 配置并重新启动 iptables。
要完全排除 VSFTPD 的问题,请停止 VSFTPD,使用“netstat -a”验证它没有在端口 21 上侦听,然后运行:
这将启动 netcat 监听端口 21 并将输入回显到您的 shell。从另一台主机,TELNET 到您服务器的端口 21,并验证您获得了 TCP 连接,并且当您键入 TELNET 连接时,您在 shell 中看到了输出。
最后,重新启动 VSFTPD,确认它正在侦听端口 21,然后再次尝试连接。如果与 netcat 的连接正常,那么您的 iptables 规则就可以了。如果在 netcat 完成后无法连接到 VSFTPD,则说明您的 VSFTPD 配置有问题。
试试这个规则。注意:
$EXTIP
是您的 FTP 服务器的外部 IP 地址。就我而言,我缺少 ip_conntrack_ftp 内核模块。它需要加载。所以你可以试试这个:
并且还将 ip_conntrack_ftp 添加到 /etc/modules 以便重启后可以工作