Установка и настройка Squid proxy
Сначала устанавливаем squid для дальнейшего использования в качестве прокси-сервера с помощью следующей команды:
sudo apt install squid
После установки, squid необходимо настроить. Для этого открываем файл .conf с помощью следующей команды:
sudo nano /etc/squid/squid.conf
В открытом файле необходимо нажимаем Ctrl+W для того, чтобы чтобы найти необходимое место и прописать:
include /etc/squid/conf.d/*
В найденном месте ниже добавим строчки и поле сохраняем измененный файл:
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords`
auth_param basic realm proxy`
acl authenticated proxy_auth REQUIRED`
acl localnet src 176.59.142.172
http_access allow authenticated
176.59.142.172 - ip адрес локальной машины.
Установка Apache
Устанавливаем Apache для дальнейшего осуществления передачи данных при запросе и настраиваем аутентификацию по паролю
sudo apt install apache2-utils
sudo htpasswd -c /etc/squid/passwords *squid_username*
Запуск сервера
По умолчанию squid слушает 3128 порт
sudo systemctl start squid
sudo systemctl enable squid
sudo ufw allow 3128
Видим, что прокси успешно работает:
Elasticsearch
Установка Java
Установим Java с помощью следующих команд:
sudo apt update
sudo apt install default-jre
sudo apt install default-jdk
Установка Elasticsearch
Elasticsearch используется для хранения, анализа, поиска по логам.
Для начала используем cURL, инструмент командной строки для передачи данных с помощью URL, для импорта открытого ключа Elasticsearch GPG в APT. Так же используем аргументы -fsSL для подавления всех текущих и возможных ошибок (кроме сбоя сервера), а также, чтобы разрешить cURL подать запрос на другой локации при переадресации. Выводим результаты команды cURL в программу apt-key, которая добавит открытый ключ GPG в APT
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Добавим список источников Elastic в каталог sources.list.d, где APT будет искать новые источники:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Обновляем список пакетов, чтобы APT мог прочитать новый источник Elastic и устанавливаем Elasticksearch с помощью следующей команды:
sudo apt update
sudo apt install elasticsearch
Настройка Elasticsearch
Для настройки Elasticsearch мы отредактируем файлы конфигурации. В Elasticsearch имеется три файла конфигурации:
elasticsearch.yml для настройки Elasticsearch, главный файл конфигурации
jvm.options для настройки виртуальной машины Elasticsearch Java Virtual Machine (JVM)
log4j2.properties для настройки журнала Elasticsearch
Открываем файл elasticsearch.yml для изменения конфигураций. Файл elasticsearch.yml предоставляет варианты конфигурации для кластера, узла, пути, памяти, сети, обнаружения и шлюза. Нам необходимо изменить настройки только для хоста сети.
sudo nano /etc/elasticsearch/elasticsearch.yml
Для ограничения доступа и повышения безопасности находим строку с указанием network.host и убираем с нее значок комментария, после чего заменяем значение на 0.0.0.0, чтобы она выглядела следующим образом: "network.host: 0.0.0.0".
Elasticsearch формирует одноузловой кластер: discovery.type: single-node.
Включаем функции безопасности Elasticsearch на узле: xpack.security.enabled: true.
Запуск Elasticsearch
Запускаем Elasticsearch с помощью следующих команд:
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
Создание пользователей
sudo -u root /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
Сохраняем вывод
Changed password for user apm_system
PASSWORD apm_system = Ff7GWmJSS4X45NewBNZN
Changed password for user kibana_system
PASSWORD kibana_system = OZ7w09XTeHBg3rfihAsm
Changed password for user kibana
PASSWORD kibana = OZ7w09XTeHBg3rfihAsm
Changed password for user logstash_system
PASSWORD logstash_system = AKtK2rmOmkAwWfL17jCh
Changed password for user beats_system
PASSWORD beats_system = ymq4MVVHCdDIVBohH5l7
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = RbkSKKbivgZOoq02plda
Changed password for user elastic
PASSWORD elastic = nrRO28jYIplnaEP3JBou
Kibana
Установка Kibana
Установим Kibana, которая представляет собой удобную и красивую web панель для работы с логами, с помощью следующей команды:
sudo apt install kibana
Настройка Kibana
Откроем файл конфигурации:
sudo nano /etc/kibana/kibana.yml
Настроим username и укажем, что Elasticsearch должна работать на порту 9200, а Kibana на 5601:
elasticsearch.username: "kibana_system"
elasticsearch.host: "0.0.0.0:9200"
kibana.port: 5601
Запуск Kibana
Запустим Kibana с помощью следующих команд:
sudo systemctl start kibana
sudo systemctl enable kibana
Добавление пароля
sudo -u root /usr/share/kibana/bin/kibana-keystore create
sudo -u root /usr/share/kibana/bin/kibana-keystore add elasticsearch.password
Вписываем пароль, который получили при создании пользователей
Changed password for user kibana_system
PASSWORD kibana_system = OZ7w09XTeHBg3rfihAsm
Заходим в Elasticsearch, создаем суперпользователя
Logstash
Установка Logstash
Устанавливаем Logstash- сервис для сбора логов и отправки их в Elasticsearch.
sudo apt install logstash
Настройка Logstash
Открываем файл конфигураций:
sudo nano /etc/logstash/conf.d/logstash.conf
Указываем, что принимаем информацию на 5044 порт, формируем функцию, где в дальнейшем будут находиться правила, описываем передачу данных в Elasticsearch и сохраняем.
input {
beats {
port => 5044
}
}
filter {
**Место для правил Grok**
}
output {
elasticsearch {
hosts => ["139.59.247.231:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata[version]}-%{+YYYY.MM.dd}"
user => "user"
password => "password"
}
}
Проверяем синтаксис, чтобы в дальнейшем не появились ошибки
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Запуск Logstash
Запускаем Logstash с помощью следующих команд:
sudo systemctl start logstash
sudo systemctl enable logstash
Filebeat
Установка Filebeat - клиент для передачи логов в logstash
Заходим на прокси сервер
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt install filebeat
Настройка Filebeat
Изменяем файл конфигураций:
sudo filebeat modules enable system
sudo nano /etc/filebeat/filebeat.yml
Комментируем строчки "output.elasticsearch" и "hosts: ["localhost:9200"]"
Раскомментируем строчки "output.logstash" и "hosts: ["localhost:5044"]"
Изменим localhost на ip нашего сервера с ELK
Проверяем конфигурацию "sudo filebeat -e test output"
Так как мы отправляем события в Logstash, то необходимо вручную загрузить конвейеры загрузки. Для этого запустим команду:
sudo filebeat setup --pipelines --modules system
Установим index templates для Elasticsearch вручную.
Чтобы загрузить шаблон индекса вручную, запустим команду установки. Требуется подключение к Elasticsearch, но т.к. включен другой вывод, необходимо временно отключить этот вывод и включить Elasticsearch с помощью параметра -E. Отключаем выходные данные Logstash.
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["139.59.247.231:9200"]' -E 'output.elasticsearch.username="dasha"' -E 'output.elasticsearch.password="123456"'
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["139.59.247.231:9200"]' -E 'output.elasticsearch.username="dasha"' -E 'output.elasticsearch.password="123456"' -E setup.kibana.host=139.59.247.231:5601
139.59.247.231 elk ip
Запуск Filebeat
Запускаем Filebeat с помощью следующих команд:
sudo systemctl start filebeat
sudo systemctl enable filebeat
curl -u dasha:123456 -XGET 'http://139.59.247.231:9200/filebeat-*/_search?pretty'
GROK
Grok-это фильтр внутри Logstash, который используется для разбора неструктурированных данных на что-то структурированное и подлежащее запросу. Он находится поверх регулярного выражения (regex) и использует текстовые шаблоны для сопоставления строк в файлах журналов.
Правило 1
Полученные логи
{
"fields" : {
"message": [
"May 1 10:01:37 proxy sshd[87897]: Failed password for root from 49.88.112.76 port 14398 ssh2"
]
}
}
Grok
%{SYSLOGTIMESTAMP} %{WORD:server_name} %{WORD:service_name}\[%{NUMBER:pid}\]: Failed password for %{WORD:user_name} from %{IP:source_ip} port %{NUMBER:port}
Новые полученные логи
{
"fields": {
"server_name": [
"proxy"
],
"user_name": [
"root"
],
"pid": [
"87897"
],
"source_ip": [
"49.88.112.76"
],
"service_name": [
"sshd"
],
"message": [
"May 1 10:01:37 proxy sshd[87897]: Failed password for root from 49.88.112.76 port 14398 ssh2"
],
"tags": [
"beats_input_codec_plain_applied"
],
"port": [
"14398"
]
}
}
Правило 2
Полученные логи
{
"fields": {
"message": [
"Apr 27 02:13:09 proxy sshd[5803]: Received disconnect from 124.156.222.134 port 46278:11: Bye Bye [preauth]"
]
}
}
Grok
%{SYSLOGTIMESTAMP} %{WORD:server_name} sshd\[%{NUMBER}\]: Received disconnect from %{IP:source_ip} port %{NUMBER:port}:%{DATA}: %{GREEDYDATA:msg}
Новые полученные логи
{
"fields": {
"msg": [
"Bye Bye [preauth]"
],
"server_name": [
"proxy"
],
"source_ip": [
"14.224.148.16"
],
"message": [
"May 1 10:25:28 proxy sshd[88097]: Received disconnect from 14.224.148.16 port 36408:11: Bye Bye [preauth]"
],
"tags": [
"beats_input_codec_plain_applied"
],
"port": [
"36408"
]
}
}
Правило 3
Полученные логи
{
"fields": {
"message": [
"May 1 10:31:28 proxy sshd[88184]: Disconnected from authenticating user root 165.22.63.216 port 33010 [preauth]"
]
}
}
Grok
%{SYSLOGTIMESTAMP} %{WORD:server_name} sshd\[%{NUMBER}\]: %{WORD:status} from authenticating user %{WORD:user_name} %{IP:source_ip} port %{NUMBER:port}
Новые полученные логи
{
"fields": {
"server_name": [
"proxy"
],
"user_name": [
"root"
],
"source_ip": [
"124.194.74.203"
],
"message": [
"May 1 10:39:30 proxy sshd[88242]: Disconnected from authenticating user root 124.194.74.203 port 40918 [preauth]"
],
"tags": [
"beats_input_codec_plain_applied"
],
"port": [
"40918"
],
"status": [
"Disconnected"
]
}
}
Комментарии (8)
martin74ua
11.05.2022 11:18+7Зачем squid? зачем вообще этот очередной пересказ мануалов своими словами?
Rastler
11.05.2022 11:56+2В нынешних реалиях даже репозиторий elastic search недоступен из РФ, нужно делать зеркало или загружать в ручную пакеты. Можно было бы хотя бы это указать, а то полезность статьи и так нулевая.
pprometey
11.05.2022 18:22+1То же самое о чем статья, но одной строкой:
git clone https://github.com/deviantony/docker-elk.git && cd docker-elk && docker-compose up -d
makapohmgn
12.05.2022 06:15+1Для ограничения доступа и повышения безопасности находим строку с указанием network.host и убираем с нее значок комментария, после чего заменяем значение на 0.0.0.0, чтобы она выглядела следующим образом: "network.host: 0.0.0.0".
Серьёзно?
MrSelfDestruct
Вопрос по выбору версии elasticsearch, почему именно 7-я, а не 8-я? Да и не стоит ли сейчас посмотреть на версию от Amazon (OpenSearch), если говорить о 7-ке?