Назад | Перейти на главную страницу

Ubuntu 18.04 LTS применяет iptables, изменяет режим FTP / FTPS PASV

Я пытаюсь настроить iptables, чтобы компьютер КЛИЕНТА мог использовать FTP / FTPS в пассивном режиме.

Я уже установил правила большинства по ufw - краткий отрывок (пропущен список IPv6 и других правил для ясности):

Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
20/tcp                     ALLOW OUT   Anywhere                   # FTP Data
21/tcp                     ALLOW OUT   Anywhere                   # FTP Command
22                         ALLOW OUT   Anywhere                   # FTPS
989                        ALLOW OUT   Anywhere                   # FTPS
21                         ALLOW OUT   Anywhere                   # FTP

когда я добавляю правило ufw:

sudo ufw allow out from any to any port 1025:65535 proto tcp comment "Ephemeral TCP"

Все работает хорошо - клиент может подключиться к FTPS и просмотреть дерево каталогов + скачать файлы.
Правила UFW:

Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
20/tcp                     ALLOW OUT   Anywhere                   # FTP Data
21/tcp                     ALLOW OUT   Anywhere                   # FTP Command
22                         ALLOW OUT   Anywhere                   # FTPS
989                        ALLOW OUT   Anywhere                   # FTPS
21                         ALLOW OUT   Anywhere                   # FTP
1025:65535/tcp             ALLOW OUT   Anywhere                    # Ephemeral TCP

но это правило:

1025:65535/tcp             ALLOW OUT   Anywhere                    # Ephemeral TCP

имеет нежелательный эффект, заключающийся в том, что с клиентского компьютера разрешена любая связь с любым IP-адресом.

Вот почему я хотел не использовать его как правило UFW, а вместо этого установить iptables с помощью этой команды:

sudo iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT

поэтому разрешена только исходящая связь с ранее установленным IP.

так что у нас есть правила UFW, как в первом листинге - без

1025:65535/tcp             ALLOW OUT   Anywhere                    # Ephemeral TCP

и список iptables

sudo iptables -L -n --line-numbers

что дает этот результат:

Chain OUTPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state ESTABLISHED
2    ufw-before-logging-output  all  --  0.0.0.0/0            0.0.0.0/0           
3    ufw-before-output  all  --  0.0.0.0/0            0.0.0.0/0           
4    ufw-after-output  all  --  0.0.0.0/0            0.0.0.0/0           
5    ufw-after-logging-output  all  --  0.0.0.0/0            0.0.0.0/0           
6    ufw-reject-output  all  --  0.0.0.0/0            0.0.0.0/0           
7    ufw-track-output  all  --  0.0.0.0/0            0.0.0.0/0

но это не работает, и клиент FTPS может связаться с сервером, но не может перечислить дерево каталогов, загрузить любые файлы. Исходящая связь заблокирована UFW

cat /var/log/syslog

дает вывод:

[UFW BLOCK] IN= OUT=wl0 SRC=192.xxx.xxx.xxx DST=215.xxx.xxx.xx LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=8271 DF PROTO=TCP SPT=43379 DPT=27918 WINDOW=29200 RES=0x00 SYN URGP=0

Я пробовал выдавать команды после обновления правил цепочки OUTPUT в iptables:

sudo iptables-save #echoes all rules, seems not having a problem
sudo iptables-restore #hang ups, needs termination CTRL+C

но это не имело значения.

и:

sudo iptables-apply

дает эту ошибку:

Error: rulesfile not readable: /etc/network/iptables.up.rules

некоторые вопросы:

  1. Почему добавление установленного правила в цепочку OUTPUT в iptables не имеет никакого значения, где добавление правила в UFW помогает?

  2. Как добавить правило в iptables, чтобы можно было подключаться к серверу FTP / FTPS по эфемерному TCP, но только в том случае, если соединению предшествует другое соединение с тем же IP.

  3. Как применить новый набор правил в iptables, чтобы он был постоянным и загружался при загрузке так же, как правила UFW?

  4. В целом - это хорошая идея использовать UFW с iptables или мне просто удалить UFW и вместо этого использовать только iptables? Я бы предпочел переписать все правила UFW в iptables, если это упростит жизнь и упростит практику, чем пытаться объединить использование этих инструментов.

Пассивный режим FTP требует подключения к временным портам на FTP-сервере, поскольку фактическая передача данных осуществляется через разные TCP-подключения.

Вы можете попробовать с помощью какого-нибудь помощника FTP (ip_conntrack_ftp), который проверяет канал управления FTP и извлекает порты, чтобы открывать только эти соединения. Но обычно это не работает с неявным FTPS (порт 990), поскольку канал управления зашифрован. И хотя явный протокол FTPS (порт 21) поддерживает шифрование канала управления только для аутентификации, не все FTP-клиенты поддерживают это поведение, что опять же делает невозможным использование помощника FTP.

Вкратце: не используйте FTP. Это ужасный протокол, если задействованы NAT или межсетевые экраны. Вместо этого используйте SFTP (то есть передачу файлов по SSH), который является совершенно другим протоколом и также требует только одного порта (22).