Graylog 3 安裝及設定

109.09.14 內容修改為 CentOS8 版本,並且修正安裝流程

運行環境


本工作室環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: CentOS 7 or CentOS 8
  • Web 服務: Nginx 1.18

第一步:更新系統


  • CentOS 7
系統更新:
yum update -y

安裝pwgen、perl-Digest-SHA輔助工具,設定Graylog時用來生成密碼
yum install epel-release -y
yum install pwgen perl-Digest-SHA -y
  • CentOS 8
系統更新:
dnf update -y

啟用 PowerTools 儲存庫
dnf install dnf-utils -y
dnf config-manager --set-enabled PowerTools

安裝pwgen、perl-Digest-SHA輔助工具,設定Graylog時用來生成密碼
dnf install epel-release -y
dnf install pwgen perl-Digest-SHA -y

第二步:安裝Java


Elasticsearch執行於JVM上,因此需安裝Java 7 update 55或以上版本,並設定有JAVA_HOME環境變數。

  • 早期的Java 7版本存在造成資料毀損與遺失的bug,Elasticsearch在啟動時會檢查過期的Java版本並無法成功啟動。

  • l建議使用 Java 1.8.0_131 以上,因最近Java的重要update會提升JVM的記憶體使用效能。
    (Elasticsearch官方建議不要使用JDK9,請使用 JDK8 )

  • 使用JVM Server mode (x64版本為server mode),將更加有效的利用記憶體

  • 安裝指令如下

  • CentOS 7

yum install java-1.8.0-openjdk-headless.x86_64
  • CentOS 8
dnf install java-1.8.0-openjdk-headless.x86_64

第三步:安裝MongoDB


  • CentOS7
  • 建立MongoDB源 # vim /etc/yum.repos.d/mongodb-org-4.0.repo 加入以下內容
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
  1. 安裝MongoDB

yum install -y mongodb-org

  1. 啟動MongoDB

systemctl start mongod

  1. 設定開機啟動MongoDB

systemctl enable mongod

  • CentOS8
  • 建立MongoDB源 # vim /etc/yum.repos.d/mongodb-org.repo 加入以下內容
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
  1. 安裝MongoDB

dnf install -y mongodb-org

  1. 啟動MongoDB

systemctl start mongod

  1. 設定開機啟動MongoDB

systemctl enable mongod

第四步:安裝 Elasticsearch


  • Graylog 3.0已支援Elasticsearch 6.x版。

安裝Elasticsearch GPG密鑰

--import https://artifacts.elastic.co/GPG-KEY-elasticsearch

建立Elasticsearch源

vim /etc/yum.repos.d/elasticsearch.repo

加入以下內容

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/oss-6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
  1. 安裝Elasticsearch
CentOS 7
yum install -y elasticsearch-oss

CentOS8
dnf install -y elasticsearch-oss
  1. 修改elasticsearch設定檔
sudo tee -a /etc/elasticsearch/elasticsearch.yml > /dev/null <<EOT
cluster.name: graylog
action.auto_create_index: false
EOT
  1. 啟動elasticsearch

systemctl start elasticsearch

  1. 設定開機啟動elasticsearch

systemctl enable elasticsearch

  1. 檢查Elasticsearch健康狀況

curl –XGET localhost:9200/_cluster/health?pretty=true

若一切正常,應該會得到以下訊息內容

curl: (3) Failed to convert –XGET to ACE; string contains a disallowed character

{
  "cluster_name" : "graylog",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

第五步:安裝 Graylog Server


  • 更新說明在 8 月份官方已經將 3.1 版本已正版上線,安裝檔從 3.0 修改成 3.1 版本安裝檔,其他安裝流程是沒有什麼問題
  • 更新說明目前版本為 3.3 版
  1. 下載Graylog RPM軟件包

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

  1. 安裝graylog-server
CentOS 7
yum install -y graylog-server

CentOS 8
dnf install -y graylog-server
  1. 設置Graylog管理員的密鑰

利用pwgen輔助工具產生密碼for server.conf中的password_secret

SECRET=$(pwgen -s 96 1)

sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf

  • 查看 /etc/graylog/server/server.conf 內容,password_secret 參數如下

graylog-password_secret-01.png

  1. 設定 Graylog 管理員 admin 的密碼,由於密碼使用 SHA 雜湊演算法,我們需要把明文密碼轉換為 hash 值,然後賦值給 root_password_sha2 參數。

例如:以下列命令產生密碼為 test1234hash 值。

echo -n test1234 | sha256sum | awk '{print $1}'

  • 以下是產生出來的畫面

graylog-hash-02.png

  • 將以上命令產出之 Hash 值,填入到 server.confroot_password_sha2 參數。 vim /etc/graylog/server/server.conf

graylog-hash-03.png

  1. 設定Graylog Web接口和Server的溝通方式
  • Graylog 3.0 這裡有重大改只用 http 來設定,故若需以Web介面進行管理,須設定以下參數

vim /etc/graylog/server/server.conf

http_bind_address = 192.168.x.x:9000 (192.168.x.x為Graylog Server IP)
http_publish_uri = http://192.168.x.x/
elasticsearch_cluster_name = graylog  (需與elasticsearch設定檔的cluster.name參數同)
  • 設定Graylog其他參數

vim /etc/graylog/server/server.conf

# The email address of the root user.
# Default is empty
#root_email = ""
root_email = "[email protected]"

# The time zone setting of the root user. See http://www.joda.org/joda-time/timezones.html for a list of valid time zones.
# Default is UTC
#root_timezone = UTC # 重要,若不設定為ROC,則進來Log的timestamp會變成以UTC時間紀錄,
# 會影響到搜尋結果root_timezone = ROC

# 允許wildcard搜尋語法
# 例如 AND EventID:4771 AND NOT TargetUserName:*?
#新增下列設定allow_leading_wildcard_searches = true
  • 啟動graylog-server

systemctl start graylog-server.service

  • 設定開機啟動graylog-server

systemctl enable graylog-server.service

第六步:登錄 Graylog Web


  • 使用瀏覽器訪問 http://graylog_public_IP_domain:9000/,你應該可以看到一個登錄介面,使用帳號 admin 和前面設置的密碼登入。

graylog-login-04.png

第七步:設定rsyslog設定檔


  • 如果是使用syslog回報的話,那這個設定檔要做個小設定,不然會無法正常回其他台設備回報先進到 rsyslog設定檔

#vim /etc/rsyslog.conf

  • 修改內容如下
修改前

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

修改後

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

移到最下面增加一行
#*.* @@remote-host:514
#*.* @127.0.0.1:10514 Prot號要跟Graylog裡面設定的要一樣而且不能設定成514不然會無法收到記錄
*.* @127.0.0.1:10514;RSYSLOG_SyslogProtocol23Format
          

然後重改rsyslog服務
systemctl restart rsyslog

第八步:登入Graylog設定syslog服務


  1. 增加syslog服務

graylog-05.png

  1. 選擇你想要接收的服務,例:Syslog UDP

graylog-06.png

  1. 新增畫面,接收的名稱及Port號,填完之後存檔,就可以開始接收記錄了。

graylog-07.png

第九步:使用 NGINX 代理方式來連線


  • 安裝先決條件
CentOS 7
yum install yum-utils

CentOS 8
dnf install yum-utils
  • 設定 yum 存儲庫,在此目錄下新增一個 /etc/yum.repos.d/nginx.repo 屬於 官方提供載點
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • 會建議使用 stable 穩定版本,如果想使用比較最新的版本請使用 nginx-mailine 會以當時官方釋出的版本為主,目前 BUBU 是使用官方比較新版為主
yum-config-manager --enable nginx-mainline
  • 安裝 nginx 服務
CentOS 7
yum install nginx

CentOS 8
dnf install nginx
  • 新增給 Graylog 服務設定檔 vim /etc/nginx/conf.d/log.conf
server {
  listen 80;
  server_name 你的ip或網址;
  rewrite ^(.*)$ https://${server_name}$1 permanent;
}

server{
  listen 443 ssl http2;
  server_name 你的ip或網址;
  listen [::]:443 ssl http2;

  ssl on;

 # 
 # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
 #
 
  ssl_certificate /etc/nginx/ssl/cert.pem;
  ssl_certificate_key /etc/nginx/ssl/key.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets on;
 
 
 #
 # intermediate configuration. tweak to your needs.
 #
 
  ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;


   ssl_ciphers 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';

   ssl_prefer_server_ciphers on;
 

 #
 # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
 #

 # add_header Strict-Transport-Security max-age=15768000;  
 # add_header  Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
 # add_header  X-Frame-Options deny;
 # add_header  X-Powered-By eiblog/1.3.0;
 # add_header  X-Content-Type-Options nosniff;


  access_log  /var/log/nginx/graylog_access.log;
  error_log  /var/log/nginx/graylog_error.log;

  client_max_body_size 1G;
  fastcgi_buffers 64 4K;

  location /sitestatic/ {
              autoindex on;
      }

  location /media/ {
              autoindex on;
      }


  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 /graylog/
    {
     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 http://$server_name/graylog/;
      rewrite          ^/graylog/(.*)$  /$1  break;
      proxy_pass       http://127.0.0.1:9000;
    }

    
   location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {

       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;


  }



}
  • 啟動及自動啟動服務

systemctl start nginx ; systemctl enable nginx

  • 再到 Graylog vim /etc/graylog/server/server.conf 設定
http_publish_uri = http://192.168.x.x/
  • 重啟 Graylog

systemctl restart graylog-server




參考相關網頁