Поднимаем Graylog сервер на AlmaLinux 8.5

—

от автора

Всем привет! Данное руководство поможет вам установить централизованное логирование событий на основе Graylog версии 4.2.1 (на момент написания статьи). Использовать мы будем операционную систему AlmaLinux 8.5 (альтернатива CentOS 8 от Red Hat). В процессе установки Graylog, мы рассмотрим первоначальную настройку сервера, настройку правил файрвола, а также использование NGINX в качестве обратного прокси серверу Graylog’а.

Вводные данные:

  1. Свежеустановленный сервер на базе AlmaLinux release 8.5 (Arctic Sphynx);

  2. 8 CPUs, 15 GB RAM и раздел подкачки размером 4 GB;

  3. Graylog будет доступен по адресу https://logs.example.com

После установки операционной системы AlmaLinux, нам необходимо её настроить для дальнейшего использования. То есть усилить безопасность настроек демона sshd, выбрать часовой пояс, настроить синхронизацию времени и установить дополнительные пакеты программ и т. п.

Напишем небольшой скрипт для этого:

vi /root/AlmaLinux8-setup.sh #!/bin/bash  echo "Disabling SELinux mode..." sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0  echo "Disabling FirewallD..." systemctl stop firewalld systemctl disable firewalld  echo "Installing iptables utils..." dnf install iptables-services iptstate -y systemctl enable --now iptables.service  echo "Hardening SSH configuration..." sed -i 's/#AddressFamily any/AddressFamily inet/g' /etc/ssh/sshd_config sed -i 's/#LoginGraceTime 2m/LoginGraceTime 1m/g' /etc/ssh/sshd_config sed -i 's/#MaxAuthTries 6/MaxAuthTries 2/g' /etc/ssh/sshd_config sed -i 's/#MaxSessions 10/MaxSessions 3/g' /etc/ssh/sshd_config sed -i 's/#AllowAgentForwarding yes/AllowAgentForwarding no/g' /etc/ssh/sshd_config sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding no/g' /etc/ssh/sshd_config sed -i 's/X11Forwarding yes/X11Forwarding no/g' /etc/ssh/sshd_config systemctl reload sshd  echo "Configure NTP client..." rm -f /etc/localtime ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime sed -i 's/OPTIONS=""/OPTIONS="-4"/g' /etc/sysconfig/chronyd systemctl restart chronyd  echo "Installing additional utils..." dnf check-update dnf install dnf-utils -y dnf install epel-release -y dnf install bind-utils htop iftop lsof net-tools nmap-ncat pwgen rsync screen sysstat unzip wget -y  echo "If RAM is used on 90%, activate swap..." echo 'vm.swappiness=10' >> /etc/sysctl.conf echo "Set maximum socket receive buffer size…" echo 'net.core.rmem_max=524288' >> /etc/sysctl.conf sysctl -p

Делаем скрипт исполняемым и запускаем:

chmod u+x /root/AlmaLinux8-setup.sh /root/AlmaLinux8-setup.sh

Далее необходимо настроить правила фильтрации трафика, можно использовать bash скрипт, с которым удобно будет управлять правилами файрвола:

vi /root/iptables_rules.sh #!/bin/bash  # vars ipt="iptables" ext_if="ens192"  # flush rules $ipt -F $ipt -F -t nat $ipt -F -t mangle $ipt -X $ipt -X -t nat $ipt -X -t mangle  # default policies $ipt -P INPUT DROP $ipt -P FORWARD DROP $ipt -P OUTPUT ACCEPT  # accept established and related connections $ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  # allow icmp traffic $ipt -A INPUT -p icmp -j ACCEPT  # allow traffic to loopback $ipt -A INPUT -i lo -j ACCEPT  # allow ssh connections to host  $ipt -A INPUT -i $ext_if -p tcp -m state --state NEW --dport 22 -j ACCEPT  # allow web traffic to host $ipt -A INPUT -i $ext_if -p tcp -m state --state NEW -m multiport --dports 80,443 -j ACCEPT  # show rules $ipt -S

Также делаем скрипт исполняемым и запускаем:

chmod u+x /root/iptables_rules.sh /root/iptables_rules.sh

Если текущие правила файрвола вас устраивают, можно сохранить и добавить их в автозапуск:

/sbin/iptables-save > /etc/sysconfig/iptables

Для работы Elasticsearch и Graylog необходима поддержка Java на сервере:

dnf install java-1.8.0-openjdk-headless.x86_64 -y java -version

Для установки Elasticsearch, импортируем вначале ключ с официального репозитория и создаем конфигурационный файл репозитория:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch cat <<'EOT' >> /etc/yum.repos.d/elasticsearch.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOT

Устанавливаем Elasticsearch командой:

dnf install elasticsearch-oss -y

Теперь необходимо отредактировать конфигурационный файл Elasticsearch для работы с Graylog. Добавьте в конец файла следующие параметры:

echo 'cluster.name: graylog' >> /etc/elasticsearch/elasticsearch.yml echo 'action.auto_create_index: false' >> /etc/elasticsearch/elasticsearch.yml

Увеличиваем объем Java JVM heap size для Elasticsearch до 4 GB (по умолчанию максимальный размер 1 GB):

vi /etc/elasticsearch/jvm.options -Xms4g -Xmx4g

После внесенных изменений можно запустить Elasticsearch:

systemctl daemon-reload systemctl enable --now elasticsearch systemctl status elasticsearch ss -tlpn | grep java

Для установки MongoDB, необходимо вначале создать конфигурационный файл репозитория:

cat <<'EOT' >> /etc/yum.repos.d/mongodb-org-5.0.repo [mongodb-org-5.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc EOT

Устанавливаем MongoDB командой:

dnf install mongodb-org -y

Запускаем и проверяем MongoDB:

systemctl daemon-reload systemctl enable --now mongod systemctl status mongod ss -tlpn | grep mongod

Для установки Graylog скачиваем файл репозитория:

rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.rpm

Устанавливаем Graylog командой:

dnf install graylog-server -y

Далее необходимо сгенерировать секретный пароль и назначить его в строке password_secret в конфигурационном файле /etc/graylog/server/server.conf.

pwgen -N 1 -s 96

Затем назначьте хэш пароля для root_password_sha2 в /etc/graylog/server/server.conf:

echo -n P@$$w0rd | sha256sum

Увеличиваем объем Java JVM heap size для Graylog до 4 GB (по умолчанию максимальный размер 1 GB):

vi /etc/sysconfig/graylog-server GRAYLOG_SERVER_JAVA_OPTS="-Xms4g -Xmx4g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:-OmitStackTraceInFastThrow"

После внесенных изменений запускаем Graylog:

systemctl daemon-reload systemctl enable --now graylog-server systemctl status graylog-server ss -tlpn | grep ':9000' cat /var/log/graylog-server/server.log

Так как Graylog у нас будет находиться за обратным прокси, необходимо установить NGINX и получить валидные сертификаты для домена с помощью certbot:

dnf install nginx certbot-nginx -y systemctl enable --now nginx certbot certonly --nginx -d logs.example.com cat <<'EOT' >> /etc/nginx/conf.d/logs_example_com.conf server {     listen       80;     server_name  logs.example.com;      return 301 https://$host$request_uri;      root /usr/share/nginx/html;      location / {         deny all;     }      location ^~ /.well-known {         default_type 'text/plain';         allow all;     }      location = /favicon.ico {         log_not_found off;         access_log off;     }      error_log   /var/log/nginx/logs_example_com_error.log error;     access_log  /var/log/nginx/logs_example_com_access.log; }  server {     listen      443 ssl;     server_name logs.example.com;      ssl_certificate /etc/letsencrypt/live/logs.example.com/fullchain.pem;     ssl_certificate_key /etc/letsencrypt/live/logs.example.com/privkey.pem;     ssl_protocols TLSv1.2 TLSv1.3;     ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;     ssl_prefer_server_ciphers off;     ssl_session_cache shared:SSL:10m;      root /usr/share/nginx/html;      location / {         proxy_set_header Host $http_host;         proxy_set_header X-Forwarded-Host $host;         proxy_set_header X-Forwarded-Server $host;         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;         proxy_set_header X-Graylog-Server-URL https://$server_name/;         proxy_pass       http://127.0.0.1:9000;     }      location ^~ /.well-known {         default_type 'text/plain';         allow all;     }      error_log   /var/log/nginx/logs_example_com_ssl_error.log error;     access_log  /var/log/nginx/logs_example_com_ssl_access.log; } EOT

Проверяем и перечитываем конфиг nginx:

nginx -t nginx -s reload

Открываем сайт в браузере:

http://logs.example.com

Поздравляем! Вы успешно установили Graylog. Благодарим за использование этого руководства по установке Graylog в системе AlmaLinux 8.5 (Arctic Sphynx). Для получения дополнительной информации рекомендуем посетить официальный сайт Graylog.


ссылка на оригинал статьи https://habr.com/ru/company/timeweb/blog/597365/