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

Предотвращение атак грубой силы на MySQL?

Мне нужно включить сеть для MySQLd, но каждый раз, когда я это делаю, сервер уходит в небытие. Некоторые означают, что скрипт подбора пароля начинает работать с сервером, открывая соединение на порту 3306 и постоянно пробуя случайные пароли.

Как мне этого не допустить?

Для SSH я использую denyhosts, что хорошо работает. Есть ли способ заставить denyhosts работать с MySQLd?

Я также подумал об изменении порта, на котором работает MySQL, но это далеко не идеально и является временным решением (что, если они обнаружат новый порт?)

У кого-нибудь есть другие идеи?

Если все по-другому, я использую MySQL 5.x на FreeBSD 6.x.

Я не знаю никаких программных пакетов для MySQL, подобных denyhosts, но у меня есть несколько решений:

  • Ограничьте вход в систему определенными IP-адресами. Не используйте%, чтобы разрешить всем хостам подключаться к серверу.
  • Еще более безопасно настройте iptables, чтобы разрешить доступ к 3306 только с авторизованных IP-адресов.
  • Туннелируйте свой трафик в ящик с помощью ssh, затем подключитесь через localhost
  • Измените сценарии Denyhosts или BFD, чтобы анализировать журналы доступа mysql и блокировать любые попытки перебора брандмауэра.

редактировать:

Чтобы ответить на ваш комментарий, попробуй это:

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

Где .20 - ваш MySQL, а .50 - IP-адрес удаленного подключения.

1: Измените порт с 3306. Не из соображений безопасности, а для того, чтобы снизить нагрузку на сервер для борьбы с атаками ложного входа.

2: Создайте сертификат SSL и включите его на своем сервере MySQL (в любом случае это необходимо для шифрования соединения клиент-сервер).

3: Создайте один или несколько клиентских сертификатов (все клиенты должны иметь сертификат, и клиентское программное обеспечение должно быть настроено для его использования). Если ваши клиенты .Сеть вам нужно преобразовать сертификат клиента в формат pkcs12, но это легко сделать, см. этот руководство..

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

я использовал этот руководство по созданию сертификатов и файлов ключей, но существует множество руководств.

Я предпочитаю использовать свое SSH-соединение только для доступа к моему Linux-серверу в административных целях, а не для клиентского доступа.

Используя MySQL Proxy, вы можете написать небольшой сценарий LUA, который принимает комбинацию пользователь / пароль, но ждет X секунд для обработки входа в систему, если запрос на соединение поступает из неутвержденного диапазона IP-адресов.

Кроме того, вы можете добавить немного дополнительной логики в сценарий LUA для внесения в черный список диапазонов IP-адресов после трех неудачных попыток.

В общем, технически это выполнимо, но я воспользуюсь другими рекомендациями по туннелированию через SSH или VPN к общему диапазону IP-адресов из белого списка (через FW или другими способами).

почему бы не разрешить доступ к порту mysql только с безопасных хостов?

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

Разве вы не можете включить ssh в этом поле и использовать туннелирование для доступа к движку db?

Или любое другое решение VPN для доступа к нему (приходит на ум openvpn).

Это не настоящее решение проблемы, но может помочь, если вы просто запустите сервер на другом порту. Большинство этих сканирующих ботов, вероятно, запрограммированы только на проверку 3306. Это не решит проблему, но вы, вероятно, получите намного меньше сканирований, просто изменив порт.

Я считаю, что соединения должны быть огорожены брандмауэром: быстро и качественно. Есть много руководств по iptables и тому подобному :)

Также вы можете установить задание cron на клиентских хостах, которое будет запускать что-то на сервере, чтобы брандмауэр не блокировал известные хосты.

использование ssh для туннелей было бы лучше всего, но вы можете попробовать использовать fail2ban вместо denyhosts, потому что я думаю, что он нацелен на мониторинг большего количества различных приложений, поэтому не должно быть проблем с добавлением журнала mysql к нему.

Предложение рассмотреть для вашего раздела my.cnf-ini [mysqld]

max_connect_errors=10  # to limit hacker/cracker attempts to guess a password.

чтобы избежать сотен попыток за 90 секунд. Отрубите их с 10 попыток.

Подумайте о том, чтобы один раз в день ПРОПУСТИТЬ ПРОМЫВКУ, чтобы убрать законных людей, пытающихся использовать вашу систему, которые просто НЕ МОГУТ запомнить свой пароль. Может быть, через несколько дней они справятся с этим.