Де знайти журнали доступу Nginx та Apache

Де знайти журнали доступу Nginx та Apache

SOC Prime Team
SOC Prime Team linkedin icon Стежити

На Debian та Ubuntu, Nginx веде журнали в /var/log/nginx/access.log і error.log, а Apache в /var/log/apache2/access.log і error.log. На RHEL, Rocky та Alma, Apache використовує /var/log/httpd/access_log та error_log, з підкресленнями та без розширення. У контейнерах, побудованих із офіційного образа Nginx, взагалі немає файлів журналів: все пишеться у stdout і stderr, тому docker logs є вашим експортом.

Журнал веб-сервера часто є першим місцем, де вторгнення залишає слід: сканер, що перевіряє наявність файлів .env, рядок експлойту, POST до файлу, що не повинен існувати. Prime Core має 812 правил виявлення для журналів веб-серверів, зіставлених із 337 техніками MITRE ATT&CK. Серед них: експлуатація додатків з публічним доступом (T1190), веб-оболонки (T1505.003) та сканування вразливостей (T1595.002).

Почати безкоштовно

Перш ніж почати

Знайдіть реальні шляхи. Віртуальні хости часто ведуть журнали в спеціальні місця. Запитайте сам сервер:

# Nginx: виведіть повну активну конфігурацію та виберіть директиви журналу

sudo nginx -T 2>/dev/null | grep -E 'access_log|error_log'


# Apache

sudo apachectl -S

sudo grep -Ri -E 'CustomLog|ErrorLog' /etc/apache2/ /etc/httpd/ 2>/dev/null

На Debian-базованому Apache, віртуальні хости без власного CustomLog потрапляють в other_vhosts_access.log. Люди часто пропускають це.

Перевірте, чий IP ви зберігаєте. За балансувачем навантаження, CDN або зворотним проксі, кожен запит може здаватися, що надходить від проксі. Так і буде, якщо сервер не налаштовано вести журнал реального клієнта: set_real_ip_from і real_ip_header в Nginx, mod_remoteip в Apache. Якщо у кожному рядку показується лише кілька внутрішніх IP, адреса зловмисника тільки в X-Forwarded-For, якщо ви це зберігаєте, або в журналах самого проксі.

Перевірте формат. Обидва сервери за замовчуванням використовують “об’єднаний” формат, але безліч налаштувань кастомізують його (log_format у Nginx, LogFormat у Apache). Зверніть увагу, як він виглядає у вас, перед завантаженням.

Дозволи. На Debian та Ubuntu ці журнали можуть читати root і група adm; в інших місцях, плануйте використовувати sudo.

Експорт з файлів журналів

Журнали обертаються щодня або щотижня, тому включайте обернуті файли. zcat -f читає прості та стиснуті файли разом:

# Nginx, поточні та обернуті, від найстаріших до новіших

sudo zcat -f $(ls -tr /var/log/nginx/access.log*) > web-03_nginx_access.log



# Apache на RHEL

sudo zcat -f $(ls -tr /var/log/httpd/access_log*) > web-03_httpd_access.lo

Для одного дня, часові позначки у форматі об’єднаного формату роблять достатнім grep:

grep '19/Oct/2026' web-03_nginx_access.log > web-03_access_1019.log

Беремо також журнал помилок. Неуспіхи на upstream, PHP помилки та деякі спроби експлойтів з’являються тільки там.

Експорт з контейнерів

# Docker: stdout є журналом доступу, stderr журналом помилок

docker logs --since 2026-10-19T00:00:00 --until 2026-10-20T00:00:00 nginx > nginx_access.log 2> nginx_error.log


# Kubernetes

kubectl logs deploy/nginx --since=24h > nginx.log

Журнали контейнера зникають разом з контейнером, якщо щось їх не збирає. Якщо pod було замінено, перевірте збирач журналів вашого кластеру.

На що звернути увагу

ШаблонЩо зазвичай це означає
Спалахи 404 для /.env, /.git/config, /wp-login.php, /phpmyadminАвтоматизоване сканування
../, ${jndi:, union select, <script> у URLСпроби експлойту: обхід, Log4Shell, SQL ін’єкція, XSS
200 на POST до дивного файлу у каталозі завантаженняМожливо, веб-оболонка; подивіться, що ще запитував цей IP
User agents, як sqlmap, nikto, nucleiІнструментарій, що не переймався ховатися
Сплеск 5xx одразу після дивних запитівЩось зламалося, можливо, через те, що експлойт спрацював

Завантажте, очистіть і перегляньте у LogTotal

  1. Завантажити. Відкрити logtotal.com і перетягніть файл.
  2. Очистити. [what gets masked: client IPs, hostnames, usernames and tokens in URLs]. Look it over before you continue. Query strings often carry session tokens.
  3. Перегляньте.

Коли все пішло не так

СимптомЙмовірна причинаFix
Немає /var/log/nginxКористувальницький шлях, або він працює в контейнеріnginx -T, або docker logs
access.log існує, але порожнійЖурнали відправляються у stdout, або access_log вимкненоПеревірте конфігурацію та контейнер
Кожен запит надходить з одних і тих же IPПроксі або балансувальник навантаження спереду; реальний IP не налаштованийВикористовуйте X-Forwarded-For або журнали проксі
Тільки кілька останніх днівЗалишено обернуті файлиВикористовуйте команду zcat -f з * глоб
Відмовлено в доступіНе root, не в admsudo

FAQ

Що важливіше, журнал доступу чи журнал помилок?

Журнал доступу розповідає вам, що було запитано. Журнал помилок розповідає вам, що зламалося. У випадку експлуатації, вам потрібні обидва, поруч.

Що з IIS?

IIS за замовчуванням записує журнали W3C в C:inetpublogsLogFiles. Це отримує власний посібник.

Приєднуйтесь до платформи Detection as Code від SOC Prime щоб покращити видимість загроз, найбільш актуальних для вашого бізнесу. Щоб допомогти вам розпочати та отримати негайну цінність, забронюйте зустріч зараз з експертами SOC Prime.