转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
数据在远程传输过程中,可能被劫持和获取,继而造成的后果是数据信息泄露,那么如何有效的进行数据传输呢,在ELK Stack中filebeat 提供了这样的一个解决方案,其不仅可以监听指定文件夹的数据,还可以对数据进行TLS 双向认证加密,从而保证数据传输过程中的可靠性。
Ubuntu 16.04
ELK 5.2.1 (elk在192.168.1.127上)
Filebeat 5.2.1 (fb在192.168.1.128上)
filebeat.yaml 文件配置如下:
filebeat.prospectors:
# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
- input_type: log
paths:
- /home/thinkgamer/test/*.log
document_type: test_log
- input_type: log
paths:
- /var/log/*.log
document_type: auth_log
这里得document_type 就是对应filter中对应的log的type,在logstash的解析文件中可以这样写
input {
beats {
port => 5044
}
}
filter {
if [type] == 'auth_log'{
}
else if [type] == 'test_log'{
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index =>"%{type}-%{+YYYY.MM.dd}"
}
}
上边基本环境里介绍到logstash和filebeat的ip地址分别为127和128 上,分别在两个机器上生成证书
logstash(127 机器):
cd ~
mkdir -p pki/tls/certs
mkdir -p pki/tls/private
openssl req -subj '/CN=192.168.1.127/' -x509 -days $((100 * 365)) -batch -nodes -newkey rsa:2048 -keyout pki/tls/private/logstash.key -out pki/tls/certs/logstash.crt
配置logstash的input为如下形式:
input {
beats {
port => 5044
ssl => true
ssl_certificate_authorities => ["/home/thinkgamer/pki/tls/certs/filebeat.crt"]
ssl_certificate => "/home/thinkgamer/pki/tls/certs/logstash.crt"
ssl_key => "/home/thinkgamer/pki/tls/private/logstash.key"
ssl_verify_mode => "force_peer"
}
}
ssl:true 表示开启 Logstash 的 SSL/TLS 安全通信功能;
ssl_certificate_authorities:配置 Logstash 使其信任所有由该 CA 证书发行的证书;
ssl_certificate & ssl_key:Logstash server 证书和 key 文件。Logstash 使用它们向 Filebeat client 证明自己的可信身份;
ssl_verify_mode:表明 Logstash server 是否验证 Filebeat client 证书。有效值有 peer 或 force_peer。如果是 force_peer,表示如果 Filebeat 没有提供证书,Logstash server 就会关闭连接。
Filebeat(128机器):
cd ~
mkdir -p pki/tls/certs
mkdir -p pki/tls/private
openssl req -subj '/CN=192.168.1.128/' -x509 -days $((100 * 365)) -batch -nodes -newkey rsa:2048 -keyout pki/tls/private/filebeat.key -out pki/tls/certs/filebeat.crt
filebeat.yaml 配置文件中修改output logstash:
output.logstash:
# The Logstash hosts
hosts: ["192.168.1.127:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
ssl.certificate_authorities: ["/home/master/pki/tls/certs/logstash.crt"]
# Certificate for SSL client authentication
ssl.certificate: "/home/master/pki/tls/certs/filebeat.crt"
# Client Certificate Key
ssl.key: "/home/master/pki/tls/private/filebeat.key"
certificate_authorities:CA 证书,即用来签署证书的证书。这里表示配置 Filebeat 使其信任所有由该 CA 证书发行的证书。因为自签名证书的发行者和证书主体相同,所以这里直接使用 Logstash 证书使 Filebeat 信任使用该证书的 Logstash server;
certificate & certificate_key:Filebeat 证书和 key 文件。Filebeat 将使用它们向 Logstash server 证明自己的可信身份。
至此配置over了,在两个机器上分别启动logstash和filebeat,报错如下:
cannot validate certificate for 10.10.11.109 because it doesn't contain any IP SANs
解决办法参考下边《遇到的问题和解决办法》
在配置好证书之后启动filebeat和logstash,filebeat并不能将数据传输给logstash,报出了下边的错误
cannot validate certificate for 10.10.11.109 because it doesn't contain any IP SANs
解决办法是:
删除之前产生的证书,对openssl进行重新配置
sudo vim /etc/ssl/openssl.cnf
找到 [ v3_ca ]
加入下边一行:
subjectAltName = IP:这里写ip地址
比如我的两个机器便为:
subjectAltName = IP:192.168.1.127
subjectAltName = IP:192.168.1.128
重新生成证书,进行copy 配置即可
在生产环境中有多个日志源这是个很常见的问题,那么如果我们需要对多个日志源的数据进行加密传输时该怎么办呢?
答案是肯定得,这里有多种解决办法
1:每个filebeat分别发送到logstash监听的不同端口,比如说Filebeat A 发送到logstash的 5044端口,Filebeat B发送到logstash的5045 端口,这样做肯定是没有任何问题的
input 的输入是类似于下面这样的
input {
beats {
port => 5044
}
beats {
port => 5044
}
}
2:每个filebeat所在的机器都发送到logstash 的5044 端口,这样做在没有加密保护的情况下也是可以的(已经尝试过了),那如果是在加密的情况下该怎么做呢?是否能成功呢?
回答:当然是可以的,用同样的方法在另外一台安装filebeat的机器上生成证书,和logstash所在的机器进行证书的互相copy和配置,logstash的机器的input差不多应该是下面的这种
input {
beats {
port => 5044
ssl => true
ssl_certificate_authorities => ["/home/thinkgamer/pki/tls/certs/filebeat.crt","/home/thinkgamer/pki/tls/certs/filebeat1.crt"]
ssl_certificate => "/home/thinkgamer/pki/tls/certs/logstash.crt"
ssl_key => "/home/thinkgamer/pki/tls/private/logstash.key"
ssl_verify_mode => "force_peer"
}
}
以上仅仅是对数据从发源地到logstash收集过程进行解释,但是filebeat进行数据传输加密也可以应用别的方面,比如说A公司的两个数据点之间(B,C)要进行数据的传递,这个时候便可以使用filebeat了,在B和C地点分别生成证书和配置,在C地点可以使用logstash的output将传输过来的数据输出到指定文件夹中即可。