使用Puppet配置Graylog服务器
我们将使用Puppet来安装和配置Graylog服务器。
测试环境
我们已经安装了CentOS 7 VM,我们希望将其配置为Graylog服务器:
syslog.igi.local(10.11.1.14)带有Apache前端的Graylog/Elasticsearch/MongoDB
SELinux设置为强制模式。
请参见下图,以确定本文适用的homelab部分。
用Puppet配置
Puppet Master 在Katello服务器上运行。
Puppet模块
我们使用graylog-graylog Puppet模块来配置服务器。
该模块仅管理Graylog本身。
我们需要其他模块来安装所需的依赖项,例如Java,MongoDB,Elasticsearch和Apache(作为反向代理):
- puppetlabs-java
- 弹性-弹性搜索
- monmongodb
- Puppet实验室
- saz-rsyslog
请参阅每个模块的文档以获取支持的功能和可用的配置选项。
Katello存储库
Katello提供了Graylog,Elasticsearch和MongoDB的存储库(我们在此处配置了它们)。
请注意,Graylog 2.4不适用于Elasticsearch 6.x,因此我们将使用Elasticsearch5.x。
安装MongoDB
class { 'mongodb::globals': ## Use Katello repository manage_package_repo => false, }-> class { 'mongodb::server': ensure => 'present', restart => true, bind_ip => ['127.0.0.1'], port => 27017, smallfiles => true, }
安装Elasticsearch
class { 'elasticsearch': ensure => 'present', status => 'enabled', ## Use Katello repository manage_repo => false, restart_on_change => true, }-> elasticsearch::instance { 'graylog': config => { 'cluster.name' => 'graylog', 'network.host' => '127.0.0.1', }, jvm_options => [ '-Xms512m', '-Xmx512m' ] }
安装Java和Graylog
include ::java class { 'graylog::server': enable => true, ensure => 'running', config => { 'is_master' => true, 'password_secret' => '3jC93bTD...OS7F7H87O', 'root_password_sha2' => '008e3a245354b...f0d9913325f26b', 'web_enable' => true, 'web_listen_uri' => 'http://syslog.igi.local:9000/', 'rest_listen_uri' => 'http://syslog.igi.local:9000/api/', 'rest_transport_uri' => 'http://syslog.igi.local:9000/api/', 'root_timezone' => 'GMT', } }->## Use a script to automatically create ## UDP Syslog/GELF inputs via Graylog API. file { '/root/syslog_inputs.sh': ensure => file, source => 'puppet:///homelab_files/syslog_inputs.sh', owner => '0', group => '0', mode => '0700', notify => Exec['create_syslog_inputs'], } exec {'create_syslog_inputs': command => '/root/syslog_inputs.sh', refreshonly => true, }
文件“ syslog_inputs.sh”的内容可以在下面看到。
我们创建了两个Graylog输入,一个用于syslog绑定到UDP 1514,另一个用于GELF。
请参阅以下部分,了解从UDP 514到UDP 1514的端口重定向,因为Graylog除非以root身份运行,否则无法绑定到UDP 514.
#!/bin/bash GRAYLOG_URL="http://admin:Hyman@theitroad:9000/api/system/inputs"; GRAYLOG_INPUT_SYSLOG_UDP=' { "global": "true", "title": "Syslog UDP", "configuration": { "port": 1514, "bind_address": "0.0.0.0" }, "type": "org.graylog2.inputs.syslog.udp.SyslogUDPInput" }'; GRAYLOG_INPUT_GELF_UDP=' { "global": "true", "title": "Gelf UDP", "configuration": { "port": 12201, "bind_address": "0.0.0.0" }, "type": "org.graylog2.inputs.gelf.udp.GELFUDPInput" }'; curl -s -X POST -H "Content-Type: application/json" -d "${GRAYLOG_INPUT_SYSLOG_UDP}" ${GRAYLOG_URL} >/dev/null; curl -s -X POST -H "Content-Type: application/json" -d "${GRAYLOG_INPUT_GELF_UDP}" ${GRAYLOG_URL} >/dev/null; exit 0;
配置防火墙
配置防火墙以允许WebUI,系统日志和GELF通信。
还要配置端口重定向,因为Graylog除非以root身份运行,否则无法绑定到UDP 514.
firewall { '007 allow Graylog HTTP/S': dport => [80, 443, 9000], source => '10.11.1.0/24', proto => tcp, action => accept, }-> firewall { '008 allow Syslog': dport => ['514', '1514'], source => '10.11.1.0/24', proto => udp, action => accept, }-> firewall { '009 redirect Syslog 514 to Graylog 1514': chain => 'PREROUTING', jump => 'REDIRECT', proto => 'udp', dport => '514', toports => '1514', table => 'nat', }-> firewall { '010 allow Gelf': dport => ['12201'], source => '10.11.1.0/24', proto => udp, action => accept, }
带有TLS的Apache反向代理
安装Apache作为Graylog的反向代理。
class { 'apache': default_vhost => false, default_ssl_vhost => false, default_mods => false, mpm_module => 'prefork', server_signature => 'Off', server_tokens => 'Prod', trace_enable => 'Off', } include apache::mod::proxy include apache::mod::proxy_http include apache::mod::rewrite include apache::mod::ssl include apache::mod::headers apache::vhost { 'graylog_http': port => 80, servername => 'syslog.igi.local', rewrites => [ { rewrite_rule => ['(.*) https://%{HTTP_HOST}%{REQUEST_URI}'], rewrite_cond => ['%{HTTPS} off'], }, ], docroot => false, manage_docroot => false, suphp_engine => 'off', } apache::vhost { 'graylog_https': port => 443, servername => 'syslog.igi.local', docroot => false, manage_docroot => false, suphp_engine => 'off', ssl => true, ssl_cert => '/etc/pki/tls/certs/hl.crt', ssl_key => '/etc/pki/tls/private/hl.key', ssl_protocol => ['all', '-SSLv2', '-SSLv3'], ssl_cipher => 'HIGH:!aNULL!MD5:!RC4', ssl_honorcipherorder => 'On', ## Pass a string of custom configuration directives custom_fragment => ' ProxyRequests Off <Proxy *> Require ip 10.11.1.0/24 </Proxy> <Location RequestHeader set X-Graylog-Server-URL "https://syslog.igi.local/api/" ProxyPass http://syslog.igi.local:9000/ ProxyPassReverse http://syslog.igi.local:9000/ </Location> ', }
在所有服务器上配置日志转发
我们要配置所有homelab服务器以将syslog转发到Graylog。
这需要进入主环境列表文件“ /etc/puppetlabs/code/environments/homelab/manifests/site.pp”,以便将配置应用于所有服务器。
class { 'rsyslog::client': log_remote => true, log_local => true, remote_servers => false, server => 'syslog.igi.local', port => '1514', remote_type => 'udp', remote_forward_format => 'RSYSLOG_SyslogProtocol23Format', }
所有服务器将日志转发到Graylog。