Как забанить потенциальные хакерские IP-адреса из порта 80?
Я размещаю несколько веб-сайтов PHP на веб-сервере. В то время как я принял все меры предосторожности для защиты всех портов, атаки для порта 80 продолжаются. Я хочу запретить любой IP-адрес, который проявлял активный интерес к любой веб-странице (страницам), скажем, 200 в час или 15 в минуту. Я предполагаю, что пользователь не может просматривать 15 страниц в минуту, если у него нет причин, которые действительно стоит подозревать.
В идеале я хотел бы, чтобы IP-адреса регистрировались в запрещенных базах данных, а также иметь белые IP-адреса в списке для тех IP-адресов, которые принадлежат моему клиенту.
Есть ли готовый инструмент, который делает все это. Я видел fail2ban, и он не служит цели...
3 ответа
Что вам нужно сделать, это: 1) смотреть журналы apache для доступа 2) блокировать IP-адреса, которые вы квалифицируете на брандмауэре (через скрипт).
fail2ban будет делать то, что вы хотите, с немного большей работой, чем чтение поискового слогана Google.
Как насчет использования существующих сервисов, таких как Project Honeypot?
Это работает на моем Raspberry Pi под управлением версий Linux и PHP:
Чтобы запустить iptables из php, добавьте следующее в /etc/sudoers www-data ALL=(ALL) NOPASSWD: /sbin/iptables
Некоторым людям не нравится предоставлять доступ к данным через www к iptables. Они говорят, что это риск для безопасности. Но я думаю, что это нормально, потому что их просто забанили.
<?php
// Get the ip address of the client.
$remote_addr = $_SERVER['REMOTE_ADDR'];
// Ban them.
if (is_ip($remote_addr)) {
ban_ip($remote_addr);
// Save the banned IP address.
$logfile = '/run/shm/banned.txt';
file_put_contents($logfile,$remote_addr."\n",FILE_APPEND);
}
// Returns true if $ip is a valid ip address.
function is_ip($ip)
{
$count = strlen($ip);
$valid = '0123456789.:';
for($loop=0;$loop<$count;$loop++) {
if (strpos($valid,substr($ip,$loop,1))===false) {
return false;
}
}
return true;
}
// Bans an ip address.
function ban_ip($ip)
{
$cmd = 'sudo /sbin/iptables -A INPUT -s ' . $ip . ' -j DROP';
exec($cmd);
return;
}
?>