У меня есть веб-сервер apache, который настроен так, чтобы разрешать доступ через сертификат клиента только нескольким людям. Я не могу заблокировать по IP, потому что держатели сертификатов потенциально могут подключаться откуда угодно.
В настоящее время Apache возвращает 403 любому, кто не представляет действительный сертификат или пытается получить доступ к недопустимому URL-адресу, но, поскольку на компьютере нет ограничений ACL, он часто сканируется на наличие уязвимостей. Эти сканирования вызывают довольно много шума в журналах.
Есть ли способ войти в другой файл на основе кода ответа? Можно ли отправить все журналы для запросов, которые приводят к 403 в другой файл?
Вы можете заставить Apache передать настраиваемый журнал сценарию. Так, например, измените запись CustomLog в vhost на:
CustomLog "|/path/to/script"
У вас может быть сценарий, который делает что-то вроде:
#!/usr/bin/perl while ($log = <STDIN>) { if ($log =~ /403/) { open(LOG, '>>/path/to/403log'); print LOG $log; close(LOG); } else { open(LOG, '>>/path/to/mainlog'); print $log LOG; close(LOG); } }
Приведенный выше сценарий не тестировался, но он должен дать вам представление о том, что вы можете сделать.