Вопрос или проблема
Пытаясь усилить безопасность, предотвращая атаки с перечислением имен пользователей и подбора паролей, я хотел бы стандартизировать код ошибки 530, возвращаемый vsftpd, независимо от валидных и невалидных пользователей, плюс использование fail2ban
.
vsftpd работает без сбоев в производственной среде в течение многих лет. Сейчас я хочу создать более безопасную среду для vsftpd, настраивая fail2ban. Я понимаю, что в зависимости от типа пользователя, пытающегося подключиться, я получаю разные ответы 530 и поведение, что, таким образом, раскрывает, является ли пользователь валидным или нет.
- Сценарий 1 (user1):
Валидный пользователь, указанный в/etc/vsftpd.allowed_users
и/etc/password
(UNIX используется для аутентификации).
$ ftp myftp.example.com
Подключено к myftp.example.com.
220 Добро пожаловать, FTP пользователь.
Имя (myftp.example.com:user1): user1
331 Пожалуйста, укажите пароль.
Пароль:
530 Неправильный логин.
ftp: Ошибка входа.
- Сценарий 2 (user2):
Невалидный пользователь, не указанный в/etc/vsftpd.allowed_users
, он может быть в/etc/password
или нет.
$ ftp myftp.example.com
Подключено к myftp.example.com.
220 Добро пожаловать, FTP пользователь.
Имя (myftp.example.com:user2): user2
530 Доступ запрещен.
ftp: Ошибка входа.
Резюме моей конфигурации vsftpd (по моему мнению, это важно):
anonymous_enable=NO
local_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
Я изменил PAM и попробовал разные параметры из стандартного /etc/pam.d/vsftpd
, но поведение всегда одно и то же и, похоже, не является ключевым моментом (исправьте меня, если я не прав).
Системные журналы показывают pam, когда user1 вводит неправильный пароль, но ничего не отображается, когда user2, таким образом, fail2ban не может обнаружить любые попытки подключения с невалидным пользователем.
Nov 27 17:01:33 myftp vsftpd[99999]: pam_unix(vsftpd:auth): ошибка аутентификации; logname= uid=0 euid=0 tty=ftp ruser=fijipd rhost=::ffff:111.222.333.444 user=user1
Я бы предположил, что сначала необходимо получить последовательный ответ от FTP-пrompt.
Во вторую очередь, я полагаю, что, решив первый вопрос, получить корректное поведение fail2ban (из ошибок PAM или нет).
Буду признателен за любые подсказки,
спасибо.
Ответ или решение
Чтобы обеспечить безопасность вашего FTP-сервера с использованием vsftpd и предотвратить атаки типа "enumeration" (перечисление имен пользователей) и "brute force" (грубой силы), важно стандартизировать ответы сервера на ошибки, чтобы не разглашать информацию о существовании или отсутствии пользователей. Ваша текущая конфигурация ведет к разным ответам сервера в зависимости от типа пользователя, что создает уязвимость. Давайте рассмотрим, как можно решить эту проблему шаг за шагом.
Шаг 1: Конфигурация vsftpd для стандартизации ответов
Чтобы добиться одинаковых ответов от сервера на запросы несуществующих пользователей и неправильных паролей, необходимо внести изменения в конфигурацию вашего vsftpd.
-
Создайте кастомное сообщение для ошибки 530: Вы можете изменить поведение сервера с использованием параметра
vsftpd.conf
. К сожалению, встроенной возможности для задания консистентного ответа на 530 с различными причинами (неправильные логин или пароль) нет, но можно настроитьpam
для обработки ошибок. -
Использование PAM для управления аутентификацией:
- Вам нужно убедиться, что в файле
/etc/pam.d/vsftpd
настроена и правильно прописана аутентификация. Пример конфигурации:auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.allowed_users onerr=succeed auth required pam_unix.so account required pam_unix.so
- Это позволит системной библиотеке PAM интерпретировать попытки аутентификации и возвращать единый ответ.
- Вам нужно убедиться, что в файле
Шаг 2: Настройка Fail2Ban для учета событий
После того как вы настроили сервер на возврат единых сообщений об ошибках, следующий шаг – настроить Fail2Ban
для отслеживания таких событий.
-
Увеличьте уровень логирования для vsftpd: Убедитесь, что уровень логирования в
vsftpd
настроен так, чтобы регистрировать все события аутентификации:log_ftp_protocol=YES
-
Настройка Fail2Ban:
-
Создайте новый фильтр для
vsftpd
в папке/etc/fail2ban/filter.d/
, например,vsftpd.conf
:[INCLUDES] before = common.conf [Definition] failregex = ^%(__prefix_line)s*pam_unix\(vsftpd:auth\): authentication failure; logname=.*$ ignoreregex =
- Затем создайте jail для этого фильтра в файле
/etc/fail2ban/jail.local
:[vsftpd] enabled = true filter = vsftpd action = iptables[name=vsftpd, port=ftp, protocol=tcp] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 600
-
Шаг 3: Тестирование конфигурации
После внесения всех изменений перезапустите службы:
sudo systemctl restart vsftpd
sudo systemctl restart fail2ban
Шаг 4: Мониторинг и оптимизация
-
Мониторинг логов: Проверьте логи
/var/log/vsftpd.log
и логи Fail2Ban для подтверждения, что система отслеживает эти данные и выдает соответствующие сообщения об ошибках. -
Проверяйте конфигурацию: Регулярно проверяйте конфигурации вашего FTP-сервера и Fail2Ban для адаптации к новым уязвимостям и обновлениям.
Заключение
Обеспечение безопасности вашего FTP-сервера требует тщательной настройки и регулярного мониторинга. Стандартизация ответов on 530 ошибки, а также надлежащая конфигурация Fail2Ban помогут вам избежать утечки информации о пользователях и усилить безопасность вашего сервера. Правильное применение этих рекомендаций повысит общий уровень защиты системы и снизит вероятность успешных атак.