Всем привет! Данное руководство поможет вам установить централизованное логирование событий на основе 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.

Комментарии (5)


  1. aim
    23.12.2021 09:32
    +3

    Когда ж вы, люди нехорошие, уже перестанете отключать подсистемы безопасности на серверах?! :-(((


  1. Shaz
    23.12.2021 11:03

    А зачем два раза задавать размер heap в разных местах?


    1. Balpak
      23.12.2021 17:38

      Один Initial, другой Maximum


      1. Shaz
        23.12.2021 17:50

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

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

        Увеличиваем объем 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"

        Какой из них initial, а какой Maximum. А самый главный вопрос - какой же в итоге будет подхвачен?

        Мой вопрос совсем не про xms и xmx. А про то что выше. У человека малознакомого с Java это может вызвать потом кучу проблем.

        Да блин, они в одном скрипте половину пакетов ставят через yum а вторую через dnf. Ну как так-то?


        1. Balpak
          23.12.2021 18:38

          Мой вопрос совсем не про xms и xmx

          Невнимательно прочитал, извините. В их блоге есть видео есть видео как менять оба значения, но нет рекомендаций по конкретным значениям. Я так понимаю Эластику надо давать больше в силу прожорливости

          половину пакетов ставят через yum а вторую через dnf

          Принципиальной разницы нет, в восьмой версии yum это симлинк на dnf. Но согласен - неаккуратненько.