PassivePorts 的 ProFTPD 和防火墙配置

PassivePorts 的 ProFTPD 和防火墙配置

我在我的服务器上使用 ProFTPD,当我尝试使用 FileZilla 或 WinSCP 连接到我的服务器时,出现此错误:

Command: MLSD
Error:   Connection timed out
Error:   Failed to retrieve directory listing

我的防火墙配置是(/etc/init.d/firewall):

#!/bin/sh

sudo iptables -t filter -F
sudo iptables -t filter -X

sudo iptables -t filter -P INPUT DROP
sudo iptables -t filter -P FORWARD DROP
sudo iptables -t filter -P OUTPUT DROP

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A INPUT -i lo -j ACCEPT
sudo iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
sudo iptables -t filter -A INPUT -p icmp -j ACCEPT
sudo iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# SSH
sudo iptables -t filter -A INPUT -p tcp --dport 3636 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --dport 3636 -j ACCEPT
sudo iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# DNS
sudo iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP
sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

# FTP
sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT

# Mail SMTP
sudo iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

# Mail POP3
sudo iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

# Mail IMAP
sudo iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

# NTP
sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

你有解决方案吗?谢谢。

答案1

您的数据包过滤器配置很乱。基本上,您应该将 OUTPUT 链设置为通过所有内容(除非您想过滤从您的主机发起的传出流量),将其策略设置为 PASS,然后仅使用 INPUT 链过滤传入连接(请记住您已经添加了规则established,允许您所需的内容)。这样,您的主机将能够与外部世界进行通信,无论它决定什么,外部世界也将能够与您在 INPUT 中允许的端口进行通信。唯一的例外是 UDP 规则,您需要允许传入部分。

至于被动/主动 FTP 模式,为了允许数据流量通过,您应该在 INPUT 链中允许 proftpd.conf 中的 PassivePort 范围(这样被动 ftp 就可以工作了),并且主动 ftp 可以使用 OUTPUT 传递策略正常工作。

答案2

您正在使用“-m state --state RELATED,ESTABLISHED”,但您没有在 iptables 规则中使用“-m state --state NEW”

允许 ssh 的示例:

 iptables -t filter -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT

答案3

对于主动和被动传输,您需要打开以下端口:

在:TCP 20,21,60000-65535

出去:TCP 20,21,60000-65535

然后更新 FTP 以使用被动端口范围 60000-65535。

然后在客户端使用被动模式(如果是 NATed IP),否则主动模式也可以工作。

详细信息和说明

相关内容