Я использую 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
У вас есть решение, пожалуйста? Спасибо.
Для активной и пассивной передачи вам необходимо открыть следующие порты:
В: TCP 20,21,60000-65535
ВНЕ: TCP 20,21,60000-65535
Затем обновите FTP, чтобы использовать диапазон пассивных портов 60000-65535.
Затем на стороне клиента используйте пассивный режим (в случае IP-адреса с NAT), в противном случае активный также будет работать.
Вы используете "-m state --state RELATED, ESTABLISHED", но не используете "-m state --state NEW" в своих правилах iptables.
пример разрешения ssh:
iptables -t filter -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
Конфигурация фильтра пакетов Yout - беспорядок. По сути, вы должны настроить цепочку OUTPUT для передачи всего (если вы не хотите фильтровать исходящий трафик, инициированный вашим хостом), установив для нее политику PASS, а затем фильтровать входящие соединения, используя только цепочку INPUT (помня, что вы уже добавили established
правило, позволяющее то, что вам нужно. Таким образом, ваш хост сможет общаться с внешним миром, что бы он ни решил, а внешний мир сможет связываться с портами, которые вы разрешаете во INPUT. Единственным исключением будут правила UDP, для которых вам нужно будет разрешить входящую часть.
Что касается пассивного / активного режима FTP, чтобы разрешить прохождение трафика DATA, вы должны разрешить в цепочках INPUT диапазон PassivePort из proftpd.conf (таким образом, пассивный ftp будет работать), а активный ftp будет работать нормально, используя Политика передачи ВЫХОДА.