Приветствую, уважаемый читатель!
Хотел бы поделиться
несколькими известными мне механизмами обеспечения безопасности Splunk-сервера от несанкционированных
подключений. Проблема особенно остро встает, если вы используете лицензию
отличную от Enterprise.
Итак, в чем собственно
проблема? При использовании триальной лицензии функциональные возможности Splunk почти
аналогичны Enterprise,
а вот в части прохождения процедур идентификации, аутентификации и авторизации
в самой системе возникают вопросы. А простыми словами – у триальной лицензии админка
Splunk
сервера торчит в Интернет на 8000/tcp и любой желающий может её посмотреть и поадминить :)
Когда
вы регистрируетесь на сайте и скачиваете себе дистрибутив Splunk сервера, то первые 2 месяца вы
используете полную версию продукта со всеми возможностями, в том числе
встроенные механизмы обеспечения безопасности. Как только 2 месяца истекли, для
доступа к Splunk
серверу больше не нужен логин и пароль.
Обезопасить
Splunk-сервер
можно следующим образом:
- Запретить подключения с левых ip-адресов.
- Разрешить индексацию событий в Data Input с определенных IP.
Запретить подключения с левых ip-адресов
В моём случае Splunk установлен на Linux-сервере и для исключения
подключений с левых ip
можно воспользоваться iptables.
Причем, как и любая сложная система Splunk открывает и использует для своих целей немало
портов.
Узнать список портов,
которые слушает Splunk:
netstat -naptu | grep
splunkd | grep LISTEN | awk ' { print $4 } '
Для управления сервером
используется порт 8000/tcp,
все остальные связаны или с получением данных (3030/tcp, 3333/tcp, 8088/tcp) или управлением компонентами
системы (9997/tcp,
8089/tcp).
На ваших серверах данные могут быть отличны.
Предположим, мы в явном
виде прописали список разрешенных адресов для каждого из портов и теперь
необходимо заблокировать все остальные.
Сделать
это можно так:
iptables -A INPUT -p tcp -m
multiport --dport 3333,9997,3030,8088,8089,8000 -j DROP
Но предположим, что для
8000/tcp
заранее предусмотреть все разрешенные IP-адреса нельзя и управление системой может
осуществляться с различных адресов. Мне
стало интересно, что умеет iptables
и можно ли отбрасывать подключения на основании содержимого пакетов.
Например,
подключения к Splunk-серверу
помимо перечня белых IP-адресов
разрешить только по ссылке:
/en-GB/ в url позволяет явно указать Splunk под какой языковой локализацией
хочется поработать. Языковых локализаций у Splunk немало:
/de_DE/
/en_GB/
/en_US/
/fr_FR/
/it_IT/
/ja_JP/
/ko_KR/
/zh_CN/
/zh_TW/
Достаточно быстро
наткнулся на описание модуля iptables
string, который позволяет посмотреть в содержимое пакета. Естественно, ни о
каком DPI
речь не идет, но условный regexp
байт провести можно.
Обновленное разрешающее
правило для 8000/tcp
будет выглядеть следующим образом:
iptables -A INPUT -i eth0 -p
tcp -m tcp --dport 8000 -m string --hex-string "|2f 65 6e 2d 55 53
2f|" --algo bm --from 44 --to 50 -j ACCEPT
iptables -A INPUT -p tcp
--dport 8000 -j DROP
Немного
поясню,
ключ
–hex-string
- позволяет указать
последовательность искомых байт в шестнадцатеричном виде;
ключ –from -
позволяет указать с какого байта в пакете начинать поиск;
Таким
образом, мы разрешим подключаться к Splunk только по ссылке с «/en-GB/». Не панацея, но всё же.
Разрешить индексацию событий в Data Input с определённых IP
За получение событий от источников отвечают «Data Input’s», и соответственно Inputs.conf (по умолчанию
лежит тут - /opt/splunk/etc/apps/search/local/inputs.conf). С
помощью него мы настраиваем базовые параметры источников событий.
Разработчики предусмотрели у каждого «Data Input’s» возможность явно указать список IP-адресов, с которых Splunk будет принимать события. Для этого в описании каждого
источника необходимо добавить параметр acceptFrom:
acceptFrom = 10.1.3.40,10.1.3.50
или
acceptFrom = 10.1/16
или
acceptFrom = 10.1/16,server1.domain.com
На этом пока всё :)
Комментариев нет:
Отправить комментарий