FTP сервер сначала «для себя любимого», а уж потом – для всех…

FTP сервер я себе настроил. Давно уже. И описал настройку в заметке FTP – для всех и «для себя любимого». И до поры до времени было все нормально (если конечно не считать попыток авторизации под левыми паролями, с которыми я потом разобрался). Но через время гугл проиндексировал все содержимое моего сервера, и начал народ качать что ни попадя. Причем, со временем этот процесс стал гораздо интенсивнее, чем мне хотелось бы, да таким, что приходилось мне по нескольку минут ждать, пока браузер наконец-то страницу откроет. И возникло у меня страстное желание вернуть себе свой интернет, а говоря простыми словами — ограничить скорость раздачи с FTP-сервера. Тем более, что качали в основном с Китая и практически один единственный драйвер…

По быстрому нагуглил новость, что

…в ProFTPD 1.3.3 … появились такие новые модули, как … mod_shaper для разграничения скорости загрузки/скачивания по сессиям.

Появились, так появились.  Будем использовать. Проверка показала, что модуль mod_shaper для ProFTP в репозиториях Mandriva присутствует, но устанавливается отдельно от самого сервера, и в моем конкретном случае еще не установлен. Значит, нужно установить. Как показало дальнейшее, мне нужно было установить и еще один модуль, который возможно и вам окажется полезным.

Итак, в консоли от имени root-а вводим команду:

urpmi proftpd-mod_shaper proftpd-mod_ifsession

Будут установлены два модуля — собственно сам mod_shaper, а также mod_ifsession, о назначении которого  я скажу позже.

Чтобы задействовать шейпер, в начале файла конфигурации ProFTP /etc/proftpd.conf  (в той его части, где перечисляются настройки использованных модулей) я добавил следующие строки:

<IfModule mod_shaper.c>
    ShaperEngine on
    ShaperAll downrate 50 uprate 100
</IfModule>

Собственно, настроек использовано «аж две»:

  • Строка «ShaperEngine on» включает шейпер;
  • А строка «ShaperAll downrate 50 uprate 100» указывает (в килобайтах/сек.) лимит скорости с которой пользователи будут скачивать (downrate) файлы с сервера, и загружать (uprate) файлы на сервер.

Вот и все настройки, потребовавшиеся в моем случае. Перезапускаем сервер и радуемся. На самом деле, это далеко не полный список параметров, которые можно указать и использовать при настройке шейпера. Полный их список приведен на страницах документации на сайте разработчика и сайте сервера ProFTP (фактически, страницы абсолютно одинаковые).

Может возникнуть вопрос — а почему я не использовал директиву «TransferRate». Гугление по данному вопросу (еще на этапе поиска решения) показало, что эта директива ограничивает скорость для одной сессии. Таким образом, если лимит равен 10, то исходящий трафик будет равен столько раз по 10, сколько сессий загрузки выполняется в данный момент. И трафик будет меняться в зависимости от числа анонимов, качающих с моего сервера. А вот в случае использования шейпера все будет в точности да наоборот — если указал я лимит в 10, он будет поделен на текущее число сессий. Таким образом, именно шейпер позволил мне простым и понятным способом указать ту скорость, которую я готов «пожертвовать» анонимным посетителям моего сервера вне зависимости от их числа…

Но есть в этом способе еще один нюанс, который лично мне показался очень даже полезным. Речь идет о возможности менять настройку шейпера одной единственной командой:

ftpdctl shaper all downrate 40 uprate 100

А это в свою очередь позволяет прописать в cron пару таких команд (с разными значениями лимитов), и таким образом автоматически менять «дневной» и «ночной» лимиты трафика.

Ну и напоследок — а как же быть с собой «любимым»? Неужто тоже в очередь на свой сервер записываться? И качать «в час по чайной ложке»? Негоже это!  Модуль шейпера позволяет несколькими способами «поправить» свои привилегии, но мне лично понравился такой — указать пользователя (или пользователей), для которых модуль шейпера отключается совсем. Именно для такой возможности и нужно было установить тот второй модуль, о котором я упоминал в начале заметки (mod_ifsession).

Чтобы указать пользователей, которым шейпер — не указ, немного модифицируем  секцию настроек шейпера:

<IfModule mod_shaper.c>
    ShaperEngine on
    ShaperAll downrate 50 uprate 100
    <IfUser dmitry anna>
      ShaperEngine off
    </IfUser>
</IfModule>

И вот теперь для пользователей dmitry и anna шейпер отключается, и никаких ограничений на скорость как скачивания, так и загрузки нет.

PS. Проверить текущее состояние шейпера можно выполнив в консоли следующую команду:

ftpdctl shaper info

Ответ на нее выглядит следующим образом (три сессии с общими лимитами в 40 и 100 КБ/сек):

ftpdctl: Overall Rates: 40.00 KB/s down, 100.00 KB/s up
ftpdctl: Default Shares Per Session: 5 down, 5 up
ftpdctl: Default Priority: 10
ftpdctl: Number of Shaped Sessions: 3
ftpdctl: PID   Priority DShares        DRate (KB/s) UShares        URate (KB/s)
ftpdctl: ----- -------- -------------- ------------ -------------- ------------
ftpdctl:  2573       10       5/15 (0)        13.33       5/15 (0)       33.33
ftpdctl:  2713       10       5/15 (0)        13.33       5/15 (0)       33.33
ftpdctl:  2992       10       5/15 (0)        13.33       5/15 (0)       33.33

Итого — как видите, шейпер честно поделил выделенный лимит поровну между тремя  анонимами…

ЗЫ. и еще чуток. Чтобы видеть сколько анонимных пользователей подключено (точнее — на сколько сессий шейпер поделил отведенную полосу), я написал совсем маленький скрипт, всего одну строку:

ftpdctl shaper info | egrep -i "Shaped Sessions" | egrep -o [0-9]+

после запуска скрипта на экран выводится одна единственная цифра — число сессий. Лезть в консоль, да еще и с правами root-а каждый раз неохота, потому данный скрипт был добавлен в субмодуль custom модуля Webminstats программы Webmin. И вот теперь он «радостно» рисует мне вот такие графики:

И снова fail2ban — на этот раз охраняем ProFTP и Dovecot

Собственно, это уже совсем … скучно. И тем не менее…

Просмотр логов показывает, что и в ftp-сервер мой постоянно кто-то пытается попасть «мимо кассы»:

Янв 19 07:54:36 dmitrykhn.homedns.org proftpd[27832] dmitrykhn.homedns.org (82.213.28.12[82.213.28.12]): USER service: no such user found from 82.213.28.12 [82.213.28.12] to 192.168.1.115:21
Янв 19 07:54:37 dmitrykhn.homedns.org proftpd[27832] dmitrykhn.homedns.org (82.213.28.12[82.213.28.12]): USER service: no such user found from 82.213.28.12 [82.213.28.12] to 192.168.1.115:21

…и в почтовый сервер тоже:

Feb  1 00:10:12 dmitrykhn dovecot: pop3-login: Disconnected (auth failed, 1 attempts): user=, method=PLAIN, rip=59.124.32.168, lip=192.168.1.115
Feb  1 00:10:19 dmitrykhn dovecot: pop3-login: Disconnected (auth failed, 1 attempts): user=, method=PLAIN, rip=210.202.39.205, lip=192.168.1.115

Что же тогда, сидеть и ждать? Решил я воспользоваться все тем же fail2ban — он и так уже трудится, вот пусть теперь и тут еще постарается…

С ProFTP, как мне казалось, все будет просто — соответствующий фильтр в наборе fail2ban имелся. Взял я программу fail2ban-regex и скормил ей файл протокола /var/log/proftpd/proftpd.log в паре с данным фильтром (как пользоваться fail2ban-regex я уже писал тут). Совпадения нашлись, и почти все было бы хорошо, если бы не одно «но». Программа fail2ban-regex сказала, что моя дата не подходит ни под один из известных ей шаблонов. Как я понял, единственное, что могло смутить fail2ban-regex в моей дате, так это тот язык, на котором она была выведена. То есть, «пришла беда, откуда не ждали». То ли авторы дистрибутива Mandriva, используемого мной, то ли авторы ProFTP, решили сделать мне «хорошо» — раз уж выбрал я русский язык, то пусть и протокол будет на русском. В принципе, оно конечно хорошо — понятнее. Даже не смотря на то, что русского того там в протоколе  — аж целых три буквы в имени месяца!..

В принципе, программа ProFTP (как я понял) использует тот язык, который в момент ее запуска указан в системе в качестве системного. Что ж, подумал я, если в момент запуска ProFTP указать, что системный язык английский, то есть шанс, что и сообщения в лог пойдут тоже на нем. Сказано — сделано. Пошел я в папку /etc/init.d и нашел в ней скрипт запуска сервера ProFTP (файл proftpd). Открыл его в редакторе и нашел в нем следующую строку:

         daemon "proftpd >/dev/null 2>&1"

и НАД ней добавил (чтоб долго не угадывать) следующие три:

        export LC_MESSAGES="en_US.UTF-8"
        export LC_ALL="en_US.UTF-8"
        export LANG="en_US.UTF-8"

Должен заметить, что строка daemon «proftpd >/dev/null 2>&1» присутствует в скрипте два раза. Как следствие и свои строки с назначением переменным LC_MESSAGES, LC_ALL и LANG значения en_US.UTF-8 я тоже добавил два раза (в обоих местах). Перезапустил ProFTP, заглянул в лог — красота, сообщения в нем снова на «родном английском»! Что ж, пол дела сделано.

Вторая половина — включить в fail2ban соответствующий фильтр (proftpd). Для этого я открыл в редакторе файл /etc/fail2ban/jail.conf и сделал в нем следующее — нашел в нем секцию про указанный фильтр и изменил ее, после чего она стала выглядеть следующим образом:

[proftpd-iptables]

enabled  = true
filter   = proftpd
action   = iptables[name=ProFTPD, port=ftp, protocol=tcp]
#           sendmail-whois[name=ProFTPD, dest=you@mail.com]
logpath  = /var/log/proftpd/proftpd.log
maxretry = 4

Собственно, изменений было аж три (выделены красным цветом). Смена в поле enabled значения с false на true включила использование фильтра. Диез (#) превратил строку с командой отправки почтового сообщения в комментарий (ну не надо мне эти письма!). Ну и в поле maxretry я поставил 4 — именно после стольких неудачных попыток нарушитель будет забанен.

А с  dovecot вопрос решился с помощью Google. Нашел я в нем ссылку на вот такую чудную страницу:

http://wiki.dovecot.org/HowTo/Fail2Ban

Просто «тупо» повторил описанное на ней, и все.  Для тех, кому английский так и не стал родным, очень кратко:

Создаем файл /etc/fail2ban/filter.d/dovecot-pop3imap.conf вот такого содержания:

[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Disconnected \(auth failed).*rip=(?P\S*),.*
ignoreregex =

После чего в файл /etc/fail2ban/jail.conf добавляем новую секцию вот такого вида:

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap", protocol=tcp]
logpath = /var/log/maillog
maxretry = 20
findtime = 1200
bantime = 1200

Пару замечаний про «мой случай» (выделено синим):

  • Лог для анализа в моем случае задействован иной — /var/log/mail/info.log (именно в нем я нашел сообщения об ошибочных авторизациях).
  • Строки про findtime и bantime я в секцию dovecot-pop3imap не писал совсем — меня вполне устраивают и значения «глобальных» настроек».
  • Параметр maxretry я у себя поставил поменьше — нечего тут…

После всех этих описанных выше действий, перезапустил я fail2ban и сижу вот теперь, жду…

FTP — для всех и «для себя любимого»…

Как утверждают, FTP — один из самых старых протоколов передачи данных, использующихся в наших компьютерных сетях. Подробнее о нем можно прочесть, например, вот по этой ссылке. Один из современных серверов FTP — ProFTP — позволяет довольно гибко его сконфигуировать под собственные нужды. Именно его (когда-то давно) я и решил себе установить. Как я тогда это делал, тут и описано.

Установка

Ах, Mandriva Linux — тысячи пакетов в репозиториях! Чтобы там не нашлось такого популярного сервера как ProFTP — да не может этого быть! Запускаем «Центр управления Mandriva», в нем «Установку и удаление программ» и в поле поиска вводим «proftpd». Ответ не был для меня неожиданностью — есть такой пакет proftpd. Ставим «птицу», жмем «Применить». Несколько минут терпения, и всё — сервер установлен и запущен.

Есть и другой вариант — установка в консоли, единственное условие — обязательно запущенной от имени «root-а». Достаточно всего лишь ввести команду:

urpmi proftpd

Итог будет тот же самый — сервер ProFTP будет установлен и запущен.

Настройка

Начать нам придется с настройки не самого ProFTP, а с файервола. Если на компьютере, на котором Вы установили и запустили ProFTP, он (файервол) включен, то в нем потребуется открыть порт, используемый для FTP. Обычно это 21-й порт. При желании, Вы сможете настроить ProFTP-сервер на использование порта с другим номером (об этом ниже). В таком случае, в файерволе нужно будет открыть тот порт, который Вы использовали для FTP. О том, каким образом в Mandriva Linux можно открыть порты в файерволе, я уже писал тут.

Теперь о настройке собственно ProFTP. Сразу же после установки сервер ProFTP сконфигурирован в некоем «умолчательном» варианте и уже запущен. Если Вы установили только сам ProFTP (с неким набором модулей, идущим в «комплекте по умолчанию»), и не устанавливали никаких дополнительных пакетов с модулями для ProFTP, то вся настройка сервера осуществляется в единственном файле — /etc/proftpd.conf. По этому, именно его мы и открываем в (любом) текстовом редакторе.

Находим в указанном файле первый интересующий нас параметр — имя сервера. Он задан вот такой строкой:

ServerName	"ProFTPD Default Installation"

Как по мне — не самый важный параметр. Но тем не менее — Вы можете для своего сервера ввести то имя, которое Вам нравится. Находим следующий параметр, который можно изменить «на свой вкус и цвет». Это упоминавшийся ранее номер порта:

Port	21

Менять его или нет — решать Вам. Если Вы планируете создать у себя публичный FTP-сервер, то однозначно не стоит. Потому как, по умолчанию, когда кто-то в своем браузере набирает «ftp://some.ftp.server.com», то запрос пойдет именно на 21-й порт указанного сервера. С другой стороны, Вы можете использовать ProFTP только для «личных нужд». В этом случае, можно уйти со стандартных номеров портов, которые в первую очередь сканируются злоумышленникам и при попытке взлома…

Еще пара «глобальных» параметров сервера:

User		nobody
Group		nogroup

Они задают пользователя и группу, от имени которых запущен сервер. Этот «бесправный» (в прямом смысле слова) пользователь «автоматом» создается для нужд ProFTP. В данном случае, на мой взгляд, ничего менять не нужно.

Следующий параметр, который я изменил в файле конфигурации:

UseReverseDNS 	off

Причину этого действия я уже описал у себя в блоге ранее. Дело в том, что если значение параметра установлено в «on«, ProFTP для нужд ведения своего лога (журнала работы) выполняет DNS-запрос имени компьютера, пытающегося к нему подключиться. В случае неудачи (а такое случается, например, в описанном мной случае — из-за кривизны настройки у провайдера «домашней сети») удаленный компьютер подключиться не сможет. С другой стороны, если данный параметр выключен («off«), то в лог пишется просто IP-адрес удаленного компьютера. На мой взгляд, этого вполне достаточно.

Таким образом, подводя итог всего сказанного выше, получается, что их всех настроек, изначально присутствовавших в файле /etc/proftpd.conf (по умолчанию), я изменил всего лишь одну — отключил запрос имен компьютеров, подключающихся к моему FTP-серверу. На этом, с «глобальными» настройками я покончил.

Есть еще одна вещь, которую нужно сделать. Необходимо в текстовом редакторе (от имени «root-а») открыть файл /etc/shells и добавить в него такую строку:

/bin/false

Этим мы добавляем «пустую» командную оболочку. Она потребуется нам при создании пользователей, которым мы предоставим возможность записи файлов на наш FTP-сервер. В итоге, этим «избранным» пользователям в нашем сервере будут доступны только команды протокола FTP, и ничего более. Безопасность, однако…

И вот теперь мы будем настраивать ресурсы, к которым предполагается предоставлять доступ. Начнем с тех, которые…

Для всех

Итак, публичный FTP-сервер. На нем хранятся файлы, к которым предоставляется доступ (но только на считывание!!!) абсолютно для всех желающих. Для этого в конце файла /etc/proftpd.conf добавляем следующее:

<Anonymous /var/ftp/pub>
	User		ftp
	Group		ftp
	UserAlias	anonymous ftp
	RequireValidShell	no
	MaxClients	5
	ShowSymlinks	on
	HideUser 	root
	HideGroup 	root
	RootLogin 	off
<Limit CWD DIRS READ LIST>
	AllowAll
</Limit>
<Limit WRITE>
	DenyAll</Limit>
</Anonymous>

А теперь рассмотрим, что же мы тут такого «понаписали»:

  • Строка «<Anonymous /var/ftp/pub>» обозначает (локальную) папку Вашего компьютера, доступ к ресурсам которой (файлам и вложеным подпапкам) будет предоставлять ProFTP. Пусть Вас не смущает слово «Anonymous» — в данном случае оно не имеет никакого отношения к анонимному доступу, а всего лишь обозначает начало (а со слешем (/) — и конец) секции параметров про указанный ресурс (папку). Итак, указанная строка обозначает, что в данном случае мы предоставим пользователям доступ к содержимому (локальной) папки «/var/ftp/pub«.
  • В следующих двух строках («User ftp» и «Group ftp«) мы принудительно задаем имена пользователя и группы, которые будут автоматически «подставляться» системой во время, когда внешние клиенты будут подключаться к нашему FTP-серверу.
  • Строка «UserAlias anonymous ftp» буквально означает следующее — «Пользователь «anonymous» и пользователь «ftp» — это один и тот же пользователь». Зачем она нам? Большинство браузеров при анонимном подключении к FTP-серверам использует в качестве логина (имени пользователя) именно «anonymous» (а в качестве пароля подставляют адрес электронной почты). А парой строк ранее мы настроили доступ пользователю «ftp». Установив даной строкой своеобразный знак равентства между двумя этими пользователями, мы тем самым предоставляем доступ и пользователю «anonymous».
  • Строка «RequireValidShell no» указывает, что к серверу могут подключаться пользователи, не имеющие назначенной им в данной системе оболочки (командного интерпретатора). То есть, обычному локальному пользователю при входе в систему предоставляется командная оболочка (интерпретатор команд). Как следствие — пользователь имеет возможность выполнять в системе какие-то определенные команды. С другой стороны, пользователю «ftp» командная оболочка не предоставляется, и сделано это именно для того, чтобы он не смог выполнять никаких системных команд (в его распоряжении остается только лишь набор команд FTP-протокола).
  • Парамерт «MaxClients 5» указывает максимальное число клиентов, которые могут быть одновременно подключены к серверу.
  • Параметр «ShowSymlinks on» определяет — показывать ли пользователям симлинки, или нет. Если «да«, то в случае наличия внутри ресурса т.н. «жестких ссылок» (симлинков) на файлы или папки, находящиеся за пределами каталога, выделенного для анонимного доступа, анонимные ftp-пользователи смогут получить доступ к содержимому этих «внешних» ресурсов.
  • Следующие три строчки — «HideUser root«, «HideGroup root» и «RootLogin off» — предназначены чтобы анонимный FTP-пользователь ни в коем cлучае не смог получить привелегии администратора (root).
  • Далее идет вот такая секция (повторюсь):
<Limit CWD DIRS READ LIST>
	AllowAll
</Limit>;

В ней сказано, что команды CWD, DIRS, READ и LIST разрешены всем (AllowAll). Данный набор позволяет пользователю перемещаться по папкам (в пределах ресурса), считывать содержимое файлов и каталогов. Одним словом — анонимный пользователь получает возможность считывать информацию с Вашего FTP-сервера.

  • Затем следует секция:
<Limit WRITE>
	DenyAll
</Limit>

В которой указано, что команда записи (WRITE) запрещена для всех (DenyAll). Таким образом, внешние пользователи не смогут загрузить (записать) файл(ы) на Ваш FTP-сервер.

  • Последняя строка «</Anonymous>» (как уже было сказано выше) просто завершает секцию параметров про указанный ресурс (папку).

Сохраняем изменения файла /etc/proftpd.conf и перезапускаем сервер ProFTP командой:

/etc/init.d/proftpd restart

Осталось проделать пару манипуляций с папкой /var/ftp/pub, а именно — назначить ее`владельцем пользователя «ftp» из группы «ftp», а также назначить ей необходимые права доступа. Для этого вводим в консоли две следующие команды:

chown -R ftp:ftp /var/ftp/pub
chmod -R 755 /var/ftp/pub

После этого анонимные пользователи смогут считывать файлы, расположенные в папке /var/ftp/pub и ее подпапках, набрав в браузере адрес Вашего сервера в виде «ftp://adres.vashego.ftp.servera».

Для «избранных»

А как же запись? Имеется ввиду случай «особо приближенных» друзей-товарищей, которым Вы хотите предоставить возможность загружать «что-то» на Ваш сервер. При этом — только по протоколу FTP, и только в некую специально выделенную папку. Примем как исходное условие, что e данного пользователя имя (в системе) будет «uploader«, а доступ с возможностью записи мы ему предоставим в папку «/var/ftp/uploader«. С этой целью добавим в конец файла /etc/proftpd.conf следующие строки:

<Anonymous /var/ftp/uploader/>
	User 	uploader
	Group 	ftp
	AnonRequirePassword 	on
<Limit LOGIN>
	AllowAll
</Limit>
	HideUser 	root
	HideGroup 	root
	RootLogin 	off
</Anonymous>

Как видим, в этот раз ресурсом для доступа будет папка /var/ftp/uploader. К данной папке разрешен доступ только пользователю «uploader» из группы»ftp». Для доступа к ресурсу требуется ввод пароля («AnonRequirePassword on«). Все функции (команды) доступны только после успешного входа пользователя в систему (Limit LOGIN). Предположительно, у Вас еще нет в системе данного пользователя. Поэтому, создадим его, для чего в консоли от имени администратора (root) выполним следующую команду:

useradd -d /var/ftp/uploader -g ftp -p test -s /bin/false uploader

Данной командой мы:

  • создаем пользователя (командой useradd);
  • с именем «uploader» (самый последний параметр в команде — uploader);
  • принадлежащего к группе «ftp» (-g ftp);
  • с домашней папкой «/var/ftp/uploader» (-d /var/ftp/uploader);
  • с паролем «test» (-p test);
  • и «пустой командной оболочкой «/bin/false» (-s /bin/false)

Создать пользователя конечно можно и иначе, в какой-нибудь графической утилите. Но, на мой взгляд, эта одна единственная команда делает всё и сразу — создает пользователя, задает ему пароль, назначает ему «пустую» командную оболочку, создает папку данного пользователя, назначает этого пользователя её владельцем и прописывает папке все необходимые права.

Все. После перезапуска сервера ProFTP можете давать логин и пароль своим друзьям. Чтобы войти в сервер, пользователю понадобится FTP-клиент, позволяющий ввести имя пользователя и пароль, например, FileZilla. Также, подключиться к FTP-серверу с указанием имени и пароля позволяют, например, FAR или Midnight Comander..

Для «себя любимого»

Ну и напоследок о «себе любимом». Точнее, обо всех пользователях, зарегистрированных в системе. Все они имели возможность подключаться к ProFTP сразу же после его установки и запуска. При этом им необходимо использовать FTP-клиент, позволяющий ввести имя пользователя и пароль, (например, FileZilla), Имя и пароль необходимо указывать те, под которыми пользователь входит в систему. К чему получит доступ такой клиент, залогинившись по FTP? Это определяется одной единственной строкой файла конфигурации. Снова заглянем в файл /etc/proftpd.conf и найдем там следующую строку:

#DefaultRoot ~

По умолчанию эта строка закоментирована. Если же ее раскоментировать, то в своих перемещениях по файловой системе сервера пользователи будут ограничены пределами своей домашней папки. Но, если эту строку не трогать и оставить закоментированой, то пользователи получат доступ ко всей файловой системе сервера, начиная от корневого каталога (естественно, в четком соответствии с установленными в системе правами доступа). Таким образом, «для себя любимого» с самого начала ничего настраивать не надо было…

Проблемы с FTP доступом из «домашней сети»

Подключили «тут как-то раз» наш рабочий сервер к интернету через «домовую сеть». Точнее, не только сервер, а всю сеть офиса. После этого моя Filezilla, которая до этого с работы прекрасно логинилась в мой домашний ftp-сервер, вдруг начала вываливаться по таймауту. Причем, проблема возникала именно при попытке войти (а) не анонимно в мой сервер (б) с любой машины в офисе. Лог Filezilla-ы при этом выглядел так:

Статус: Соединяюсь с 92.110.99.222:21...
Статус: Соединение установлено, ожидание приглашения...
Ответ: 220 ProFTPD 1.3.1 Server (My FTP Server) [192.168.1.1]
Команда: USER dmitry
Ответ: 331 Password required for dmitry
Команда: PASS ********
Ошибка: Превышено время ожидания соединения
Ошибка: Невозможно подключиться к серверу

При этом в логе самого ftp-сервера было все красиво:

Oct 02 18:07:39 smb-svr proftpd[24896] smb-svr (ofice.zssm.zp.ua[212.8.55.50]): FTP session opened.
Oct 02 18:07:39 proftpd[24896] smb-svr (ofice.zssm.zp.ua[212.118.55.50]): ANON dmitry: Login successful.
Oct 02 18:07:39 proftpd[24896] smb-svr (ofice.zssm.zp.ua[212.118.55.50]): Preparing to chroot to directory '/var/ftp/pub'
Oct 02 18:12:41 proftpd[24896] smb-svr (ofice.zssm.zp.ua[212.118.55.50]): FTP no transfer timeout, disconnected
Oct 02 18:12:41 proftpd[24896] smb-svr (ofice.zssm.zp.ua[212.118.55.50]): FTP session closed.

Попробовал запустить «Мастер настройки сети» программы Filezilla. Тест также завершился неудачей. Но подсказал, что существует проблема в связке IP-адреса и доменного имени, выданного нашей сети провайдером (домашней сетью). Естественно, «порулить» домашнюю сеть мне никто не даст, да и не того уровня я специалист. Поэтому решил я отключить проверку «правильности» IP-адреса у своего ftp-сервера. Для этого я в файле /etc/proftpd.conf строку:

UseReverseDNS on

заменил на:

UseReverseDNS off

Проблема ушла…