攻击MySQL - 以及如何防范它?

时间:2016-10-13 14:38:07

标签: mysql apache debian xml-rpc

我在服务器上遇到了攻击,并通过在apache conf文件中包含以下内容来阻止xmlrpc访问:

<files xmlrpc.php>
    order allow,deny
    deny from all
</files>

现在,它不是每隔几个小时就破解mysql服务,而是每天压缩一次/两次。这还是个问题。 fail2ban禁止2小时ssh尝试失败。但是,我确实在daemon.log中看到了以下100多个条目:

  

mysqld [18852]:2016-10-13 3:06:40 139773247216384 [警告]访问   拒绝用户'root'@'139.196.28.237'(使用密码:是)

所有这100多次尝试都在一分钟内发生,大约一小时后我会看到几条消息:

  

mysqld [18852]:2016-10-13 3:32:52 139773325777664 [警告]不安全   使用语句格式写入二进制日志的语句   BINLOG_FORMAT =声明。该声明是不安全的,因为它使用了   LIMIT条款。这是不安全的,因为包含的行集不能   被预测。声明:DELETE FROM wp_generic_options WHERE   option_name LIKE'jetpack \ _nonce \ _%'和CAST(option_value AS   UNSIGNED)&lt; 1476340372 ORDER BY option_id LIMIT 100

一段时间后,似乎mysql服务重新启动,但随后失败,并在错误日志中找到以下行:

InnoDB: Initializing buffer pool, size = 256.0M
InnoDB: mmap(281542656 bytes) failed; errno 12
InnoDB: Cannot allocate memory for the buffer pool
Plugin 'InnoDB' init function returned error.
Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
Unknown/unsupported storage engine: InnoDB
Aborting

有人可以向我解释发生了什么事吗?以及如何阻止它再次发生?

1 个答案:

答案 0 :(得分:2)

IP地址139.196.28.237的地理位置报告来自中国杭州。这是您希望MySQL客户端连接到MySQL实例时的原因吗?如果没有,您可能有外部攻击者。您可能根本不允许外部客户端访问您的MySQL服务器。你需要一个防火墙来阻止外部请求的MySQL端口。

关于binlog中不安全语句的警告消息可能不相关。我记得“jetpack”是一个流行的WordPress插件,而SQL查询可能是jetpack代码的正常部分。您可以通过将MySQL binlog格式更改为MIXED或ROW来修复这些警告。要了解有关不安全声明的更多信息,请阅读https://dev.mysql.com/doc/refman/5.7/en/replication-rbr-safe-unsafe.html

关于InnoDB未能为其缓冲池分配256MB内存的错误表明服务器上的进程使用的内存比服务器多。除非物理内存可用,否则InnoDB不会分配内存(它不会分配已经交换的内存)。这也可能与尝试登录无关。您需要增加服务器上的内存。如果您使用的是AWS,则需要增加实例大小。