Как вы рассчитываете время, когда ip обращается к веб-сайту, чтобы занести его в черный список?

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

echo $_SERVER['HTTP_REFERER'] . " - " . getIp() . date("Y-m-d H:i:s");

Я вижу, что ips обращается к сайту много раз, например, 10 раз в секунду.

Мне нужно заблокировать все ips с таким поведением, что вы рекомендуете делать?

(это простой блог WordPress)

0

Решение

Атака «грубой силы» — это если кто-то пытается ввести имя пользователя / пароль в надежде получить доступ к закрытой области вашего сайта. Чтобы справиться с этим, вы можете установить правило относительно того, сколько раз IP может пытаться отправить неверные учетные данные перед блокировкой. Вы можете записать детали в БД и использовать его. Для WP вы можете использовать плагины для ограничения попыток входа в систему.
https://www.wpoptimus.com/912/ban-ip-addresses-login-wordpress-dashboard/

Атака DoS, с другой стороны, состоит в том, чтобы перегружать ваш сервер запросами. Этот вид атаки не может быть обработан кодом и должен выполняться на уровне поставщика услуг.

Также у вас будет возможность в вашем cpanel занести в черный список ips.

0

Другие решения

Это правило, вероятно, работает:
Более 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();
}
0