2016-10-13 62 views
1

我一直在经历着我的服务器上的攻击,并通过包括在apache的conf文件中的以下阻止xmlrpc访问:攻击MySQL - 以及如何防止它?

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

,而不是粉碎mysql服务每隔几个小时了,压伤一次/二次一天。这仍然是一个问题。 fail2ban禁止2个小时的ssh尝试失败。不过,我看到下面的条目100+在daemon.log

的mysqld [18852]:2016年10月13日3时06分40秒139773247216384 [注意]访问 被拒绝的用户 '根' @ '139.196.28.237'(使用密码:是)

所有这些尝试100+发生在一分钟内,和大约一小时后,我看到几个消息,如:

mysqld的[18852]:2016 -10-13 3:32:52 139773325777664 [Warning] Unsafe statem ent从 BINLOG_FORMAT = STATEMENT使用语句格式写入二进制日志。该声明是不安全的,因为它使用了LIMIT子句 。这是不安全的,因为包含的行集不能被预测为 。声明:DELETE FROM wp_generic_options WHERE option_name LIKE '喷气背包\ _nonce \ _%' 和CAST(option_value AS UNSIGNED)< 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

这里有很多信息缺失。我假设你使用wordpress?用Apache?如果您使用的是旧版本,或者插件不合适,攻击可能会通过那里?你的MySQL服务器也可能暴露在互联网上,在这种情况下,假设你不需要直接访问,第一份工作就是防火墙。 –

回答

2

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

有关您的二进制日志中的不安全语句的警告消息可能不相关。我记得“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,则需要增加实例大小。