Сценарии проверки пакетов HTTP
У меня на сервере запущено приложение HTTP. Я не могу изменить приложение, но я хотел бы вызвать событие, когда конкретный запрос POST отправляется приложению.
Я хотел бы запустить скрипт bash и передать ему такие аргументы, как IP-адрес клиента, отправляющего запрос, и заголовки HTTP-запроса.
Какие инструменты я могу использовать для достижения этой цели? Я хотел бы, чтобы он был как можно более легким и должен работать на безголовой машине.
3 ответа
На мой взгляд, хорошим вариантом для этих сценариев является использование httpry
( на Github). Он нацелен на трафик HTTP. Выходные данные довольно просты для анализа, и вам не нужно заботиться о правилах фильтрации, как это необходимо для tcpdump
, httpry
основывается на libpcap
как и большинство других связанных инструментов.
Строить это было обычно легко make
один используется для других инструментов только для источника (нет ./configure
последний раз я это пробовал).
Один из способов сделать это (предполагая, что вы используете веб-сервер Apache, который не указан, но я предполагаю, что вы используете bash), - это изменить apache для регистрации данных постов, используя mod_security или mod_dumpio. (См. http://www.cyberciti.biz/faq/apache-mod_dumpio-log-post-data/ и https://modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/07-logging.html).
Затем используйте что-то, чтобы контролировать вывод и передать это bash. (Не смотря на это, fail2ban может быть настроен для этого, но я не пробовал). В качестве альтернативы вы можете попробовать проанализировать поток журнала через bash и выбрать то, что вам нужно, или для этого могут быть другие инструменты. Грубый, но простой подход, в зависимости от того, насколько жесткими являются ваши временные рамки, может заключаться в регулярной ротации файла журнала (скажем, каждую минуту) с помощью bash-скрипта как части ротации журнала.
Я нашел способ сделать это, используя node.js и модуль node_pcap.
Вы можете установить его, как описано здесь.
Это идет с примером слушателя http, который может быть вызван так.sudo node_modules/pcap/examples/http_trace -f "tcp port 80"
Генерирует вывод как
12:11:53.131 undefined:35748 -> 127.0.0.1:80 #2 HTTP 1.1 request: GET /example/css.css
12:11:53.131 127.0.0.1:80 -> undefined:35748 #2 HTTP 1.1 response: 304 Not Modified
12:11:53.131 127.0.0.1:80 -> undefined:35748 #2 HTTP 1.1 response complete 6.08KB
Этот пример был достаточным для моих целей. Он предоставляет метод, URL и IP-адрес.