В этой статье пойдет речь об установке и настройке лаборатории мониторинга журналов с ELK. Читатели смогут увидеть практический пример использования данной программы, познакомиться с ее полезными функциями.
Elastic Stack (еще известный как ELK Stack) – это сборник бесплатного программного обеспечения с открытым исходным кодом от компании Elastic. Оно было специально разработано для централизованного ведения журналов. ПО позволяет осуществлять поиск, анализ и визуализацию журналов из различных источников. В этой статье будет уделено особое внимание установке Elastic Stack на Ubuntu.
Для настройки Elk Stack на своей платформе Ubuntu, необходимо выполнить некоторые предварительные подготовления:
- Ubuntu 20.04;
- Привилегии root.
Компоненты ELK Stack
- Elasticsearch: поисковая система, которая хранит в безопасности все собранные данные.
- Logstash: компонент обработки данных, который отправляет входящие данные в Elasticsearch.
- Kibana: веб-интерфейс для поиска и визуализации журналов.
- Filebeat: легкий одноцелевой переадресатор данных, который может отправлять данные с тысяч машин либо в Logstash, либо в Elasticsearch.
Установка Java и всех необходимых элементов
Elasticsearch требует наличия OpenJDK на машине пользователя. Нужно установить Java с помощью приведенной ниже команды вместе с поддержкой HTTPS и пакетами wget для APT.
apt install -y openjdk-11-jdk wget apt-transport-https curl
Теперь пользователь собирается импортировать открытый ключ Elasticsearch в APT. Для импорта ключа GPG ему следует ввести следующую команду:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –
После он добавит репозиторий Elastic к sources.list.d с помощью следующей команды:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Установка и настройка Elasticsearch
Обновление системного репозитория
apt update
Пользователю нужно установить Elasticsearch с помощью следующей команды:
apt install elasticsearch
Далее пользователь настраивает Elasticsearch.
Elasticsearch способен просматривать трафик на порту 9200. Пользователь собирается ограничить внешний доступ к этому экземпляру Elasticsearch, чтобы посторонние не смогли раскрыть секретные данные или остановить кластер Elastic через REST API. Теперь человеку необходимо внести некоторые изменения в конфигурационный файл Elasticsearch – elasticsearch.yml.
Он введет следующую команду:
nano /etc/elasticsearch/elasticsearch.yml
Следует найти строку, которая указывает на атрибут network.host и раскомментировать ее, добавив localhost в качестве его значения. Также пользователь раскомментирует атрибут http.port.
network.host: localhost
http.port: 9200
Теперь надо запустить и включить службы Elasticsearch.
systemctl start elasticsearch
systemctl enable elasticsearch
Настала пора проверить статус Elasticsearch.
systemctl status elasticsearch
curl -X GET "localhost:9200"
По умолчанию Elasticsearch просматривает порт 9200. Пользователь также может проверить его в своем веб-браузере с помощью пинга https://localhost:9200.
Теперь Elasticsearch установлен и готов к работе.
Установка и настройка Logstash
Logstash используется для сбора и централизации журналов с разных серверов с помощью filebeat
Сначала стоит проверить, что OpenSSL работает, а затем установить Logstash, при этом выполнив следующую команду:
openssl version -a
apt install logstash -y
Необходимо отредактировать файл /etc / hosts и добавить следующую строку:
nano /etc/hosts
Здесь: 18.224.44.11 – IP-адрес сервера Elk-master.
Пользователю нужно создать SSL-сертификат для защиты передачи данных журнала с клиента Rsyslog & Filebeat на сервер Logstash.
Для этого открывается новый каталог SSL в разделе Logstash configuration. Пользователь перейдет в этот каталог, создаст сертификат SSL, выполнив следующую команду:
mkdir -p /etc/logstash/ssl
cd /etc/logstash/
openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt
Теперь он собирается создать новые конфигурационные файлы для Logstash с именем «filebeat-input.conf». В качестве входного файла из системного журнала – «syslog-filter.conf» – для обработки системных журналов, и «output- output-elasicsearch.conf» – для определения вывода результатов работы Elasticsearch.
Пользователю следует перейти в каталог Logstash и создать там файл «filebeat-input.conf» по пути conf.D, выполнив команду:
cd /etc/logstash/
nano conf.d/filebeat-input.conf
Он также добавит следующую конфигурацию:
input {
beats {
port => 5443
type => syslog
ssl => true
ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
}
}
Для обработки данных системного журнала человек будет использовать плагин фильтра под названием “grok”. Ему надо создать новый файл .conf (syslog-filter.conf) в той же папке.
nano conf.d/syslog-filter.conf
Он также добавит следующую конфигурацию:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
И, наконец, пользователь создаст файл конфигурации «output-elasticsearch.conf» для вывода результатов работы Еlasticsearch.
nano conf.d/output-elasticsearch.conf
Он также добавит следующую конфигурацию:
output {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
После этого нужно сохранить изменения и выйти.
Теперь пользователю необходимо запустить и проверить статус службы Logstash.
systemctl start logstash
systemctl enable logstash
systemctl status logstash
Установка и настройка Kibana
Пользователь может установить Kibana с помощью следующей команды:
apt install kibana
Он собирается внести некоторые изменения в конфигурационный файл Kibana.
nano /etc/kibana/kibana.yml
Нужно найти и раскомментировать следующие атрибуты.
Теперь осталось только запустить и активировать сервис Kibana:
systemctl enable kibana
systemctl start kibana
Установка и настройка NGINX
Пользователю необходимо установить и настроить Nginx и ‘Apache2-utlis’.
apt install nginx apache2-utils -y
Он создаст новый файл виртуального хоста с именем Kibana.
nano /etc/nginx/sites-available/kibana
И добавит в файл следующую конфигурацию:
server {
listen 80;
server_name localhost;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
location / {
proxy_pass https://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Настало время создать необходимую аутентификацию для панели мониторинга Kibana и активировать конфигурацию виртуального хоста Kibana. После этого пользователь сможет протестировать конфигурацию Nginx, включив и перезапустив службу Nginx с помощью следующей команды:
sudo htpasswd -c /etc/nginx/.kibana-user elastic
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
systemctl enable nginx
systemctl restart nginх
Установка и настройка Filebeat
Пользователь собирается настроить отправителей данных Filebeat на своем сервере Еlk-master. Это будет использоваться для сбора данных из различных источников и транспортировки их в Logstash и Elasticsearch.
Ему нужно загрузить и установить Filebeat, выполнив следующую команду:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.11-amd64.deb
Стоит также переупаковать загруженный файл с помощью следующей команды:
sudo dpkg -i filebeat-6.8.11-amd64.deb
Затем открыть конфигурационный файл Filebeat с именем «filebeat.yml».
nano /etc/filebeat/filebeat.yml
Пользователь отредактирует файл конфигурации:
Он собирается использовать Elasticsearch для выполнения дополнительной обработки данных, собранных Filebeat. Поэтому стоит запустить поисковики Filebeat, изменив значение строки “Еnabled” на “Тrue”.
Затем пользователь перейдет в раздел вывода результатов работы Elasticsearch и добавит следующие строки:
output.elasticsearch:
hosts: ["192.168.0.156:9200"]
username: "elastic"
password: "123"
setup.kibana:
host: "192.168.0.156:5601"
Включить и настроить модуль Elasticsearch можно с помощью следующей команды:
sudo filebeat modules enable elasticsearch
Пора запустить Filebeat.
sudo filebeat setup
sudo service filebeat start
И, наконец, пользователь скопирует файл logstash-forwarder.crt в /etc/filebeat directory, выполнив следующую команду:
cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/
sudo service filebeat restart
Чтобы протестировать ELK Stack, пользователю необходимо открыть браузер и просмотреть IP-адрес своего сервера, а затем – сам порт 5601.
https://localhost:5601
Маршрутизация журналов Linux в Elasticsearch
Пользователь займется маршрутизацией журналов из rsyslog в Logstash, ведь они автоматически передаются в Elasticsearch.
Маршрутизация журналов из Logstash в Elasticsearch
Прежде чем маршрутизировать журналы из rsyslog в Logstash, пользователю нужно настроить переадресацию журналов между Logstash и Elasticsearch.
Для этого будет создан конфигурационный файл Logstash. Чтобы создать его, человеку следует перейти в каталог /etc/logstash / conf.d и создать там файл logstash.conf.
cd /etc/logstash/conf.d
nano logstash.conf
Также он добавит следующую конфигурацию в него.
input {
udp {
host => "127.0.0.1"
port => 10514
codec => "json"
type => "rsyslog"
}
}
# The Filter pipeline stays empty here, no formatting is done.
filter { }
# Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.
output {
if [type] == "rsyslog" {
elasticsearch {
hosts => [ "127.0.0.1:9200" ]
}
}
}
Пользователь перезапустит службу Logstash.
systemctl restart logstash
Стоит проверить, что все работает нормально. Пользователь выполнит следующую команду:
netstat -na | grep 10514
Маршрутизация журналов из rsyslog в Logstash
Rsyslog способен преобразовывать журналы с помощью шаблонов для их пересылки в rsylog. Пользователю следует открыть каталог /etc/rsylog.d и создать там новый файл с именем 70-output.conf.
cd /etc/rsyslog.d
nano 70-output.conf
Человек добавит следующую конфигурацию в файл 70-output.conf.
# This line sends all lines to defined IP address at port 10514
# using the json-template format.
*.* @127.0.0.1:10514;json-template
Теперь пользователь настроил переадресацию журналов, создав файл 01-json-template.conf в той же папке.
nano 01-json-template.conf
Человек добавит следующую конфигурацию в файл 01-json-template.conf.
template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}
Следует перезапустить службу rsyslog и убедиться, что данные правильно направляются в Elasticsearch.
systemctl restart rsyslog
curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'
Примечание: журналы будут пересылаться с индексом в имени logstash-*.
Создание панели для входа в Kibana
Пользователю следует открыть браузер и перейти в раздел https://localhost:5601. Там он должен увидеть следующий экран.
Перейдя в раздел «Управление», человек может создать шаблон индекса logstash-* и двигаться к следующему шагу.
Пользователь определил logstash – * как свой шаблон индекса. Теперь он может задать некоторые настройки, прежде чем создавать его. В поле Time Filter field name нужновыбрать @timestamp и создать шаблон индекса.
Мониторинг записей SSH
Этот вариант немного специфический, так как пользователь может перейти на вкладку “Discover”, чтобы выстроить свою панель.
При входе на вкладку “Discover” следует выбрать logstash-*.
Там, в Filterbat, пользователь поставит фильтр запроса «programename:ssh*».
Теперь он может видеть каждый журнал, связанный с сервисом SSHd на его машине.
Как видно на картинке, теперь у пользователя есть прямой доступ ко всем журналам, связанным с сервисом SSHd. Например, он способен отслеживать незаконные попытки доступа или ввод неправильных логинов.
Точно также он может отслеживать различные попытки незаконного доступа, такие как ftp, telnet и т.д.
Например, человек получил доступ Telnet к серверу с другой машины.
Настала пора посмотреть, что происходит на панели Kibana.
Приготовиться всем!
Здорово! Теперь панель видна в личном кабинете.
Автор переведенной статьи: Vijay.