Всем привет! Данное руководство поможет вам установить централизованное логирование событий на основе Graylog версии 4.2.1 (на момент написания статьи). Использовать мы будем операционную систему AlmaLinux 8.5 (альтернатива CentOS 8 от Red Hat). В процессе установки Graylog, мы рассмотрим первоначальную настройку сервера, настройку правил файрвола, а также использование NGINX в качестве обратного прокси серверу Graylog’а.
Вводные данные:
Свежеустановленный сервер на базе AlmaLinux release 8.5 (Arctic Sphynx);
8 CPUs, 15 GB RAM и раздел подкачки размером 4 GB;
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)
Shaz
23.12.2021 11:03А зачем два раза задавать размер heap в разных местах?
Balpak
23.12.2021 17:38Один Initial, другой Maximum
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. Ну как так-то?
Balpak
23.12.2021 18:38Мой вопрос совсем не про xms и xmx
Невнимательно прочитал, извините. В их блоге есть видео есть видео как менять оба значения, но нет рекомендаций по конкретным значениям. Я так понимаю Эластику надо давать больше в силу прожорливости
половину пакетов ставят через yum а вторую через dnf
Принципиальной разницы нет, в восьмой версии yum это симлинк на dnf. Но согласен - неаккуратненько.
aim
Когда ж вы, люди нехорошие, уже перестанете отключать подсистемы безопасности на серверах?! :-(((