LINUX.ORG.RU

FTP и ufw

 ,


0

1

Всем привет, активировал ufw, внёс порты и проверил статус:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
21                         ALLOW       Anywhere
Anywhere                   ALLOW       192.168.1.0/24/tcp
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
20                         ALLOW       Anywhere
993                        ALLOW       Anywhere
995                        ALLOW       Anywhere
585                        ALLOW       Anywhere
220                        ALLOW       Anywhere
143                        ALLOW       Anywhere
PlexMediaServer            ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
21 (v6)                    ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
20 (v6)                    ALLOW       Anywhere (v6)
993 (v6)                   ALLOW       Anywhere (v6)
995 (v6)                   ALLOW       Anywhere (v6)
585 (v6)                   ALLOW       Anywhere (v6)
220 (v6)                   ALLOW       Anywhere (v6)
143 (v6)                   ALLOW       Anywhere (v6)
PlexMediaServer (v6)       ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

Пытаюсь подключиться к своему серверу по ftp через FileZilla на офтопике и получаю:

Ошибка:	Соединение прервано после 20 секунд неактивности
Ошибка:	Невозможно подключиться к серверу
Таки до ufw всё работало и подключалось. В качестве сервера FTP у меня стоит vsftpd. Вот его конфиг:
$ cat /etc/vsftpd.conf

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ascii_upload_enable=YES
ascii_download_enable=YES

chroot_local_user=YES
allow_writeable_chroot=YES

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES
ssl_tlsv1=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_ciphers=HIGH
pasv_min_port=40000
pasv_max_port=50000
local_root=/var/www/

Подскажите плиз в чём проблема? =(

p.s. /[cut/] не работает что ли?

Что в логах vsftpd? Инициация соединения происходит или нет?

Попробуйте открыть вот эти порты: 40000-50000.

Если все равно не работает, запускайте сниффер и смотрите, как реально идет обмен ftp-трафиком с выключенным файрволлом.

Serge10 ★★★ ()
Ответ на: комментарий от Serge10

Что в логах vsftpd?

$ sudo cat /var/log/vsftpd.log
Fri Jan 26 09:58:12 2018 [pid 3443] CONNECT: Client "::ffff:195.154.180.82"
Fri Jan 26 09:59:16 2018 [pid 3617] CONNECT: Client "::ffff:209.126.136.4"

IP-шники не понятные прилетают, но коннект есть. Обнаружил тут, что 20-й порт у меня закрыт 0_о хотя ufw сообщает, о том, что:

20                         ALLOW       Anywhere
20 (v6)                    ALLOW       Anywhere (v6)

При том, что в конфиге vsftpd менял connect_from_port_20 на NO и на YES без результата.

Попробуйте открыть вот эти порты: 40000-50000.

А как? nmap-ом что ли?

AntonyRF ★★ ()
Ответ на: комментарий от AntonyRF

А как? nmap-ом что ли?

Причем тут nmap? Этот софт только сканирует систему и показывает открытые порты. Открывать надо с помощью настроек firewall (iptables). У Вас, судя по логам, нормально устанавливаются соединения с ftp-сервером, а вот до обмена данными дело не доходит. Потому что клиенты используют порты в данном диапазоне (40000-50000) для передачи данных. Подробности см. в man-страницах к vsftpd и vsftpd.conf.

Serge10 ★★★ ()
Ответ на: комментарий от Serge10

Ну ок, делаю:

sudo ufw allow 40000:50000/tcp
sudo ufw allow 40000:50000/udp
sudo ufw reload

И не помогло =( Ну ок Plex вроде пересекается по портам и я решил сократить следующие параметры до:

pasv_min_port=44000
pasv_max_port=45000
Внезапно, тоже не помогло. А ведь всё должно работать, что можно ещё сделать?

AntonyRF ★★ ()
Ответ на: комментарий от rumgot

А загружен ли модуль nf_conntrack_ftp? И кстати, если данный модуль работает, то кроме 21 порта других открывать не нужно.

Кстати, да. Самое простое решение, на самом деле...

Serge10 ★★★ ()
Ответ на: комментарий от rumgot

А загружен ли модуль nf_conntrack_ftp?

$ lsmod | grep ftp
nf_nat_ftp             16384  0
nf_nat                 28672  1 nf_nat_ftp
nf_conntrack_ftp       20480  1 nf_nat_ftp
nf_conntrack          131072  8 nf_conntrack_ipv6,nf_conntrack_ftp,nf_conntrack_ipv4,nf_conntrack_broadcast,nf_nat_ftp,nf_conntrack_netbios_ns,xt_conntrack,nf_nat

И кстати, если данный модуль работает, то кроме 21 порта других открывать не нужно.

Так какого же хрена не работает?

AntonyRF ★★ ()
Ответ на: комментарий от anc

Посмотрите что говорит iptables-save при этом.

$ sudo iptables-save
# Generated by iptables-save v1.6.1 on Sun Jan 28 11:47:19 2018
*filter
:INPUT DROP [75116:10105093]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [18:976]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-logging-allow - [0:0]
:ufw-logging-deny - [0:0]
:ufw-not-local - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-skip-to-policy-forward - [0:0]
:ufw-skip-to-policy-input - [0:0]
:ufw-skip-to-policy-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-user-input - [0:0]
:ufw-user-limit - [0:0]
:ufw-user-limit-accept - [0:0]
:ufw-user-logging-forward - [0:0]
:ufw-user-logging-input - [0:0]
:ufw-user-logging-output - [0:0]
:ufw-user-output - [0:0]
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j DROP
-A ufw-skip-to-policy-input -j DROP
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 22 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 21 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 21 -j ACCEPT
-A ufw-user-input -s 192.168.1.0/24 -p tcp -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 80 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 80 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 443 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 443 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 20 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 20 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 993 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 993 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 995 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 995 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 585 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 585 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 220 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 220 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 143 -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 143 -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 32469 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 32413 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 1900 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 32400 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 32412 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 32410 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p udp -m udp --dport 32414 -m comment --comment "\'dapp_PlexMediaServer\'" -j ACCEPT
-A ufw-user-input -p tcp -m tcp --dport 22 -m comment --comment "\'dapp_OpenSSH\'" -j ACCEPT
-A ufw-user-input -p tcp -m multiport --dports 44000:45000 -j ACCEPT
-A ufw-user-input -p udp -m multiport --dports 44000:45000 -j ACCEPT
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK]"
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
COMMIT
# Completed on Sun Jan 28 11:47:19 2018

Да вроде всё нормально. Или я что-то не понял?

AntonyRF ★★ ()
Ответ на: комментарий от rumgot

Покажи вывод iptables -L, я к нему больше привык.

Чёт там много, вот на pastebin

Разрешения для соединений типов ESTABLISHED и RELATED должны быть для ВСЕГО входящего(INPUT) и транзиного(FORWARD) траффика.

Эх, не увидел в своём выводе этого.

AntonyRF ★★ ()
Последнее исправление: AntonyRF (всего исправлений: 1)
Ответ на: комментарий от AntonyRF

Вот скрипт для установки правил, только перед его выполнением нужно очистить все что ufw насоздавал. И напиши, как у тебя правила при загрузке сервера восстанавливаются.

#!/bin/bash

iptables -F
iptables -t nat -F

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# допиши сюда порты по усмотрению,
# здесь только ssh и ftp
iptables -A INPUT -p tcp -m multiport --
destination-ports 21,22 -j ACCEPT

iptables -A INPUT -p icmp -j ACCEPT

rumgot ★★★★ ()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от AntonyRF

Если ничего не пропустил то вроде все верно. На всякий случай уточню, у вас ftp сервер запущен на той же машине что и ufw (никаких виртуалок, контейнеров, etc) ?
Посмотрите syslog, а то вдруг я что пропустил, и туда пишется инфа о дропнутых пакетах.

anc ★★★★★ ()
Ответ на: комментарий от anc

у вас ftp сервер запущен на той же машине что и ufw (никаких виртуалок, контейнеров, etc) ?

Да, на одной машине

Посмотрите syslog, а то вдруг я что пропустил, и туда пишется инфа о дропнутых пакетах.

Вот вообще ни чего не заметил =(

AntonyRF ★★ ()
Ответ на: комментарий от AntonyRF

Да, именно так, данные. Но он является исходящим, клиент сообщает свой ip:port и на него происходит соединение с 20-го порта со стороны сервера. В пассиве наоборот, сервер открывает рандомный порт и сообщает клиенту данные, клиент на него соединяется.

anc ★★★★★ ()
Ответ на: комментарий от rumgot

Сделал, но по FTP получил такую тему:

Статус:	Определение IP-адреса для мой_сервер.рус
Статус:	Соединяюсь с 83.217.206.XXX:21...
Статус:	Соединение установлено, ожидание приглашения...
Статус:	Инициализирую TLS...
Статус:	Проверка сертификата...
Статус:	TLS соединение установлено.
Статус:	Авторизовались
Статус:	Получение списка каталогов...
Статус:	Сервер отправил пассивный ответ с неопределяемым адресом. Использую существующий адрес сервера.

Иии списка файлов нет =\ По SSH подключение есть.

Ох, мне бы еще понять как правила для http\https\transmission\plex\iredmail\gitlab добавить... И как обновить запись, если уже сделал:

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22 -j ACCEPT

AntonyRF ★★ ()
Последнее исправление: AntonyRF (всего исправлений: 1)
Ответ на: комментарий от rumgot

Переделал скрипт в такой вид и вроде всё работает =) Спасибо большое, если вскроются проблемы, то отпишусь в этой же теме. Ну и код скрипта:

#!/bin/bash

iptables -F
iptables -t nat -F

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# SSH
iptables -A INPUT -p tcp -m multiport --destination-ports 22 -j ACCEPT

# FTP
iptables -A INPUT -p tcp -m multiport --destination-ports 20,21 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --destination-ports 44000:45000 -j ACCEPT

# HTTP, HTTPS
iptables -A INPUT -p tcp -m multiport --destination-ports 80,443 -j ACCEPT

# POP3, POP3S
iptables -A INPUT -p tcp -m multiport --destination-ports 110,995 -j ACCEPT

# IMAP, IMAPS
iptables -A INPUT -p tcp -m multiport --destination-ports 143,993 -j ACCEPT

# Порты разные
iptables -A INPUT -p tcp -m multiport --destination-ports 220,585 -j ACCEPT

# Plex
iptables -A INPUT -p tcp -m multiport --destination-ports 32400 -j ACCEPT

# GITLAB
#iptables -A INPUT -p tcp -m multiport --destination-ports 9418 -j ACCEPT
#iptables -A INPUT -p tcp -m multiport --source-ports 9418 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 9418 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 9418 -m state --state ESTABLISHED -j ACCEPT

# SAMBA
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

# Allow DNS Queries for Git
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p udp --sport 53 -m state --state ESTABLISHED     -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p tcp --sport 53 -m state --state ESTABLISHED     -j ACCEPT

# ICMP
iptables -A INPUT -p icmp -j ACCEPT
AntonyRF ★★ ()
Ответ на: комментарий от AntonyRF

Иии списка файлов нет

Раз соединение установлено, то дальше дело в настройках фтп сервера.

И как обновить запись, если уже сделал:

Просто возьми тот скрипт, что я привел, измени параметр destination-ports на те порты, которые тебе нужны и запусти скрипт снова.

rumgot ★★★★ ()
Ответ на: комментарий от AntonyRF

Хорошо. Только если ты установил разрешающую политику для OUTPUT:

iptables -P OUTPUT ACCEPT
То дальше разрешающих правил для OUTPUT больше не нужно писать, т.к. любые OUTPUT соединения теперь по умолчанию и так разрешены.

rumgot ★★★★ ()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от AntonyRF

Статус: Сервер отправил пассивный ответ с неопределяемым адресом. Использую существующий адрес сервера.

Вот это смущает. Попробуйте сначала консольный ftp -v ftp-server, что он напишет?

anc ★★★★★ ()
Ответ на: комментарий от rumgot

Посмотрел, вроде «переадресация» => «виртуальный сервер» в переводе моей прошивки - это то что нужно. https://cloud.xn--h1aaobq7a9a.xn--p1acf/index.php/s/IlacK8yc4j2IsBE/ - Вот скрин, в url ссыль не вставилась =(

AntonyRF ★★ ()
Последнее исправление: AntonyRF (всего исправлений: 1)