it-swarm.cn

允许FTP与IPTables

我当前的情况涉及允许各种规则,但是我需要可以从任何地方访问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
26
IOTAMAN

这是我所推荐的文档,以便他们遵循FTP协议: http://slacksite.com/other/ftp.html

  • 要进行主动模式FTP,您需要允许到TCP端口21的传入连接和从端口20的传出连接。
  • 要执行被动模式FTP,您需要允许到TCP端口21的传入连接,以及到服务器计算机上随机生成的端口的传入连接(必须在netfilter中使用conntrack模块))

您没有任何关系:您的帖子中的OUTPUT链,所以我也将其包括在这里。如果您的OUTPUT链是default-drop,那么这很重要。

将这些规则添加到您的iptables配置中:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

要支持被动模式FTP,则需要在引导时加载ip_conntrack_ftp模块。取消注释并修改/ etc/sysconfig/iptables-config文件中的IPTABLES_MODULES行以读取:

IPTABLES_MODULES="ip_conntrack_ftp"

保存iptables配置并重新启动iptables。

service iptables save
service iptables restart

要完全排除VSFTPD是问题,请停止VSFTPD,使用“ netstat -a”验证它不在端口21上侦听,然后运行a:

nc -l 21

这将开始在端口21上监听netcat,并将输入回显到Shell。从另一个主机,TELNET到服务器的端口21,并验证您是否获得TCP)连接,并且在键入TELNET连接时在Shell中看到输出。

最后,备份VSFTPD,确认它正在侦听端口21,然后尝试重新连接。如果与netcat的连接正常,则您的iptables规则很好。如果在netcat执行之后VSFTPD的连接不起作用,则说明您的VSFTPD配置有问题。

41
Evan Anderson

试试这个规则。注意: $EXTIP是您的FTP服务器的外部IP地址。

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT
0
Matt

就我而言,我缺少ip_conntrack_ftp内核模块。需要加载。因此,您可以尝试以下操作:

modprobe ip_conntrack_ftp

还将ip_conntrack_ftp添加到/ etc/modules,以便在重新启动后可以正常工作

0
Kornel