В данной статье мы рассмотрим PHP-скрипт, к написанию которого меня сподвигло огромное количество неверных авторизаций, который позволяет загружать и анализировать лог-файлы Kerio-KMS. Этот скрипт предназначен для извлечения IP-адресов из логов, связанных с попытками подключения по протоколам SMTP и IMAP, и преобразования их в формат, удобный для дальнейшего использования, например, для блокировки нежелательных адресов.
Структура HTML-формы
В начале кода мы видим HTML-форму, которая позволяет пользователю загрузить файл с логами:
<code>
<h1>Загрузите security лог-файл Kerio-KMS </h1><br>
<form action="" method="post" enctype="multipart/form-data"><br>
<input type="file" name="logFile" accept=".log" required><br>
<input type="submit" value="Загрузить"><br>
</form>
</code>
Форма содержит поле для выбора файла и кнопку для отправки. Атрибут accept=".log" ограничивает выбор файлов только лог-файлами.
Обработка загруженного файла
После отправки формы, скрипт проверяет, был ли файл загружен, и обрабатывает его:
<code>
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['logFile'])) {<br>
$fileTmpPath = $_FILES['logFile']['tmp_name'];<br>
$fileName = $_FILES['logFile']['name'];<br>
$fileSize = $_FILES['logFile']['size'];<br>
$fileType = $_FILES['logFile']['type'];
</code>
Здесь мы получаем временный путь к загруженному файлу, его имя, размер и тип.
Чтение и анализ содержимого файла
Далее, скрипт проверяет, был ли файл успешно загружен, и читает его содержимое:
<code>
if (is_uploaded_file($fileTmpPath)) {<br>
$logData = file_get_contents($fileTmpPath);<br>
$lines = explode("\n", $logData);<br>
$ipAddresses = [];
</code>
Содержимое файла разбивается на строки, и мы создаем массив для хранения IP-адресов.
Извлечение IP-адресов
Скрипт ищет строки, содержащие "SMTP" или "IMAP", и извлекает IP-адреса:
<code>
foreach ($lines as $line) {<br>
if (preg_match('/(SMTP|IMAP)/', $line)) {<br>
if (preg_match('/Attempt from IP address (\d+\.\d+\.\d+\.\d+)/', $line, $matches)) {<br>
$ipParts = explode('.', $matches[1]);<br>
$ipParts[3] = '0'; // Заменяем последний октет<br>
$networkAddress = implode('.', $ipParts);<br>
$ipAddresses[] = $networkAddress . '/24'; // Добавляем маску /24<br>
}<br>
}<br>
}
</code>
Здесь мы используем регулярные выражения для поиска нужных строк и извлечения IP-адресов. Последний октет IP-адреса заменяется на 0, чтобы создать сетевой адрес с маской /24, что позволяет блокировать целый диапазон адресов.
Удаление дубликатов и вывод результата
После извлечения IP-адресов, мы удаляем дубликаты и формируем вывод:
<code>
$ipAddresses = array_unique($ipAddresses);<br>
foreach ($ipAddresses as $ip) {<br>
echo "add list=new_blocklist address=$ip<br>"; //Формат вывода можно править<br>
}
</code>
Каждый уникальный сетевой адрес выводится в формате, который может быть использован для добавления в черный список.
Заключение
Данный скрипт является простым, но эффективным инструментом для анализа логов Kerio-KMS. Он позволяет быстро извлекать и обрабатывать IP-адреса, что может быть полезно для администраторов, занимающихся безопасностью сетей. С помощью этого подхода можно легко идентифицировать и блокировать нежелательные подключения, повышая уровень безопасности системы.
Комментарии:
Пока нет комментариев. Будьте первым!