允许FTP与IPTables


26

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

1
修复了格式问题,使其易于阅读。
艾利·佩恩

即时通讯假设您正在使用Rackspace?本教程存在该缺陷。只需按照@Evan Anderson的说明进行即可。
Andres SK

Answers:


41

这是我所推荐的文档,以便他们遵循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连接时在外壳中看到了输出。

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


感谢您的帮助,您为被动模式提出的建议解决了我的问题。感谢您的帮助。
IOTAMAN,2009年

如果未将IPTABLES_SAVE_ON_STOP设置为“是”,那么重新启动iptables将清除您所做的任何更改。
凯文M

@Kevin:绝对是一个很好的观点!>微笑<我现在将对其进行编辑。
埃文·安德森

@ GLB03:没问题。我活在服务器故障中……>微笑<
Evan Anderson

这个答案对我不起作用,所以对于任何其他遇到此问题的人,我将指出它(以及打开端口21的输入/输出)确实对我有用linuxquestions.org/questions/linux-security-4 /… -–
ehsanul

0

试试这个规则。注意:$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

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

modprobe ip_conntrack_ftp

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.