主动\被动模式下FTP服务器的适当iptables规则

时间:2014-10-30 17:10:34

标签: linux ftp iptables centos6 proftpd

我在CentOS6上安装了ProFTPD服务器。 如果我使用ftp localhost,我可以正确连接,但如果我从外面尝试,我会收到消息"没有到主机的路由"。但是有一条主机路由,因为我通过SSH连接。

我尝试添加以下iptable规则:

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED -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"

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"

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"

并重新启动proftpd和iptables服务。 如何排除此问题?

1 个答案:

答案 0 :(得分:3)

为了允许FTP,您需要在服务器上使用以下规则:

  1. 允许客户端向端口21发起控制连接,如下所示:

    iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
    iptables -A OUTPUT -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
    
  2. 对于活动模式,允许服务器从端口20启动数据连接,如下所示:

    iptables -A OUTPUT -p tcp -m tcp --sport 20 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
    iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
    
  3. 对于被动模式,允许客户端在非特权端口上启动数据连接:

    iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate RELATED,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 -j ACCEPT -m comment --comment "Allow passive inbound connections"
    
  4. 普通conntrack模块应该正确跟踪何时在活动模式下建立RELATED数据连接,但是您可能需要加载nf_conntrack_ftp模块以便在建立此类连接时正确跟踪在被动模式下:

    • 检查是否加载了lsmod | grep nf_conntrack_ftp
    • 使用modprobe nf_conntrack_ftp
    • 加载

    或者,您可以将RELATED状态替换为NEW状态,这不太安全,但肯定会完成工作。

    This link提供了上述规则的基本原理的简明摘要。