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

9

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

Как я могу предотвратить это?

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

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

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

Если это не так, я запускаю MySQL 5.x на FreeBSD 6.x.

Кит Палмер младший
источник

Ответы:

9

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

  • Ограничьте вход в систему определенными 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-адрес.

Дэйв Драгер
источник
Несколько замечаний: Как я могу ограничить доступ к порту 3306 только заданным набором IP-адресов? Простое ограничение пользователей MySQL не работает, так как удаленные машины могут все еще подключаться и перебор паролей. Туннели SSH кажутся неудобными для конечного пользователя ... У вас есть пример IPTables для этого?
Кит Палмер младший
2

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

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

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

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

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

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

MrCalvin
источник
Спасибо за ответ. Я использовал это руководство , чтобы сделать # 2, 3 и 4: digitalocean.com/community/tutorials/...
Ofri cofri
1

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

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

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

Оскар
источник
+1 еще одно использование для MySQL Proxy :)
Энди
0

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

quaie
источник
Я подумал об этом, но это означает, что мне придется отслеживать изменения IP-адресов для более чем 1000 клиентов. Это будет гигантская боль в заднице ... Как я могу это сделать в любом случае? Это не помогает блокировать их в MySQL, потому что они все еще могут подключаться к серверу MySQL, просто фактически не выбирая базы данных ...
Кит Палмер мл.
1
цитата Дэйва Драгера выше: «Модифицировать сценарии Denyhosts или BFD для анализа журналов доступа mysql и блокировать любые попытки перебора на брандмауэре» кажется лучшей идеей или использовать некоторые иероглифические пароли :)
quaie
0

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

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

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

Солнечный
источник
0

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

Эрик Петроэль
источник
-1 за безопасность по неизвестности
thepocketwade
@thepocketwade - вот почему я сказал, что это не настоящее решение проблемы. Но это все еще может быть полезным.
Эрик Петроэле
0

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

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

kolypto
источник
0

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

Jure1873
источник
0

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

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

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

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

Уилсон Хаук
источник