У меня есть клиент, который имеет свой веб-сайт под грубая сила атака. Я обнаружил много мошеннических IP-доступа к сайту, используя:
echo $_SERVER['HTTP_REFERER'] . " - " . getIp() . date("Y-m-d H:i:s");
Я вижу, что ips обращается к сайту много раз, например, 10 раз в секунду.
Мне нужно заблокировать все ips с таким поведением, что вы рекомендуете делать?
(это простой блог WordPress)
Атака «грубой силы» — это если кто-то пытается ввести имя пользователя / пароль в надежде получить доступ к закрытой области вашего сайта. Чтобы справиться с этим, вы можете установить правило относительно того, сколько раз IP может пытаться отправить неверные учетные данные перед блокировкой. Вы можете записать детали в БД и использовать его. Для WP вы можете использовать плагины для ограничения попыток входа в систему.
https://www.wpoptimus.com/912/ban-ip-addresses-login-wordpress-dashboard/
Атака DoS, с другой стороны, состоит в том, чтобы перегружать ваш сервер запросами. Этот вид атаки не может быть обработан кодом и должен выполняться на уровне поставщика услуг.
Также у вас будет возможность в вашем cpanel занести в черный список ips.
Это правило, вероятно, работает:
Более 10 (считают себя) запросов в секунду — это сигнал мошеннического IP, которым можно управлять.
MySQL:
DROP TABLE IF EXISTS `tbl_request`;
CREATE TABLE `tbl_request` (
`codigo_request` bigint(11) NOT NULL AUTO_INCREMENT,
`ipnumber` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`date` datetime DEFAULT NULL,
`is_hacking` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
`milliseconds` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
`blacklisted` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`codigo_request`)
) ENGINE=InnoDB AUTO_INCREMENT=541192 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Мошеннические Ips:
select *, SUM(count) AS totalCount from (
select *, count( ipnumber ) as count from tbl_request group by ipnumber, date HAVING count >= 10 order by count DESC
) AS T GROUP by T.ipnumber order by totalCount DESC
PHP:
$request = new Request();
$request->setIpnumber( get_client_ip() );
$request->setDate(getDateForDatabase());
$request->insert();
$fips = $request->getFraudulentIps();
foreach ($fips as $k => $v) {
$v->blacklist();
}