Se você fizer proxy das requisições para o Apache com o mod_php instalado, você pode usar o seguinte script PHP para descarregar as requisições:
<?php
$pid = getmypid();
$now = date('M d H:i:s');
$fp = fopen('/tmp/intrusion.log', 'a');
if (!function_exists('getallheaders'))
{
function getallheaders()
{
$headers = '';
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
function ulog ($str) {
global $pid, $now, $fp;
fwrite($fp, "$now $pid {$_SERVER['REMOTE_ADDR']} $str\n");
}
foreach (getallheaders() as $h => $v) {
ulog("H $h: $v");
}
foreach ($_GET as $h => $v) {
ulog("G $h: $v");
}
foreach ($_POST as $h => $v) {
ulog("P $h: $v");
}
fclose($fp);
Observe que, como você está usando o nginx, o $_SERVER['REMOTE_ADDR']
pode ser inútil. Você terá que passar o IP real para o Apache via proxy_set_header X-Real-IP $remote_addr;
, e você pode usá-lo em vez disso (ou apenas confiar que ele está logado via getallheaders()
).