Syslog
Syslog-ng 安全配置
考虑到syslog-ng数据传输安全性,启用syslog-ng数据安全传输(TLS),UDP方式通过白名单方式。
- Syslog-ng 安全配置
- 一、UDP白名单配置
- 二、TLS配置
- 2.1、生成CA证书
- 2.2、修改配置文件
- 三、客户端程序
- 四、测试下
- 五、总结
UDP方式的传输,没有找到比较合适的办法来保证数据安全,只想到了对数据本身进行加密,然后取用的位置做解密处理,所以UDP这里只采用了白名单的方式,防止任意IP都可以访问Syslog-ng服务器(还望各位大佬指条明路😭)
一、UDP白名单配置
官方给出的例子:
修改配置文件,在filter中配置
vi /etc/syslog-ng/syslog-ng.conf
host("192.168.208.88") or host("192.168.208.89") and level(info..emerg);
配置好了,这样就能只接受 192.168.208.88/89 发来的UDP消息了。
也可以通过正则表达式匹配符合规则的IP:
host("(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)")
配置log
最后重启syslog-ng
systemctl restart syslog-ng
如果有报错重启失败可以
/usr/sbin/syslog-ng -F -p /var/run/systemd.pid
查看具体错误信息
二、TLS配置
先看下官方文档
emm。。。到这里大概就结束了(英文全靠百度翻译,所以我的理解可能会有偏差),大概意思是首先要通过OpenSSL生成CA密钥和CA证书(文档里说的是copy一个),然后通过CA证书生成服务端私钥,服务端证书,客户端私钥,客户端证书,但是这里我的客户端并不是一个syslog-ng,而是一个java程序,所以把客户端需要的私钥、证书转换成java可以用的私钥和证书,服务端仍然用正常的服务端私钥和证书,应该就可以了(官方的意思可能是这是用来保证Syslog-ng服务端和Syslog-ng客户端之间通信的安全的…)
2.1、生成CA证书
生成证书过程中会让输入国家、地区啥的,看情况输入就好。
安装openSSL
sudo yum install openssl
修改配置文件
vi /etc/pki/tls/opensslf
dir对应syslog-ng的CA目录,没有的话就创建一个
准备工作
touch /etc/syslog-ng/CA/index.txtecho 01>serialopenssl rand -out private/.rand 1000
进入CA目录,生成CA私钥
openssl genrsa -out cakey.pem 2048
生成CA证书(要x509的,这里CA证书的名字还是叫syslog-ng官方文档里的cacert.pem)
openssl req -key cakey.pem -new -x509 -days 7300 -sha256 -out cacert.pem -extensions v3_ca
生成服务端私钥
openssl genrsa -out server.key 2048
生成服务端证书请求文件
openssl req -key server.key -new -sha256 -out server.csr
生成服务端证书
openssl x509 -req -CA cacert.pem -CAkey cakey.pem -CAcreateserial -in server.csr -out server.cert -days 365 -extensions req_ext
当然也可以自己创建文件夹来放这些证书、请求文件、私钥,那样看起来比较规范一些,比如客户端需要的文件,创建一个client文件夹,命令里只要加上文件夹路径就可以了,也可以是绝对路径。
生成客户端私钥
openssl genrsa -out client/client.key.pem 2048
生成客户端证书请求文件
openssl req -key client.key.pem -new -sha256 -out client.csr.pem
生成客户端证书
openssl x509 -req -CA cacert.pem -CAkey cakey.pem -CAcreateserial -in client/client.csr.pem -out client/client.cert.pem -days 365
导出客户端证书,导出成java可以使用的keystore格式,如果有需要的话
openssl pkcs12 -export -clcerts -name myclient -inkey \ client/client.key.pem -in client/client.cert -out client/client.keystore
导出服务端证书,如果有需要的话
openssl pkcs12 -export -clcerts -name myserver -inkey server.key -in server.cert -out server.keystore
导出信任证书(单向认证,客户端只要这个就可以啦)
keytool -importcert -trustcacerts -alias www.xxxx -file cacert.pem -keystore ca-trust.keystore
到这里已经生成了全部需要的文件
把ca-trust.keystore文件拷贝到需要连接syslog的电脑里
2.2、修改配置文件
修改syslog-ng配置文件
vi /etc/syslog-ng/syslog-ng.conf
按照官方文档的配置配一哈,然后就是熟悉的重启syslog-ng了
systemctl restart syslog-ng
如果有报错重启失败可以
/usr/sbin/syslog-ng -F -p /var/run/systemd.pid
查看具体错误信息
三、客户端程序
不方便复制代码,所以截个图吧,没有多少
四、测试下
首先通过工具测试下,不带证书连接
断开了,看下syslog-ng的日志(此处因为是用工具建立的TCP连接,报了个未知的协议,如果客户端不带证书用SSLContext连接服务端会报证书校验失败)
带证书再试一下(JAVA)
随便发点消息,syslog-ng日志没有报错
看下是不是生成了日志文件
激动的心,颤抖的手,tail -f瞅一瞅。(到这里已经各种尝试第三天了!o(≧口≦)o)
Ohoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
检查下数据库
( ̄▽ ̄)"
五、总结
配置过程中可能会碰到各种坑,可能会掉头发,可以多参考官方文档,syslog-ng网上的攻略并不是特别丰富,比较老的攻略可能没太多帮助,不过好在是成功了。o( ̄▽ ̄)o
Syslog
Syslog-ng 安全配置
考虑到syslog-ng数据传输安全性,启用syslog-ng数据安全传输(TLS),UDP方式通过白名单方式。
- Syslog-ng 安全配置
- 一、UDP白名单配置
- 二、TLS配置
- 2.1、生成CA证书
- 2.2、修改配置文件
- 三、客户端程序
- 四、测试下
- 五、总结
UDP方式的传输,没有找到比较合适的办法来保证数据安全,只想到了对数据本身进行加密,然后取用的位置做解密处理,所以UDP这里只采用了白名单的方式,防止任意IP都可以访问Syslog-ng服务器(还望各位大佬指条明路😭)
一、UDP白名单配置
官方给出的例子:
修改配置文件,在filter中配置
vi /etc/syslog-ng/syslog-ng.conf
host("192.168.208.88") or host("192.168.208.89") and level(info..emerg);
配置好了,这样就能只接受 192.168.208.88/89 发来的UDP消息了。
也可以通过正则表达式匹配符合规则的IP:
host("(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)")
配置log
最后重启syslog-ng
systemctl restart syslog-ng
如果有报错重启失败可以
/usr/sbin/syslog-ng -F -p /var/run/systemd.pid
查看具体错误信息
二、TLS配置
先看下官方文档
emm。。。到这里大概就结束了(英文全靠百度翻译,所以我的理解可能会有偏差),大概意思是首先要通过OpenSSL生成CA密钥和CA证书(文档里说的是copy一个),然后通过CA证书生成服务端私钥,服务端证书,客户端私钥,客户端证书,但是这里我的客户端并不是一个syslog-ng,而是一个java程序,所以把客户端需要的私钥、证书转换成java可以用的私钥和证书,服务端仍然用正常的服务端私钥和证书,应该就可以了(官方的意思可能是这是用来保证Syslog-ng服务端和Syslog-ng客户端之间通信的安全的…)
2.1、生成CA证书
生成证书过程中会让输入国家、地区啥的,看情况输入就好。
安装openSSL
sudo yum install openssl
修改配置文件
vi /etc/pki/tls/opensslf
dir对应syslog-ng的CA目录,没有的话就创建一个
准备工作
touch /etc/syslog-ng/CA/index.txtecho 01>serialopenssl rand -out private/.rand 1000
进入CA目录,生成CA私钥
openssl genrsa -out cakey.pem 2048
生成CA证书(要x509的,这里CA证书的名字还是叫syslog-ng官方文档里的cacert.pem)
openssl req -key cakey.pem -new -x509 -days 7300 -sha256 -out cacert.pem -extensions v3_ca
生成服务端私钥
openssl genrsa -out server.key 2048
生成服务端证书请求文件
openssl req -key server.key -new -sha256 -out server.csr
生成服务端证书
openssl x509 -req -CA cacert.pem -CAkey cakey.pem -CAcreateserial -in server.csr -out server.cert -days 365 -extensions req_ext
当然也可以自己创建文件夹来放这些证书、请求文件、私钥,那样看起来比较规范一些,比如客户端需要的文件,创建一个client文件夹,命令里只要加上文件夹路径就可以了,也可以是绝对路径。
生成客户端私钥
openssl genrsa -out client/client.key.pem 2048
生成客户端证书请求文件
openssl req -key client.key.pem -new -sha256 -out client.csr.pem
生成客户端证书
openssl x509 -req -CA cacert.pem -CAkey cakey.pem -CAcreateserial -in client/client.csr.pem -out client/client.cert.pem -days 365
导出客户端证书,导出成java可以使用的keystore格式,如果有需要的话
openssl pkcs12 -export -clcerts -name myclient -inkey \ client/client.key.pem -in client/client.cert -out client/client.keystore
导出服务端证书,如果有需要的话
openssl pkcs12 -export -clcerts -name myserver -inkey server.key -in server.cert -out server.keystore
导出信任证书(单向认证,客户端只要这个就可以啦)
keytool -importcert -trustcacerts -alias www.xxxx -file cacert.pem -keystore ca-trust.keystore
到这里已经生成了全部需要的文件
把ca-trust.keystore文件拷贝到需要连接syslog的电脑里
2.2、修改配置文件
修改syslog-ng配置文件
vi /etc/syslog-ng/syslog-ng.conf
按照官方文档的配置配一哈,然后就是熟悉的重启syslog-ng了
systemctl restart syslog-ng
如果有报错重启失败可以
/usr/sbin/syslog-ng -F -p /var/run/systemd.pid
查看具体错误信息
三、客户端程序
不方便复制代码,所以截个图吧,没有多少
四、测试下
首先通过工具测试下,不带证书连接
断开了,看下syslog-ng的日志(此处因为是用工具建立的TCP连接,报了个未知的协议,如果客户端不带证书用SSLContext连接服务端会报证书校验失败)
带证书再试一下(JAVA)
随便发点消息,syslog-ng日志没有报错
看下是不是生成了日志文件
激动的心,颤抖的手,tail -f瞅一瞅。(到这里已经各种尝试第三天了!o(≧口≦)o)
Ohoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
检查下数据库
( ̄▽ ̄)"
五、总结
配置过程中可能会碰到各种坑,可能会掉头发,可以多参考官方文档,syslog-ng网上的攻略并不是特别丰富,比较老的攻略可能没太多帮助,不过好在是成功了。o( ̄▽ ̄)o