Сегодня я хочу описать в некотором роде специфическую схему — которая, впрочем, может оказаться полезной для владельцев собственных интернет-ресурсов, размещенных за маршрутизатором Mikrotik. Не секрет, что практически все сайты непрерывно подвергаются сканированию с самыми нехорошими намерениями. Если открыть лог обращений, то в глаза бросятся запросы на предмет получения доступа к файлам конфигураций веб-движков, админок, личных кабинетов и прочего. Конечно, можно просто оставить доступ к значимым страницам только для определенных адресов (хоть бы и посредством .htaccess), но я предлагаю предпринять несколько более серьёзные меры. Если для простых заблудившихся посетителей достаточно показать обычную 404-ю страницу, то для всяких проходимцев нужно показать страницу не столь обычную — а какую именно я сейчас объясню.
Первая часть концепта — php-страницу к которой следует иметь доступ из условной локалки я модифицирую примерно следующим образом:
$clientIp = $_SERVER['REMOTE_ADDR'];
if (!ipInNetwork($clientIp, '192.168.88.0/24'))
{$string = "/ip firewall address-list add address=".$clientIp." list=Blacklist".PHP_EOL;
file_put_contents('Z:\\BlackList.txt', $string, FILE_APPEND | LOCK_EX);
exit();}
function ipInNetwork($ip, $range)
{list($range, $subnet) = explode('/', $range);
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false)
{return false;
}
$ip = ip2long($ip);
$range = ip2long($range);
$subnet = 32 — (int)$subnet;
$mask = -1 << $subnet; $range &= $mask;
return ($ip & $mask) === $range;}
Как видно из кода, имеет место быть проверка адреса посетителя на вхождение в определенную сеть и запись этого самого адреса в текстовый файл в том случае, если посетитель пришел не из нашей локалки. С первым этапом разобрались, второй этап будет заключаться в создании сценарного bat-файла:
set "file=Z:\BlackList.txt"
if exist "%file%" (for %%i in ("%file%") do if %%~zi equ 0 (
echo File is empty
) else (
"%PROGRAMFILES%\PuTTY\plink.exe" -ssh -batch admin@192.168.88.1 -pw Str0ngPa$$w0RD -m %file%
del /f /q %file%
)
) else (
echo File not found!
)
После чего этот сценарный bat-файл подвязывается на периодическое выполнение через планировщик задач, с какой периодичностью — тут решайте сами. На самом Mikrotik следует предварительно настроить блокировку адресов из нашего черного списка (в идеале — в RAW), про всякие очевидные вещи вроде включенного SSH (в идеале — с доступом только с определенного хоста) я даже не стану расписывать.
