Вопрос или проблема
У меня есть сервер (с одним IP-адресом), на который нацелены несколько DNS-записей, например, ftp1.adomain.com
, ftp69.filetime.com
и ftp420.sendthefiles.com
. Мне интересно, возможно ли записывать имя хоста (а не IP-адрес), на который пользователь нацелился в своем подключении.
По сути, я хочу определить, подключился ли пользователь, используя ftp1.adomain.com
или ftp420.sendthefiles.com
.
Я просмотрел документацию proftpd и не думаю, что нашел то, что хотел, но решил узнать, может, у кого-то есть дополнительная информация.
ProFTPD поддерживает команду HOST
. Если клиент также поддерживает ее, он отправит ее, и если вы будете записывать команды на сервере, ProFTPD также зафиксирует ее.
Но не многие клиенты отправляют эту команду.
Смотрите также мой ответ на
Сообщают ли протоколы SSH или FTP серверу, к какому домену я пытаюсь подключиться?
Ответ или решение
Вопрос о том, как в ProFTPD можно зарегистрировать целевой хост, к которому пользователь подключается через FTP, представляет интерес для ИТ-специалистов, работающих с серверами, к которым обращаются посредством нескольких DNS-записей. Рассмотрим эту задачу более подробно, применяя подход TEA (Теория, Пример, Применение).
Теория
ProFTPD — это популярный FTP-сервер с открытым исходным кодом, который широко используется в ИТ-инфраструктурах благодаря своей гибкости и настраиваемости. Одной из стандартных задач для настройщиков ProFTPD является отслеживание и ведение логов соединений для анализа и безопасности. Однако, несмотря на обширные возможности настройки логирования, ProFTPD не предоставляет прямого способа фиксировать доменное имя, которое пользователь использует для соединения с сервером, из коробки.
Проблема
Проблема состоит в том, что при соединении с FTP-сервером через стандартный протокол FTP, в логе сервера фиксируется IP-адрес клиента, но не доменное имя, с которым он предполагал соединение. Это происходит потому, что на уровне протоколов, таких как FTP, информация о целевом доменном имени, которое ввел пользователь, не передается в запросе на соединение. Для некоторых протоколов, таких как HTTP/1.1, данная информация необходима (HTTP Host header). Однако в случае FTP такой поддержки нет.
Команда HOST
ProFTPD поддерживает команду HOST
, благодаря которой клиент может явно указать доменное имя, к которому он хотел бы подключиться. Однако важным ограничением является то, что не все FTP-клиенты используют эту команду, поскольку она не является частью обязательного набора команд протокола FTP. Это значит, что в зависимости от клиента эта информация может просто не поступать на сервер.
Пример
Рассмотрим типичную ситуацию. У вас есть сервер, доступный под несколькими DNS-записями: ftp1.adomain.com
, ftp69.filetime.com
, ftp420.sendthefiles.com
. Все эти записи указывают на один и тот же IP-адрес. Через стандартное соединение FTP, например, из браузера или простого FTP-клиента, сервер видит только IP-адрес запрашивающего клиента, но не конкретное доменное имя DNS-записи, через которую пользователь пытается подключиться. Даже если клиент использует команду HOST
, без соответствующей настройки ProFTPD эта информация может остаться незафиксированной.
Применение
Чтобы решить данную задачу, можно использовать нестандартное решение, как, например, логи на уровне приложения, сторонний программный контент или более гибкую структуру логов при помощи модулей.
-
Настройка логов для команд: Если ваш FTP-клиент поддерживает команду
HOST
, вам необходимо включить подробное логирование команд на уровне ProFTPD. Чтобы сделать это, в конфигурационном файле ProFTPD (обычно/etc/proftpd/proftpd.conf
) добавьте или раскомментируйте строку для логирования команд:ExtendedLog /var/log/proftpd/commands.log ALL
Это позволит записывать в лог файл все команды, которые клиенты отправляют на сервер, в том числе такую как
HOST
. -
Анализ логов: После включения расширенного логирования, регулярно просматривайте и анализируйте логи для выявления записей о команде
HOST
. -
Использование сторонних решений: Если стандартные возможности ProFTPD не удовлетворяют вашим требованиям по логированию, рассмотрите возможность применения промежуточного сервера или прокси, который сможет получить и передать данную информацию. Например, использование настраиваемого FTP-прокси, который переписывает запросы и логирует необходимые детали, прежде чем они достигнут основного сервера.
Таким образом, решение будет зависеть не только от настройки вашего ProFTPD, но и от возможностей клиента и поддержки тех или иных команд на уровне протокола. В некоторых случаях может потребоваться адаптация инфраструктуры или использование дополнительных инструментов для получения желаемых результатов.