Я только что просмотрел свой файл системного журнала и заметил ТОННУ следующих записей:
25 августа 13:06:17 ssrv001 mysqld: 150825 13:06:17 [Предупреждение] Доступ запрещен для пользователя 'root'@'61.160.232.48' (с использованием пароля: ДА)
IP-адрес является вредоносным, так как никто, кроме меня, не имеет корневого доступа к этому серверу. Я удалю удаленный доступ для корневого пользователя mysqld, но будет ли этого достаточно, чтобы предотвратить подобные вещи?
Я также думал о реализации чего-то, что будет запрещать подключения с IP-адресов, которые несколько раз отправляли недопустимые запросы.
Прежде всего, я рекомендую вам разрешить вход в систему mysql с правами root только с localhost. Если вам нужно подключиться к mysql с другого сервера - создайте нового пользователя и предоставьте ему только необходимые разрешения.
Кроме того, вы можете использовать fail2ban или аналогичный для добавления IP-адресов хакеров в черный список после нескольких неудачных попыток подключения.
И, наконец, вы можете изменить свой порт mysql, чтобы избежать атак методом грубой силы.
Узнайте больше о защите ваших баз данных MySQL в Linux здесь: Как защитить базы данных MySQL и MariaDB на Linux VPS
ОБНОВИТЬ: Я забыл, что у MySQL есть собственные инструменты для блокировки IP-адресов после неудачных попыток входа в систему. Вы можете использовать это в своем файле конфигурации mysql:
max_connect_errors = 5;
Но по умолчанию mysqld блокирует хост после 10 ошибок соединения.
Об этом подробнее здесь: Системные переменные сервера #sysvar_max_connect_errors и тут: Хост host_name заблокирован
Я с Максимом и знаю, что разрешить вход в MySQL как root только с localhost. Я бы пошел еще дальше, разрешив вход для локального хоста или определенных IP-адресов для всех пользователей.
Что-то, что вы можете сделать для подключения к удаленному серверу MySQL в качестве локального пользователя, - это ssh-туннелирование.
Что-то вроде этого Должно работать для систем UNIX:
ssh -fNg -L 9999:127.0.0.1:3306 user@yourhost.com
Это включит клиентский порт 9999 в качестве «туннеля» для удаленного порта yourhost.com:3306.
Для систем Windows, возможно, подойдет Putty. Взгляните на это:
http://www.ytechie.com/2008/05/set-up-a-windows-ssh-tunnel-in-10-minutes-or-less/
Большинство современных графических клиентов MySQL допускают туннелирование соединений, например MySQL Workbench отлично работает:
Вам следует заблокировать mysql с помощью iptables. Этот фрагмент блокирует mysql с любого хоста, кроме localhost:
iptables -A INPUT -i lo -p tcp --dport mysql -j ACCEPT
iptables -A INPUT -p tcp --dport mysql -j DROP
Имейте в виду, что эти настройки в iptables не будут постоянными. В зависимости от вашего дистрибутива вам следует отредактировать конфигурацию iptables. Для систем на базе Redhat6 вы должны отредактировать /etc/sysconfig/iptables
например.
Вы также должны отключить удаленный вход в систему root в mysql с помощью следующих sql-запросов:
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
Вы также можете подумать о внедрении fail2ban для блокировки IP-адресов со слишком большим количеством неудачных попыток входа в систему. Этот вопрос о сбое сервера должен помочь вам в этом.